<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>[174828] trunk/LayoutTests</title>
</head>
<body>

<style type="text/css"><!--
#msg dl.meta { border: 1px #006 solid; background: #369; padding: 6px; color: #fff; }
#msg dl.meta dt { float: left; width: 6em; font-weight: bold; }
#msg dt:after { content:':';}
#msg dl, #msg dt, #msg ul, #msg li, #header, #footer, #logmsg { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt;  }
#msg dl a { font-weight: bold}
#msg dl a:link    { color:#fc3; }
#msg dl a:active  { color:#ff0; }
#msg dl a:visited { color:#cc6; }
h3 { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; font-weight: bold; }
#msg pre { overflow: auto; background: #ffc; border: 1px #fa0 solid; padding: 6px; }
#logmsg { background: #ffc; border: 1px #fa0 solid; padding: 1em 1em 0 1em; }
#logmsg p, #logmsg pre, #logmsg blockquote { margin: 0 0 1em 0; }
#logmsg p, #logmsg li, #logmsg dt, #logmsg dd { line-height: 14pt; }
#logmsg h1, #logmsg h2, #logmsg h3, #logmsg h4, #logmsg h5, #logmsg h6 { margin: .5em 0; }
#logmsg h1:first-child, #logmsg h2:first-child, #logmsg h3:first-child, #logmsg h4:first-child, #logmsg h5:first-child, #logmsg h6:first-child { margin-top: 0; }
#logmsg ul, #logmsg ol { padding: 0; list-style-position: inside; margin: 0 0 0 1em; }
#logmsg ul { text-indent: -1em; padding-left: 1em; }#logmsg ol { text-indent: -1.5em; padding-left: 1.5em; }
#logmsg > ul, #logmsg > ol { margin: 0 0 1em 0; }
#logmsg pre { background: #eee; padding: 1em; }
#logmsg blockquote { border: 1px solid #fa0; border-left-width: 10px; padding: 1em 1em 0 1em; background: white;}
#logmsg dl { margin: 0; }
#logmsg dt { font-weight: bold; }
#logmsg dd { margin: 0; padding: 0 0 0.5em 0; }
#logmsg dd:before { content:'\00bb';}
#logmsg table { border-spacing: 0px; border-collapse: collapse; border-top: 4px solid #fa0; border-bottom: 1px solid #fa0; background: #fff; }
#logmsg table th { text-align: left; font-weight: normal; padding: 0.2em 0.5em; border-top: 1px dotted #fa0; }
#logmsg table td { text-align: right; border-top: 1px dotted #fa0; padding: 0.2em 0.5em; }
#logmsg table thead th { text-align: center; border-bottom: 1px solid #fa0; }
#logmsg table th.Corner { text-align: left; }
#logmsg hr { border: none 0; border-top: 2px dashed #fa0; height: 1px; }
#header, #footer { color: #fff; background: #636; border: 1px #300 solid; padding: 6px; }
#patch { width: 100%; }
#patch h4 {font-family: verdana,arial,helvetica,sans-serif;font-size:10pt;padding:8px;background:#369;color:#fff;margin:0;}
#patch .propset h4, #patch .binary h4 {margin:0;}
#patch pre {padding:0;line-height:1.2em;margin:0;}
#patch .diff {width:100%;background:#eee;padding: 0 0 10px 0;overflow:auto;}
#patch .propset .diff, #patch .binary .diff  {padding:10px 0;}
#patch span {display:block;padding:0 10px;}
#patch .modfile, #patch .addfile, #patch .delfile, #patch .propset, #patch .binary, #patch .copfile {border:1px solid #ccc;margin:10px 0;}
#patch ins {background:#dfd;text-decoration:none;display:block;padding:0 10px;}
#patch del {background:#fdd;text-decoration:none;display:block;padding:0 10px;}
#patch .lines, .info {color:#888;background:#fff;}
--></style>
<div id="msg">
<dl class="meta">
<dt>Revision</dt> <dd><a href="http://trac.webkit.org/projects/webkit/changeset/174828">174828</a></dd>
<dt>Author</dt> <dd>akling@apple.com</dd>
<dt>Date</dt> <dd>2014-10-17 12:16:51 -0700 (Fri, 17 Oct 2014)</dd>
</dl>

<h3>Log Message</h3>
<pre>Add test for innerHTML mutations that yield identical DOM.
&lt;https://webkit.org/b/137823&gt;

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:

    &lt;foo&gt;&lt;bar&gt;some text&lt;/bar&gt;&lt;/foo&gt;

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.</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkLayoutTestsChangeLog">trunk/LayoutTests/ChangeLog</a></li>
</ul>

<h3>Added Paths</h3>
<ul>
<li><a href="#trunkLayoutTestsfastinnerHTMLidenticalmutationsexpectedtxt">trunk/LayoutTests/fast/innerHTML/identical-mutations-expected.txt</a></li>
<li><a href="#trunkLayoutTestsfastinnerHTMLidenticalmutationshtml">trunk/LayoutTests/fast/innerHTML/identical-mutations.html</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkLayoutTestsChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/ChangeLog (174827 => 174828)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/ChangeLog        2014-10-17 18:49:02 UTC (rev 174827)
+++ trunk/LayoutTests/ChangeLog        2014-10-17 19:16:51 UTC (rev 174828)
</span><span class="lines">@@ -1,3 +1,26 @@
</span><ins>+2014-10-17  Andreas Kling  &lt;akling@apple.com&gt;
+
+        Add test for innerHTML mutations that yield identical DOM.
+        &lt;https://webkit.org/b/137823&gt;
+
+        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:
+
+            &lt;foo&gt;&lt;bar&gt;some text&lt;/bar&gt;&lt;/foo&gt;
+
+        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.
+
</ins><span class="cx"> 2014-10-16  Jer Noble  &lt;jer.noble@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         [Mac] Represent AVMediaSelectionOptions as AudioTracks
</span></span></pre></div>
<a id="trunkLayoutTestsfastinnerHTMLidenticalmutationsexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/fast/innerHTML/identical-mutations-expected.txt (0 => 174828)</h4>
<pre class="diff"><span>
<span class="info">--- 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)
</span><span class="lines">@@ -0,0 +1,1969 @@
</span><ins>+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 &quot;PASS&quot; messages, followed by &quot;TEST COMPLETE&quot;.
+
+
+
+Testing with subtree: &lt;a&gt;&lt;b&gt;text here&lt;/b&gt;&lt;/a&gt;
+
+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: &lt;a&gt;&lt;i&gt;text here&lt;/i&gt;&lt;/a&gt;
+
+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: &lt;a&gt;&lt;u&gt;text here&lt;/u&gt;&lt;/a&gt;
+
+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: &lt;a&gt;&lt;div&gt;text here&lt;/div&gt;&lt;/a&gt;
+
+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: &lt;a&gt;&lt;span&gt;text here&lt;/span&gt;&lt;/a&gt;
+
+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: &lt;a&gt;&lt;canvas&gt;text here&lt;/canvas&gt;&lt;/a&gt;
+
+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: &lt;a&gt;&lt;object&gt;text here&lt;/object&gt;&lt;/a&gt;
+
+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: &lt;b&gt;&lt;a&gt;text here&lt;/a&gt;&lt;/b&gt;
+
+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: &lt;b&gt;&lt;i&gt;text here&lt;/i&gt;&lt;/b&gt;
+
+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: &lt;b&gt;&lt;u&gt;text here&lt;/u&gt;&lt;/b&gt;
+
+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: &lt;b&gt;&lt;div&gt;text here&lt;/div&gt;&lt;/b&gt;
+
+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: &lt;b&gt;&lt;span&gt;text here&lt;/span&gt;&lt;/b&gt;
+
+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: &lt;b&gt;&lt;canvas&gt;text here&lt;/canvas&gt;&lt;/b&gt;
+
+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: &lt;b&gt;&lt;object&gt;text here&lt;/object&gt;&lt;/b&gt;
+
+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: &lt;b&gt;&lt;a&gt;text here&lt;/a&gt;&lt;/b&gt;
+
+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: &lt;i&gt;&lt;a&gt;text here&lt;/a&gt;&lt;/i&gt;
+
+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: &lt;i&gt;&lt;b&gt;text here&lt;/b&gt;&lt;/i&gt;
+
+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: &lt;i&gt;&lt;u&gt;text here&lt;/u&gt;&lt;/i&gt;
+
+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: &lt;i&gt;&lt;div&gt;text here&lt;/div&gt;&lt;/i&gt;
+
+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: &lt;i&gt;&lt;span&gt;text here&lt;/span&gt;&lt;/i&gt;
+
+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: &lt;i&gt;&lt;canvas&gt;text here&lt;/canvas&gt;&lt;/i&gt;
+
+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: &lt;i&gt;&lt;object&gt;text here&lt;/object&gt;&lt;/i&gt;
+
+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: &lt;i&gt;&lt;a&gt;text here&lt;/a&gt;&lt;/i&gt;
+
+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: &lt;u&gt;&lt;a&gt;text here&lt;/a&gt;&lt;/u&gt;
+
+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: &lt;u&gt;&lt;b&gt;text here&lt;/b&gt;&lt;/u&gt;
+
+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: &lt;u&gt;&lt;i&gt;text here&lt;/i&gt;&lt;/u&gt;
+
+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: &lt;u&gt;&lt;div&gt;text here&lt;/div&gt;&lt;/u&gt;
+
+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: &lt;u&gt;&lt;span&gt;text here&lt;/span&gt;&lt;/u&gt;
+
+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: &lt;u&gt;&lt;canvas&gt;text here&lt;/canvas&gt;&lt;/u&gt;
+
+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: &lt;u&gt;&lt;object&gt;text here&lt;/object&gt;&lt;/u&gt;
+
+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: &lt;u&gt;&lt;a&gt;text here&lt;/a&gt;&lt;/u&gt;
+
+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: &lt;div&gt;&lt;a&gt;text here&lt;/a&gt;&lt;/div&gt;
+
+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: &lt;div&gt;&lt;b&gt;text here&lt;/b&gt;&lt;/div&gt;
+
+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: &lt;div&gt;&lt;i&gt;text here&lt;/i&gt;&lt;/div&gt;
+
+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: &lt;div&gt;&lt;u&gt;text here&lt;/u&gt;&lt;/div&gt;
+
+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: &lt;div&gt;&lt;span&gt;text here&lt;/span&gt;&lt;/div&gt;
+
+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: &lt;div&gt;&lt;canvas&gt;text here&lt;/canvas&gt;&lt;/div&gt;
+
+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: &lt;div&gt;&lt;object&gt;text here&lt;/object&gt;&lt;/div&gt;
+
+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: &lt;div&gt;&lt;a&gt;text here&lt;/a&gt;&lt;/div&gt;
+
+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: &lt;span&gt;&lt;a&gt;text here&lt;/a&gt;&lt;/span&gt;
+
+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: &lt;span&gt;&lt;b&gt;text here&lt;/b&gt;&lt;/span&gt;
+
+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: &lt;span&gt;&lt;i&gt;text here&lt;/i&gt;&lt;/span&gt;
+
+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: &lt;span&gt;&lt;u&gt;text here&lt;/u&gt;&lt;/span&gt;
+
+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: &lt;span&gt;&lt;div&gt;text here&lt;/div&gt;&lt;/span&gt;
+
+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: &lt;span&gt;&lt;canvas&gt;text here&lt;/canvas&gt;&lt;/span&gt;
+
+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: &lt;span&gt;&lt;object&gt;text here&lt;/object&gt;&lt;/span&gt;
+
+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: &lt;span&gt;&lt;a&gt;text here&lt;/a&gt;&lt;/span&gt;
+
+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: &lt;canvas&gt;&lt;a&gt;text here&lt;/a&gt;&lt;/canvas&gt;
+
+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: &lt;canvas&gt;&lt;b&gt;text here&lt;/b&gt;&lt;/canvas&gt;
+
+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: &lt;canvas&gt;&lt;i&gt;text here&lt;/i&gt;&lt;/canvas&gt;
+
+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: &lt;canvas&gt;&lt;u&gt;text here&lt;/u&gt;&lt;/canvas&gt;
+
+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: &lt;canvas&gt;&lt;div&gt;text here&lt;/div&gt;&lt;/canvas&gt;
+
+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: &lt;canvas&gt;&lt;span&gt;text here&lt;/span&gt;&lt;/canvas&gt;
+
+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: &lt;canvas&gt;&lt;object&gt;text here&lt;/object&gt;&lt;/canvas&gt;
+
+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: &lt;canvas&gt;&lt;a&gt;text here&lt;/a&gt;&lt;/canvas&gt;
+
+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: &lt;object&gt;&lt;a&gt;text here&lt;/a&gt;&lt;/object&gt;
+
+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: &lt;object&gt;&lt;b&gt;text here&lt;/b&gt;&lt;/object&gt;
+
+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: &lt;object&gt;&lt;i&gt;text here&lt;/i&gt;&lt;/object&gt;
+
+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: &lt;object&gt;&lt;u&gt;text here&lt;/u&gt;&lt;/object&gt;
+
+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: &lt;object&gt;&lt;div&gt;text here&lt;/div&gt;&lt;/object&gt;
+
+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: &lt;object&gt;&lt;span&gt;text here&lt;/span&gt;&lt;/object&gt;
+
+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: &lt;object&gt;&lt;canvas&gt;text here&lt;/canvas&gt;&lt;/object&gt;
+
+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: &lt;object&gt;&lt;a&gt;text here&lt;/a&gt;&lt;/object&gt;
+
+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: &lt;a&gt;&lt;b&gt;text here&lt;/b&gt;&lt;/a&gt;
+
+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: &lt;a&gt;&lt;i&gt;text here&lt;/i&gt;&lt;/a&gt;
+
+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: &lt;a&gt;&lt;u&gt;text here&lt;/u&gt;&lt;/a&gt;
+
+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: &lt;a&gt;&lt;div&gt;text here&lt;/div&gt;&lt;/a&gt;
+
+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: &lt;a&gt;&lt;span&gt;text here&lt;/span&gt;&lt;/a&gt;
+
+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: &lt;a&gt;&lt;canvas&gt;text here&lt;/canvas&gt;&lt;/a&gt;
+
+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: &lt;a&gt;&lt;object&gt;text here&lt;/object&gt;&lt;/a&gt;
+
+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
+
</ins></span></pre></div>
<a id="trunkLayoutTestsfastinnerHTMLidenticalmutationshtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/fast/innerHTML/identical-mutations.html (0 => 174828)</h4>
<pre class="diff"><span>
<span class="info">--- 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)
</span><span class="lines">@@ -0,0 +1,79 @@
</span><ins>+&lt;!DOCTYPE html&gt;
+&lt;html&gt;
+&lt;head&gt;
+&lt;meta charset=&quot;utf-8&quot;&gt;
+&lt;script src=&quot;../../resources/js-test-pre.js&quot;&gt;&lt;/script&gt;
+&lt;/head&gt;
+&lt;body&gt;
+&lt;div id=&quot;anchor&quot;&gt;&lt;/div&gt;
+&lt;script&gt;
+
+description(&quot;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.&quot;);
+
+function test(rootTagName, innerTagName)
+{
+    htmlString = &quot;&lt;&quot; + rootTagName + &quot;&gt;&lt;&quot; + innerTagName + &quot;&gt;text here&lt;/&quot; + innerTagName + &quot;&gt;&lt;/&quot; + rootTagName + &quot;&gt;&quot;;
+
+    subtreeRoot = document.createElement(rootTagName);
+    innerElement = document.createElement(innerTagName);
+    subtreeRoot.appendChild(innerElement);
+    textNode = document.createTextNode(&quot;text here&quot;);
+    innerElement.appendChild(textNode);
+
+    subtreeRoot.hasCustomProperty = true;
+    innerElement.hasCustomProperty = true;
+    textNode.hasCustomProperty = true;
+
+    anchorPoint = document.getElementById(&quot;anchor&quot;);
+    anchorPoint.appendChild(subtreeRoot);
+
+    htmlescaped = escape(htmlString).replace(/%(..)/g,&quot;&amp;#x$1;&quot;);
+    debug(&quot;\nTesting with subtree: &quot; + htmlescaped + &quot;\n&quot;);
+
+    shouldBe(&quot;anchorPoint.innerHTML&quot;, &quot;htmlString&quot;);
+
+    shouldBe(&quot;subtreeRoot&quot;, &quot;anchorPoint.firstChild&quot;);
+    shouldBe(&quot;subtreeRoot.parentNode&quot;, &quot;anchorPoint&quot;);
+    shouldBe(&quot;innerElement.parentNode&quot;, &quot;subtreeRoot&quot;);
+    shouldBe(&quot;textNode.parentNode&quot;, &quot;innerElement&quot;);
+    shouldBe(&quot;subtreeRoot.hasCustomProperty&quot;, &quot;true&quot;);
+    shouldBe(&quot;innerElement.hasCustomProperty&quot;, &quot;true&quot;);
+    shouldBe(&quot;textNode.hasCustomProperty&quot;, &quot;true&quot;);
+    shouldBe(&quot;anchorPoint.firstChild.hasCustomProperty&quot;, &quot;true&quot;);
+    shouldBe(&quot;anchorPoint.firstChild.firstChild.hasCustomProperty&quot;, &quot;true&quot;);
+    shouldBe(&quot;anchorPoint.firstChild.firstChild.firstChild.hasCustomProperty&quot;, &quot;true&quot;);
+
+    debug(&quot;\nSetting anchorPoint.innerHTML to identical DOM, subtree should become detached.\n&quot;);
+    anchorPoint.innerHTML = htmlString;
+
+    shouldBe(&quot;anchorPoint.innerHTML&quot;, &quot;htmlString&quot;);
+    shouldNotBe(&quot;subtreeRoot&quot;, &quot;anchorPoint.firstChild&quot;);
+    shouldBe(&quot;subtreeRoot.parentNode&quot;, &quot;null&quot;);
+    shouldBe(&quot;innerElement.parentNode&quot;, &quot;subtreeRoot&quot;);
+    shouldBe(&quot;textNode.parentNode&quot;, &quot;innerElement&quot;);
+    shouldBe(&quot;subtreeRoot.hasCustomProperty&quot;, &quot;true&quot;);
+    shouldBe(&quot;innerElement.hasCustomProperty&quot;, &quot;true&quot;);
+    shouldBe(&quot;textNode.hasCustomProperty&quot;, &quot;true&quot;);
+    shouldNotBe(&quot;anchorPoint.firstChild.hasCustomProperty&quot;, &quot;true&quot;);
+    shouldNotBe(&quot;anchorPoint.firstChild.firstChild.hasCustomProperty&quot;, &quot;true&quot;);
+    shouldNotBe(&quot;anchorPoint.firstChild.firstChild.firstChild.hasCustomProperty&quot;, &quot;true&quot;);
+
+    anchorPoint.innerHTML = '';
+}
+
+tags = [ 'a', 'b', 'i', 'u', 'div', 'span', 'canvas', 'object', 'a' ];
+
+for (var i = 0; i &lt; tags.length; ++i) {
+    for (var j = 0; j &lt; tags.length; ++j) {
+        // Skip doing &lt;foo&gt;&lt;foo&gt;text&lt;/foo&gt;&lt;/foo&gt; 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]);
+    }
+}
+
+&lt;/script&gt;
+&lt;script src=&quot;../../resources/js-test-post.js&quot;&gt;&lt;/script&gt;
+&lt;/body&gt;
+&lt;/html&gt;
</ins></span></pre>
</div>
</div>

</body>
</html>