Title: [174828] trunk/LayoutTests
Revision
174828
Author
[email protected]
Date
2014-10-17 12:16:51 -0700 (Fri, 17 Oct 2014)

Log Message

Add test for innerHTML mutations that yield identical DOM.
<https://webkit.org/b/137823>

Reviewed by Chris Dumez.

I made this test while working on an optimization, and it seems useful
to have in the tree since it adds additional coverage. The optimization
may come later.

The test works by creating little DOM subtrees like so:

    <foo><bar>some text</bar></foo>

It then overwrites that subtree with an identical one by mutating the
containing element's innerHTML property. It then verifies that the DOM
structure is correct and that Node wrappers retain any custom properties
set on them.

* fast/innerHTML/identical-mutations-expected.txt: Added.
* fast/innerHTML/identical-mutations.html: Added.

Modified Paths

Added Paths

Diff

Modified: trunk/LayoutTests/ChangeLog (174827 => 174828)


--- trunk/LayoutTests/ChangeLog	2014-10-17 18:49:02 UTC (rev 174827)
+++ trunk/LayoutTests/ChangeLog	2014-10-17 19:16:51 UTC (rev 174828)
@@ -1,3 +1,26 @@
+2014-10-17  Andreas Kling  <[email protected]>
+
+        Add test for innerHTML mutations that yield identical DOM.
+        <https://webkit.org/b/137823>
+
+        Reviewed by Chris Dumez.
+
+        I made this test while working on an optimization, and it seems useful
+        to have in the tree since it adds additional coverage. The optimization
+        may come later.
+
+        The test works by creating little DOM subtrees like so:
+
+            <foo><bar>some text</bar></foo>
+
+        It then overwrites that subtree with an identical one by mutating the
+        containing element's innerHTML property. It then verifies that the DOM
+        structure is correct and that Node wrappers retain any custom properties
+        set on them.
+
+        * fast/innerHTML/identical-mutations-expected.txt: Added.
+        * fast/innerHTML/identical-mutations.html: Added.
+
 2014-10-16  Jer Noble  <[email protected]>
 
         [Mac] Represent AVMediaSelectionOptions as AudioTracks

Added: trunk/LayoutTests/fast/innerHTML/identical-mutations-expected.txt (0 => 174828)


--- trunk/LayoutTests/fast/innerHTML/identical-mutations-expected.txt	                        (rev 0)
+++ trunk/LayoutTests/fast/innerHTML/identical-mutations-expected.txt	2014-10-17 19:16:51 UTC (rev 174828)
@@ -0,0 +1,1969 @@
+This test checks that setting an element's .innerHTML to an identical subtree correctly detaches the replaced nodes from the document, and that any references to that subtree continue to work as expected, with custom properties intact.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+
+Testing with subtree: <a><b>text here</b></a>
+
+PASS anchorPoint.innerHTML is htmlString
+PASS subtreeRoot is anchorPoint.firstChild
+PASS subtreeRoot.parentNode is anchorPoint
+PASS innerElement.parentNode is subtreeRoot
+PASS textNode.parentNode is innerElement
+PASS subtreeRoot.hasCustomProperty is true
+PASS innerElement.hasCustomProperty is true
+PASS textNode.hasCustomProperty is true
+PASS anchorPoint.firstChild.hasCustomProperty is true
+PASS anchorPoint.firstChild.firstChild.hasCustomProperty is true
+PASS anchorPoint.firstChild.firstChild.firstChild.hasCustomProperty is true
+
+Setting anchorPoint.innerHTML to identical DOM, subtree should become detached.
+
+PASS anchorPoint.innerHTML is htmlString
+PASS subtreeRoot is not anchorPoint.firstChild
+PASS subtreeRoot.parentNode is null
+PASS innerElement.parentNode is subtreeRoot
+PASS textNode.parentNode is innerElement
+PASS subtreeRoot.hasCustomProperty is true
+PASS innerElement.hasCustomProperty is true
+PASS textNode.hasCustomProperty is true
+PASS anchorPoint.firstChild.hasCustomProperty is not true
+PASS anchorPoint.firstChild.firstChild.hasCustomProperty is not true
+PASS anchorPoint.firstChild.firstChild.firstChild.hasCustomProperty is not true
+
+Testing with subtree: <a><i>text here</i></a>
+
+PASS anchorPoint.innerHTML is htmlString
+PASS subtreeRoot is anchorPoint.firstChild
+PASS subtreeRoot.parentNode is anchorPoint
+PASS innerElement.parentNode is subtreeRoot
+PASS textNode.parentNode is innerElement
+PASS subtreeRoot.hasCustomProperty is true
+PASS innerElement.hasCustomProperty is true
+PASS textNode.hasCustomProperty is true
+PASS anchorPoint.firstChild.hasCustomProperty is true
+PASS anchorPoint.firstChild.firstChild.hasCustomProperty is true
+PASS anchorPoint.firstChild.firstChild.firstChild.hasCustomProperty is true
+
+Setting anchorPoint.innerHTML to identical DOM, subtree should become detached.
+
+PASS anchorPoint.innerHTML is htmlString
+PASS subtreeRoot is not anchorPoint.firstChild
+PASS subtreeRoot.parentNode is null
+PASS innerElement.parentNode is subtreeRoot
+PASS textNode.parentNode is innerElement
+PASS subtreeRoot.hasCustomProperty is true
+PASS innerElement.hasCustomProperty is true
+PASS textNode.hasCustomProperty is true
+PASS anchorPoint.firstChild.hasCustomProperty is not true
+PASS anchorPoint.firstChild.firstChild.hasCustomProperty is not true
+PASS anchorPoint.firstChild.firstChild.firstChild.hasCustomProperty is not true
+
+Testing with subtree: <a><u>text here</u></a>
+
+PASS anchorPoint.innerHTML is htmlString
+PASS subtreeRoot is anchorPoint.firstChild
+PASS subtreeRoot.parentNode is anchorPoint
+PASS innerElement.parentNode is subtreeRoot
+PASS textNode.parentNode is innerElement
+PASS subtreeRoot.hasCustomProperty is true
+PASS innerElement.hasCustomProperty is true
+PASS textNode.hasCustomProperty is true
+PASS anchorPoint.firstChild.hasCustomProperty is true
+PASS anchorPoint.firstChild.firstChild.hasCustomProperty is true
+PASS anchorPoint.firstChild.firstChild.firstChild.hasCustomProperty is true
+
+Setting anchorPoint.innerHTML to identical DOM, subtree should become detached.
+
+PASS anchorPoint.innerHTML is htmlString
+PASS subtreeRoot is not anchorPoint.firstChild
+PASS subtreeRoot.parentNode is null
+PASS innerElement.parentNode is subtreeRoot
+PASS textNode.parentNode is innerElement
+PASS subtreeRoot.hasCustomProperty is true
+PASS innerElement.hasCustomProperty is true
+PASS textNode.hasCustomProperty is true
+PASS anchorPoint.firstChild.hasCustomProperty is not true
+PASS anchorPoint.firstChild.firstChild.hasCustomProperty is not true
+PASS anchorPoint.firstChild.firstChild.firstChild.hasCustomProperty is not true
+
+Testing with subtree: <a><div>text here</div></a>
+
+PASS anchorPoint.innerHTML is htmlString
+PASS subtreeRoot is anchorPoint.firstChild
+PASS subtreeRoot.parentNode is anchorPoint
+PASS innerElement.parentNode is subtreeRoot
+PASS textNode.parentNode is innerElement
+PASS subtreeRoot.hasCustomProperty is true
+PASS innerElement.hasCustomProperty is true
+PASS textNode.hasCustomProperty is true
+PASS anchorPoint.firstChild.hasCustomProperty is true
+PASS anchorPoint.firstChild.firstChild.hasCustomProperty is true
+PASS anchorPoint.firstChild.firstChild.firstChild.hasCustomProperty is true
+
+Setting anchorPoint.innerHTML to identical DOM, subtree should become detached.
+
+PASS anchorPoint.innerHTML is htmlString
+PASS subtreeRoot is not anchorPoint.firstChild
+PASS subtreeRoot.parentNode is null
+PASS innerElement.parentNode is subtreeRoot
+PASS textNode.parentNode is innerElement
+PASS subtreeRoot.hasCustomProperty is true
+PASS innerElement.hasCustomProperty is true
+PASS textNode.hasCustomProperty is true
+PASS anchorPoint.firstChild.hasCustomProperty is not true
+PASS anchorPoint.firstChild.firstChild.hasCustomProperty is not true
+PASS anchorPoint.firstChild.firstChild.firstChild.hasCustomProperty is not true
+
+Testing with subtree: <a><span>text here</span></a>
+
+PASS anchorPoint.innerHTML is htmlString
+PASS subtreeRoot is anchorPoint.firstChild
+PASS subtreeRoot.parentNode is anchorPoint
+PASS innerElement.parentNode is subtreeRoot
+PASS textNode.parentNode is innerElement
+PASS subtreeRoot.hasCustomProperty is true
+PASS innerElement.hasCustomProperty is true
+PASS textNode.hasCustomProperty is true
+PASS anchorPoint.firstChild.hasCustomProperty is true
+PASS anchorPoint.firstChild.firstChild.hasCustomProperty is true
+PASS anchorPoint.firstChild.firstChild.firstChild.hasCustomProperty is true
+
+Setting anchorPoint.innerHTML to identical DOM, subtree should become detached.
+
+PASS anchorPoint.innerHTML is htmlString
+PASS subtreeRoot is not anchorPoint.firstChild
+PASS subtreeRoot.parentNode is null
+PASS innerElement.parentNode is subtreeRoot
+PASS textNode.parentNode is innerElement
+PASS subtreeRoot.hasCustomProperty is true
+PASS innerElement.hasCustomProperty is true
+PASS textNode.hasCustomProperty is true
+PASS anchorPoint.firstChild.hasCustomProperty is not true
+PASS anchorPoint.firstChild.firstChild.hasCustomProperty is not true
+PASS anchorPoint.firstChild.firstChild.firstChild.hasCustomProperty is not true
+
+Testing with subtree: <a><canvas>text here</canvas></a>
+
+PASS anchorPoint.innerHTML is htmlString
+PASS subtreeRoot is anchorPoint.firstChild
+PASS subtreeRoot.parentNode is anchorPoint
+PASS innerElement.parentNode is subtreeRoot
+PASS textNode.parentNode is innerElement
+PASS subtreeRoot.hasCustomProperty is true
+PASS innerElement.hasCustomProperty is true
+PASS textNode.hasCustomProperty is true
+PASS anchorPoint.firstChild.hasCustomProperty is true
+PASS anchorPoint.firstChild.firstChild.hasCustomProperty is true
+PASS anchorPoint.firstChild.firstChild.firstChild.hasCustomProperty is true
+
+Setting anchorPoint.innerHTML to identical DOM, subtree should become detached.
+
+PASS anchorPoint.innerHTML is htmlString
+PASS subtreeRoot is not anchorPoint.firstChild
+PASS subtreeRoot.parentNode is null
+PASS innerElement.parentNode is subtreeRoot
+PASS textNode.parentNode is innerElement
+PASS subtreeRoot.hasCustomProperty is true
+PASS innerElement.hasCustomProperty is true
+PASS textNode.hasCustomProperty is true
+PASS anchorPoint.firstChild.hasCustomProperty is not true
+PASS anchorPoint.firstChild.firstChild.hasCustomProperty is not true
+PASS anchorPoint.firstChild.firstChild.firstChild.hasCustomProperty is not true
+
+Testing with subtree: <a><object>text here</object></a>
+
+PASS anchorPoint.innerHTML is htmlString
+PASS subtreeRoot is anchorPoint.firstChild
+PASS subtreeRoot.parentNode is anchorPoint
+PASS innerElement.parentNode is subtreeRoot
+PASS textNode.parentNode is innerElement
+PASS subtreeRoot.hasCustomProperty is true
+PASS innerElement.hasCustomProperty is true
+PASS textNode.hasCustomProperty is true
+PASS anchorPoint.firstChild.hasCustomProperty is true
+PASS anchorPoint.firstChild.firstChild.hasCustomProperty is true
+PASS anchorPoint.firstChild.firstChild.firstChild.hasCustomProperty is true
+
+Setting anchorPoint.innerHTML to identical DOM, subtree should become detached.
+
+PASS anchorPoint.innerHTML is htmlString
+PASS subtreeRoot is not anchorPoint.firstChild
+PASS subtreeRoot.parentNode is null
+PASS innerElement.parentNode is subtreeRoot
+PASS textNode.parentNode is innerElement
+PASS subtreeRoot.hasCustomProperty is true
+PASS innerElement.hasCustomProperty is true
+PASS textNode.hasCustomProperty is true
+PASS anchorPoint.firstChild.hasCustomProperty is not true
+PASS anchorPoint.firstChild.firstChild.hasCustomProperty is not true
+PASS anchorPoint.firstChild.firstChild.firstChild.hasCustomProperty is not true
+
+Testing with subtree: <b><a>text here</a></b>
+
+PASS anchorPoint.innerHTML is htmlString
+PASS subtreeRoot is anchorPoint.firstChild
+PASS subtreeRoot.parentNode is anchorPoint
+PASS innerElement.parentNode is subtreeRoot
+PASS textNode.parentNode is innerElement
+PASS subtreeRoot.hasCustomProperty is true
+PASS innerElement.hasCustomProperty is true
+PASS textNode.hasCustomProperty is true
+PASS anchorPoint.firstChild.hasCustomProperty is true
+PASS anchorPoint.firstChild.firstChild.hasCustomProperty is true
+PASS anchorPoint.firstChild.firstChild.firstChild.hasCustomProperty is true
+
+Setting anchorPoint.innerHTML to identical DOM, subtree should become detached.
+
+PASS anchorPoint.innerHTML is htmlString
+PASS subtreeRoot is not anchorPoint.firstChild
+PASS subtreeRoot.parentNode is null
+PASS innerElement.parentNode is subtreeRoot
+PASS textNode.parentNode is innerElement
+PASS subtreeRoot.hasCustomProperty is true
+PASS innerElement.hasCustomProperty is true
+PASS textNode.hasCustomProperty is true
+PASS anchorPoint.firstChild.hasCustomProperty is not true
+PASS anchorPoint.firstChild.firstChild.hasCustomProperty is not true
+PASS anchorPoint.firstChild.firstChild.firstChild.hasCustomProperty is not true
+
+Testing with subtree: <b><i>text here</i></b>
+
+PASS anchorPoint.innerHTML is htmlString
+PASS subtreeRoot is anchorPoint.firstChild
+PASS subtreeRoot.parentNode is anchorPoint
+PASS innerElement.parentNode is subtreeRoot
+PASS textNode.parentNode is innerElement
+PASS subtreeRoot.hasCustomProperty is true
+PASS innerElement.hasCustomProperty is true
+PASS textNode.hasCustomProperty is true
+PASS anchorPoint.firstChild.hasCustomProperty is true
+PASS anchorPoint.firstChild.firstChild.hasCustomProperty is true
+PASS anchorPoint.firstChild.firstChild.firstChild.hasCustomProperty is true
+
+Setting anchorPoint.innerHTML to identical DOM, subtree should become detached.
+
+PASS anchorPoint.innerHTML is htmlString
+PASS subtreeRoot is not anchorPoint.firstChild
+PASS subtreeRoot.parentNode is null
+PASS innerElement.parentNode is subtreeRoot
+PASS textNode.parentNode is innerElement
+PASS subtreeRoot.hasCustomProperty is true
+PASS innerElement.hasCustomProperty is true
+PASS textNode.hasCustomProperty is true
+PASS anchorPoint.firstChild.hasCustomProperty is not true
+PASS anchorPoint.firstChild.firstChild.hasCustomProperty is not true
+PASS anchorPoint.firstChild.firstChild.firstChild.hasCustomProperty is not true
+
+Testing with subtree: <b><u>text here</u></b>
+
+PASS anchorPoint.innerHTML is htmlString
+PASS subtreeRoot is anchorPoint.firstChild
+PASS subtreeRoot.parentNode is anchorPoint
+PASS innerElement.parentNode is subtreeRoot
+PASS textNode.parentNode is innerElement
+PASS subtreeRoot.hasCustomProperty is true
+PASS innerElement.hasCustomProperty is true
+PASS textNode.hasCustomProperty is true
+PASS anchorPoint.firstChild.hasCustomProperty is true
+PASS anchorPoint.firstChild.firstChild.hasCustomProperty is true
+PASS anchorPoint.firstChild.firstChild.firstChild.hasCustomProperty is true
+
+Setting anchorPoint.innerHTML to identical DOM, subtree should become detached.
+
+PASS anchorPoint.innerHTML is htmlString
+PASS subtreeRoot is not anchorPoint.firstChild
+PASS subtreeRoot.parentNode is null
+PASS innerElement.parentNode is subtreeRoot
+PASS textNode.parentNode is innerElement
+PASS subtreeRoot.hasCustomProperty is true
+PASS innerElement.hasCustomProperty is true
+PASS textNode.hasCustomProperty is true
+PASS anchorPoint.firstChild.hasCustomProperty is not true
+PASS anchorPoint.firstChild.firstChild.hasCustomProperty is not true
+PASS anchorPoint.firstChild.firstChild.firstChild.hasCustomProperty is not true
+
+Testing with subtree: <b><div>text here</div></b>
+
+PASS anchorPoint.innerHTML is htmlString
+PASS subtreeRoot is anchorPoint.firstChild
+PASS subtreeRoot.parentNode is anchorPoint
+PASS innerElement.parentNode is subtreeRoot
+PASS textNode.parentNode is innerElement
+PASS subtreeRoot.hasCustomProperty is true
+PASS innerElement.hasCustomProperty is true
+PASS textNode.hasCustomProperty is true
+PASS anchorPoint.firstChild.hasCustomProperty is true
+PASS anchorPoint.firstChild.firstChild.hasCustomProperty is true
+PASS anchorPoint.firstChild.firstChild.firstChild.hasCustomProperty is true
+
+Setting anchorPoint.innerHTML to identical DOM, subtree should become detached.
+
+PASS anchorPoint.innerHTML is htmlString
+PASS subtreeRoot is not anchorPoint.firstChild
+PASS subtreeRoot.parentNode is null
+PASS innerElement.parentNode is subtreeRoot
+PASS textNode.parentNode is innerElement
+PASS subtreeRoot.hasCustomProperty is true
+PASS innerElement.hasCustomProperty is true
+PASS textNode.hasCustomProperty is true
+PASS anchorPoint.firstChild.hasCustomProperty is not true
+PASS anchorPoint.firstChild.firstChild.hasCustomProperty is not true
+PASS anchorPoint.firstChild.firstChild.firstChild.hasCustomProperty is not true
+
+Testing with subtree: <b><span>text here</span></b>
+
+PASS anchorPoint.innerHTML is htmlString
+PASS subtreeRoot is anchorPoint.firstChild
+PASS subtreeRoot.parentNode is anchorPoint
+PASS innerElement.parentNode is subtreeRoot
+PASS textNode.parentNode is innerElement
+PASS subtreeRoot.hasCustomProperty is true
+PASS innerElement.hasCustomProperty is true
+PASS textNode.hasCustomProperty is true
+PASS anchorPoint.firstChild.hasCustomProperty is true
+PASS anchorPoint.firstChild.firstChild.hasCustomProperty is true
+PASS anchorPoint.firstChild.firstChild.firstChild.hasCustomProperty is true
+
+Setting anchorPoint.innerHTML to identical DOM, subtree should become detached.
+
+PASS anchorPoint.innerHTML is htmlString
+PASS subtreeRoot is not anchorPoint.firstChild
+PASS subtreeRoot.parentNode is null
+PASS innerElement.parentNode is subtreeRoot
+PASS textNode.parentNode is innerElement
+PASS subtreeRoot.hasCustomProperty is true
+PASS innerElement.hasCustomProperty is true
+PASS textNode.hasCustomProperty is true
+PASS anchorPoint.firstChild.hasCustomProperty is not true
+PASS anchorPoint.firstChild.firstChild.hasCustomProperty is not true
+PASS anchorPoint.firstChild.firstChild.firstChild.hasCustomProperty is not true
+
+Testing with subtree: <b><canvas>text here</canvas></b>
+
+PASS anchorPoint.innerHTML is htmlString
+PASS subtreeRoot is anchorPoint.firstChild
+PASS subtreeRoot.parentNode is anchorPoint
+PASS innerElement.parentNode is subtreeRoot
+PASS textNode.parentNode is innerElement
+PASS subtreeRoot.hasCustomProperty is true
+PASS innerElement.hasCustomProperty is true
+PASS textNode.hasCustomProperty is true
+PASS anchorPoint.firstChild.hasCustomProperty is true
+PASS anchorPoint.firstChild.firstChild.hasCustomProperty is true
+PASS anchorPoint.firstChild.firstChild.firstChild.hasCustomProperty is true
+
+Setting anchorPoint.innerHTML to identical DOM, subtree should become detached.
+
+PASS anchorPoint.innerHTML is htmlString
+PASS subtreeRoot is not anchorPoint.firstChild
+PASS subtreeRoot.parentNode is null
+PASS innerElement.parentNode is subtreeRoot
+PASS textNode.parentNode is innerElement
+PASS subtreeRoot.hasCustomProperty is true
+PASS innerElement.hasCustomProperty is true
+PASS textNode.hasCustomProperty is true
+PASS anchorPoint.firstChild.hasCustomProperty is not true
+PASS anchorPoint.firstChild.firstChild.hasCustomProperty is not true
+PASS anchorPoint.firstChild.firstChild.firstChild.hasCustomProperty is not true
+
+Testing with subtree: <b><object>text here</object></b>
+
+PASS anchorPoint.innerHTML is htmlString
+PASS subtreeRoot is anchorPoint.firstChild
+PASS subtreeRoot.parentNode is anchorPoint
+PASS innerElement.parentNode is subtreeRoot
+PASS textNode.parentNode is innerElement
+PASS subtreeRoot.hasCustomProperty is true
+PASS innerElement.hasCustomProperty is true
+PASS textNode.hasCustomProperty is true
+PASS anchorPoint.firstChild.hasCustomProperty is true
+PASS anchorPoint.firstChild.firstChild.hasCustomProperty is true
+PASS anchorPoint.firstChild.firstChild.firstChild.hasCustomProperty is true
+
+Setting anchorPoint.innerHTML to identical DOM, subtree should become detached.
+
+PASS anchorPoint.innerHTML is htmlString
+PASS subtreeRoot is not anchorPoint.firstChild
+PASS subtreeRoot.parentNode is null
+PASS innerElement.parentNode is subtreeRoot
+PASS textNode.parentNode is innerElement
+PASS subtreeRoot.hasCustomProperty is true
+PASS innerElement.hasCustomProperty is true
+PASS textNode.hasCustomProperty is true
+PASS anchorPoint.firstChild.hasCustomProperty is not true
+PASS anchorPoint.firstChild.firstChild.hasCustomProperty is not true
+PASS anchorPoint.firstChild.firstChild.firstChild.hasCustomProperty is not true
+
+Testing with subtree: <b><a>text here</a></b>
+
+PASS anchorPoint.innerHTML is htmlString
+PASS subtreeRoot is anchorPoint.firstChild
+PASS subtreeRoot.parentNode is anchorPoint
+PASS innerElement.parentNode is subtreeRoot
+PASS textNode.parentNode is innerElement
+PASS subtreeRoot.hasCustomProperty is true
+PASS innerElement.hasCustomProperty is true
+PASS textNode.hasCustomProperty is true
+PASS anchorPoint.firstChild.hasCustomProperty is true
+PASS anchorPoint.firstChild.firstChild.hasCustomProperty is true
+PASS anchorPoint.firstChild.firstChild.firstChild.hasCustomProperty is true
+
+Setting anchorPoint.innerHTML to identical DOM, subtree should become detached.
+
+PASS anchorPoint.innerHTML is htmlString
+PASS subtreeRoot is not anchorPoint.firstChild
+PASS subtreeRoot.parentNode is null
+PASS innerElement.parentNode is subtreeRoot
+PASS textNode.parentNode is innerElement
+PASS subtreeRoot.hasCustomProperty is true
+PASS innerElement.hasCustomProperty is true
+PASS textNode.hasCustomProperty is true
+PASS anchorPoint.firstChild.hasCustomProperty is not true
+PASS anchorPoint.firstChild.firstChild.hasCustomProperty is not true
+PASS anchorPoint.firstChild.firstChild.firstChild.hasCustomProperty is not true
+
+Testing with subtree: <i><a>text here</a></i>
+
+PASS anchorPoint.innerHTML is htmlString
+PASS subtreeRoot is anchorPoint.firstChild
+PASS subtreeRoot.parentNode is anchorPoint
+PASS innerElement.parentNode is subtreeRoot
+PASS textNode.parentNode is innerElement
+PASS subtreeRoot.hasCustomProperty is true
+PASS innerElement.hasCustomProperty is true
+PASS textNode.hasCustomProperty is true
+PASS anchorPoint.firstChild.hasCustomProperty is true
+PASS anchorPoint.firstChild.firstChild.hasCustomProperty is true
+PASS anchorPoint.firstChild.firstChild.firstChild.hasCustomProperty is true
+
+Setting anchorPoint.innerHTML to identical DOM, subtree should become detached.
+
+PASS anchorPoint.innerHTML is htmlString
+PASS subtreeRoot is not anchorPoint.firstChild
+PASS subtreeRoot.parentNode is null
+PASS innerElement.parentNode is subtreeRoot
+PASS textNode.parentNode is innerElement
+PASS subtreeRoot.hasCustomProperty is true
+PASS innerElement.hasCustomProperty is true
+PASS textNode.hasCustomProperty is true
+PASS anchorPoint.firstChild.hasCustomProperty is not true
+PASS anchorPoint.firstChild.firstChild.hasCustomProperty is not true
+PASS anchorPoint.firstChild.firstChild.firstChild.hasCustomProperty is not true
+
+Testing with subtree: <i><b>text here</b></i>
+
+PASS anchorPoint.innerHTML is htmlString
+PASS subtreeRoot is anchorPoint.firstChild
+PASS subtreeRoot.parentNode is anchorPoint
+PASS innerElement.parentNode is subtreeRoot
+PASS textNode.parentNode is innerElement
+PASS subtreeRoot.hasCustomProperty is true
+PASS innerElement.hasCustomProperty is true
+PASS textNode.hasCustomProperty is true
+PASS anchorPoint.firstChild.hasCustomProperty is true
+PASS anchorPoint.firstChild.firstChild.hasCustomProperty is true
+PASS anchorPoint.firstChild.firstChild.firstChild.hasCustomProperty is true
+
+Setting anchorPoint.innerHTML to identical DOM, subtree should become detached.
+
+PASS anchorPoint.innerHTML is htmlString
+PASS subtreeRoot is not anchorPoint.firstChild
+PASS subtreeRoot.parentNode is null
+PASS innerElement.parentNode is subtreeRoot
+PASS textNode.parentNode is innerElement
+PASS subtreeRoot.hasCustomProperty is true
+PASS innerElement.hasCustomProperty is true
+PASS textNode.hasCustomProperty is true
+PASS anchorPoint.firstChild.hasCustomProperty is not true
+PASS anchorPoint.firstChild.firstChild.hasCustomProperty is not true
+PASS anchorPoint.firstChild.firstChild.firstChild.hasCustomProperty is not true
+
+Testing with subtree: <i><u>text here</u></i>
+
+PASS anchorPoint.innerHTML is htmlString
+PASS subtreeRoot is anchorPoint.firstChild
+PASS subtreeRoot.parentNode is anchorPoint
+PASS innerElement.parentNode is subtreeRoot
+PASS textNode.parentNode is innerElement
+PASS subtreeRoot.hasCustomProperty is true
+PASS innerElement.hasCustomProperty is true
+PASS textNode.hasCustomProperty is true
+PASS anchorPoint.firstChild.hasCustomProperty is true
+PASS anchorPoint.firstChild.firstChild.hasCustomProperty is true
+PASS anchorPoint.firstChild.firstChild.firstChild.hasCustomProperty is true
+
+Setting anchorPoint.innerHTML to identical DOM, subtree should become detached.
+
+PASS anchorPoint.innerHTML is htmlString
+PASS subtreeRoot is not anchorPoint.firstChild
+PASS subtreeRoot.parentNode is null
+PASS innerElement.parentNode is subtreeRoot
+PASS textNode.parentNode is innerElement
+PASS subtreeRoot.hasCustomProperty is true
+PASS innerElement.hasCustomProperty is true
+PASS textNode.hasCustomProperty is true
+PASS anchorPoint.firstChild.hasCustomProperty is not true
+PASS anchorPoint.firstChild.firstChild.hasCustomProperty is not true
+PASS anchorPoint.firstChild.firstChild.firstChild.hasCustomProperty is not true
+
+Testing with subtree: <i><div>text here</div></i>
+
+PASS anchorPoint.innerHTML is htmlString
+PASS subtreeRoot is anchorPoint.firstChild
+PASS subtreeRoot.parentNode is anchorPoint
+PASS innerElement.parentNode is subtreeRoot
+PASS textNode.parentNode is innerElement
+PASS subtreeRoot.hasCustomProperty is true
+PASS innerElement.hasCustomProperty is true
+PASS textNode.hasCustomProperty is true
+PASS anchorPoint.firstChild.hasCustomProperty is true
+PASS anchorPoint.firstChild.firstChild.hasCustomProperty is true
+PASS anchorPoint.firstChild.firstChild.firstChild.hasCustomProperty is true
+
+Setting anchorPoint.innerHTML to identical DOM, subtree should become detached.
+
+PASS anchorPoint.innerHTML is htmlString
+PASS subtreeRoot is not anchorPoint.firstChild
+PASS subtreeRoot.parentNode is null
+PASS innerElement.parentNode is subtreeRoot
+PASS textNode.parentNode is innerElement
+PASS subtreeRoot.hasCustomProperty is true
+PASS innerElement.hasCustomProperty is true
+PASS textNode.hasCustomProperty is true
+PASS anchorPoint.firstChild.hasCustomProperty is not true
+PASS anchorPoint.firstChild.firstChild.hasCustomProperty is not true
+PASS anchorPoint.firstChild.firstChild.firstChild.hasCustomProperty is not true
+
+Testing with subtree: <i><span>text here</span></i>
+
+PASS anchorPoint.innerHTML is htmlString
+PASS subtreeRoot is anchorPoint.firstChild
+PASS subtreeRoot.parentNode is anchorPoint
+PASS innerElement.parentNode is subtreeRoot
+PASS textNode.parentNode is innerElement
+PASS subtreeRoot.hasCustomProperty is true
+PASS innerElement.hasCustomProperty is true
+PASS textNode.hasCustomProperty is true
+PASS anchorPoint.firstChild.hasCustomProperty is true
+PASS anchorPoint.firstChild.firstChild.hasCustomProperty is true
+PASS anchorPoint.firstChild.firstChild.firstChild.hasCustomProperty is true
+
+Setting anchorPoint.innerHTML to identical DOM, subtree should become detached.
+
+PASS anchorPoint.innerHTML is htmlString
+PASS subtreeRoot is not anchorPoint.firstChild
+PASS subtreeRoot.parentNode is null
+PASS innerElement.parentNode is subtreeRoot
+PASS textNode.parentNode is innerElement
+PASS subtreeRoot.hasCustomProperty is true
+PASS innerElement.hasCustomProperty is true
+PASS textNode.hasCustomProperty is true
+PASS anchorPoint.firstChild.hasCustomProperty is not true
+PASS anchorPoint.firstChild.firstChild.hasCustomProperty is not true
+PASS anchorPoint.firstChild.firstChild.firstChild.hasCustomProperty is not true
+
+Testing with subtree: <i><canvas>text here</canvas></i>
+
+PASS anchorPoint.innerHTML is htmlString
+PASS subtreeRoot is anchorPoint.firstChild
+PASS subtreeRoot.parentNode is anchorPoint
+PASS innerElement.parentNode is subtreeRoot
+PASS textNode.parentNode is innerElement
+PASS subtreeRoot.hasCustomProperty is true
+PASS innerElement.hasCustomProperty is true
+PASS textNode.hasCustomProperty is true
+PASS anchorPoint.firstChild.hasCustomProperty is true
+PASS anchorPoint.firstChild.firstChild.hasCustomProperty is true
+PASS anchorPoint.firstChild.firstChild.firstChild.hasCustomProperty is true
+
+Setting anchorPoint.innerHTML to identical DOM, subtree should become detached.
+
+PASS anchorPoint.innerHTML is htmlString
+PASS subtreeRoot is not anchorPoint.firstChild
+PASS subtreeRoot.parentNode is null
+PASS innerElement.parentNode is subtreeRoot
+PASS textNode.parentNode is innerElement
+PASS subtreeRoot.hasCustomProperty is true
+PASS innerElement.hasCustomProperty is true
+PASS textNode.hasCustomProperty is true
+PASS anchorPoint.firstChild.hasCustomProperty is not true
+PASS anchorPoint.firstChild.firstChild.hasCustomProperty is not true
+PASS anchorPoint.firstChild.firstChild.firstChild.hasCustomProperty is not true
+
+Testing with subtree: <i><object>text here</object></i>
+
+PASS anchorPoint.innerHTML is htmlString
+PASS subtreeRoot is anchorPoint.firstChild
+PASS subtreeRoot.parentNode is anchorPoint
+PASS innerElement.parentNode is subtreeRoot
+PASS textNode.parentNode is innerElement
+PASS subtreeRoot.hasCustomProperty is true
+PASS innerElement.hasCustomProperty is true
+PASS textNode.hasCustomProperty is true
+PASS anchorPoint.firstChild.hasCustomProperty is true
+PASS anchorPoint.firstChild.firstChild.hasCustomProperty is true
+PASS anchorPoint.firstChild.firstChild.firstChild.hasCustomProperty is true
+
+Setting anchorPoint.innerHTML to identical DOM, subtree should become detached.
+
+PASS anchorPoint.innerHTML is htmlString
+PASS subtreeRoot is not anchorPoint.firstChild
+PASS subtreeRoot.parentNode is null
+PASS innerElement.parentNode is subtreeRoot
+PASS textNode.parentNode is innerElement
+PASS subtreeRoot.hasCustomProperty is true
+PASS innerElement.hasCustomProperty is true
+PASS textNode.hasCustomProperty is true
+PASS anchorPoint.firstChild.hasCustomProperty is not true
+PASS anchorPoint.firstChild.firstChild.hasCustomProperty is not true
+PASS anchorPoint.firstChild.firstChild.firstChild.hasCustomProperty is not true
+
+Testing with subtree: <i><a>text here</a></i>
+
+PASS anchorPoint.innerHTML is htmlString
+PASS subtreeRoot is anchorPoint.firstChild
+PASS subtreeRoot.parentNode is anchorPoint
+PASS innerElement.parentNode is subtreeRoot
+PASS textNode.parentNode is innerElement
+PASS subtreeRoot.hasCustomProperty is true
+PASS innerElement.hasCustomProperty is true
+PASS textNode.hasCustomProperty is true
+PASS anchorPoint.firstChild.hasCustomProperty is true
+PASS anchorPoint.firstChild.firstChild.hasCustomProperty is true
+PASS anchorPoint.firstChild.firstChild.firstChild.hasCustomProperty is true
+
+Setting anchorPoint.innerHTML to identical DOM, subtree should become detached.
+
+PASS anchorPoint.innerHTML is htmlString
+PASS subtreeRoot is not anchorPoint.firstChild
+PASS subtreeRoot.parentNode is null
+PASS innerElement.parentNode is subtreeRoot
+PASS textNode.parentNode is innerElement
+PASS subtreeRoot.hasCustomProperty is true
+PASS innerElement.hasCustomProperty is true
+PASS textNode.hasCustomProperty is true
+PASS anchorPoint.firstChild.hasCustomProperty is not true
+PASS anchorPoint.firstChild.firstChild.hasCustomProperty is not true
+PASS anchorPoint.firstChild.firstChild.firstChild.hasCustomProperty is not true
+
+Testing with subtree: <u><a>text here</a></u>
+
+PASS anchorPoint.innerHTML is htmlString
+PASS subtreeRoot is anchorPoint.firstChild
+PASS subtreeRoot.parentNode is anchorPoint
+PASS innerElement.parentNode is subtreeRoot
+PASS textNode.parentNode is innerElement
+PASS subtreeRoot.hasCustomProperty is true
+PASS innerElement.hasCustomProperty is true
+PASS textNode.hasCustomProperty is true
+PASS anchorPoint.firstChild.hasCustomProperty is true
+PASS anchorPoint.firstChild.firstChild.hasCustomProperty is true
+PASS anchorPoint.firstChild.firstChild.firstChild.hasCustomProperty is true
+
+Setting anchorPoint.innerHTML to identical DOM, subtree should become detached.
+
+PASS anchorPoint.innerHTML is htmlString
+PASS subtreeRoot is not anchorPoint.firstChild
+PASS subtreeRoot.parentNode is null
+PASS innerElement.parentNode is subtreeRoot
+PASS textNode.parentNode is innerElement
+PASS subtreeRoot.hasCustomProperty is true
+PASS innerElement.hasCustomProperty is true
+PASS textNode.hasCustomProperty is true
+PASS anchorPoint.firstChild.hasCustomProperty is not true
+PASS anchorPoint.firstChild.firstChild.hasCustomProperty is not true
+PASS anchorPoint.firstChild.firstChild.firstChild.hasCustomProperty is not true
+
+Testing with subtree: <u><b>text here</b></u>
+
+PASS anchorPoint.innerHTML is htmlString
+PASS subtreeRoot is anchorPoint.firstChild
+PASS subtreeRoot.parentNode is anchorPoint
+PASS innerElement.parentNode is subtreeRoot
+PASS textNode.parentNode is innerElement
+PASS subtreeRoot.hasCustomProperty is true
+PASS innerElement.hasCustomProperty is true
+PASS textNode.hasCustomProperty is true
+PASS anchorPoint.firstChild.hasCustomProperty is true
+PASS anchorPoint.firstChild.firstChild.hasCustomProperty is true
+PASS anchorPoint.firstChild.firstChild.firstChild.hasCustomProperty is true
+
+Setting anchorPoint.innerHTML to identical DOM, subtree should become detached.
+
+PASS anchorPoint.innerHTML is htmlString
+PASS subtreeRoot is not anchorPoint.firstChild
+PASS subtreeRoot.parentNode is null
+PASS innerElement.parentNode is subtreeRoot
+PASS textNode.parentNode is innerElement
+PASS subtreeRoot.hasCustomProperty is true
+PASS innerElement.hasCustomProperty is true
+PASS textNode.hasCustomProperty is true
+PASS anchorPoint.firstChild.hasCustomProperty is not true
+PASS anchorPoint.firstChild.firstChild.hasCustomProperty is not true
+PASS anchorPoint.firstChild.firstChild.firstChild.hasCustomProperty is not true
+
+Testing with subtree: <u><i>text here</i></u>
+
+PASS anchorPoint.innerHTML is htmlString
+PASS subtreeRoot is anchorPoint.firstChild
+PASS subtreeRoot.parentNode is anchorPoint
+PASS innerElement.parentNode is subtreeRoot
+PASS textNode.parentNode is innerElement
+PASS subtreeRoot.hasCustomProperty is true
+PASS innerElement.hasCustomProperty is true
+PASS textNode.hasCustomProperty is true
+PASS anchorPoint.firstChild.hasCustomProperty is true
+PASS anchorPoint.firstChild.firstChild.hasCustomProperty is true
+PASS anchorPoint.firstChild.firstChild.firstChild.hasCustomProperty is true
+
+Setting anchorPoint.innerHTML to identical DOM, subtree should become detached.
+
+PASS anchorPoint.innerHTML is htmlString
+PASS subtreeRoot is not anchorPoint.firstChild
+PASS subtreeRoot.parentNode is null
+PASS innerElement.parentNode is subtreeRoot
+PASS textNode.parentNode is innerElement
+PASS subtreeRoot.hasCustomProperty is true
+PASS innerElement.hasCustomProperty is true
+PASS textNode.hasCustomProperty is true
+PASS anchorPoint.firstChild.hasCustomProperty is not true
+PASS anchorPoint.firstChild.firstChild.hasCustomProperty is not true
+PASS anchorPoint.firstChild.firstChild.firstChild.hasCustomProperty is not true
+
+Testing with subtree: <u><div>text here</div></u>
+
+PASS anchorPoint.innerHTML is htmlString
+PASS subtreeRoot is anchorPoint.firstChild
+PASS subtreeRoot.parentNode is anchorPoint
+PASS innerElement.parentNode is subtreeRoot
+PASS textNode.parentNode is innerElement
+PASS subtreeRoot.hasCustomProperty is true
+PASS innerElement.hasCustomProperty is true
+PASS textNode.hasCustomProperty is true
+PASS anchorPoint.firstChild.hasCustomProperty is true
+PASS anchorPoint.firstChild.firstChild.hasCustomProperty is true
+PASS anchorPoint.firstChild.firstChild.firstChild.hasCustomProperty is true
+
+Setting anchorPoint.innerHTML to identical DOM, subtree should become detached.
+
+PASS anchorPoint.innerHTML is htmlString
+PASS subtreeRoot is not anchorPoint.firstChild
+PASS subtreeRoot.parentNode is null
+PASS innerElement.parentNode is subtreeRoot
+PASS textNode.parentNode is innerElement
+PASS subtreeRoot.hasCustomProperty is true
+PASS innerElement.hasCustomProperty is true
+PASS textNode.hasCustomProperty is true
+PASS anchorPoint.firstChild.hasCustomProperty is not true
+PASS anchorPoint.firstChild.firstChild.hasCustomProperty is not true
+PASS anchorPoint.firstChild.firstChild.firstChild.hasCustomProperty is not true
+
+Testing with subtree: <u><span>text here</span></u>
+
+PASS anchorPoint.innerHTML is htmlString
+PASS subtreeRoot is anchorPoint.firstChild
+PASS subtreeRoot.parentNode is anchorPoint
+PASS innerElement.parentNode is subtreeRoot
+PASS textNode.parentNode is innerElement
+PASS subtreeRoot.hasCustomProperty is true
+PASS innerElement.hasCustomProperty is true
+PASS textNode.hasCustomProperty is true
+PASS anchorPoint.firstChild.hasCustomProperty is true
+PASS anchorPoint.firstChild.firstChild.hasCustomProperty is true
+PASS anchorPoint.firstChild.firstChild.firstChild.hasCustomProperty is true
+
+Setting anchorPoint.innerHTML to identical DOM, subtree should become detached.
+
+PASS anchorPoint.innerHTML is htmlString
+PASS subtreeRoot is not anchorPoint.firstChild
+PASS subtreeRoot.parentNode is null
+PASS innerElement.parentNode is subtreeRoot
+PASS textNode.parentNode is innerElement
+PASS subtreeRoot.hasCustomProperty is true
+PASS innerElement.hasCustomProperty is true
+PASS textNode.hasCustomProperty is true
+PASS anchorPoint.firstChild.hasCustomProperty is not true
+PASS anchorPoint.firstChild.firstChild.hasCustomProperty is not true
+PASS anchorPoint.firstChild.firstChild.firstChild.hasCustomProperty is not true
+
+Testing with subtree: <u><canvas>text here</canvas></u>
+
+PASS anchorPoint.innerHTML is htmlString
+PASS subtreeRoot is anchorPoint.firstChild
+PASS subtreeRoot.parentNode is anchorPoint
+PASS innerElement.parentNode is subtreeRoot
+PASS textNode.parentNode is innerElement
+PASS subtreeRoot.hasCustomProperty is true
+PASS innerElement.hasCustomProperty is true
+PASS textNode.hasCustomProperty is true
+PASS anchorPoint.firstChild.hasCustomProperty is true
+PASS anchorPoint.firstChild.firstChild.hasCustomProperty is true
+PASS anchorPoint.firstChild.firstChild.firstChild.hasCustomProperty is true
+
+Setting anchorPoint.innerHTML to identical DOM, subtree should become detached.
+
+PASS anchorPoint.innerHTML is htmlString
+PASS subtreeRoot is not anchorPoint.firstChild
+PASS subtreeRoot.parentNode is null
+PASS innerElement.parentNode is subtreeRoot
+PASS textNode.parentNode is innerElement
+PASS subtreeRoot.hasCustomProperty is true
+PASS innerElement.hasCustomProperty is true
+PASS textNode.hasCustomProperty is true
+PASS anchorPoint.firstChild.hasCustomProperty is not true
+PASS anchorPoint.firstChild.firstChild.hasCustomProperty is not true
+PASS anchorPoint.firstChild.firstChild.firstChild.hasCustomProperty is not true
+
+Testing with subtree: <u><object>text here</object></u>
+
+PASS anchorPoint.innerHTML is htmlString
+PASS subtreeRoot is anchorPoint.firstChild
+PASS subtreeRoot.parentNode is anchorPoint
+PASS innerElement.parentNode is subtreeRoot
+PASS textNode.parentNode is innerElement
+PASS subtreeRoot.hasCustomProperty is true
+PASS innerElement.hasCustomProperty is true
+PASS textNode.hasCustomProperty is true
+PASS anchorPoint.firstChild.hasCustomProperty is true
+PASS anchorPoint.firstChild.firstChild.hasCustomProperty is true
+PASS anchorPoint.firstChild.firstChild.firstChild.hasCustomProperty is true
+
+Setting anchorPoint.innerHTML to identical DOM, subtree should become detached.
+
+PASS anchorPoint.innerHTML is htmlString
+PASS subtreeRoot is not anchorPoint.firstChild
+PASS subtreeRoot.parentNode is null
+PASS innerElement.parentNode is subtreeRoot
+PASS textNode.parentNode is innerElement
+PASS subtreeRoot.hasCustomProperty is true
+PASS innerElement.hasCustomProperty is true
+PASS textNode.hasCustomProperty is true
+PASS anchorPoint.firstChild.hasCustomProperty is not true
+PASS anchorPoint.firstChild.firstChild.hasCustomProperty is not true
+PASS anchorPoint.firstChild.firstChild.firstChild.hasCustomProperty is not true
+
+Testing with subtree: <u><a>text here</a></u>
+
+PASS anchorPoint.innerHTML is htmlString
+PASS subtreeRoot is anchorPoint.firstChild
+PASS subtreeRoot.parentNode is anchorPoint
+PASS innerElement.parentNode is subtreeRoot
+PASS textNode.parentNode is innerElement
+PASS subtreeRoot.hasCustomProperty is true
+PASS innerElement.hasCustomProperty is true
+PASS textNode.hasCustomProperty is true
+PASS anchorPoint.firstChild.hasCustomProperty is true
+PASS anchorPoint.firstChild.firstChild.hasCustomProperty is true
+PASS anchorPoint.firstChild.firstChild.firstChild.hasCustomProperty is true
+
+Setting anchorPoint.innerHTML to identical DOM, subtree should become detached.
+
+PASS anchorPoint.innerHTML is htmlString
+PASS subtreeRoot is not anchorPoint.firstChild
+PASS subtreeRoot.parentNode is null
+PASS innerElement.parentNode is subtreeRoot
+PASS textNode.parentNode is innerElement
+PASS subtreeRoot.hasCustomProperty is true
+PASS innerElement.hasCustomProperty is true
+PASS textNode.hasCustomProperty is true
+PASS anchorPoint.firstChild.hasCustomProperty is not true
+PASS anchorPoint.firstChild.firstChild.hasCustomProperty is not true
+PASS anchorPoint.firstChild.firstChild.firstChild.hasCustomProperty is not true
+
+Testing with subtree: <div><a>text here</a></div>
+
+PASS anchorPoint.innerHTML is htmlString
+PASS subtreeRoot is anchorPoint.firstChild
+PASS subtreeRoot.parentNode is anchorPoint
+PASS innerElement.parentNode is subtreeRoot
+PASS textNode.parentNode is innerElement
+PASS subtreeRoot.hasCustomProperty is true
+PASS innerElement.hasCustomProperty is true
+PASS textNode.hasCustomProperty is true
+PASS anchorPoint.firstChild.hasCustomProperty is true
+PASS anchorPoint.firstChild.firstChild.hasCustomProperty is true
+PASS anchorPoint.firstChild.firstChild.firstChild.hasCustomProperty is true
+
+Setting anchorPoint.innerHTML to identical DOM, subtree should become detached.
+
+PASS anchorPoint.innerHTML is htmlString
+PASS subtreeRoot is not anchorPoint.firstChild
+PASS subtreeRoot.parentNode is null
+PASS innerElement.parentNode is subtreeRoot
+PASS textNode.parentNode is innerElement
+PASS subtreeRoot.hasCustomProperty is true
+PASS innerElement.hasCustomProperty is true
+PASS textNode.hasCustomProperty is true
+PASS anchorPoint.firstChild.hasCustomProperty is not true
+PASS anchorPoint.firstChild.firstChild.hasCustomProperty is not true
+PASS anchorPoint.firstChild.firstChild.firstChild.hasCustomProperty is not true
+
+Testing with subtree: <div><b>text here</b></div>
+
+PASS anchorPoint.innerHTML is htmlString
+PASS subtreeRoot is anchorPoint.firstChild
+PASS subtreeRoot.parentNode is anchorPoint
+PASS innerElement.parentNode is subtreeRoot
+PASS textNode.parentNode is innerElement
+PASS subtreeRoot.hasCustomProperty is true
+PASS innerElement.hasCustomProperty is true
+PASS textNode.hasCustomProperty is true
+PASS anchorPoint.firstChild.hasCustomProperty is true
+PASS anchorPoint.firstChild.firstChild.hasCustomProperty is true
+PASS anchorPoint.firstChild.firstChild.firstChild.hasCustomProperty is true
+
+Setting anchorPoint.innerHTML to identical DOM, subtree should become detached.
+
+PASS anchorPoint.innerHTML is htmlString
+PASS subtreeRoot is not anchorPoint.firstChild
+PASS subtreeRoot.parentNode is null
+PASS innerElement.parentNode is subtreeRoot
+PASS textNode.parentNode is innerElement
+PASS subtreeRoot.hasCustomProperty is true
+PASS innerElement.hasCustomProperty is true
+PASS textNode.hasCustomProperty is true
+PASS anchorPoint.firstChild.hasCustomProperty is not true
+PASS anchorPoint.firstChild.firstChild.hasCustomProperty is not true
+PASS anchorPoint.firstChild.firstChild.firstChild.hasCustomProperty is not true
+
+Testing with subtree: <div><i>text here</i></div>
+
+PASS anchorPoint.innerHTML is htmlString
+PASS subtreeRoot is anchorPoint.firstChild
+PASS subtreeRoot.parentNode is anchorPoint
+PASS innerElement.parentNode is subtreeRoot
+PASS textNode.parentNode is innerElement
+PASS subtreeRoot.hasCustomProperty is true
+PASS innerElement.hasCustomProperty is true
+PASS textNode.hasCustomProperty is true
+PASS anchorPoint.firstChild.hasCustomProperty is true
+PASS anchorPoint.firstChild.firstChild.hasCustomProperty is true
+PASS anchorPoint.firstChild.firstChild.firstChild.hasCustomProperty is true
+
+Setting anchorPoint.innerHTML to identical DOM, subtree should become detached.
+
+PASS anchorPoint.innerHTML is htmlString
+PASS subtreeRoot is not anchorPoint.firstChild
+PASS subtreeRoot.parentNode is null
+PASS innerElement.parentNode is subtreeRoot
+PASS textNode.parentNode is innerElement
+PASS subtreeRoot.hasCustomProperty is true
+PASS innerElement.hasCustomProperty is true
+PASS textNode.hasCustomProperty is true
+PASS anchorPoint.firstChild.hasCustomProperty is not true
+PASS anchorPoint.firstChild.firstChild.hasCustomProperty is not true
+PASS anchorPoint.firstChild.firstChild.firstChild.hasCustomProperty is not true
+
+Testing with subtree: <div><u>text here</u></div>
+
+PASS anchorPoint.innerHTML is htmlString
+PASS subtreeRoot is anchorPoint.firstChild
+PASS subtreeRoot.parentNode is anchorPoint
+PASS innerElement.parentNode is subtreeRoot
+PASS textNode.parentNode is innerElement
+PASS subtreeRoot.hasCustomProperty is true
+PASS innerElement.hasCustomProperty is true
+PASS textNode.hasCustomProperty is true
+PASS anchorPoint.firstChild.hasCustomProperty is true
+PASS anchorPoint.firstChild.firstChild.hasCustomProperty is true
+PASS anchorPoint.firstChild.firstChild.firstChild.hasCustomProperty is true
+
+Setting anchorPoint.innerHTML to identical DOM, subtree should become detached.
+
+PASS anchorPoint.innerHTML is htmlString
+PASS subtreeRoot is not anchorPoint.firstChild
+PASS subtreeRoot.parentNode is null
+PASS innerElement.parentNode is subtreeRoot
+PASS textNode.parentNode is innerElement
+PASS subtreeRoot.hasCustomProperty is true
+PASS innerElement.hasCustomProperty is true
+PASS textNode.hasCustomProperty is true
+PASS anchorPoint.firstChild.hasCustomProperty is not true
+PASS anchorPoint.firstChild.firstChild.hasCustomProperty is not true
+PASS anchorPoint.firstChild.firstChild.firstChild.hasCustomProperty is not true
+
+Testing with subtree: <div><span>text here</span></div>
+
+PASS anchorPoint.innerHTML is htmlString
+PASS subtreeRoot is anchorPoint.firstChild
+PASS subtreeRoot.parentNode is anchorPoint
+PASS innerElement.parentNode is subtreeRoot
+PASS textNode.parentNode is innerElement
+PASS subtreeRoot.hasCustomProperty is true
+PASS innerElement.hasCustomProperty is true
+PASS textNode.hasCustomProperty is true
+PASS anchorPoint.firstChild.hasCustomProperty is true
+PASS anchorPoint.firstChild.firstChild.hasCustomProperty is true
+PASS anchorPoint.firstChild.firstChild.firstChild.hasCustomProperty is true
+
+Setting anchorPoint.innerHTML to identical DOM, subtree should become detached.
+
+PASS anchorPoint.innerHTML is htmlString
+PASS subtreeRoot is not anchorPoint.firstChild
+PASS subtreeRoot.parentNode is null
+PASS innerElement.parentNode is subtreeRoot
+PASS textNode.parentNode is innerElement
+PASS subtreeRoot.hasCustomProperty is true
+PASS innerElement.hasCustomProperty is true
+PASS textNode.hasCustomProperty is true
+PASS anchorPoint.firstChild.hasCustomProperty is not true
+PASS anchorPoint.firstChild.firstChild.hasCustomProperty is not true
+PASS anchorPoint.firstChild.firstChild.firstChild.hasCustomProperty is not true
+
+Testing with subtree: <div><canvas>text here</canvas></div>
+
+PASS anchorPoint.innerHTML is htmlString
+PASS subtreeRoot is anchorPoint.firstChild
+PASS subtreeRoot.parentNode is anchorPoint
+PASS innerElement.parentNode is subtreeRoot
+PASS textNode.parentNode is innerElement
+PASS subtreeRoot.hasCustomProperty is true
+PASS innerElement.hasCustomProperty is true
+PASS textNode.hasCustomProperty is true
+PASS anchorPoint.firstChild.hasCustomProperty is true
+PASS anchorPoint.firstChild.firstChild.hasCustomProperty is true
+PASS anchorPoint.firstChild.firstChild.firstChild.hasCustomProperty is true
+
+Setting anchorPoint.innerHTML to identical DOM, subtree should become detached.
+
+PASS anchorPoint.innerHTML is htmlString
+PASS subtreeRoot is not anchorPoint.firstChild
+PASS subtreeRoot.parentNode is null
+PASS innerElement.parentNode is subtreeRoot
+PASS textNode.parentNode is innerElement
+PASS subtreeRoot.hasCustomProperty is true
+PASS innerElement.hasCustomProperty is true
+PASS textNode.hasCustomProperty is true
+PASS anchorPoint.firstChild.hasCustomProperty is not true
+PASS anchorPoint.firstChild.firstChild.hasCustomProperty is not true
+PASS anchorPoint.firstChild.firstChild.firstChild.hasCustomProperty is not true
+
+Testing with subtree: <div><object>text here</object></div>
+
+PASS anchorPoint.innerHTML is htmlString
+PASS subtreeRoot is anchorPoint.firstChild
+PASS subtreeRoot.parentNode is anchorPoint
+PASS innerElement.parentNode is subtreeRoot
+PASS textNode.parentNode is innerElement
+PASS subtreeRoot.hasCustomProperty is true
+PASS innerElement.hasCustomProperty is true
+PASS textNode.hasCustomProperty is true
+PASS anchorPoint.firstChild.hasCustomProperty is true
+PASS anchorPoint.firstChild.firstChild.hasCustomProperty is true
+PASS anchorPoint.firstChild.firstChild.firstChild.hasCustomProperty is true
+
+Setting anchorPoint.innerHTML to identical DOM, subtree should become detached.
+
+PASS anchorPoint.innerHTML is htmlString
+PASS subtreeRoot is not anchorPoint.firstChild
+PASS subtreeRoot.parentNode is null
+PASS innerElement.parentNode is subtreeRoot
+PASS textNode.parentNode is innerElement
+PASS subtreeRoot.hasCustomProperty is true
+PASS innerElement.hasCustomProperty is true
+PASS textNode.hasCustomProperty is true
+PASS anchorPoint.firstChild.hasCustomProperty is not true
+PASS anchorPoint.firstChild.firstChild.hasCustomProperty is not true
+PASS anchorPoint.firstChild.firstChild.firstChild.hasCustomProperty is not true
+
+Testing with subtree: <div><a>text here</a></div>
+
+PASS anchorPoint.innerHTML is htmlString
+PASS subtreeRoot is anchorPoint.firstChild
+PASS subtreeRoot.parentNode is anchorPoint
+PASS innerElement.parentNode is subtreeRoot
+PASS textNode.parentNode is innerElement
+PASS subtreeRoot.hasCustomProperty is true
+PASS innerElement.hasCustomProperty is true
+PASS textNode.hasCustomProperty is true
+PASS anchorPoint.firstChild.hasCustomProperty is true
+PASS anchorPoint.firstChild.firstChild.hasCustomProperty is true
+PASS anchorPoint.firstChild.firstChild.firstChild.hasCustomProperty is true
+
+Setting anchorPoint.innerHTML to identical DOM, subtree should become detached.
+
+PASS anchorPoint.innerHTML is htmlString
+PASS subtreeRoot is not anchorPoint.firstChild
+PASS subtreeRoot.parentNode is null
+PASS innerElement.parentNode is subtreeRoot
+PASS textNode.parentNode is innerElement
+PASS subtreeRoot.hasCustomProperty is true
+PASS innerElement.hasCustomProperty is true
+PASS textNode.hasCustomProperty is true
+PASS anchorPoint.firstChild.hasCustomProperty is not true
+PASS anchorPoint.firstChild.firstChild.hasCustomProperty is not true
+PASS anchorPoint.firstChild.firstChild.firstChild.hasCustomProperty is not true
+
+Testing with subtree: <span><a>text here</a></span>
+
+PASS anchorPoint.innerHTML is htmlString
+PASS subtreeRoot is anchorPoint.firstChild
+PASS subtreeRoot.parentNode is anchorPoint
+PASS innerElement.parentNode is subtreeRoot
+PASS textNode.parentNode is innerElement
+PASS subtreeRoot.hasCustomProperty is true
+PASS innerElement.hasCustomProperty is true
+PASS textNode.hasCustomProperty is true
+PASS anchorPoint.firstChild.hasCustomProperty is true
+PASS anchorPoint.firstChild.firstChild.hasCustomProperty is true
+PASS anchorPoint.firstChild.firstChild.firstChild.hasCustomProperty is true
+
+Setting anchorPoint.innerHTML to identical DOM, subtree should become detached.
+
+PASS anchorPoint.innerHTML is htmlString
+PASS subtreeRoot is not anchorPoint.firstChild
+PASS subtreeRoot.parentNode is null
+PASS innerElement.parentNode is subtreeRoot
+PASS textNode.parentNode is innerElement
+PASS subtreeRoot.hasCustomProperty is true
+PASS innerElement.hasCustomProperty is true
+PASS textNode.hasCustomProperty is true
+PASS anchorPoint.firstChild.hasCustomProperty is not true
+PASS anchorPoint.firstChild.firstChild.hasCustomProperty is not true
+PASS anchorPoint.firstChild.firstChild.firstChild.hasCustomProperty is not true
+
+Testing with subtree: <span><b>text here</b></span>
+
+PASS anchorPoint.innerHTML is htmlString
+PASS subtreeRoot is anchorPoint.firstChild
+PASS subtreeRoot.parentNode is anchorPoint
+PASS innerElement.parentNode is subtreeRoot
+PASS textNode.parentNode is innerElement
+PASS subtreeRoot.hasCustomProperty is true
+PASS innerElement.hasCustomProperty is true
+PASS textNode.hasCustomProperty is true
+PASS anchorPoint.firstChild.hasCustomProperty is true
+PASS anchorPoint.firstChild.firstChild.hasCustomProperty is true
+PASS anchorPoint.firstChild.firstChild.firstChild.hasCustomProperty is true
+
+Setting anchorPoint.innerHTML to identical DOM, subtree should become detached.
+
+PASS anchorPoint.innerHTML is htmlString
+PASS subtreeRoot is not anchorPoint.firstChild
+PASS subtreeRoot.parentNode is null
+PASS innerElement.parentNode is subtreeRoot
+PASS textNode.parentNode is innerElement
+PASS subtreeRoot.hasCustomProperty is true
+PASS innerElement.hasCustomProperty is true
+PASS textNode.hasCustomProperty is true
+PASS anchorPoint.firstChild.hasCustomProperty is not true
+PASS anchorPoint.firstChild.firstChild.hasCustomProperty is not true
+PASS anchorPoint.firstChild.firstChild.firstChild.hasCustomProperty is not true
+
+Testing with subtree: <span><i>text here</i></span>
+
+PASS anchorPoint.innerHTML is htmlString
+PASS subtreeRoot is anchorPoint.firstChild
+PASS subtreeRoot.parentNode is anchorPoint
+PASS innerElement.parentNode is subtreeRoot
+PASS textNode.parentNode is innerElement
+PASS subtreeRoot.hasCustomProperty is true
+PASS innerElement.hasCustomProperty is true
+PASS textNode.hasCustomProperty is true
+PASS anchorPoint.firstChild.hasCustomProperty is true
+PASS anchorPoint.firstChild.firstChild.hasCustomProperty is true
+PASS anchorPoint.firstChild.firstChild.firstChild.hasCustomProperty is true
+
+Setting anchorPoint.innerHTML to identical DOM, subtree should become detached.
+
+PASS anchorPoint.innerHTML is htmlString
+PASS subtreeRoot is not anchorPoint.firstChild
+PASS subtreeRoot.parentNode is null
+PASS innerElement.parentNode is subtreeRoot
+PASS textNode.parentNode is innerElement
+PASS subtreeRoot.hasCustomProperty is true
+PASS innerElement.hasCustomProperty is true
+PASS textNode.hasCustomProperty is true
+PASS anchorPoint.firstChild.hasCustomProperty is not true
+PASS anchorPoint.firstChild.firstChild.hasCustomProperty is not true
+PASS anchorPoint.firstChild.firstChild.firstChild.hasCustomProperty is not true
+
+Testing with subtree: <span><u>text here</u></span>
+
+PASS anchorPoint.innerHTML is htmlString
+PASS subtreeRoot is anchorPoint.firstChild
+PASS subtreeRoot.parentNode is anchorPoint
+PASS innerElement.parentNode is subtreeRoot
+PASS textNode.parentNode is innerElement
+PASS subtreeRoot.hasCustomProperty is true
+PASS innerElement.hasCustomProperty is true
+PASS textNode.hasCustomProperty is true
+PASS anchorPoint.firstChild.hasCustomProperty is true
+PASS anchorPoint.firstChild.firstChild.hasCustomProperty is true
+PASS anchorPoint.firstChild.firstChild.firstChild.hasCustomProperty is true
+
+Setting anchorPoint.innerHTML to identical DOM, subtree should become detached.
+
+PASS anchorPoint.innerHTML is htmlString
+PASS subtreeRoot is not anchorPoint.firstChild
+PASS subtreeRoot.parentNode is null
+PASS innerElement.parentNode is subtreeRoot
+PASS textNode.parentNode is innerElement
+PASS subtreeRoot.hasCustomProperty is true
+PASS innerElement.hasCustomProperty is true
+PASS textNode.hasCustomProperty is true
+PASS anchorPoint.firstChild.hasCustomProperty is not true
+PASS anchorPoint.firstChild.firstChild.hasCustomProperty is not true
+PASS anchorPoint.firstChild.firstChild.firstChild.hasCustomProperty is not true
+
+Testing with subtree: <span><div>text here</div></span>
+
+PASS anchorPoint.innerHTML is htmlString
+PASS subtreeRoot is anchorPoint.firstChild
+PASS subtreeRoot.parentNode is anchorPoint
+PASS innerElement.parentNode is subtreeRoot
+PASS textNode.parentNode is innerElement
+PASS subtreeRoot.hasCustomProperty is true
+PASS innerElement.hasCustomProperty is true
+PASS textNode.hasCustomProperty is true
+PASS anchorPoint.firstChild.hasCustomProperty is true
+PASS anchorPoint.firstChild.firstChild.hasCustomProperty is true
+PASS anchorPoint.firstChild.firstChild.firstChild.hasCustomProperty is true
+
+Setting anchorPoint.innerHTML to identical DOM, subtree should become detached.
+
+PASS anchorPoint.innerHTML is htmlString
+PASS subtreeRoot is not anchorPoint.firstChild
+PASS subtreeRoot.parentNode is null
+PASS innerElement.parentNode is subtreeRoot
+PASS textNode.parentNode is innerElement
+PASS subtreeRoot.hasCustomProperty is true
+PASS innerElement.hasCustomProperty is true
+PASS textNode.hasCustomProperty is true
+PASS anchorPoint.firstChild.hasCustomProperty is not true
+PASS anchorPoint.firstChild.firstChild.hasCustomProperty is not true
+PASS anchorPoint.firstChild.firstChild.firstChild.hasCustomProperty is not true
+
+Testing with subtree: <span><canvas>text here</canvas></span>
+
+PASS anchorPoint.innerHTML is htmlString
+PASS subtreeRoot is anchorPoint.firstChild
+PASS subtreeRoot.parentNode is anchorPoint
+PASS innerElement.parentNode is subtreeRoot
+PASS textNode.parentNode is innerElement
+PASS subtreeRoot.hasCustomProperty is true
+PASS innerElement.hasCustomProperty is true
+PASS textNode.hasCustomProperty is true
+PASS anchorPoint.firstChild.hasCustomProperty is true
+PASS anchorPoint.firstChild.firstChild.hasCustomProperty is true
+PASS anchorPoint.firstChild.firstChild.firstChild.hasCustomProperty is true
+
+Setting anchorPoint.innerHTML to identical DOM, subtree should become detached.
+
+PASS anchorPoint.innerHTML is htmlString
+PASS subtreeRoot is not anchorPoint.firstChild
+PASS subtreeRoot.parentNode is null
+PASS innerElement.parentNode is subtreeRoot
+PASS textNode.parentNode is innerElement
+PASS subtreeRoot.hasCustomProperty is true
+PASS innerElement.hasCustomProperty is true
+PASS textNode.hasCustomProperty is true
+PASS anchorPoint.firstChild.hasCustomProperty is not true
+PASS anchorPoint.firstChild.firstChild.hasCustomProperty is not true
+PASS anchorPoint.firstChild.firstChild.firstChild.hasCustomProperty is not true
+
+Testing with subtree: <span><object>text here</object></span>
+
+PASS anchorPoint.innerHTML is htmlString
+PASS subtreeRoot is anchorPoint.firstChild
+PASS subtreeRoot.parentNode is anchorPoint
+PASS innerElement.parentNode is subtreeRoot
+PASS textNode.parentNode is innerElement
+PASS subtreeRoot.hasCustomProperty is true
+PASS innerElement.hasCustomProperty is true
+PASS textNode.hasCustomProperty is true
+PASS anchorPoint.firstChild.hasCustomProperty is true
+PASS anchorPoint.firstChild.firstChild.hasCustomProperty is true
+PASS anchorPoint.firstChild.firstChild.firstChild.hasCustomProperty is true
+
+Setting anchorPoint.innerHTML to identical DOM, subtree should become detached.
+
+PASS anchorPoint.innerHTML is htmlString
+PASS subtreeRoot is not anchorPoint.firstChild
+PASS subtreeRoot.parentNode is null
+PASS innerElement.parentNode is subtreeRoot
+PASS textNode.parentNode is innerElement
+PASS subtreeRoot.hasCustomProperty is true
+PASS innerElement.hasCustomProperty is true
+PASS textNode.hasCustomProperty is true
+PASS anchorPoint.firstChild.hasCustomProperty is not true
+PASS anchorPoint.firstChild.firstChild.hasCustomProperty is not true
+PASS anchorPoint.firstChild.firstChild.firstChild.hasCustomProperty is not true
+
+Testing with subtree: <span><a>text here</a></span>
+
+PASS anchorPoint.innerHTML is htmlString
+PASS subtreeRoot is anchorPoint.firstChild
+PASS subtreeRoot.parentNode is anchorPoint
+PASS innerElement.parentNode is subtreeRoot
+PASS textNode.parentNode is innerElement
+PASS subtreeRoot.hasCustomProperty is true
+PASS innerElement.hasCustomProperty is true
+PASS textNode.hasCustomProperty is true
+PASS anchorPoint.firstChild.hasCustomProperty is true
+PASS anchorPoint.firstChild.firstChild.hasCustomProperty is true
+PASS anchorPoint.firstChild.firstChild.firstChild.hasCustomProperty is true
+
+Setting anchorPoint.innerHTML to identical DOM, subtree should become detached.
+
+PASS anchorPoint.innerHTML is htmlString
+PASS subtreeRoot is not anchorPoint.firstChild
+PASS subtreeRoot.parentNode is null
+PASS innerElement.parentNode is subtreeRoot
+PASS textNode.parentNode is innerElement
+PASS subtreeRoot.hasCustomProperty is true
+PASS innerElement.hasCustomProperty is true
+PASS textNode.hasCustomProperty is true
+PASS anchorPoint.firstChild.hasCustomProperty is not true
+PASS anchorPoint.firstChild.firstChild.hasCustomProperty is not true
+PASS anchorPoint.firstChild.firstChild.firstChild.hasCustomProperty is not true
+
+Testing with subtree: <canvas><a>text here</a></canvas>
+
+PASS anchorPoint.innerHTML is htmlString
+PASS subtreeRoot is anchorPoint.firstChild
+PASS subtreeRoot.parentNode is anchorPoint
+PASS innerElement.parentNode is subtreeRoot
+PASS textNode.parentNode is innerElement
+PASS subtreeRoot.hasCustomProperty is true
+PASS innerElement.hasCustomProperty is true
+PASS textNode.hasCustomProperty is true
+PASS anchorPoint.firstChild.hasCustomProperty is true
+PASS anchorPoint.firstChild.firstChild.hasCustomProperty is true
+PASS anchorPoint.firstChild.firstChild.firstChild.hasCustomProperty is true
+
+Setting anchorPoint.innerHTML to identical DOM, subtree should become detached.
+
+PASS anchorPoint.innerHTML is htmlString
+PASS subtreeRoot is not anchorPoint.firstChild
+PASS subtreeRoot.parentNode is null
+PASS innerElement.parentNode is subtreeRoot
+PASS textNode.parentNode is innerElement
+PASS subtreeRoot.hasCustomProperty is true
+PASS innerElement.hasCustomProperty is true
+PASS textNode.hasCustomProperty is true
+PASS anchorPoint.firstChild.hasCustomProperty is not true
+PASS anchorPoint.firstChild.firstChild.hasCustomProperty is not true
+PASS anchorPoint.firstChild.firstChild.firstChild.hasCustomProperty is not true
+
+Testing with subtree: <canvas><b>text here</b></canvas>
+
+PASS anchorPoint.innerHTML is htmlString
+PASS subtreeRoot is anchorPoint.firstChild
+PASS subtreeRoot.parentNode is anchorPoint
+PASS innerElement.parentNode is subtreeRoot
+PASS textNode.parentNode is innerElement
+PASS subtreeRoot.hasCustomProperty is true
+PASS innerElement.hasCustomProperty is true
+PASS textNode.hasCustomProperty is true
+PASS anchorPoint.firstChild.hasCustomProperty is true
+PASS anchorPoint.firstChild.firstChild.hasCustomProperty is true
+PASS anchorPoint.firstChild.firstChild.firstChild.hasCustomProperty is true
+
+Setting anchorPoint.innerHTML to identical DOM, subtree should become detached.
+
+PASS anchorPoint.innerHTML is htmlString
+PASS subtreeRoot is not anchorPoint.firstChild
+PASS subtreeRoot.parentNode is null
+PASS innerElement.parentNode is subtreeRoot
+PASS textNode.parentNode is innerElement
+PASS subtreeRoot.hasCustomProperty is true
+PASS innerElement.hasCustomProperty is true
+PASS textNode.hasCustomProperty is true
+PASS anchorPoint.firstChild.hasCustomProperty is not true
+PASS anchorPoint.firstChild.firstChild.hasCustomProperty is not true
+PASS anchorPoint.firstChild.firstChild.firstChild.hasCustomProperty is not true
+
+Testing with subtree: <canvas><i>text here</i></canvas>
+
+PASS anchorPoint.innerHTML is htmlString
+PASS subtreeRoot is anchorPoint.firstChild
+PASS subtreeRoot.parentNode is anchorPoint
+PASS innerElement.parentNode is subtreeRoot
+PASS textNode.parentNode is innerElement
+PASS subtreeRoot.hasCustomProperty is true
+PASS innerElement.hasCustomProperty is true
+PASS textNode.hasCustomProperty is true
+PASS anchorPoint.firstChild.hasCustomProperty is true
+PASS anchorPoint.firstChild.firstChild.hasCustomProperty is true
+PASS anchorPoint.firstChild.firstChild.firstChild.hasCustomProperty is true
+
+Setting anchorPoint.innerHTML to identical DOM, subtree should become detached.
+
+PASS anchorPoint.innerHTML is htmlString
+PASS subtreeRoot is not anchorPoint.firstChild
+PASS subtreeRoot.parentNode is null
+PASS innerElement.parentNode is subtreeRoot
+PASS textNode.parentNode is innerElement
+PASS subtreeRoot.hasCustomProperty is true
+PASS innerElement.hasCustomProperty is true
+PASS textNode.hasCustomProperty is true
+PASS anchorPoint.firstChild.hasCustomProperty is not true
+PASS anchorPoint.firstChild.firstChild.hasCustomProperty is not true
+PASS anchorPoint.firstChild.firstChild.firstChild.hasCustomProperty is not true
+
+Testing with subtree: <canvas><u>text here</u></canvas>
+
+PASS anchorPoint.innerHTML is htmlString
+PASS subtreeRoot is anchorPoint.firstChild
+PASS subtreeRoot.parentNode is anchorPoint
+PASS innerElement.parentNode is subtreeRoot
+PASS textNode.parentNode is innerElement
+PASS subtreeRoot.hasCustomProperty is true
+PASS innerElement.hasCustomProperty is true
+PASS textNode.hasCustomProperty is true
+PASS anchorPoint.firstChild.hasCustomProperty is true
+PASS anchorPoint.firstChild.firstChild.hasCustomProperty is true
+PASS anchorPoint.firstChild.firstChild.firstChild.hasCustomProperty is true
+
+Setting anchorPoint.innerHTML to identical DOM, subtree should become detached.
+
+PASS anchorPoint.innerHTML is htmlString
+PASS subtreeRoot is not anchorPoint.firstChild
+PASS subtreeRoot.parentNode is null
+PASS innerElement.parentNode is subtreeRoot
+PASS textNode.parentNode is innerElement
+PASS subtreeRoot.hasCustomProperty is true
+PASS innerElement.hasCustomProperty is true
+PASS textNode.hasCustomProperty is true
+PASS anchorPoint.firstChild.hasCustomProperty is not true
+PASS anchorPoint.firstChild.firstChild.hasCustomProperty is not true
+PASS anchorPoint.firstChild.firstChild.firstChild.hasCustomProperty is not true
+
+Testing with subtree: <canvas><div>text here</div></canvas>
+
+PASS anchorPoint.innerHTML is htmlString
+PASS subtreeRoot is anchorPoint.firstChild
+PASS subtreeRoot.parentNode is anchorPoint
+PASS innerElement.parentNode is subtreeRoot
+PASS textNode.parentNode is innerElement
+PASS subtreeRoot.hasCustomProperty is true
+PASS innerElement.hasCustomProperty is true
+PASS textNode.hasCustomProperty is true
+PASS anchorPoint.firstChild.hasCustomProperty is true
+PASS anchorPoint.firstChild.firstChild.hasCustomProperty is true
+PASS anchorPoint.firstChild.firstChild.firstChild.hasCustomProperty is true
+
+Setting anchorPoint.innerHTML to identical DOM, subtree should become detached.
+
+PASS anchorPoint.innerHTML is htmlString
+PASS subtreeRoot is not anchorPoint.firstChild
+PASS subtreeRoot.parentNode is null
+PASS innerElement.parentNode is subtreeRoot
+PASS textNode.parentNode is innerElement
+PASS subtreeRoot.hasCustomProperty is true
+PASS innerElement.hasCustomProperty is true
+PASS textNode.hasCustomProperty is true
+PASS anchorPoint.firstChild.hasCustomProperty is not true
+PASS anchorPoint.firstChild.firstChild.hasCustomProperty is not true
+PASS anchorPoint.firstChild.firstChild.firstChild.hasCustomProperty is not true
+
+Testing with subtree: <canvas><span>text here</span></canvas>
+
+PASS anchorPoint.innerHTML is htmlString
+PASS subtreeRoot is anchorPoint.firstChild
+PASS subtreeRoot.parentNode is anchorPoint
+PASS innerElement.parentNode is subtreeRoot
+PASS textNode.parentNode is innerElement
+PASS subtreeRoot.hasCustomProperty is true
+PASS innerElement.hasCustomProperty is true
+PASS textNode.hasCustomProperty is true
+PASS anchorPoint.firstChild.hasCustomProperty is true
+PASS anchorPoint.firstChild.firstChild.hasCustomProperty is true
+PASS anchorPoint.firstChild.firstChild.firstChild.hasCustomProperty is true
+
+Setting anchorPoint.innerHTML to identical DOM, subtree should become detached.
+
+PASS anchorPoint.innerHTML is htmlString
+PASS subtreeRoot is not anchorPoint.firstChild
+PASS subtreeRoot.parentNode is null
+PASS innerElement.parentNode is subtreeRoot
+PASS textNode.parentNode is innerElement
+PASS subtreeRoot.hasCustomProperty is true
+PASS innerElement.hasCustomProperty is true
+PASS textNode.hasCustomProperty is true
+PASS anchorPoint.firstChild.hasCustomProperty is not true
+PASS anchorPoint.firstChild.firstChild.hasCustomProperty is not true
+PASS anchorPoint.firstChild.firstChild.firstChild.hasCustomProperty is not true
+
+Testing with subtree: <canvas><object>text here</object></canvas>
+
+PASS anchorPoint.innerHTML is htmlString
+PASS subtreeRoot is anchorPoint.firstChild
+PASS subtreeRoot.parentNode is anchorPoint
+PASS innerElement.parentNode is subtreeRoot
+PASS textNode.parentNode is innerElement
+PASS subtreeRoot.hasCustomProperty is true
+PASS innerElement.hasCustomProperty is true
+PASS textNode.hasCustomProperty is true
+PASS anchorPoint.firstChild.hasCustomProperty is true
+PASS anchorPoint.firstChild.firstChild.hasCustomProperty is true
+PASS anchorPoint.firstChild.firstChild.firstChild.hasCustomProperty is true
+
+Setting anchorPoint.innerHTML to identical DOM, subtree should become detached.
+
+PASS anchorPoint.innerHTML is htmlString
+PASS subtreeRoot is not anchorPoint.firstChild
+PASS subtreeRoot.parentNode is null
+PASS innerElement.parentNode is subtreeRoot
+PASS textNode.parentNode is innerElement
+PASS subtreeRoot.hasCustomProperty is true
+PASS innerElement.hasCustomProperty is true
+PASS textNode.hasCustomProperty is true
+PASS anchorPoint.firstChild.hasCustomProperty is not true
+PASS anchorPoint.firstChild.firstChild.hasCustomProperty is not true
+PASS anchorPoint.firstChild.firstChild.firstChild.hasCustomProperty is not true
+
+Testing with subtree: <canvas><a>text here</a></canvas>
+
+PASS anchorPoint.innerHTML is htmlString
+PASS subtreeRoot is anchorPoint.firstChild
+PASS subtreeRoot.parentNode is anchorPoint
+PASS innerElement.parentNode is subtreeRoot
+PASS textNode.parentNode is innerElement
+PASS subtreeRoot.hasCustomProperty is true
+PASS innerElement.hasCustomProperty is true
+PASS textNode.hasCustomProperty is true
+PASS anchorPoint.firstChild.hasCustomProperty is true
+PASS anchorPoint.firstChild.firstChild.hasCustomProperty is true
+PASS anchorPoint.firstChild.firstChild.firstChild.hasCustomProperty is true
+
+Setting anchorPoint.innerHTML to identical DOM, subtree should become detached.
+
+PASS anchorPoint.innerHTML is htmlString
+PASS subtreeRoot is not anchorPoint.firstChild
+PASS subtreeRoot.parentNode is null
+PASS innerElement.parentNode is subtreeRoot
+PASS textNode.parentNode is innerElement
+PASS subtreeRoot.hasCustomProperty is true
+PASS innerElement.hasCustomProperty is true
+PASS textNode.hasCustomProperty is true
+PASS anchorPoint.firstChild.hasCustomProperty is not true
+PASS anchorPoint.firstChild.firstChild.hasCustomProperty is not true
+PASS anchorPoint.firstChild.firstChild.firstChild.hasCustomProperty is not true
+
+Testing with subtree: <object><a>text here</a></object>
+
+PASS anchorPoint.innerHTML is htmlString
+PASS subtreeRoot is anchorPoint.firstChild
+PASS subtreeRoot.parentNode is anchorPoint
+PASS innerElement.parentNode is subtreeRoot
+PASS textNode.parentNode is innerElement
+PASS subtreeRoot.hasCustomProperty is true
+PASS innerElement.hasCustomProperty is true
+PASS textNode.hasCustomProperty is true
+PASS anchorPoint.firstChild.hasCustomProperty is true
+PASS anchorPoint.firstChild.firstChild.hasCustomProperty is true
+PASS anchorPoint.firstChild.firstChild.firstChild.hasCustomProperty is true
+
+Setting anchorPoint.innerHTML to identical DOM, subtree should become detached.
+
+PASS anchorPoint.innerHTML is htmlString
+PASS subtreeRoot is not anchorPoint.firstChild
+PASS subtreeRoot.parentNode is null
+PASS innerElement.parentNode is subtreeRoot
+PASS textNode.parentNode is innerElement
+PASS subtreeRoot.hasCustomProperty is true
+PASS innerElement.hasCustomProperty is true
+PASS textNode.hasCustomProperty is true
+PASS anchorPoint.firstChild.hasCustomProperty is not true
+PASS anchorPoint.firstChild.firstChild.hasCustomProperty is not true
+PASS anchorPoint.firstChild.firstChild.firstChild.hasCustomProperty is not true
+
+Testing with subtree: <object><b>text here</b></object>
+
+PASS anchorPoint.innerHTML is htmlString
+PASS subtreeRoot is anchorPoint.firstChild
+PASS subtreeRoot.parentNode is anchorPoint
+PASS innerElement.parentNode is subtreeRoot
+PASS textNode.parentNode is innerElement
+PASS subtreeRoot.hasCustomProperty is true
+PASS innerElement.hasCustomProperty is true
+PASS textNode.hasCustomProperty is true
+PASS anchorPoint.firstChild.hasCustomProperty is true
+PASS anchorPoint.firstChild.firstChild.hasCustomProperty is true
+PASS anchorPoint.firstChild.firstChild.firstChild.hasCustomProperty is true
+
+Setting anchorPoint.innerHTML to identical DOM, subtree should become detached.
+
+PASS anchorPoint.innerHTML is htmlString
+PASS subtreeRoot is not anchorPoint.firstChild
+PASS subtreeRoot.parentNode is null
+PASS innerElement.parentNode is subtreeRoot
+PASS textNode.parentNode is innerElement
+PASS subtreeRoot.hasCustomProperty is true
+PASS innerElement.hasCustomProperty is true
+PASS textNode.hasCustomProperty is true
+PASS anchorPoint.firstChild.hasCustomProperty is not true
+PASS anchorPoint.firstChild.firstChild.hasCustomProperty is not true
+PASS anchorPoint.firstChild.firstChild.firstChild.hasCustomProperty is not true
+
+Testing with subtree: <object><i>text here</i></object>
+
+PASS anchorPoint.innerHTML is htmlString
+PASS subtreeRoot is anchorPoint.firstChild
+PASS subtreeRoot.parentNode is anchorPoint
+PASS innerElement.parentNode is subtreeRoot
+PASS textNode.parentNode is innerElement
+PASS subtreeRoot.hasCustomProperty is true
+PASS innerElement.hasCustomProperty is true
+PASS textNode.hasCustomProperty is true
+PASS anchorPoint.firstChild.hasCustomProperty is true
+PASS anchorPoint.firstChild.firstChild.hasCustomProperty is true
+PASS anchorPoint.firstChild.firstChild.firstChild.hasCustomProperty is true
+
+Setting anchorPoint.innerHTML to identical DOM, subtree should become detached.
+
+PASS anchorPoint.innerHTML is htmlString
+PASS subtreeRoot is not anchorPoint.firstChild
+PASS subtreeRoot.parentNode is null
+PASS innerElement.parentNode is subtreeRoot
+PASS textNode.parentNode is innerElement
+PASS subtreeRoot.hasCustomProperty is true
+PASS innerElement.hasCustomProperty is true
+PASS textNode.hasCustomProperty is true
+PASS anchorPoint.firstChild.hasCustomProperty is not true
+PASS anchorPoint.firstChild.firstChild.hasCustomProperty is not true
+PASS anchorPoint.firstChild.firstChild.firstChild.hasCustomProperty is not true
+
+Testing with subtree: <object><u>text here</u></object>
+
+PASS anchorPoint.innerHTML is htmlString
+PASS subtreeRoot is anchorPoint.firstChild
+PASS subtreeRoot.parentNode is anchorPoint
+PASS innerElement.parentNode is subtreeRoot
+PASS textNode.parentNode is innerElement
+PASS subtreeRoot.hasCustomProperty is true
+PASS innerElement.hasCustomProperty is true
+PASS textNode.hasCustomProperty is true
+PASS anchorPoint.firstChild.hasCustomProperty is true
+PASS anchorPoint.firstChild.firstChild.hasCustomProperty is true
+PASS anchorPoint.firstChild.firstChild.firstChild.hasCustomProperty is true
+
+Setting anchorPoint.innerHTML to identical DOM, subtree should become detached.
+
+PASS anchorPoint.innerHTML is htmlString
+PASS subtreeRoot is not anchorPoint.firstChild
+PASS subtreeRoot.parentNode is null
+PASS innerElement.parentNode is subtreeRoot
+PASS textNode.parentNode is innerElement
+PASS subtreeRoot.hasCustomProperty is true
+PASS innerElement.hasCustomProperty is true
+PASS textNode.hasCustomProperty is true
+PASS anchorPoint.firstChild.hasCustomProperty is not true
+PASS anchorPoint.firstChild.firstChild.hasCustomProperty is not true
+PASS anchorPoint.firstChild.firstChild.firstChild.hasCustomProperty is not true
+
+Testing with subtree: <object><div>text here</div></object>
+
+PASS anchorPoint.innerHTML is htmlString
+PASS subtreeRoot is anchorPoint.firstChild
+PASS subtreeRoot.parentNode is anchorPoint
+PASS innerElement.parentNode is subtreeRoot
+PASS textNode.parentNode is innerElement
+PASS subtreeRoot.hasCustomProperty is true
+PASS innerElement.hasCustomProperty is true
+PASS textNode.hasCustomProperty is true
+PASS anchorPoint.firstChild.hasCustomProperty is true
+PASS anchorPoint.firstChild.firstChild.hasCustomProperty is true
+PASS anchorPoint.firstChild.firstChild.firstChild.hasCustomProperty is true
+
+Setting anchorPoint.innerHTML to identical DOM, subtree should become detached.
+
+PASS anchorPoint.innerHTML is htmlString
+PASS subtreeRoot is not anchorPoint.firstChild
+PASS subtreeRoot.parentNode is null
+PASS innerElement.parentNode is subtreeRoot
+PASS textNode.parentNode is innerElement
+PASS subtreeRoot.hasCustomProperty is true
+PASS innerElement.hasCustomProperty is true
+PASS textNode.hasCustomProperty is true
+PASS anchorPoint.firstChild.hasCustomProperty is not true
+PASS anchorPoint.firstChild.firstChild.hasCustomProperty is not true
+PASS anchorPoint.firstChild.firstChild.firstChild.hasCustomProperty is not true
+
+Testing with subtree: <object><span>text here</span></object>
+
+PASS anchorPoint.innerHTML is htmlString
+PASS subtreeRoot is anchorPoint.firstChild
+PASS subtreeRoot.parentNode is anchorPoint
+PASS innerElement.parentNode is subtreeRoot
+PASS textNode.parentNode is innerElement
+PASS subtreeRoot.hasCustomProperty is true
+PASS innerElement.hasCustomProperty is true
+PASS textNode.hasCustomProperty is true
+PASS anchorPoint.firstChild.hasCustomProperty is true
+PASS anchorPoint.firstChild.firstChild.hasCustomProperty is true
+PASS anchorPoint.firstChild.firstChild.firstChild.hasCustomProperty is true
+
+Setting anchorPoint.innerHTML to identical DOM, subtree should become detached.
+
+PASS anchorPoint.innerHTML is htmlString
+PASS subtreeRoot is not anchorPoint.firstChild
+PASS subtreeRoot.parentNode is null
+PASS innerElement.parentNode is subtreeRoot
+PASS textNode.parentNode is innerElement
+PASS subtreeRoot.hasCustomProperty is true
+PASS innerElement.hasCustomProperty is true
+PASS textNode.hasCustomProperty is true
+PASS anchorPoint.firstChild.hasCustomProperty is not true
+PASS anchorPoint.firstChild.firstChild.hasCustomProperty is not true
+PASS anchorPoint.firstChild.firstChild.firstChild.hasCustomProperty is not true
+
+Testing with subtree: <object><canvas>text here</canvas></object>
+
+PASS anchorPoint.innerHTML is htmlString
+PASS subtreeRoot is anchorPoint.firstChild
+PASS subtreeRoot.parentNode is anchorPoint
+PASS innerElement.parentNode is subtreeRoot
+PASS textNode.parentNode is innerElement
+PASS subtreeRoot.hasCustomProperty is true
+PASS innerElement.hasCustomProperty is true
+PASS textNode.hasCustomProperty is true
+PASS anchorPoint.firstChild.hasCustomProperty is true
+PASS anchorPoint.firstChild.firstChild.hasCustomProperty is true
+PASS anchorPoint.firstChild.firstChild.firstChild.hasCustomProperty is true
+
+Setting anchorPoint.innerHTML to identical DOM, subtree should become detached.
+
+PASS anchorPoint.innerHTML is htmlString
+PASS subtreeRoot is not anchorPoint.firstChild
+PASS subtreeRoot.parentNode is null
+PASS innerElement.parentNode is subtreeRoot
+PASS textNode.parentNode is innerElement
+PASS subtreeRoot.hasCustomProperty is true
+PASS innerElement.hasCustomProperty is true
+PASS textNode.hasCustomProperty is true
+PASS anchorPoint.firstChild.hasCustomProperty is not true
+PASS anchorPoint.firstChild.firstChild.hasCustomProperty is not true
+PASS anchorPoint.firstChild.firstChild.firstChild.hasCustomProperty is not true
+
+Testing with subtree: <object><a>text here</a></object>
+
+PASS anchorPoint.innerHTML is htmlString
+PASS subtreeRoot is anchorPoint.firstChild
+PASS subtreeRoot.parentNode is anchorPoint
+PASS innerElement.parentNode is subtreeRoot
+PASS textNode.parentNode is innerElement
+PASS subtreeRoot.hasCustomProperty is true
+PASS innerElement.hasCustomProperty is true
+PASS textNode.hasCustomProperty is true
+PASS anchorPoint.firstChild.hasCustomProperty is true
+PASS anchorPoint.firstChild.firstChild.hasCustomProperty is true
+PASS anchorPoint.firstChild.firstChild.firstChild.hasCustomProperty is true
+
+Setting anchorPoint.innerHTML to identical DOM, subtree should become detached.
+
+PASS anchorPoint.innerHTML is htmlString
+PASS subtreeRoot is not anchorPoint.firstChild
+PASS subtreeRoot.parentNode is null
+PASS innerElement.parentNode is subtreeRoot
+PASS textNode.parentNode is innerElement
+PASS subtreeRoot.hasCustomProperty is true
+PASS innerElement.hasCustomProperty is true
+PASS textNode.hasCustomProperty is true
+PASS anchorPoint.firstChild.hasCustomProperty is not true
+PASS anchorPoint.firstChild.firstChild.hasCustomProperty is not true
+PASS anchorPoint.firstChild.firstChild.firstChild.hasCustomProperty is not true
+
+Testing with subtree: <a><b>text here</b></a>
+
+PASS anchorPoint.innerHTML is htmlString
+PASS subtreeRoot is anchorPoint.firstChild
+PASS subtreeRoot.parentNode is anchorPoint
+PASS innerElement.parentNode is subtreeRoot
+PASS textNode.parentNode is innerElement
+PASS subtreeRoot.hasCustomProperty is true
+PASS innerElement.hasCustomProperty is true
+PASS textNode.hasCustomProperty is true
+PASS anchorPoint.firstChild.hasCustomProperty is true
+PASS anchorPoint.firstChild.firstChild.hasCustomProperty is true
+PASS anchorPoint.firstChild.firstChild.firstChild.hasCustomProperty is true
+
+Setting anchorPoint.innerHTML to identical DOM, subtree should become detached.
+
+PASS anchorPoint.innerHTML is htmlString
+PASS subtreeRoot is not anchorPoint.firstChild
+PASS subtreeRoot.parentNode is null
+PASS innerElement.parentNode is subtreeRoot
+PASS textNode.parentNode is innerElement
+PASS subtreeRoot.hasCustomProperty is true
+PASS innerElement.hasCustomProperty is true
+PASS textNode.hasCustomProperty is true
+PASS anchorPoint.firstChild.hasCustomProperty is not true
+PASS anchorPoint.firstChild.firstChild.hasCustomProperty is not true
+PASS anchorPoint.firstChild.firstChild.firstChild.hasCustomProperty is not true
+
+Testing with subtree: <a><i>text here</i></a>
+
+PASS anchorPoint.innerHTML is htmlString
+PASS subtreeRoot is anchorPoint.firstChild
+PASS subtreeRoot.parentNode is anchorPoint
+PASS innerElement.parentNode is subtreeRoot
+PASS textNode.parentNode is innerElement
+PASS subtreeRoot.hasCustomProperty is true
+PASS innerElement.hasCustomProperty is true
+PASS textNode.hasCustomProperty is true
+PASS anchorPoint.firstChild.hasCustomProperty is true
+PASS anchorPoint.firstChild.firstChild.hasCustomProperty is true
+PASS anchorPoint.firstChild.firstChild.firstChild.hasCustomProperty is true
+
+Setting anchorPoint.innerHTML to identical DOM, subtree should become detached.
+
+PASS anchorPoint.innerHTML is htmlString
+PASS subtreeRoot is not anchorPoint.firstChild
+PASS subtreeRoot.parentNode is null
+PASS innerElement.parentNode is subtreeRoot
+PASS textNode.parentNode is innerElement
+PASS subtreeRoot.hasCustomProperty is true
+PASS innerElement.hasCustomProperty is true
+PASS textNode.hasCustomProperty is true
+PASS anchorPoint.firstChild.hasCustomProperty is not true
+PASS anchorPoint.firstChild.firstChild.hasCustomProperty is not true
+PASS anchorPoint.firstChild.firstChild.firstChild.hasCustomProperty is not true
+
+Testing with subtree: <a><u>text here</u></a>
+
+PASS anchorPoint.innerHTML is htmlString
+PASS subtreeRoot is anchorPoint.firstChild
+PASS subtreeRoot.parentNode is anchorPoint
+PASS innerElement.parentNode is subtreeRoot
+PASS textNode.parentNode is innerElement
+PASS subtreeRoot.hasCustomProperty is true
+PASS innerElement.hasCustomProperty is true
+PASS textNode.hasCustomProperty is true
+PASS anchorPoint.firstChild.hasCustomProperty is true
+PASS anchorPoint.firstChild.firstChild.hasCustomProperty is true
+PASS anchorPoint.firstChild.firstChild.firstChild.hasCustomProperty is true
+
+Setting anchorPoint.innerHTML to identical DOM, subtree should become detached.
+
+PASS anchorPoint.innerHTML is htmlString
+PASS subtreeRoot is not anchorPoint.firstChild
+PASS subtreeRoot.parentNode is null
+PASS innerElement.parentNode is subtreeRoot
+PASS textNode.parentNode is innerElement
+PASS subtreeRoot.hasCustomProperty is true
+PASS innerElement.hasCustomProperty is true
+PASS textNode.hasCustomProperty is true
+PASS anchorPoint.firstChild.hasCustomProperty is not true
+PASS anchorPoint.firstChild.firstChild.hasCustomProperty is not true
+PASS anchorPoint.firstChild.firstChild.firstChild.hasCustomProperty is not true
+
+Testing with subtree: <a><div>text here</div></a>
+
+PASS anchorPoint.innerHTML is htmlString
+PASS subtreeRoot is anchorPoint.firstChild
+PASS subtreeRoot.parentNode is anchorPoint
+PASS innerElement.parentNode is subtreeRoot
+PASS textNode.parentNode is innerElement
+PASS subtreeRoot.hasCustomProperty is true
+PASS innerElement.hasCustomProperty is true
+PASS textNode.hasCustomProperty is true
+PASS anchorPoint.firstChild.hasCustomProperty is true
+PASS anchorPoint.firstChild.firstChild.hasCustomProperty is true
+PASS anchorPoint.firstChild.firstChild.firstChild.hasCustomProperty is true
+
+Setting anchorPoint.innerHTML to identical DOM, subtree should become detached.
+
+PASS anchorPoint.innerHTML is htmlString
+PASS subtreeRoot is not anchorPoint.firstChild
+PASS subtreeRoot.parentNode is null
+PASS innerElement.parentNode is subtreeRoot
+PASS textNode.parentNode is innerElement
+PASS subtreeRoot.hasCustomProperty is true
+PASS innerElement.hasCustomProperty is true
+PASS textNode.hasCustomProperty is true
+PASS anchorPoint.firstChild.hasCustomProperty is not true
+PASS anchorPoint.firstChild.firstChild.hasCustomProperty is not true
+PASS anchorPoint.firstChild.firstChild.firstChild.hasCustomProperty is not true
+
+Testing with subtree: <a><span>text here</span></a>
+
+PASS anchorPoint.innerHTML is htmlString
+PASS subtreeRoot is anchorPoint.firstChild
+PASS subtreeRoot.parentNode is anchorPoint
+PASS innerElement.parentNode is subtreeRoot
+PASS textNode.parentNode is innerElement
+PASS subtreeRoot.hasCustomProperty is true
+PASS innerElement.hasCustomProperty is true
+PASS textNode.hasCustomProperty is true
+PASS anchorPoint.firstChild.hasCustomProperty is true
+PASS anchorPoint.firstChild.firstChild.hasCustomProperty is true
+PASS anchorPoint.firstChild.firstChild.firstChild.hasCustomProperty is true
+
+Setting anchorPoint.innerHTML to identical DOM, subtree should become detached.
+
+PASS anchorPoint.innerHTML is htmlString
+PASS subtreeRoot is not anchorPoint.firstChild
+PASS subtreeRoot.parentNode is null
+PASS innerElement.parentNode is subtreeRoot
+PASS textNode.parentNode is innerElement
+PASS subtreeRoot.hasCustomProperty is true
+PASS innerElement.hasCustomProperty is true
+PASS textNode.hasCustomProperty is true
+PASS anchorPoint.firstChild.hasCustomProperty is not true
+PASS anchorPoint.firstChild.firstChild.hasCustomProperty is not true
+PASS anchorPoint.firstChild.firstChild.firstChild.hasCustomProperty is not true
+
+Testing with subtree: <a><canvas>text here</canvas></a>
+
+PASS anchorPoint.innerHTML is htmlString
+PASS subtreeRoot is anchorPoint.firstChild
+PASS subtreeRoot.parentNode is anchorPoint
+PASS innerElement.parentNode is subtreeRoot
+PASS textNode.parentNode is innerElement
+PASS subtreeRoot.hasCustomProperty is true
+PASS innerElement.hasCustomProperty is true
+PASS textNode.hasCustomProperty is true
+PASS anchorPoint.firstChild.hasCustomProperty is true
+PASS anchorPoint.firstChild.firstChild.hasCustomProperty is true
+PASS anchorPoint.firstChild.firstChild.firstChild.hasCustomProperty is true
+
+Setting anchorPoint.innerHTML to identical DOM, subtree should become detached.
+
+PASS anchorPoint.innerHTML is htmlString
+PASS subtreeRoot is not anchorPoint.firstChild
+PASS subtreeRoot.parentNode is null
+PASS innerElement.parentNode is subtreeRoot
+PASS textNode.parentNode is innerElement
+PASS subtreeRoot.hasCustomProperty is true
+PASS innerElement.hasCustomProperty is true
+PASS textNode.hasCustomProperty is true
+PASS anchorPoint.firstChild.hasCustomProperty is not true
+PASS anchorPoint.firstChild.firstChild.hasCustomProperty is not true
+PASS anchorPoint.firstChild.firstChild.firstChild.hasCustomProperty is not true
+
+Testing with subtree: <a><object>text here</object></a>
+
+PASS anchorPoint.innerHTML is htmlString
+PASS subtreeRoot is anchorPoint.firstChild
+PASS subtreeRoot.parentNode is anchorPoint
+PASS innerElement.parentNode is subtreeRoot
+PASS textNode.parentNode is innerElement
+PASS subtreeRoot.hasCustomProperty is true
+PASS innerElement.hasCustomProperty is true
+PASS textNode.hasCustomProperty is true
+PASS anchorPoint.firstChild.hasCustomProperty is true
+PASS anchorPoint.firstChild.firstChild.hasCustomProperty is true
+PASS anchorPoint.firstChild.firstChild.firstChild.hasCustomProperty is true
+
+Setting anchorPoint.innerHTML to identical DOM, subtree should become detached.
+
+PASS anchorPoint.innerHTML is htmlString
+PASS subtreeRoot is not anchorPoint.firstChild
+PASS subtreeRoot.parentNode is null
+PASS innerElement.parentNode is subtreeRoot
+PASS textNode.parentNode is innerElement
+PASS subtreeRoot.hasCustomProperty is true
+PASS innerElement.hasCustomProperty is true
+PASS textNode.hasCustomProperty is true
+PASS anchorPoint.firstChild.hasCustomProperty is not true
+PASS anchorPoint.firstChild.firstChild.hasCustomProperty is not true
+PASS anchorPoint.firstChild.firstChild.firstChild.hasCustomProperty is not true
+PASS successfullyParsed is true
+
+TEST COMPLETE
+

Added: trunk/LayoutTests/fast/innerHTML/identical-mutations.html (0 => 174828)


--- trunk/LayoutTests/fast/innerHTML/identical-mutations.html	                        (rev 0)
+++ trunk/LayoutTests/fast/innerHTML/identical-mutations.html	2014-10-17 19:16:51 UTC (rev 174828)
@@ -0,0 +1,79 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<script src=""
+</head>
+<body>
+<div id="anchor"></div>
+<script>
+
+description("This test checks that setting an element's .innerHTML to an identical subtree correctly detaches the replaced nodes from the document, and that any references to that subtree continue to work as expected, with custom properties intact.");
+
+function test(rootTagName, innerTagName)
+{
+    htmlString = "<" + rootTagName + "><" + innerTagName + ">text here</" + innerTagName + "></" + rootTagName + ">";
+
+    subtreeRoot = document.createElement(rootTagName);
+    innerElement = document.createElement(innerTagName);
+    subtreeRoot.appendChild(innerElement);
+    textNode = document.createTextNode("text here");
+    innerElement.appendChild(textNode);
+
+    subtreeRoot.hasCustomProperty = true;
+    innerElement.hasCustomProperty = true;
+    textNode.hasCustomProperty = true;
+
+    anchorPoint = document.getElementById("anchor");
+    anchorPoint.appendChild(subtreeRoot);
+
+    htmlescaped = escape(htmlString).replace(/%(..)/g,"&#x$1;");
+    debug("\nTesting with subtree: " + htmlescaped + "\n");
+
+    shouldBe("anchorPoint.innerHTML", "htmlString");
+
+    shouldBe("subtreeRoot", "anchorPoint.firstChild");
+    shouldBe("subtreeRoot.parentNode", "anchorPoint");
+    shouldBe("innerElement.parentNode", "subtreeRoot");
+    shouldBe("textNode.parentNode", "innerElement");
+    shouldBe("subtreeRoot.hasCustomProperty", "true");
+    shouldBe("innerElement.hasCustomProperty", "true");
+    shouldBe("textNode.hasCustomProperty", "true");
+    shouldBe("anchorPoint.firstChild.hasCustomProperty", "true");
+    shouldBe("anchorPoint.firstChild.firstChild.hasCustomProperty", "true");
+    shouldBe("anchorPoint.firstChild.firstChild.firstChild.hasCustomProperty", "true");
+
+    debug("\nSetting anchorPoint.innerHTML to identical DOM, subtree should become detached.\n");
+    anchorPoint.innerHTML = htmlString;
+
+    shouldBe("anchorPoint.innerHTML", "htmlString");
+    shouldNotBe("subtreeRoot", "anchorPoint.firstChild");
+    shouldBe("subtreeRoot.parentNode", "null");
+    shouldBe("innerElement.parentNode", "subtreeRoot");
+    shouldBe("textNode.parentNode", "innerElement");
+    shouldBe("subtreeRoot.hasCustomProperty", "true");
+    shouldBe("innerElement.hasCustomProperty", "true");
+    shouldBe("textNode.hasCustomProperty", "true");
+    shouldNotBe("anchorPoint.firstChild.hasCustomProperty", "true");
+    shouldNotBe("anchorPoint.firstChild.firstChild.hasCustomProperty", "true");
+    shouldNotBe("anchorPoint.firstChild.firstChild.firstChild.hasCustomProperty", "true");
+
+    anchorPoint.innerHTML = '';
+}
+
+tags = [ 'a', 'b', 'i', 'u', 'div', 'span', 'canvas', 'object', 'a' ];
+
+for (var i = 0; i < tags.length; ++i) {
+    for (var j = 0; j < tags.length; ++j) {
+        // Skip doing <foo><foo>text</foo></foo> since the parser will
+        // do tree fixup in some cases and break the test function.
+        if (tags[i] == tags[j])
+            continue;
+        test(tags[i], tags[j]);
+    }
+}
+
+</script>
+<script src=""
+</body>
+</html>
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to