diff --git a/third_party/WebKit/LayoutTests/TestExpectations b/third_party/WebKit/LayoutTests/TestExpectations
index 07e4595..68c2e46 100644
--- a/third_party/WebKit/LayoutTests/TestExpectations
+++ b/third_party/WebKit/LayoutTests/TestExpectations
@@ -2201,6 +2201,12 @@
 crbug.com/664844 media/track/track-cue-rendering-tree-is-removed-properly.html [ Pass Failure ]
 crbug.com/664844 media/track/track-default-attribute.html [ Pass Failure ]
 crbug.com/664844 media/track/track-kind-user-preference.html [ Pass Failure ]
+crbug.com/490206 paint/spellmarkers/document-markers-zoom-125.html [ NeedsRebaseline ]
+crbug.com/490206 paint/spellmarkers/document-markers-zoom-150.html [ NeedsRebaseline ]
+crbug.com/490206 paint/spellmarkers/document-markers-zoom-175.html [ NeedsRebaseline ]
+crbug.com/490206 paint/spellmarkers/document-markers-zoom-200.html [ NeedsRebaseline ]
+crbug.com/490206 paint/spellmarkers/document-markers-zoom-250.html [ NeedsRebaseline ]
+crbug.com/490206 paint/spellmarkers/document-markers.html [ NeedsRebaseline ]
 
 crbug.com/688670 media/track/track-cue-rendering-after-controls-removed.html [ Pass Failure ]
 
diff --git a/third_party/WebKit/LayoutTests/editing/selection/addRange.html b/third_party/WebKit/LayoutTests/editing/selection/addRange.html
index 3490e32..2cb613e 100644
--- a/third_party/WebKit/LayoutTests/editing/selection/addRange.html
+++ b/third_party/WebKit/LayoutTests/editing/selection/addRange.html
@@ -11,20 +11,24 @@
 range.setEnd(text, 5);
 sel.addRange(range);
 
+range = document.createRange();
 range.setStart(text, 4);
 range.setEnd(text, 6);
 sel.addRange(range);
 
+range = document.createRange();
 range.setStart(text, 2);
 range.setEnd(text, 3);
 sel.addRange(range);
 
 // This should have no effect (until we support discontiguous selections) since this range doesn't intersect the currently selected range.
+range = document.createRange();
 range.setStart(text, 7);
 range.setEnd(text, 8);
 sel.addRange(range);
 
 // Ditto.
+range = document.createRange();
 range.setStart(text, 0);
 range.setEnd(text, 1);
 sel.addRange(range);
diff --git a/third_party/WebKit/LayoutTests/editing/selection/selection-update-range-after-addrange.html b/third_party/WebKit/LayoutTests/editing/selection/selection-update-range-after-addrange.html
new file mode 100644
index 0000000..c85b1493
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/editing/selection/selection-update-range-after-addrange.html
@@ -0,0 +1,57 @@
+<!DOCTYPE html>
+<script src="../../resources/testharness.js"></script>
+<script src="../../resources/testharnessreport.js"></script>
+<p>abcdef</p>
+<script>
+test(() => {
+  let selection = getSelection();
+  selection.removeAllRanges();
+  let range = document.createRange();
+  let text = document.querySelector('p').firstChild;
+  range.setStart(text, 1);
+  range.setEnd(text, 2);
+
+  selection.addRange(range);
+  assert_equals(selection.anchorNode, text);
+  assert_equals(selection.anchorOffset, 1);
+  assert_equals(selection.focusNode, text);
+  assert_equals(selection.focusOffset, 2);
+
+  range.setStart(text, 0);
+  assert_equals(selection.anchorOffset, 0);
+}, 'Mutation of Range after adding it to Selection should update Selection attributes.');
+
+test(() => {
+  let selection = getSelection();
+  selection.removeAllRanges();
+  let range = document.createRange();
+  range.selectNode(document.body);
+  selection.addRange(range);
+  assert_equals(selection.rangeCount, 1);
+
+  let document2 = document.implementation.createHTMLDocument();
+  document2.innerHTML = '<html><body>abc</body></html>';
+  range.selectNode(document2.body);
+  // TODO(tkent): The specification says nothing about such case. For now, we
+  // unregister the Range from the Selection for ease of implementation
+  // though Firefox and Edge keep |selection.getRangeAt(0) == range|.
+  assert_equals(selection.rangeCount, 0);
+}, 'Switching Range document should clear registered Selection.');
+
+test(() => {
+  let selection = getSelection();
+  selection.removeAllRanges();
+  let range = document.createRange();
+  range.selectNode(document.body);
+  selection.addRange(range);
+  assert_equals(selection.rangeCount, 1);
+
+  let span = document.createElement('span');
+  span.innerHTML = 'text';
+  range.selectNode(span.firstChild);
+  // TODO(tkent): The specification says nothing about such case. For now, we
+  // unregister the Range from the Selection for ease of implementation
+  // though Firefox and Edge keep |selection.getRangeAt(0) == range|.
+  assert_equals(selection.rangeCount, 0);
+}, 'Updating Range for another root should clear registered Selection.');
+</script>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/selection/addRange-00-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/selection/addRange-00-expected.txt
index c8970682..1b4ab02 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/selection/addRange-00-expected.txt
+++ b/third_party/WebKit/LayoutTests/external/wpt/selection/addRange-00-expected.txt
@@ -18,7 +18,6 @@
 CONSOLE ERROR: line 7: Discontiguous selection is not supported.
 CONSOLE ERROR: line 7: Discontiguous selection is not supported.
 CONSOLE ERROR: line 7: Discontiguous selection is not supported.
-CONSOLE ERROR: line 7: Discontiguous selection is not supported.
 CONSOLE ERROR: line 7: The given range isn't in document.
 CONSOLE ERROR: line 7: The given range isn't in document.
 CONSOLE ERROR: line 7: The given range isn't in document.
@@ -43,7 +42,6 @@
 CONSOLE ERROR: line 7: Discontiguous selection is not supported.
 CONSOLE ERROR: line 7: Discontiguous selection is not supported.
 CONSOLE ERROR: line 7: Discontiguous selection is not supported.
-CONSOLE ERROR: line 7: Discontiguous selection is not supported.
 CONSOLE ERROR: line 7: The given range isn't in document.
 CONSOLE ERROR: line 7: The given range isn't in document.
 CONSOLE ERROR: line 7: The given range isn't in document.
@@ -105,9 +103,9 @@
 PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: modifying the Selection's last Range must modify the first added Range 
 PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: second addRange() must result in rangeCount being 1 
-PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: second addRange() must result in the selection's last range having the specified endpoints 
+FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object ""
-FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, endOffset of the Selection's last Range must match the added Range expected 2 but got 0
+FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: first addRange() must result in rangeCount being 1 
@@ -117,9 +115,9 @@
 PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: modifying the Selection's last Range must modify the first added Range 
 PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: second addRange() must result in rangeCount being 1 
-PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: second addRange() must result in the selection's last range having the specified endpoints 
-FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "A" but got object "A"
-FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, endOffset of the Selection's last Range must match the added Range expected 2 but got 1
+FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startOffset of the Selection's last Range must match the added Range expected 0 but got 6
+FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "A" but got object ""
+FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: first addRange() must result in rangeCount being 1 
@@ -129,9 +127,9 @@
 PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: modifying the Selection's last Range must modify the first added Range 
 PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: second addRange() must result in rangeCount being 1 
-FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startOffset of the Selection's last Range must match the added Range expected 2 but got 6
-FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "b̈c̈d̈" but got object ""
-FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
+PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: second addRange() must result in the selection's last range having the specified endpoints 
+FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "b̈c̈d̈" but got object "b̈c̈d̈"
+FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 2
 FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: first addRange() must result in rangeCount being 1 
@@ -141,9 +139,9 @@
 PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: modifying the Selection's last Range must modify the first added Range 
 PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: second addRange() must result in rangeCount being 1 
-FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startOffset of the Selection's last Range must match the added Range expected 2 but got 6
-FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "b̈c̈d̈e" but got object ""
-FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
+PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: second addRange() must result in the selection's last range having the specified endpoints 
+FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "b̈c̈d̈e" but got object "b̈c̈d̈e"
+FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 2
 FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: first addRange() must result in rangeCount being 1 
@@ -543,11 +541,13 @@
 PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: modifying the Selection's last Range must modify the first added Range 
 PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: second addRange() must result in rangeCount being 1 
-FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startOffset of the Selection's last Range must match the added Range expected 3 but got 6
+PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: second addRange() must result in the selection's last range having the specified endpoints 
 FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "̈c̈d̈ëf̈g̈ḧ
 Ijklmnop
-QrstuvwxYzabcdef" but got object ""
-FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
+QrstuvwxYzabcdef" but got object "̈c̈d̈ëf̈g̈ḧ
+Ijklmnop
+QrstuvwxYzabcdef"
+FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 3
 FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: first addRange() must result in rangeCount being 1 
@@ -1001,9 +1001,9 @@
 PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: modifying the Selection's last Range must modify the first added Range 
 PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: second addRange() must result in rangeCount being 1 
-FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: endOffset of the Selection's last Range must match the added Range expected 0 but got 1
-FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "A"
-FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, endOffset of the Selection's last Range must match the added Range expected 2 but got 1
+FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startOffset of the Selection's last Range must match the added Range expected 0 but got 6
+FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object ""
+FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: first addRange() must result in rangeCount being 1 
@@ -1013,9 +1013,9 @@
 PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: modifying the Selection's last Range must modify the first added Range 
 PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: second addRange() must result in rangeCount being 1 
-PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: second addRange() must result in the selection's last range having the specified endpoints 
-FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "A" but got object "A"
-FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, endOffset of the Selection's last Range must match the added Range expected 2 but got 1
+FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startOffset of the Selection's last Range must match the added Range expected 0 but got 6
+FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "A" but got object ""
+FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: first addRange() must result in rangeCount being 1 
@@ -1025,9 +1025,9 @@
 PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: modifying the Selection's last Range must modify the first added Range 
 PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: second addRange() must result in rangeCount being 1 
-FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startOffset of the Selection's last Range must match the added Range expected 2 but got 6
-FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "b̈c̈d̈" but got object ""
-FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
+PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: second addRange() must result in the selection's last range having the specified endpoints 
+FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "b̈c̈d̈" but got object "b̈c̈d̈"
+FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 2
 FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: first addRange() must result in rangeCount being 1 
@@ -1037,9 +1037,9 @@
 PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: modifying the Selection's last Range must modify the first added Range 
 PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: second addRange() must result in rangeCount being 1 
-FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startOffset of the Selection's last Range must match the added Range expected 2 but got 6
-FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "b̈c̈d̈e" but got object ""
-FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
+PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: second addRange() must result in the selection's last range having the specified endpoints 
+FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "b̈c̈d̈e" but got object "b̈c̈d̈e"
+FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 2
 FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: first addRange() must result in rangeCount being 1 
@@ -1439,11 +1439,13 @@
 PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: modifying the Selection's last Range must modify the first added Range 
 PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: second addRange() must result in rangeCount being 1 
-FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startOffset of the Selection's last Range must match the added Range expected 3 but got 6
+PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: second addRange() must result in the selection's last range having the specified endpoints 
 FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "̈c̈d̈ëf̈g̈ḧ
 Ijklmnop
-QrstuvwxYzabcdef" but got object ""
-FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
+QrstuvwxYzabcdef" but got object "̈c̈d̈ëf̈g̈ḧ
+Ijklmnop
+QrstuvwxYzabcdef"
+FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 3
 FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: first addRange() must result in rangeCount being 1 
@@ -2335,13 +2337,13 @@
 PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: modifying the Selection's last Range must modify the first added Range 
 PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: second addRange() must result in rangeCount being 1 
-FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startOffset of the Selection's last Range must match the added Range expected 3 but got 2
+PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: second addRange() must result in the selection's last range having the specified endpoints 
 FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "̈c̈d̈ëf̈g̈ḧ
 Ijklmnop
-QrstuvwxYzabcdef" but got object "b̈c̈d̈ëf̈g̈ḧ
+QrstuvwxYzabcdef" but got object "̈c̈d̈ëf̈g̈ḧ
 Ijklmnop
 QrstuvwxYzabcdef"
-FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 2
+FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 3
 FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: first addRange() must result in rangeCount being 1 
@@ -2351,8 +2353,8 @@
 PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: modifying the Selection's last Range must modify the first added Range 
 PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: second addRange() must result in rangeCount being 1 
-FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: endOffset of the Selection's last Range must match the added Range expected 7 but got 8
-FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d" but got object "Äb̈c̈d̈"
+PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: second addRange() must result in the selection's last range having the specified endpoints 
+FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d" but got object "Äb̈c̈d"
 FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
 " but got Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ
 </p>
@@ -2819,8 +2821,8 @@
 PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: modifying the Selection's last Range must modify the first added Range 
 PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: second addRange() must result in rangeCount being 1 
-FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: endOffset of the Selection's last Range must match the added Range expected 8 but got 9
-FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "b̈c̈d̈" but got object "b̈c̈d̈e"
+PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: second addRange() must result in the selection's last range having the specified endpoints 
+FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "b̈c̈d̈" but got object "b̈c̈d̈"
 FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 2
 FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: first addRange() must not throw exceptions or modify the range it's given 
@@ -3233,13 +3235,13 @@
 PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: modifying the Selection's last Range must modify the first added Range 
 PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: second addRange() must result in rangeCount being 1 
-FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startOffset of the Selection's last Range must match the added Range expected 3 but got 2
+PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: second addRange() must result in the selection's last range having the specified endpoints 
 FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "̈c̈d̈ëf̈g̈ḧ
 Ijklmnop
-QrstuvwxYzabcdef" but got object "b̈c̈d̈ëf̈g̈ḧ
+QrstuvwxYzabcdef" but got object "̈c̈d̈ëf̈g̈ḧ
 Ijklmnop
 QrstuvwxYzabcdef"
-FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 2
+FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 3
 FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: first addRange() must result in rangeCount being 1 
@@ -3249,8 +3251,8 @@
 PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: modifying the Selection's last Range must modify the first added Range 
 PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: second addRange() must result in rangeCount being 1 
-FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: endOffset of the Selection's last Range must match the added Range expected 7 but got 9
-FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d" but got object "Äb̈c̈d̈e"
+PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: second addRange() must result in the selection's last range having the specified endpoints 
+FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d" but got object "Äb̈c̈d"
 FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
 " but got Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ
 </p>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/selection/addRange-04-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/selection/addRange-04-expected.txt
index 057b4187..1603e3f 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/selection/addRange-04-expected.txt
+++ b/third_party/WebKit/LayoutTests/external/wpt/selection/addRange-04-expected.txt
@@ -10,7 +10,6 @@
 CONSOLE ERROR: line 7: Discontiguous selection is not supported.
 CONSOLE ERROR: line 7: Discontiguous selection is not supported.
 CONSOLE ERROR: line 7: Discontiguous selection is not supported.
-CONSOLE ERROR: line 7: Discontiguous selection is not supported.
 CONSOLE ERROR: line 7: The given range isn't in document.
 CONSOLE ERROR: line 7: The given range isn't in document.
 CONSOLE ERROR: line 7: Discontiguous selection is not supported.
@@ -35,7 +34,6 @@
 CONSOLE ERROR: line 7: Discontiguous selection is not supported.
 CONSOLE ERROR: line 7: Discontiguous selection is not supported.
 CONSOLE ERROR: line 7: Discontiguous selection is not supported.
-CONSOLE ERROR: line 7: Discontiguous selection is not supported.
 CONSOLE ERROR: line 7: The given range isn't in document.
 CONSOLE ERROR: line 7: The given range isn't in document.
 CONSOLE ERROR: line 7: Discontiguous selection is not supported.
@@ -60,7 +58,6 @@
 CONSOLE ERROR: line 7: Discontiguous selection is not supported.
 CONSOLE ERROR: line 7: Discontiguous selection is not supported.
 CONSOLE ERROR: line 7: Discontiguous selection is not supported.
-CONSOLE ERROR: line 7: Discontiguous selection is not supported.
 CONSOLE ERROR: line 7: The given range isn't in document.
 CONSOLE ERROR: line 7: The given range isn't in document.
 CONSOLE ERROR: line 7: Discontiguous selection is not supported.
@@ -69,7 +66,6 @@
 CONSOLE ERROR: line 7: Discontiguous selection is not supported.
 CONSOLE ERROR: line 7: Discontiguous selection is not supported.
 CONSOLE ERROR: line 7: Discontiguous selection is not supported.
-CONSOLE ERROR: line 7: Discontiguous selection is not supported.
 CONSOLE ERROR: line 7: The given range isn't in document.
 CONSOLE ERROR: line 7: The given range isn't in document.
 CONSOLE ERROR: line 7: The given range isn't in document.
@@ -86,7 +82,6 @@
 CONSOLE ERROR: line 7: Discontiguous selection is not supported.
 CONSOLE ERROR: line 7: Discontiguous selection is not supported.
 CONSOLE ERROR: line 7: Discontiguous selection is not supported.
-CONSOLE ERROR: line 7: Discontiguous selection is not supported.
 CONSOLE ERROR: line 7: The given range isn't in document.
 CONSOLE ERROR: line 7: The given range isn't in document.
 CONSOLE ERROR: line 7: Discontiguous selection is not supported.
@@ -95,7 +90,6 @@
 CONSOLE ERROR: line 7: Discontiguous selection is not supported.
 CONSOLE ERROR: line 7: Discontiguous selection is not supported.
 CONSOLE ERROR: line 7: Discontiguous selection is not supported.
-CONSOLE ERROR: line 7: Discontiguous selection is not supported.
 CONSOLE ERROR: line 7: The given range isn't in document.
 CONSOLE ERROR: line 7: The given range isn't in document.
 CONSOLE ERROR: line 7: The given range isn't in document.
@@ -133,9 +127,9 @@
 PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: modifying the Selection's last Range must modify the first added Range 
 PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: second addRange() must result in rangeCount being 1 
-FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startOffset of the Selection's last Range must match the added Range expected 2 but got 6
-FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "b̈c̈d̈" but got object ""
-FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
+PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: second addRange() must result in the selection's last range having the specified endpoints 
+FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "b̈c̈d̈" but got object "b̈c̈d̈"
+FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 2
 FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: first addRange() must result in rangeCount being 1 
@@ -145,9 +139,9 @@
 PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: modifying the Selection's last Range must modify the first added Range 
 PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: second addRange() must result in rangeCount being 1 
-FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startOffset of the Selection's last Range must match the added Range expected 2 but got 6
-FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "b̈c̈d̈e" but got object ""
-FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
+PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: second addRange() must result in the selection's last range having the specified endpoints 
+FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "b̈c̈d̈e" but got object "b̈c̈d̈e"
+FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 2
 FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: first addRange() must result in rangeCount being 1 
@@ -157,11 +151,11 @@
 PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: modifying the Selection's last Range must modify the first added Range 
 PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: second addRange() must result in rangeCount being 1 
-PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: second addRange() must result in the selection's last range having the specified endpoints 
-FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object ""
-FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
-" but got Text node "Ijklmnop
+FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Ijklmnop
+" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ
 "
+FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object ""
+FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: first addRange() must result in rangeCount being 1 
@@ -171,11 +165,11 @@
 PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: modifying the Selection's last Range must modify the first added Range 
 PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: second addRange() must result in rangeCount being 1 
-PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: second addRange() must result in the selection's last range having the specified endpoints 
-FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "I" but got object "I"
-FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
-" but got Text node "Ijklmnop
+FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Ijklmnop
+" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ
 "
+FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "I" but got object ""
+FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: first addRange() must result in rangeCount being 1 
@@ -473,12 +467,13 @@
 PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 23 [paras[0], 0, paras[0], 1]: modifying the Selection's last Range must modify the first added Range 
 PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 23 [paras[0], 0, paras[0], 1]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 23 [paras[0], 0, paras[0], 1]: second addRange() must result in rangeCount being 1 
-FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 23 [paras[0], 0, paras[0], 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ
-</p> but got Text node "Äb̈c̈d̈ëf̈g̈ḧ
-"
+PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 23 [paras[0], 0, paras[0], 1]: second addRange() must result in the selection's last range having the specified endpoints 
 FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 23 [paras[0], 0, paras[0], 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ
-" but got object ""
-FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 23 [paras[0], 0, paras[0], 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
+" but got object "Äb̈c̈d̈ëf̈g̈ḧ
+"
+FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 23 [paras[0], 0, paras[0], 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
+" but got Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ
+</p>
 FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 23 [paras[0], 0, paras[0], 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: first addRange() must result in rangeCount being 1 
@@ -562,11 +557,11 @@
 PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: modifying the Selection's last Range must modify the first added Range 
 PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: second addRange() must result in rangeCount being 1 
-FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ
-</p> but got Text node "Äb̈c̈d̈ëf̈g̈ḧ
-"
-FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d" but got object ""
-FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
+PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: second addRange() must result in the selection's last range having the specified endpoints 
+FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d" but got object "Äb̈c̈d"
+FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
+" but got Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ
+</p>
 FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 30 [testDiv, 2, paras[4], 1]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 30 [testDiv, 2, paras[4], 1]: first addRange() must result in rangeCount being 1 
@@ -590,13 +585,12 @@
 PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: modifying the Selection's last Range must modify the first added Range 
 PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: second addRange() must result in rangeCount being 1 
-PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: second addRange() must result in the selection's last range having the specified endpoints 
+FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ
+</p><p id="b" s... but got Text node "Äb̈c̈d̈ëf̈g̈ḧ
+"
 FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Ijklmnop
-Qrstu" but got object "Ijklmnop
-Qrstu"
-FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
-" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ
-</p><p id="b" s...
+Qrstu" but got object ""
+FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 32 [document.documentElement, 1, document.body, 0]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 32 [document.documentElement, 1, document.body, 0]: first addRange() must result in rangeCount being 1 
@@ -1031,9 +1025,9 @@
 PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: modifying the Selection's last Range must modify the first added Range 
 PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: second addRange() must result in rangeCount being 1 
-FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startOffset of the Selection's last Range must match the added Range expected 2 but got 6
-FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "b̈c̈d̈" but got object ""
-FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
+PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: second addRange() must result in the selection's last range having the specified endpoints 
+FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "b̈c̈d̈" but got object "b̈c̈d̈"
+FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 2
 FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: first addRange() must result in rangeCount being 1 
@@ -1043,9 +1037,9 @@
 PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: modifying the Selection's last Range must modify the first added Range 
 PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: second addRange() must result in rangeCount being 1 
-FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startOffset of the Selection's last Range must match the added Range expected 2 but got 6
-FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "b̈c̈d̈e" but got object ""
-FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
+PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: second addRange() must result in the selection's last range having the specified endpoints 
+FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "b̈c̈d̈e" but got object "b̈c̈d̈e"
+FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 2
 FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: first addRange() must result in rangeCount being 1 
@@ -1055,11 +1049,11 @@
 PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: modifying the Selection's last Range must modify the first added Range 
 PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: second addRange() must result in rangeCount being 1 
-FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: endOffset of the Selection's last Range must match the added Range expected 0 but got 1
-FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "I"
-FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
-" but got Text node "Ijklmnop
+FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Ijklmnop
+" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ
 "
+FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object ""
+FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: first addRange() must result in rangeCount being 1 
@@ -1069,11 +1063,11 @@
 PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: modifying the Selection's last Range must modify the first added Range 
 PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: second addRange() must result in rangeCount being 1 
-PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: second addRange() must result in the selection's last range having the specified endpoints 
-FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "I" but got object "I"
-FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
-" but got Text node "Ijklmnop
+FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Ijklmnop
+" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ
 "
+FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "I" but got object ""
+FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: first addRange() must result in rangeCount being 1 
@@ -1371,12 +1365,13 @@
 PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 23 [paras[0], 0, paras[0], 1]: modifying the Selection's last Range must modify the first added Range 
 PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 23 [paras[0], 0, paras[0], 1]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 23 [paras[0], 0, paras[0], 1]: second addRange() must result in rangeCount being 1 
-FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 23 [paras[0], 0, paras[0], 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ
-</p> but got Text node "Äb̈c̈d̈ëf̈g̈ḧ
-"
+PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 23 [paras[0], 0, paras[0], 1]: second addRange() must result in the selection's last range having the specified endpoints 
 FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 23 [paras[0], 0, paras[0], 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ
-" but got object ""
-FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 23 [paras[0], 0, paras[0], 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
+" but got object "Äb̈c̈d̈ëf̈g̈ḧ
+"
+FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 23 [paras[0], 0, paras[0], 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
+" but got Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ
+</p>
 FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 23 [paras[0], 0, paras[0], 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: first addRange() must result in rangeCount being 1 
@@ -1412,10 +1407,10 @@
 PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: modifying the Selection's last Range must modify the first added Range 
 PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: second addRange() must result in rangeCount being 1 
-FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: endOffset of the Selection's last Range must match the added Range expected 0 but got 1
+PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: second addRange() must result in the selection's last range having the specified endpoints 
 FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ
 " but got object "Äb̈c̈d̈ëf̈g̈ḧ
-I"
+"
 FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, endContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
 " but got Text node "Ijklmnop
 "
@@ -1460,11 +1455,11 @@
 PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: modifying the Selection's last Range must modify the first added Range 
 PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: second addRange() must result in rangeCount being 1 
-FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ
-</p> but got Text node "Äb̈c̈d̈ëf̈g̈ḧ
-"
-FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d" but got object ""
-FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
+PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: second addRange() must result in the selection's last range having the specified endpoints 
+FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d" but got object "Äb̈c̈d"
+FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
+" but got Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ
+</p>
 FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 30 [testDiv, 2, paras[4], 1]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 30 [testDiv, 2, paras[4], 1]: first addRange() must result in rangeCount being 1 
@@ -1488,13 +1483,12 @@
 PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: modifying the Selection's last Range must modify the first added Range 
 PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: second addRange() must result in rangeCount being 1 
-PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: second addRange() must result in the selection's last range having the specified endpoints 
+FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ
+</p><p id="b" s... but got Text node "Äb̈c̈d̈ëf̈g̈ḧ
+"
 FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Ijklmnop
-Qrstu" but got object "Ijklmnop
-Qrstu"
-FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
-" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ
-</p><p id="b" s...
+Qrstu" but got object ""
+FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 32 [document.documentElement, 1, document.body, 0]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 32 [document.documentElement, 1, document.body, 0]: first addRange() must result in rangeCount being 1 
@@ -1929,9 +1923,9 @@
 PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: modifying the Selection's last Range must modify the first added Range 
 PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: second addRange() must result in rangeCount being 1 
-FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startOffset of the Selection's last Range must match the added Range expected 2 but got 6
-FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "b̈c̈d̈" but got object ""
-FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
+PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: second addRange() must result in the selection's last range having the specified endpoints 
+FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "b̈c̈d̈" but got object "b̈c̈d̈"
+FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 2
 FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: first addRange() must result in rangeCount being 1 
@@ -1941,9 +1935,9 @@
 PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: modifying the Selection's last Range must modify the first added Range 
 PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: second addRange() must result in rangeCount being 1 
-FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startOffset of the Selection's last Range must match the added Range expected 2 but got 6
-FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "b̈c̈d̈e" but got object ""
-FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
+PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: second addRange() must result in the selection's last range having the specified endpoints 
+FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "b̈c̈d̈e" but got object "b̈c̈d̈e"
+FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 2
 FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: first addRange() must result in rangeCount being 1 
@@ -1981,11 +1975,11 @@
 PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: modifying the Selection's last Range must modify the first added Range 
 PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: second addRange() must result in rangeCount being 1 
-PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: second addRange() must result in the selection's last range having the specified endpoints 
-FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "klmnop" but got object "klmnop"
-FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
-" but got Text node "Ijklmnop
+FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Ijklmnop
+" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ
 "
+FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "klmnop" but got object ""
+FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: first addRange() must result in rangeCount being 1 
@@ -1995,13 +1989,12 @@
 PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: modifying the Selection's last Range must modify the first added Range 
 PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: second addRange() must result in rangeCount being 1 
-PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: second addRange() must result in the selection's last range having the specified endpoints 
+FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Ijklmnop
+" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ
+"
 FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "klmnop
-" but got object "klmnop
-"
-FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
-" but got Text node "Ijklmnop
-"
+" but got object ""
+FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: first addRange() must result in rangeCount being 1 
@@ -2270,12 +2263,13 @@
 PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 23 [paras[0], 0, paras[0], 1]: modifying the Selection's last Range must modify the first added Range 
 PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 23 [paras[0], 0, paras[0], 1]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 23 [paras[0], 0, paras[0], 1]: second addRange() must result in rangeCount being 1 
-FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 23 [paras[0], 0, paras[0], 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ
-</p> but got Text node "Äb̈c̈d̈ëf̈g̈ḧ
-"
+PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 23 [paras[0], 0, paras[0], 1]: second addRange() must result in the selection's last range having the specified endpoints 
 FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 23 [paras[0], 0, paras[0], 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ
-" but got object ""
-FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 23 [paras[0], 0, paras[0], 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
+" but got object "Äb̈c̈d̈ëf̈g̈ḧ
+"
+FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 23 [paras[0], 0, paras[0], 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
+" but got Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ
+</p>
 FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 23 [paras[0], 0, paras[0], 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: first addRange() must result in rangeCount being 1 
@@ -2311,10 +2305,13 @@
 PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: modifying the Selection's last Range must modify the first added Range 
 PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: second addRange() must result in rangeCount being 1 
-FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startOffset of the Selection's last Range must match the added Range expected 0 but got 6
+PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: second addRange() must result in the selection's last range having the specified endpoints 
 FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ
-" but got object ""
-FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
+" but got object "Äb̈c̈d̈ëf̈g̈ḧ
+"
+FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, endContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
+" but got Text node "Ijklmnop
+"
 FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: first addRange() must result in rangeCount being 1 
@@ -2356,11 +2353,11 @@
 PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: modifying the Selection's last Range must modify the first added Range 
 PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: second addRange() must result in rangeCount being 1 
-FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ
-</p> but got Text node "Äb̈c̈d̈ëf̈g̈ḧ
-"
-FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d" but got object ""
-FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
+PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: second addRange() must result in the selection's last range having the specified endpoints 
+FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d" but got object "Äb̈c̈d"
+FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
+" but got Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ
+</p>
 FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 30 [testDiv, 2, paras[4], 1]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 30 [testDiv, 2, paras[4], 1]: first addRange() must result in rangeCount being 1 
@@ -2384,13 +2381,12 @@
 PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: modifying the Selection's last Range must modify the first added Range 
 PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: second addRange() must result in rangeCount being 1 
-PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: second addRange() must result in the selection's last range having the specified endpoints 
+FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ
+</p><p id="b" s... but got Text node "Äb̈c̈d̈ëf̈g̈ḧ
+"
 FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Ijklmnop
-Qrstu" but got object "Ijklmnop
-Qrstu"
-FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
-" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ
-</p><p id="b" s...
+Qrstu" but got object ""
+FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 32 [document.documentElement, 1, document.body, 0]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 32 [document.documentElement, 1, document.body, 0]: first addRange() must result in rangeCount being 1 
@@ -2825,9 +2821,9 @@
 PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: modifying the Selection's last Range must modify the first added Range 
 PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: second addRange() must result in rangeCount being 1 
-FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startOffset of the Selection's last Range must match the added Range expected 2 but got 6
-FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "b̈c̈d̈" but got object ""
-FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
+PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: second addRange() must result in the selection's last range having the specified endpoints 
+FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "b̈c̈d̈" but got object "b̈c̈d̈"
+FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 2
 FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: first addRange() must result in rangeCount being 1 
@@ -2837,9 +2833,9 @@
 PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: modifying the Selection's last Range must modify the first added Range 
 PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: second addRange() must result in rangeCount being 1 
-FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startOffset of the Selection's last Range must match the added Range expected 2 but got 6
-FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "b̈c̈d̈e" but got object ""
-FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
+PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: second addRange() must result in the selection's last range having the specified endpoints 
+FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "b̈c̈d̈e" but got object "b̈c̈d̈e"
+FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 2
 FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: first addRange() must result in rangeCount being 1 
@@ -2877,12 +2873,11 @@
 PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: modifying the Selection's last Range must modify the first added Range 
 PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: second addRange() must result in rangeCount being 1 
-FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: endOffset of the Selection's last Range must match the added Range expected 8 but got 9
-FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "klmnop" but got object "klmnop
+FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Ijklmnop
+" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ
 "
-FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
-" but got Text node "Ijklmnop
-"
+FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "klmnop" but got object ""
+FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: first addRange() must result in rangeCount being 1 
@@ -2892,13 +2887,12 @@
 PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: modifying the Selection's last Range must modify the first added Range 
 PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: second addRange() must result in rangeCount being 1 
-PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: second addRange() must result in the selection's last range having the specified endpoints 
+FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Ijklmnop
+" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ
+"
 FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "klmnop
-" but got object "klmnop
-"
-FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
-" but got Text node "Ijklmnop
-"
+" but got object ""
+FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: first addRange() must result in rangeCount being 1 
@@ -3167,12 +3161,13 @@
 PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 23 [paras[0], 0, paras[0], 1]: modifying the Selection's last Range must modify the first added Range 
 PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 23 [paras[0], 0, paras[0], 1]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 23 [paras[0], 0, paras[0], 1]: second addRange() must result in rangeCount being 1 
-FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 23 [paras[0], 0, paras[0], 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ
-</p> but got Text node "Äb̈c̈d̈ëf̈g̈ḧ
-"
+PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 23 [paras[0], 0, paras[0], 1]: second addRange() must result in the selection's last range having the specified endpoints 
 FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 23 [paras[0], 0, paras[0], 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ
-" but got object ""
-FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 23 [paras[0], 0, paras[0], 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
+" but got object "Äb̈c̈d̈ëf̈g̈ḧ
+"
+FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 23 [paras[0], 0, paras[0], 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
+" but got Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ
+</p>
 FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 23 [paras[0], 0, paras[0], 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: first addRange() must result in rangeCount being 1 
@@ -3208,10 +3203,13 @@
 PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: modifying the Selection's last Range must modify the first added Range 
 PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: second addRange() must result in rangeCount being 1 
-FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startOffset of the Selection's last Range must match the added Range expected 0 but got 6
+PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: second addRange() must result in the selection's last range having the specified endpoints 
 FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ
-" but got object ""
-FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
+" but got object "Äb̈c̈d̈ëf̈g̈ḧ
+"
+FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, endContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
+" but got Text node "Ijklmnop
+"
 FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: first addRange() must result in rangeCount being 1 
@@ -3221,11 +3219,10 @@
 PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: modifying the Selection's last Range must modify the first added Range 
 PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: second addRange() must result in rangeCount being 1 
-FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: endOffset of the Selection's last Range must match the added Range expected 8 but got 9
+PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: second addRange() must result in the selection's last range having the specified endpoints 
 FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ
 Ijklmnop" but got object "Äb̈c̈d̈ëf̈g̈ḧ
-Ijklmnop
-"
+Ijklmnop"
 FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, endContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
 " but got Text node "Ijklmnop
 "
@@ -3254,11 +3251,11 @@
 PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: modifying the Selection's last Range must modify the first added Range 
 PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: second addRange() must result in rangeCount being 1 
-FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ
-</p> but got Text node "Äb̈c̈d̈ëf̈g̈ḧ
-"
-FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d" but got object ""
-FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
+PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: second addRange() must result in the selection's last range having the specified endpoints 
+FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d" but got object "Äb̈c̈d"
+FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
+" but got Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ
+</p>
 FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 30 [testDiv, 2, paras[4], 1]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 30 [testDiv, 2, paras[4], 1]: first addRange() must result in rangeCount being 1 
@@ -3282,13 +3279,12 @@
 PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: modifying the Selection's last Range must modify the first added Range 
 PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: second addRange() must result in rangeCount being 1 
-PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: second addRange() must result in the selection's last range having the specified endpoints 
+FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ
+</p><p id="b" s... but got Text node "Äb̈c̈d̈ëf̈g̈ḧ
+"
 FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Ijklmnop
-Qrstu" but got object "Ijklmnop
-Qrstu"
-FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
-" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ
-</p><p id="b" s...
+Qrstu" but got object ""
+FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 32 [document.documentElement, 1, document.body, 0]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 32 [document.documentElement, 1, document.body, 0]: first addRange() must result in rangeCount being 1 
diff --git a/third_party/WebKit/LayoutTests/external/wpt/selection/addRange-12-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/selection/addRange-12-expected.txt
index c72fa8a0..8fe4645 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/selection/addRange-12-expected.txt
+++ b/third_party/WebKit/LayoutTests/external/wpt/selection/addRange-12-expected.txt
@@ -22,6 +22,28 @@
 CONSOLE ERROR: line 7: Discontiguous selection is not supported.
 CONSOLE ERROR: line 7: Discontiguous selection is not supported.
 CONSOLE ERROR: line 7: Discontiguous selection is not supported.
+CONSOLE ERROR: line 7: The given range isn't in document.
+CONSOLE ERROR: line 7: The given range isn't in document.
+CONSOLE ERROR: line 7: The given range isn't in document.
+CONSOLE ERROR: line 7: Discontiguous selection is not supported.
+CONSOLE ERROR: line 7: Discontiguous selection is not supported.
+CONSOLE ERROR: line 7: Discontiguous selection is not supported.
+CONSOLE ERROR: line 7: The given range isn't in document.
+CONSOLE ERROR: line 7: The given range isn't in document.
+CONSOLE ERROR: line 7: Discontiguous selection is not supported.
+CONSOLE ERROR: line 7: Discontiguous selection is not supported.
+CONSOLE ERROR: line 7: Discontiguous selection is not supported.
+CONSOLE ERROR: line 7: Discontiguous selection is not supported.
+CONSOLE ERROR: line 7: Discontiguous selection is not supported.
+CONSOLE ERROR: line 7: Discontiguous selection is not supported.
+CONSOLE ERROR: line 7: The given range isn't in document.
+CONSOLE ERROR: line 7: The given range isn't in document.
+CONSOLE ERROR: line 7: The given range isn't in document.
+CONSOLE ERROR: line 7: The given range isn't in document.
+CONSOLE ERROR: line 7: Discontiguous selection is not supported.
+CONSOLE ERROR: line 7: Discontiguous selection is not supported.
+CONSOLE ERROR: line 7: Discontiguous selection is not supported.
+CONSOLE ERROR: line 7: Discontiguous selection is not supported.
 CONSOLE ERROR: line 7: Discontiguous selection is not supported.
 CONSOLE ERROR: line 7: Discontiguous selection is not supported.
 CONSOLE ERROR: line 7: The given range isn't in document.
@@ -38,20 +60,6 @@
 CONSOLE ERROR: line 7: Discontiguous selection is not supported.
 CONSOLE ERROR: line 7: Discontiguous selection is not supported.
 CONSOLE ERROR: line 7: Discontiguous selection is not supported.
-CONSOLE ERROR: line 7: Discontiguous selection is not supported.
-CONSOLE ERROR: line 7: Discontiguous selection is not supported.
-CONSOLE ERROR: line 7: Discontiguous selection is not supported.
-CONSOLE ERROR: line 7: Discontiguous selection is not supported.
-CONSOLE ERROR: line 7: The given range isn't in document.
-CONSOLE ERROR: line 7: The given range isn't in document.
-CONSOLE ERROR: line 7: The given range isn't in document.
-CONSOLE ERROR: line 7: The given range isn't in document.
-CONSOLE ERROR: line 7: The given range isn't in document.
-CONSOLE ERROR: line 7: The given range isn't in document.
-CONSOLE ERROR: line 7: The given range isn't in document.
-CONSOLE ERROR: line 7: The given range isn't in document.
-CONSOLE ERROR: line 7: The given range isn't in document.
-CONSOLE ERROR: line 7: Discontiguous selection is not supported.
 CONSOLE ERROR: line 7: The given range isn't in document.
 CONSOLE ERROR: line 7: The given range isn't in document.
 CONSOLE ERROR: line 7: The given range isn't in document.
@@ -1481,9 +1489,9 @@
 PASS Range 14 [document.documentElement, 0, document.documentElement, 1] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: modifying the Selection's last Range must modify the first added Range 
 PASS Range 14 [document.documentElement, 0, document.documentElement, 1] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 14 [document.documentElement, 0, document.documentElement, 1] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: second addRange() must result in rangeCount being 1 
-FAIL Range 14 [document.documentElement, 0, document.documentElement, 1] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startOffset of the Selection's last Range must match the added Range expected 2 but got 6
-FAIL Range 14 [document.documentElement, 0, document.documentElement, 1] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "b̈c̈d̈" but got object ""
-FAIL Range 14 [document.documentElement, 0, document.documentElement, 1] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
+PASS Range 14 [document.documentElement, 0, document.documentElement, 1] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: second addRange() must result in the selection's last range having the specified endpoints 
+FAIL Range 14 [document.documentElement, 0, document.documentElement, 1] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "b̈c̈d̈" but got object "b̈c̈d̈"
+FAIL Range 14 [document.documentElement, 0, document.documentElement, 1] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 2
 FAIL Range 14 [document.documentElement, 0, document.documentElement, 1] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 14 [document.documentElement, 0, document.documentElement, 1] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 14 [document.documentElement, 0, document.documentElement, 1] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: first addRange() must result in rangeCount being 1 
@@ -1493,9 +1501,9 @@
 PASS Range 14 [document.documentElement, 0, document.documentElement, 1] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: modifying the Selection's last Range must modify the first added Range 
 PASS Range 14 [document.documentElement, 0, document.documentElement, 1] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 14 [document.documentElement, 0, document.documentElement, 1] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: second addRange() must result in rangeCount being 1 
-FAIL Range 14 [document.documentElement, 0, document.documentElement, 1] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startOffset of the Selection's last Range must match the added Range expected 2 but got 6
-FAIL Range 14 [document.documentElement, 0, document.documentElement, 1] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "b̈c̈d̈e" but got object ""
-FAIL Range 14 [document.documentElement, 0, document.documentElement, 1] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
+PASS Range 14 [document.documentElement, 0, document.documentElement, 1] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: second addRange() must result in the selection's last range having the specified endpoints 
+FAIL Range 14 [document.documentElement, 0, document.documentElement, 1] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "b̈c̈d̈e" but got object "b̈c̈d̈e"
+FAIL Range 14 [document.documentElement, 0, document.documentElement, 1] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 2
 FAIL Range 14 [document.documentElement, 0, document.documentElement, 1] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 14 [document.documentElement, 0, document.documentElement, 1] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 14 [document.documentElement, 0, document.documentElement, 1] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: first addRange() must result in rangeCount being 1 
@@ -1640,15 +1648,13 @@
 PASS Range 14 [document.documentElement, 0, document.documentElement, 1] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: modifying the Selection's last Range must modify the first added Range 
 PASS Range 14 [document.documentElement, 0, document.documentElement, 1] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 14 [document.documentElement, 0, document.documentElement, 1] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: second addRange() must result in rangeCount being 1 
-PASS Range 14 [document.documentElement, 0, document.documentElement, 1] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: second addRange() must result in the selection's last range having the specified endpoints 
+FAIL Range 14 [document.documentElement, 0, document.documentElement, 1] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <html><head><title>Selection.addRange() tests</title>
+<me... but got Text node "Äb̈c̈d̈ëf̈g̈ḧ
+"
 FAIL Range 14 [document.documentElement, 0, document.documentElement, 1] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Selection.addRange() tests
 
-" but got object "Selection.addRange() tests
-
-"
-FAIL Range 14 [document.documentElement, 0, document.documentElement, 1] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
-" but got Element node <html><head><title>Selection.addRange() tests</title>
-<me...
+" but got object ""
+FAIL Range 14 [document.documentElement, 0, document.documentElement, 1] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 FAIL Range 14 [document.documentElement, 0, document.documentElement, 1] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 14 [document.documentElement, 0, document.documentElement, 1] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 14 [document.documentElement, 0, document.documentElement, 1] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: first addRange() must result in rangeCount being 1 
@@ -1700,7 +1706,7 @@
 PASS Range 14 [document.documentElement, 0, document.documentElement, 1] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: modifying the Selection's last Range must modify the first added Range 
 PASS Range 14 [document.documentElement, 0, document.documentElement, 1] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 14 [document.documentElement, 0, document.documentElement, 1] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: second addRange() must result in rangeCount being 1 
-FAIL Range 14 [document.documentElement, 0, document.documentElement, 1] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startOffset of the Selection's last Range must match the added Range expected 1 but got 0
+PASS Range 14 [document.documentElement, 0, document.documentElement, 1] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: second addRange() must result in the selection's last range having the specified endpoints 
 FAIL Range 14 [document.documentElement, 0, document.documentElement, 1] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ
 Ijklmnop
 QrstuvwxYzabcdefGhijklmn
@@ -1713,9 +1719,7 @@
 
 testAddRangeSubSet(12, 16);
 testDiv.style.display = "none";
-" but got object "Selection.addRange() tests
-
-Äb̈c̈d̈ëf̈g̈ḧ
+" but got object "Äb̈c̈d̈ëf̈g̈ḧ
 Ijklmnop
 QrstuvwxYzabcdefGhijklmn
 
@@ -1741,14 +1745,10 @@
 PASS Range 14 [document.documentElement, 0, document.documentElement, 1] followed by Range 17 [document.head, 1, document.head, 1]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 14 [document.documentElement, 0, document.documentElement, 1] followed by Range 17 [document.head, 1, document.head, 1]: second addRange() must result in rangeCount being 1 
 FAIL Range 14 [document.documentElement, 0, document.documentElement, 1] followed by Range 17 [document.head, 1, document.head, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <head><title>Selection.addRange() tests</title>
-<meta nam... but got Element node <html><head><title>Selection.addRange() tests</title>
-<me...
-FAIL Range 14 [document.documentElement, 0, document.documentElement, 1] followed by Range 17 [document.head, 1, document.head, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "Selection.addRange() tests
-
+<meta nam... but got Text node "Äb̈c̈d̈ëf̈g̈ḧ
 "
-FAIL Range 14 [document.documentElement, 0, document.documentElement, 1] followed by Range 17 [document.head, 1, document.head, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
-" but got Element node <html><head><title>Selection.addRange() tests</title>
-<me...
+FAIL Range 14 [document.documentElement, 0, document.documentElement, 1] followed by Range 17 [document.head, 1, document.head, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object ""
+FAIL Range 14 [document.documentElement, 0, document.documentElement, 1] followed by Range 17 [document.head, 1, document.head, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 FAIL Range 14 [document.documentElement, 0, document.documentElement, 1] followed by Range 17 [document.head, 1, document.head, 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 14 [document.documentElement, 0, document.documentElement, 1] followed by Range 18 [document.body, 0, document.body, 1]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 14 [document.documentElement, 0, document.documentElement, 1] followed by Range 18 [document.body, 0, document.body, 1]: first addRange() must result in rangeCount being 1 
@@ -1758,13 +1758,15 @@
 PASS Range 14 [document.documentElement, 0, document.documentElement, 1] followed by Range 18 [document.body, 0, document.body, 1]: modifying the Selection's last Range must modify the first added Range 
 PASS Range 14 [document.documentElement, 0, document.documentElement, 1] followed by Range 18 [document.body, 0, document.body, 1]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 14 [document.documentElement, 0, document.documentElement, 1] followed by Range 18 [document.body, 0, document.body, 1]: second addRange() must result in rangeCount being 1 
-FAIL Range 14 [document.documentElement, 0, document.documentElement, 1] followed by Range 18 [document.body, 0, document.body, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <body><div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ
-</p><p id... but got Text node "Äb̈c̈d̈ëf̈g̈ḧ
-"
+PASS Range 14 [document.documentElement, 0, document.documentElement, 1] followed by Range 18 [document.body, 0, document.body, 1]: second addRange() must result in the selection's last range having the specified endpoints 
 FAIL Range 14 [document.documentElement, 0, document.documentElement, 1] followed by Range 18 [document.body, 0, document.body, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ
 Ijklmnop
-QrstuvwxYzabcdefGhijklmn" but got object ""
-FAIL Range 14 [document.documentElement, 0, document.documentElement, 1] followed by Range 18 [document.body, 0, document.body, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
+QrstuvwxYzabcdefGhijklmn" but got object "Äb̈c̈d̈ëf̈g̈ḧ
+Ijklmnop
+QrstuvwxYzabcdefGhijklmn"
+FAIL Range 14 [document.documentElement, 0, document.documentElement, 1] followed by Range 18 [document.body, 0, document.body, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
+" but got Element node <body><div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ
+</p><p id...
 FAIL Range 14 [document.documentElement, 0, document.documentElement, 1] followed by Range 18 [document.body, 0, document.body, 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 14 [document.documentElement, 0, document.documentElement, 1] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 14 [document.documentElement, 0, document.documentElement, 1] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: first addRange() must result in rangeCount being 1 
@@ -1827,12 +1829,13 @@
 PASS Range 14 [document.documentElement, 0, document.documentElement, 1] followed by Range 23 [paras[0], 0, paras[0], 1]: modifying the Selection's last Range must modify the first added Range 
 PASS Range 14 [document.documentElement, 0, document.documentElement, 1] followed by Range 23 [paras[0], 0, paras[0], 1]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 14 [document.documentElement, 0, document.documentElement, 1] followed by Range 23 [paras[0], 0, paras[0], 1]: second addRange() must result in rangeCount being 1 
-FAIL Range 14 [document.documentElement, 0, document.documentElement, 1] followed by Range 23 [paras[0], 0, paras[0], 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ
-</p> but got Text node "Äb̈c̈d̈ëf̈g̈ḧ
-"
+PASS Range 14 [document.documentElement, 0, document.documentElement, 1] followed by Range 23 [paras[0], 0, paras[0], 1]: second addRange() must result in the selection's last range having the specified endpoints 
 FAIL Range 14 [document.documentElement, 0, document.documentElement, 1] followed by Range 23 [paras[0], 0, paras[0], 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ
-" but got object ""
-FAIL Range 14 [document.documentElement, 0, document.documentElement, 1] followed by Range 23 [paras[0], 0, paras[0], 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
+" but got object "Äb̈c̈d̈ëf̈g̈ḧ
+"
+FAIL Range 14 [document.documentElement, 0, document.documentElement, 1] followed by Range 23 [paras[0], 0, paras[0], 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
+" but got Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ
+</p>
 FAIL Range 14 [document.documentElement, 0, document.documentElement, 1] followed by Range 23 [paras[0], 0, paras[0], 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 14 [document.documentElement, 0, document.documentElement, 1] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 14 [document.documentElement, 0, document.documentElement, 1] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: first addRange() must result in rangeCount being 1 
@@ -1868,10 +1871,13 @@
 PASS Range 14 [document.documentElement, 0, document.documentElement, 1] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: modifying the Selection's last Range must modify the first added Range 
 PASS Range 14 [document.documentElement, 0, document.documentElement, 1] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 14 [document.documentElement, 0, document.documentElement, 1] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: second addRange() must result in rangeCount being 1 
-FAIL Range 14 [document.documentElement, 0, document.documentElement, 1] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startOffset of the Selection's last Range must match the added Range expected 0 but got 6
+PASS Range 14 [document.documentElement, 0, document.documentElement, 1] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: second addRange() must result in the selection's last range having the specified endpoints 
 FAIL Range 14 [document.documentElement, 0, document.documentElement, 1] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ
-" but got object ""
-FAIL Range 14 [document.documentElement, 0, document.documentElement, 1] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
+" but got object "Äb̈c̈d̈ëf̈g̈ḧ
+"
+FAIL Range 14 [document.documentElement, 0, document.documentElement, 1] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, endContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
+" but got Text node "Ijklmnop
+"
 FAIL Range 14 [document.documentElement, 0, document.documentElement, 1] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 14 [document.documentElement, 0, document.documentElement, 1] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 14 [document.documentElement, 0, document.documentElement, 1] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: first addRange() must result in rangeCount being 1 
@@ -1881,10 +1887,13 @@
 PASS Range 14 [document.documentElement, 0, document.documentElement, 1] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: modifying the Selection's last Range must modify the first added Range 
 PASS Range 14 [document.documentElement, 0, document.documentElement, 1] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 14 [document.documentElement, 0, document.documentElement, 1] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: second addRange() must result in rangeCount being 1 
-FAIL Range 14 [document.documentElement, 0, document.documentElement, 1] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startOffset of the Selection's last Range must match the added Range expected 0 but got 6
+PASS Range 14 [document.documentElement, 0, document.documentElement, 1] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: second addRange() must result in the selection's last range having the specified endpoints 
 FAIL Range 14 [document.documentElement, 0, document.documentElement, 1] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ
-Ijklmnop" but got object ""
-FAIL Range 14 [document.documentElement, 0, document.documentElement, 1] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
+Ijklmnop" but got object "Äb̈c̈d̈ëf̈g̈ḧ
+Ijklmnop"
+FAIL Range 14 [document.documentElement, 0, document.documentElement, 1] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, endContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
+" but got Text node "Ijklmnop
+"
 FAIL Range 14 [document.documentElement, 0, document.documentElement, 1] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 14 [document.documentElement, 0, document.documentElement, 1] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 14 [document.documentElement, 0, document.documentElement, 1] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: first addRange() must result in rangeCount being 1 
@@ -1894,11 +1903,13 @@
 PASS Range 14 [document.documentElement, 0, document.documentElement, 1] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: modifying the Selection's last Range must modify the first added Range 
 PASS Range 14 [document.documentElement, 0, document.documentElement, 1] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 14 [document.documentElement, 0, document.documentElement, 1] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: second addRange() must result in rangeCount being 1 
-FAIL Range 14 [document.documentElement, 0, document.documentElement, 1] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startOffset of the Selection's last Range must match the added Range expected 3 but got 6
+PASS Range 14 [document.documentElement, 0, document.documentElement, 1] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: second addRange() must result in the selection's last range having the specified endpoints 
 FAIL Range 14 [document.documentElement, 0, document.documentElement, 1] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "̈c̈d̈ëf̈g̈ḧ
 Ijklmnop
-QrstuvwxYzabcdef" but got object ""
-FAIL Range 14 [document.documentElement, 0, document.documentElement, 1] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
+QrstuvwxYzabcdef" but got object "̈c̈d̈ëf̈g̈ḧ
+Ijklmnop
+QrstuvwxYzabcdef"
+FAIL Range 14 [document.documentElement, 0, document.documentElement, 1] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 3
 FAIL Range 14 [document.documentElement, 0, document.documentElement, 1] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 14 [document.documentElement, 0, document.documentElement, 1] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 14 [document.documentElement, 0, document.documentElement, 1] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: first addRange() must result in rangeCount being 1 
@@ -1908,11 +1919,11 @@
 PASS Range 14 [document.documentElement, 0, document.documentElement, 1] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: modifying the Selection's last Range must modify the first added Range 
 PASS Range 14 [document.documentElement, 0, document.documentElement, 1] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 14 [document.documentElement, 0, document.documentElement, 1] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: second addRange() must result in rangeCount being 1 
-FAIL Range 14 [document.documentElement, 0, document.documentElement, 1] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ
-</p> but got Text node "Äb̈c̈d̈ëf̈g̈ḧ
-"
-FAIL Range 14 [document.documentElement, 0, document.documentElement, 1] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d" but got object ""
-FAIL Range 14 [document.documentElement, 0, document.documentElement, 1] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
+PASS Range 14 [document.documentElement, 0, document.documentElement, 1] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: second addRange() must result in the selection's last range having the specified endpoints 
+FAIL Range 14 [document.documentElement, 0, document.documentElement, 1] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d" but got object "Äb̈c̈d"
+FAIL Range 14 [document.documentElement, 0, document.documentElement, 1] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
+" but got Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ
+</p>
 FAIL Range 14 [document.documentElement, 0, document.documentElement, 1] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 14 [document.documentElement, 0, document.documentElement, 1] followed by Range 30 [testDiv, 2, paras[4], 1]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 14 [document.documentElement, 0, document.documentElement, 1] followed by Range 30 [testDiv, 2, paras[4], 1]: first addRange() must result in rangeCount being 1 
@@ -1951,13 +1962,11 @@
 PASS Range 14 [document.documentElement, 0, document.documentElement, 1] followed by Range 32 [document.documentElement, 1, document.body, 0]: modifying the Selection's last Range must modify the first added Range 
 PASS Range 14 [document.documentElement, 0, document.documentElement, 1] followed by Range 32 [document.documentElement, 1, document.body, 0]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 14 [document.documentElement, 0, document.documentElement, 1] followed by Range 32 [document.documentElement, 1, document.body, 0]: second addRange() must result in rangeCount being 1 
-FAIL Range 14 [document.documentElement, 0, document.documentElement, 1] followed by Range 32 [document.documentElement, 1, document.body, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startOffset of the Selection's last Range must match the added Range expected 1 but got 0
-FAIL Range 14 [document.documentElement, 0, document.documentElement, 1] followed by Range 32 [document.documentElement, 1, document.body, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "Selection.addRange() tests
-
+FAIL Range 14 [document.documentElement, 0, document.documentElement, 1] followed by Range 32 [document.documentElement, 1, document.body, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <html><head><title>Selection.addRange() tests</title>
+<me... but got Text node "Äb̈c̈d̈ëf̈g̈ḧ
 "
-FAIL Range 14 [document.documentElement, 0, document.documentElement, 1] followed by Range 32 [document.documentElement, 1, document.body, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
-" but got Element node <html><head><title>Selection.addRange() tests</title>
-<me...
+FAIL Range 14 [document.documentElement, 0, document.documentElement, 1] followed by Range 32 [document.documentElement, 1, document.body, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object ""
+FAIL Range 14 [document.documentElement, 0, document.documentElement, 1] followed by Range 32 [document.documentElement, 1, document.body, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 FAIL Range 14 [document.documentElement, 0, document.documentElement, 1] followed by Range 32 [document.documentElement, 1, document.body, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 14 [document.documentElement, 0, document.documentElement, 1] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 14 [document.documentElement, 0, document.documentElement, 1] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: first addRange() must result in rangeCount being 1 
@@ -2075,13 +2084,16 @@
 PASS Range 14 [document.documentElement, 0, document.documentElement, 1] followed by Range 37 [testDiv, 0, comment, 5]: modifying the Selection's last Range must modify the first added Range 
 PASS Range 14 [document.documentElement, 0, document.documentElement, 1] followed by Range 37 [testDiv, 0, comment, 5]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 14 [document.documentElement, 0, document.documentElement, 1] followed by Range 37 [testDiv, 0, comment, 5]: second addRange() must result in rangeCount being 1 
-FAIL Range 14 [document.documentElement, 0, document.documentElement, 1] followed by Range 37 [testDiv, 0, comment, 5]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ
-</p><p id="b" s... but got Text node "Äb̈c̈d̈ëf̈g̈ḧ
-"
+FAIL Range 14 [document.documentElement, 0, document.documentElement, 1] followed by Range 37 [testDiv, 0, comment, 5]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: endContainer of the Selection's last Range must match the added Range expected Comment node <!--Alphabet soup?--> but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ
+</p><p id="b" s...
 FAIL Range 14 [document.documentElement, 0, document.documentElement, 1] followed by Range 37 [testDiv, 0, comment, 5]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ
 Ijklmnop
-QrstuvwxYzabcdefGhijklmn" but got object ""
-FAIL Range 14 [document.documentElement, 0, document.documentElement, 1] followed by Range 37 [testDiv, 0, comment, 5]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
+QrstuvwxYzabcdefGhijklmn" but got object "Äb̈c̈d̈ëf̈g̈ḧ
+Ijklmnop
+QrstuvwxYzabcdefGhijklmn"
+FAIL Range 14 [document.documentElement, 0, document.documentElement, 1] followed by Range 37 [testDiv, 0, comment, 5]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
+" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ
+</p><p id="b" s...
 FAIL Range 14 [document.documentElement, 0, document.documentElement, 1] followed by Range 37 [testDiv, 0, comment, 5]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 14 [document.documentElement, 0, document.documentElement, 1] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 14 [document.documentElement, 0, document.documentElement, 1] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: first addRange() must result in rangeCount being 1 
@@ -2351,27 +2363,9 @@
 PASS Range 15 [document.documentElement, 0, document.documentElement, 2] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: modifying the Selection's last Range must modify the first added Range 
 PASS Range 15 [document.documentElement, 0, document.documentElement, 2] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 15 [document.documentElement, 0, document.documentElement, 2] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: second addRange() must result in rangeCount being 1 
-FAIL Range 15 [document.documentElement, 0, document.documentElement, 2] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
-" but got Element node <html><head><title>Selection.addRange() tests</title>
-<me...
-FAIL Range 15 [document.documentElement, 0, document.documentElement, 2] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "Selection.addRange() tests
-
-Äb̈c̈d̈ëf̈g̈ḧ
-Ijklmnop
-QrstuvwxYzabcdefGhijklmn
-
-
-
-
-
-"use strict";
-
-testAddRangeSubSet(12, 16);
-testDiv.style.display = "none";
-"
-FAIL Range 15 [document.documentElement, 0, document.documentElement, 2] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
-" but got Element node <html><head><title>Selection.addRange() tests</title>
-<me...
+FAIL Range 15 [document.documentElement, 0, document.documentElement, 2] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startOffset of the Selection's last Range must match the added Range expected 0 but got 6
+FAIL Range 15 [document.documentElement, 0, document.documentElement, 2] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object ""
+FAIL Range 15 [document.documentElement, 0, document.documentElement, 2] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 FAIL Range 15 [document.documentElement, 0, document.documentElement, 2] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 15 [document.documentElement, 0, document.documentElement, 2] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 15 [document.documentElement, 0, document.documentElement, 2] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: first addRange() must result in rangeCount being 1 
@@ -2381,27 +2375,9 @@
 PASS Range 15 [document.documentElement, 0, document.documentElement, 2] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: modifying the Selection's last Range must modify the first added Range 
 PASS Range 15 [document.documentElement, 0, document.documentElement, 2] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 15 [document.documentElement, 0, document.documentElement, 2] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: second addRange() must result in rangeCount being 1 
-FAIL Range 15 [document.documentElement, 0, document.documentElement, 2] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
-" but got Element node <html><head><title>Selection.addRange() tests</title>
-<me...
-FAIL Range 15 [document.documentElement, 0, document.documentElement, 2] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "A" but got object "Selection.addRange() tests
-
-Äb̈c̈d̈ëf̈g̈ḧ
-Ijklmnop
-QrstuvwxYzabcdefGhijklmn
-
-
-
-
-
-"use strict";
-
-testAddRangeSubSet(12, 16);
-testDiv.style.display = "none";
-"
-FAIL Range 15 [document.documentElement, 0, document.documentElement, 2] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
-" but got Element node <html><head><title>Selection.addRange() tests</title>
-<me...
+FAIL Range 15 [document.documentElement, 0, document.documentElement, 2] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startOffset of the Selection's last Range must match the added Range expected 0 but got 6
+FAIL Range 15 [document.documentElement, 0, document.documentElement, 2] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "A" but got object ""
+FAIL Range 15 [document.documentElement, 0, document.documentElement, 2] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 FAIL Range 15 [document.documentElement, 0, document.documentElement, 2] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 15 [document.documentElement, 0, document.documentElement, 2] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 15 [document.documentElement, 0, document.documentElement, 2] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: first addRange() must result in rangeCount being 1 
@@ -2411,27 +2387,9 @@
 PASS Range 15 [document.documentElement, 0, document.documentElement, 2] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: modifying the Selection's last Range must modify the first added Range 
 PASS Range 15 [document.documentElement, 0, document.documentElement, 2] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 15 [document.documentElement, 0, document.documentElement, 2] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: second addRange() must result in rangeCount being 1 
-FAIL Range 15 [document.documentElement, 0, document.documentElement, 2] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
-" but got Element node <html><head><title>Selection.addRange() tests</title>
-<me...
-FAIL Range 15 [document.documentElement, 0, document.documentElement, 2] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "b̈c̈d̈" but got object "Selection.addRange() tests
-
-Äb̈c̈d̈ëf̈g̈ḧ
-Ijklmnop
-QrstuvwxYzabcdefGhijklmn
-
-
-
-
-
-"use strict";
-
-testAddRangeSubSet(12, 16);
-testDiv.style.display = "none";
-"
-FAIL Range 15 [document.documentElement, 0, document.documentElement, 2] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
-" but got Element node <html><head><title>Selection.addRange() tests</title>
-<me...
+PASS Range 15 [document.documentElement, 0, document.documentElement, 2] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: second addRange() must result in the selection's last range having the specified endpoints 
+FAIL Range 15 [document.documentElement, 0, document.documentElement, 2] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "b̈c̈d̈" but got object "b̈c̈d̈"
+FAIL Range 15 [document.documentElement, 0, document.documentElement, 2] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 2
 FAIL Range 15 [document.documentElement, 0, document.documentElement, 2] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 15 [document.documentElement, 0, document.documentElement, 2] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 15 [document.documentElement, 0, document.documentElement, 2] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: first addRange() must result in rangeCount being 1 
@@ -2441,27 +2399,9 @@
 PASS Range 15 [document.documentElement, 0, document.documentElement, 2] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: modifying the Selection's last Range must modify the first added Range 
 PASS Range 15 [document.documentElement, 0, document.documentElement, 2] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 15 [document.documentElement, 0, document.documentElement, 2] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: second addRange() must result in rangeCount being 1 
-FAIL Range 15 [document.documentElement, 0, document.documentElement, 2] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
-" but got Element node <html><head><title>Selection.addRange() tests</title>
-<me...
-FAIL Range 15 [document.documentElement, 0, document.documentElement, 2] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "b̈c̈d̈e" but got object "Selection.addRange() tests
-
-Äb̈c̈d̈ëf̈g̈ḧ
-Ijklmnop
-QrstuvwxYzabcdefGhijklmn
-
-
-
-
-
-"use strict";
-
-testAddRangeSubSet(12, 16);
-testDiv.style.display = "none";
-"
-FAIL Range 15 [document.documentElement, 0, document.documentElement, 2] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
-" but got Element node <html><head><title>Selection.addRange() tests</title>
-<me...
+PASS Range 15 [document.documentElement, 0, document.documentElement, 2] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: second addRange() must result in the selection's last range having the specified endpoints 
+FAIL Range 15 [document.documentElement, 0, document.documentElement, 2] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "b̈c̈d̈e" but got object "b̈c̈d̈e"
+FAIL Range 15 [document.documentElement, 0, document.documentElement, 2] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 2
 FAIL Range 15 [document.documentElement, 0, document.documentElement, 2] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 15 [document.documentElement, 0, document.documentElement, 2] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 15 [document.documentElement, 0, document.documentElement, 2] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: first addRange() must result in rangeCount being 1 
@@ -2472,26 +2412,10 @@
 PASS Range 15 [document.documentElement, 0, document.documentElement, 2] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 15 [document.documentElement, 0, document.documentElement, 2] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: second addRange() must result in rangeCount being 1 
 FAIL Range 15 [document.documentElement, 0, document.documentElement, 2] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Ijklmnop
-" but got Element node <html><head><title>Selection.addRange() tests</title>
-<me...
-FAIL Range 15 [document.documentElement, 0, document.documentElement, 2] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "Selection.addRange() tests
-
-Äb̈c̈d̈ëf̈g̈ḧ
-Ijklmnop
-QrstuvwxYzabcdefGhijklmn
-
-
-
-
-
-"use strict";
-
-testAddRangeSubSet(12, 16);
-testDiv.style.display = "none";
+" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ
 "
-FAIL Range 15 [document.documentElement, 0, document.documentElement, 2] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
-" but got Element node <html><head><title>Selection.addRange() tests</title>
-<me...
+FAIL Range 15 [document.documentElement, 0, document.documentElement, 2] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object ""
+FAIL Range 15 [document.documentElement, 0, document.documentElement, 2] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 FAIL Range 15 [document.documentElement, 0, document.documentElement, 2] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 15 [document.documentElement, 0, document.documentElement, 2] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 15 [document.documentElement, 0, document.documentElement, 2] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: first addRange() must result in rangeCount being 1 
@@ -2502,26 +2426,10 @@
 PASS Range 15 [document.documentElement, 0, document.documentElement, 2] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 15 [document.documentElement, 0, document.documentElement, 2] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: second addRange() must result in rangeCount being 1 
 FAIL Range 15 [document.documentElement, 0, document.documentElement, 2] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Ijklmnop
-" but got Element node <html><head><title>Selection.addRange() tests</title>
-<me...
-FAIL Range 15 [document.documentElement, 0, document.documentElement, 2] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "I" but got object "Selection.addRange() tests
-
-Äb̈c̈d̈ëf̈g̈ḧ
-Ijklmnop
-QrstuvwxYzabcdefGhijklmn
-
-
-
-
-
-"use strict";
-
-testAddRangeSubSet(12, 16);
-testDiv.style.display = "none";
+" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ
 "
-FAIL Range 15 [document.documentElement, 0, document.documentElement, 2] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
-" but got Element node <html><head><title>Selection.addRange() tests</title>
-<me...
+FAIL Range 15 [document.documentElement, 0, document.documentElement, 2] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "I" but got object ""
+FAIL Range 15 [document.documentElement, 0, document.documentElement, 2] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 FAIL Range 15 [document.documentElement, 0, document.documentElement, 2] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 15 [document.documentElement, 0, document.documentElement, 2] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 15 [document.documentElement, 0, document.documentElement, 2] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: first addRange() must result in rangeCount being 1 
@@ -2532,26 +2440,10 @@
 PASS Range 15 [document.documentElement, 0, document.documentElement, 2] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 15 [document.documentElement, 0, document.documentElement, 2] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: second addRange() must result in rangeCount being 1 
 FAIL Range 15 [document.documentElement, 0, document.documentElement, 2] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Ijklmnop
-" but got Element node <html><head><title>Selection.addRange() tests</title>
-<me...
-FAIL Range 15 [document.documentElement, 0, document.documentElement, 2] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "klmnop" but got object "Selection.addRange() tests
-
-Äb̈c̈d̈ëf̈g̈ḧ
-Ijklmnop
-QrstuvwxYzabcdefGhijklmn
-
-
-
-
-
-"use strict";
-
-testAddRangeSubSet(12, 16);
-testDiv.style.display = "none";
+" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ
 "
-FAIL Range 15 [document.documentElement, 0, document.documentElement, 2] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
-" but got Element node <html><head><title>Selection.addRange() tests</title>
-<me...
+FAIL Range 15 [document.documentElement, 0, document.documentElement, 2] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "klmnop" but got object ""
+FAIL Range 15 [document.documentElement, 0, document.documentElement, 2] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 FAIL Range 15 [document.documentElement, 0, document.documentElement, 2] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 15 [document.documentElement, 0, document.documentElement, 2] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 15 [document.documentElement, 0, document.documentElement, 2] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: first addRange() must result in rangeCount being 1 
@@ -2562,27 +2454,11 @@
 PASS Range 15 [document.documentElement, 0, document.documentElement, 2] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 15 [document.documentElement, 0, document.documentElement, 2] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: second addRange() must result in rangeCount being 1 
 FAIL Range 15 [document.documentElement, 0, document.documentElement, 2] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Ijklmnop
-" but got Element node <html><head><title>Selection.addRange() tests</title>
-<me...
-FAIL Range 15 [document.documentElement, 0, document.documentElement, 2] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "klmnop
-" but got object "Selection.addRange() tests
-
-Äb̈c̈d̈ëf̈g̈ḧ
-Ijklmnop
-QrstuvwxYzabcdefGhijklmn
-
-
-
-
-
-"use strict";
-
-testAddRangeSubSet(12, 16);
-testDiv.style.display = "none";
+" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ
 "
-FAIL Range 15 [document.documentElement, 0, document.documentElement, 2] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
-" but got Element node <html><head><title>Selection.addRange() tests</title>
-<me...
+FAIL Range 15 [document.documentElement, 0, document.documentElement, 2] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "klmnop
+" but got object ""
+FAIL Range 15 [document.documentElement, 0, document.documentElement, 2] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 FAIL Range 15 [document.documentElement, 0, document.documentElement, 2] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 15 [document.documentElement, 0, document.documentElement, 2] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 15 [document.documentElement, 0, document.documentElement, 2] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: first addRange() must result in rangeCount being 1 
@@ -2670,27 +2546,13 @@
 PASS Range 15 [document.documentElement, 0, document.documentElement, 2] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: modifying the Selection's last Range must modify the first added Range 
 PASS Range 15 [document.documentElement, 0, document.documentElement, 2] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 15 [document.documentElement, 0, document.documentElement, 2] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: second addRange() must result in rangeCount being 1 
-FAIL Range 15 [document.documentElement, 0, document.documentElement, 2] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: endOffset of the Selection's last Range must match the added Range expected 1 but got 2
+FAIL Range 15 [document.documentElement, 0, document.documentElement, 2] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <html><head><title>Selection.addRange() tests</title>
+<me... but got Text node "Äb̈c̈d̈ëf̈g̈ḧ
+"
 FAIL Range 15 [document.documentElement, 0, document.documentElement, 2] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Selection.addRange() tests
 
-" but got object "Selection.addRange() tests
-
-Äb̈c̈d̈ëf̈g̈ḧ
-Ijklmnop
-QrstuvwxYzabcdefGhijklmn
-
-
-
-
-
-"use strict";
-
-testAddRangeSubSet(12, 16);
-testDiv.style.display = "none";
-"
-FAIL Range 15 [document.documentElement, 0, document.documentElement, 2] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
-" but got Element node <html><head><title>Selection.addRange() tests</title>
-<me...
+" but got object ""
+FAIL Range 15 [document.documentElement, 0, document.documentElement, 2] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 FAIL Range 15 [document.documentElement, 0, document.documentElement, 2] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 15 [document.documentElement, 0, document.documentElement, 2] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 15 [document.documentElement, 0, document.documentElement, 2] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: first addRange() must result in rangeCount being 1 
@@ -2742,7 +2604,7 @@
 PASS Range 15 [document.documentElement, 0, document.documentElement, 2] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: modifying the Selection's last Range must modify the first added Range 
 PASS Range 15 [document.documentElement, 0, document.documentElement, 2] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 15 [document.documentElement, 0, document.documentElement, 2] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: second addRange() must result in rangeCount being 1 
-FAIL Range 15 [document.documentElement, 0, document.documentElement, 2] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startOffset of the Selection's last Range must match the added Range expected 1 but got 0
+PASS Range 15 [document.documentElement, 0, document.documentElement, 2] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: second addRange() must result in the selection's last range having the specified endpoints 
 FAIL Range 15 [document.documentElement, 0, document.documentElement, 2] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ
 Ijklmnop
 QrstuvwxYzabcdefGhijklmn
@@ -2755,9 +2617,7 @@
 
 testAddRangeSubSet(12, 16);
 testDiv.style.display = "none";
-" but got object "Selection.addRange() tests
-
-Äb̈c̈d̈ëf̈g̈ḧ
+" but got object "Äb̈c̈d̈ëf̈g̈ḧ
 Ijklmnop
 QrstuvwxYzabcdefGhijklmn
 
@@ -2783,26 +2643,10 @@
 PASS Range 15 [document.documentElement, 0, document.documentElement, 2] followed by Range 17 [document.head, 1, document.head, 1]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 15 [document.documentElement, 0, document.documentElement, 2] followed by Range 17 [document.head, 1, document.head, 1]: second addRange() must result in rangeCount being 1 
 FAIL Range 15 [document.documentElement, 0, document.documentElement, 2] followed by Range 17 [document.head, 1, document.head, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <head><title>Selection.addRange() tests</title>
-<meta nam... but got Element node <html><head><title>Selection.addRange() tests</title>
-<me...
-FAIL Range 15 [document.documentElement, 0, document.documentElement, 2] followed by Range 17 [document.head, 1, document.head, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "Selection.addRange() tests
-
-Äb̈c̈d̈ëf̈g̈ḧ
-Ijklmnop
-QrstuvwxYzabcdefGhijklmn
-
-
-
-
-
-"use strict";
-
-testAddRangeSubSet(12, 16);
-testDiv.style.display = "none";
+<meta nam... but got Text node "Äb̈c̈d̈ëf̈g̈ḧ
 "
-FAIL Range 15 [document.documentElement, 0, document.documentElement, 2] followed by Range 17 [document.head, 1, document.head, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
-" but got Element node <html><head><title>Selection.addRange() tests</title>
-<me...
+FAIL Range 15 [document.documentElement, 0, document.documentElement, 2] followed by Range 17 [document.head, 1, document.head, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object ""
+FAIL Range 15 [document.documentElement, 0, document.documentElement, 2] followed by Range 17 [document.head, 1, document.head, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 FAIL Range 15 [document.documentElement, 0, document.documentElement, 2] followed by Range 17 [document.head, 1, document.head, 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 15 [document.documentElement, 0, document.documentElement, 2] followed by Range 18 [document.body, 0, document.body, 1]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 15 [document.documentElement, 0, document.documentElement, 2] followed by Range 18 [document.body, 0, document.body, 1]: first addRange() must result in rangeCount being 1 
@@ -2812,29 +2656,15 @@
 PASS Range 15 [document.documentElement, 0, document.documentElement, 2] followed by Range 18 [document.body, 0, document.body, 1]: modifying the Selection's last Range must modify the first added Range 
 PASS Range 15 [document.documentElement, 0, document.documentElement, 2] followed by Range 18 [document.body, 0, document.body, 1]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 15 [document.documentElement, 0, document.documentElement, 2] followed by Range 18 [document.body, 0, document.body, 1]: second addRange() must result in rangeCount being 1 
-FAIL Range 15 [document.documentElement, 0, document.documentElement, 2] followed by Range 18 [document.body, 0, document.body, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <body><div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ
-</p><p id... but got Element node <html><head><title>Selection.addRange() tests</title>
-<me...
+PASS Range 15 [document.documentElement, 0, document.documentElement, 2] followed by Range 18 [document.body, 0, document.body, 1]: second addRange() must result in the selection's last range having the specified endpoints 
 FAIL Range 15 [document.documentElement, 0, document.documentElement, 2] followed by Range 18 [document.body, 0, document.body, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ
 Ijklmnop
-QrstuvwxYzabcdefGhijklmn" but got object "Selection.addRange() tests
-
-Äb̈c̈d̈ëf̈g̈ḧ
+QrstuvwxYzabcdefGhijklmn" but got object "Äb̈c̈d̈ëf̈g̈ḧ
 Ijklmnop
-QrstuvwxYzabcdefGhijklmn
-
-
-
-
-
-"use strict";
-
-testAddRangeSubSet(12, 16);
-testDiv.style.display = "none";
-"
+QrstuvwxYzabcdefGhijklmn"
 FAIL Range 15 [document.documentElement, 0, document.documentElement, 2] followed by Range 18 [document.body, 0, document.body, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
-" but got Element node <html><head><title>Selection.addRange() tests</title>
-<me...
+" but got Element node <body><div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ
+</p><p id...
 FAIL Range 15 [document.documentElement, 0, document.documentElement, 2] followed by Range 18 [document.body, 0, document.body, 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 15 [document.documentElement, 0, document.documentElement, 2] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 15 [document.documentElement, 0, document.documentElement, 2] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: first addRange() must result in rangeCount being 1 
@@ -2884,26 +2714,10 @@
 PASS Range 15 [document.documentElement, 0, document.documentElement, 2] followed by Range 22 [paras[0], 0, paras[0], 0]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 15 [document.documentElement, 0, document.documentElement, 2] followed by Range 22 [paras[0], 0, paras[0], 0]: second addRange() must result in rangeCount being 1 
 FAIL Range 15 [document.documentElement, 0, document.documentElement, 2] followed by Range 22 [paras[0], 0, paras[0], 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ
-</p> but got Element node <html><head><title>Selection.addRange() tests</title>
-<me...
-FAIL Range 15 [document.documentElement, 0, document.documentElement, 2] followed by Range 22 [paras[0], 0, paras[0], 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "Selection.addRange() tests
-
-Äb̈c̈d̈ëf̈g̈ḧ
-Ijklmnop
-QrstuvwxYzabcdefGhijklmn
-
-
-
-
-
-"use strict";
-
-testAddRangeSubSet(12, 16);
-testDiv.style.display = "none";
+</p> but got Text node "Äb̈c̈d̈ëf̈g̈ḧ
 "
-FAIL Range 15 [document.documentElement, 0, document.documentElement, 2] followed by Range 22 [paras[0], 0, paras[0], 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
-" but got Element node <html><head><title>Selection.addRange() tests</title>
-<me...
+FAIL Range 15 [document.documentElement, 0, document.documentElement, 2] followed by Range 22 [paras[0], 0, paras[0], 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object ""
+FAIL Range 15 [document.documentElement, 0, document.documentElement, 2] followed by Range 22 [paras[0], 0, paras[0], 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 FAIL Range 15 [document.documentElement, 0, document.documentElement, 2] followed by Range 22 [paras[0], 0, paras[0], 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 15 [document.documentElement, 0, document.documentElement, 2] followed by Range 23 [paras[0], 0, paras[0], 1]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 15 [document.documentElement, 0, document.documentElement, 2] followed by Range 23 [paras[0], 0, paras[0], 1]: first addRange() must result in rangeCount being 1 
@@ -2913,28 +2727,13 @@
 PASS Range 15 [document.documentElement, 0, document.documentElement, 2] followed by Range 23 [paras[0], 0, paras[0], 1]: modifying the Selection's last Range must modify the first added Range 
 PASS Range 15 [document.documentElement, 0, document.documentElement, 2] followed by Range 23 [paras[0], 0, paras[0], 1]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 15 [document.documentElement, 0, document.documentElement, 2] followed by Range 23 [paras[0], 0, paras[0], 1]: second addRange() must result in rangeCount being 1 
-FAIL Range 15 [document.documentElement, 0, document.documentElement, 2] followed by Range 23 [paras[0], 0, paras[0], 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ
-</p> but got Element node <html><head><title>Selection.addRange() tests</title>
-<me...
+PASS Range 15 [document.documentElement, 0, document.documentElement, 2] followed by Range 23 [paras[0], 0, paras[0], 1]: second addRange() must result in the selection's last range having the specified endpoints 
 FAIL Range 15 [document.documentElement, 0, document.documentElement, 2] followed by Range 23 [paras[0], 0, paras[0], 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ
-" but got object "Selection.addRange() tests
-
-Äb̈c̈d̈ëf̈g̈ḧ
-Ijklmnop
-QrstuvwxYzabcdefGhijklmn
-
-
-
-
-
-"use strict";
-
-testAddRangeSubSet(12, 16);
-testDiv.style.display = "none";
+" but got object "Äb̈c̈d̈ëf̈g̈ḧ
 "
 FAIL Range 15 [document.documentElement, 0, document.documentElement, 2] followed by Range 23 [paras[0], 0, paras[0], 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
-" but got Element node <html><head><title>Selection.addRange() tests</title>
-<me...
+" but got Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ
+</p>
 FAIL Range 15 [document.documentElement, 0, document.documentElement, 2] followed by Range 23 [paras[0], 0, paras[0], 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 15 [document.documentElement, 0, document.documentElement, 2] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 15 [document.documentElement, 0, document.documentElement, 2] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: first addRange() must result in rangeCount being 1 
@@ -2970,28 +2769,13 @@
 PASS Range 15 [document.documentElement, 0, document.documentElement, 2] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: modifying the Selection's last Range must modify the first added Range 
 PASS Range 15 [document.documentElement, 0, document.documentElement, 2] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 15 [document.documentElement, 0, document.documentElement, 2] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: second addRange() must result in rangeCount being 1 
-FAIL Range 15 [document.documentElement, 0, document.documentElement, 2] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
-" but got Element node <html><head><title>Selection.addRange() tests</title>
-<me...
+PASS Range 15 [document.documentElement, 0, document.documentElement, 2] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: second addRange() must result in the selection's last range having the specified endpoints 
 FAIL Range 15 [document.documentElement, 0, document.documentElement, 2] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ
-" but got object "Selection.addRange() tests
-
-Äb̈c̈d̈ëf̈g̈ḧ
-Ijklmnop
-QrstuvwxYzabcdefGhijklmn
-
-
-
-
-
-"use strict";
-
-testAddRangeSubSet(12, 16);
-testDiv.style.display = "none";
+" but got object "Äb̈c̈d̈ëf̈g̈ḧ
 "
-FAIL Range 15 [document.documentElement, 0, document.documentElement, 2] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
-" but got Element node <html><head><title>Selection.addRange() tests</title>
-<me...
+FAIL Range 15 [document.documentElement, 0, document.documentElement, 2] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, endContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
+" but got Text node "Ijklmnop
+"
 FAIL Range 15 [document.documentElement, 0, document.documentElement, 2] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 15 [document.documentElement, 0, document.documentElement, 2] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 15 [document.documentElement, 0, document.documentElement, 2] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: first addRange() must result in rangeCount being 1 
@@ -3001,28 +2785,13 @@
 PASS Range 15 [document.documentElement, 0, document.documentElement, 2] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: modifying the Selection's last Range must modify the first added Range 
 PASS Range 15 [document.documentElement, 0, document.documentElement, 2] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 15 [document.documentElement, 0, document.documentElement, 2] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: second addRange() must result in rangeCount being 1 
-FAIL Range 15 [document.documentElement, 0, document.documentElement, 2] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
-" but got Element node <html><head><title>Selection.addRange() tests</title>
-<me...
+PASS Range 15 [document.documentElement, 0, document.documentElement, 2] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: second addRange() must result in the selection's last range having the specified endpoints 
 FAIL Range 15 [document.documentElement, 0, document.documentElement, 2] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ
-Ijklmnop" but got object "Selection.addRange() tests
-
-Äb̈c̈d̈ëf̈g̈ḧ
-Ijklmnop
-QrstuvwxYzabcdefGhijklmn
-
-
-
-
-
-"use strict";
-
-testAddRangeSubSet(12, 16);
-testDiv.style.display = "none";
+Ijklmnop" but got object "Äb̈c̈d̈ëf̈g̈ḧ
+Ijklmnop"
+FAIL Range 15 [document.documentElement, 0, document.documentElement, 2] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, endContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
+" but got Text node "Ijklmnop
 "
-FAIL Range 15 [document.documentElement, 0, document.documentElement, 2] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
-" but got Element node <html><head><title>Selection.addRange() tests</title>
-<me...
 FAIL Range 15 [document.documentElement, 0, document.documentElement, 2] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 15 [document.documentElement, 0, document.documentElement, 2] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 15 [document.documentElement, 0, document.documentElement, 2] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: first addRange() must result in rangeCount being 1 
@@ -3032,29 +2801,13 @@
 PASS Range 15 [document.documentElement, 0, document.documentElement, 2] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: modifying the Selection's last Range must modify the first added Range 
 PASS Range 15 [document.documentElement, 0, document.documentElement, 2] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 15 [document.documentElement, 0, document.documentElement, 2] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: second addRange() must result in rangeCount being 1 
-FAIL Range 15 [document.documentElement, 0, document.documentElement, 2] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
-" but got Element node <html><head><title>Selection.addRange() tests</title>
-<me...
+PASS Range 15 [document.documentElement, 0, document.documentElement, 2] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: second addRange() must result in the selection's last range having the specified endpoints 
 FAIL Range 15 [document.documentElement, 0, document.documentElement, 2] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "̈c̈d̈ëf̈g̈ḧ
 Ijklmnop
-QrstuvwxYzabcdef" but got object "Selection.addRange() tests
-
-Äb̈c̈d̈ëf̈g̈ḧ
+QrstuvwxYzabcdef" but got object "̈c̈d̈ëf̈g̈ḧ
 Ijklmnop
-QrstuvwxYzabcdefGhijklmn
-
-
-
-
-
-"use strict";
-
-testAddRangeSubSet(12, 16);
-testDiv.style.display = "none";
-"
-FAIL Range 15 [document.documentElement, 0, document.documentElement, 2] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
-" but got Element node <html><head><title>Selection.addRange() tests</title>
-<me...
+QrstuvwxYzabcdef"
+FAIL Range 15 [document.documentElement, 0, document.documentElement, 2] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 3
 FAIL Range 15 [document.documentElement, 0, document.documentElement, 2] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 15 [document.documentElement, 0, document.documentElement, 2] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 15 [document.documentElement, 0, document.documentElement, 2] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: first addRange() must result in rangeCount being 1 
@@ -3064,27 +2817,11 @@
 PASS Range 15 [document.documentElement, 0, document.documentElement, 2] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: modifying the Selection's last Range must modify the first added Range 
 PASS Range 15 [document.documentElement, 0, document.documentElement, 2] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 15 [document.documentElement, 0, document.documentElement, 2] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: second addRange() must result in rangeCount being 1 
-FAIL Range 15 [document.documentElement, 0, document.documentElement, 2] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ
-</p> but got Element node <html><head><title>Selection.addRange() tests</title>
-<me...
-FAIL Range 15 [document.documentElement, 0, document.documentElement, 2] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d" but got object "Selection.addRange() tests
-
-Äb̈c̈d̈ëf̈g̈ḧ
-Ijklmnop
-QrstuvwxYzabcdefGhijklmn
-
-
-
-
-
-"use strict";
-
-testAddRangeSubSet(12, 16);
-testDiv.style.display = "none";
-"
+PASS Range 15 [document.documentElement, 0, document.documentElement, 2] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: second addRange() must result in the selection's last range having the specified endpoints 
+FAIL Range 15 [document.documentElement, 0, document.documentElement, 2] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d" but got object "Äb̈c̈d"
 FAIL Range 15 [document.documentElement, 0, document.documentElement, 2] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
-" but got Element node <html><head><title>Selection.addRange() tests</title>
-<me...
+" but got Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ
+</p>
 FAIL Range 15 [document.documentElement, 0, document.documentElement, 2] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 15 [document.documentElement, 0, document.documentElement, 2] followed by Range 30 [testDiv, 2, paras[4], 1]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 15 [document.documentElement, 0, document.documentElement, 2] followed by Range 30 [testDiv, 2, paras[4], 1]: first addRange() must result in rangeCount being 1 
@@ -3095,26 +2832,10 @@
 PASS Range 15 [document.documentElement, 0, document.documentElement, 2] followed by Range 30 [testDiv, 2, paras[4], 1]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 15 [document.documentElement, 0, document.documentElement, 2] followed by Range 30 [testDiv, 2, paras[4], 1]: second addRange() must result in rangeCount being 1 
 FAIL Range 15 [document.documentElement, 0, document.documentElement, 2] followed by Range 30 [testDiv, 2, paras[4], 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ
-</p><p id="b" s... but got Element node <html><head><title>Selection.addRange() tests</title>
-<me...
-FAIL Range 15 [document.documentElement, 0, document.documentElement, 2] followed by Range 30 [testDiv, 2, paras[4], 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "QrstuvwxYzabcdefGhijklmn" but got object "Selection.addRange() tests
-
-Äb̈c̈d̈ëf̈g̈ḧ
-Ijklmnop
-QrstuvwxYzabcdefGhijklmn
-
-
-
-
-
-"use strict";
-
-testAddRangeSubSet(12, 16);
-testDiv.style.display = "none";
+</p><p id="b" s... but got Text node "Äb̈c̈d̈ëf̈g̈ḧ
 "
-FAIL Range 15 [document.documentElement, 0, document.documentElement, 2] followed by Range 30 [testDiv, 2, paras[4], 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
-" but got Element node <html><head><title>Selection.addRange() tests</title>
-<me...
+FAIL Range 15 [document.documentElement, 0, document.documentElement, 2] followed by Range 30 [testDiv, 2, paras[4], 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "QrstuvwxYzabcdefGhijklmn" but got object ""
+FAIL Range 15 [document.documentElement, 0, document.documentElement, 2] followed by Range 30 [testDiv, 2, paras[4], 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 FAIL Range 15 [document.documentElement, 0, document.documentElement, 2] followed by Range 30 [testDiv, 2, paras[4], 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 15 [document.documentElement, 0, document.documentElement, 2] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 15 [document.documentElement, 0, document.documentElement, 2] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: first addRange() must result in rangeCount being 1 
@@ -3125,27 +2846,11 @@
 PASS Range 15 [document.documentElement, 0, document.documentElement, 2] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 15 [document.documentElement, 0, document.documentElement, 2] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: second addRange() must result in rangeCount being 1 
 FAIL Range 15 [document.documentElement, 0, document.documentElement, 2] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ
-</p><p id="b" s... but got Element node <html><head><title>Selection.addRange() tests</title>
-<me...
-FAIL Range 15 [document.documentElement, 0, document.documentElement, 2] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Ijklmnop
-Qrstu" but got object "Selection.addRange() tests
-
-Äb̈c̈d̈ëf̈g̈ḧ
-Ijklmnop
-QrstuvwxYzabcdefGhijklmn
-
-
-
-
-
-"use strict";
-
-testAddRangeSubSet(12, 16);
-testDiv.style.display = "none";
+</p><p id="b" s... but got Text node "Äb̈c̈d̈ëf̈g̈ḧ
 "
-FAIL Range 15 [document.documentElement, 0, document.documentElement, 2] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
-" but got Element node <html><head><title>Selection.addRange() tests</title>
-<me...
+FAIL Range 15 [document.documentElement, 0, document.documentElement, 2] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Ijklmnop
+Qrstu" but got object ""
+FAIL Range 15 [document.documentElement, 0, document.documentElement, 2] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 FAIL Range 15 [document.documentElement, 0, document.documentElement, 2] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 15 [document.documentElement, 0, document.documentElement, 2] followed by Range 32 [document.documentElement, 1, document.body, 0]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 15 [document.documentElement, 0, document.documentElement, 2] followed by Range 32 [document.documentElement, 1, document.body, 0]: first addRange() must result in rangeCount being 1 
@@ -3155,25 +2860,11 @@
 PASS Range 15 [document.documentElement, 0, document.documentElement, 2] followed by Range 32 [document.documentElement, 1, document.body, 0]: modifying the Selection's last Range must modify the first added Range 
 PASS Range 15 [document.documentElement, 0, document.documentElement, 2] followed by Range 32 [document.documentElement, 1, document.body, 0]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 15 [document.documentElement, 0, document.documentElement, 2] followed by Range 32 [document.documentElement, 1, document.body, 0]: second addRange() must result in rangeCount being 1 
-FAIL Range 15 [document.documentElement, 0, document.documentElement, 2] followed by Range 32 [document.documentElement, 1, document.body, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startOffset of the Selection's last Range must match the added Range expected 1 but got 0
-FAIL Range 15 [document.documentElement, 0, document.documentElement, 2] followed by Range 32 [document.documentElement, 1, document.body, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "Selection.addRange() tests
-
-Äb̈c̈d̈ëf̈g̈ḧ
-Ijklmnop
-QrstuvwxYzabcdefGhijklmn
-
-
-
-
-
-"use strict";
-
-testAddRangeSubSet(12, 16);
-testDiv.style.display = "none";
+FAIL Range 15 [document.documentElement, 0, document.documentElement, 2] followed by Range 32 [document.documentElement, 1, document.body, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <html><head><title>Selection.addRange() tests</title>
+<me... but got Text node "Äb̈c̈d̈ëf̈g̈ḧ
 "
-FAIL Range 15 [document.documentElement, 0, document.documentElement, 2] followed by Range 32 [document.documentElement, 1, document.body, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
-" but got Element node <html><head><title>Selection.addRange() tests</title>
-<me...
+FAIL Range 15 [document.documentElement, 0, document.documentElement, 2] followed by Range 32 [document.documentElement, 1, document.body, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object ""
+FAIL Range 15 [document.documentElement, 0, document.documentElement, 2] followed by Range 32 [document.documentElement, 1, document.body, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 FAIL Range 15 [document.documentElement, 0, document.documentElement, 2] followed by Range 32 [document.documentElement, 1, document.body, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 15 [document.documentElement, 0, document.documentElement, 2] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 15 [document.documentElement, 0, document.documentElement, 2] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: first addRange() must result in rangeCount being 1 
@@ -3291,29 +2982,16 @@
 PASS Range 15 [document.documentElement, 0, document.documentElement, 2] followed by Range 37 [testDiv, 0, comment, 5]: modifying the Selection's last Range must modify the first added Range 
 PASS Range 15 [document.documentElement, 0, document.documentElement, 2] followed by Range 37 [testDiv, 0, comment, 5]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 15 [document.documentElement, 0, document.documentElement, 2] followed by Range 37 [testDiv, 0, comment, 5]: second addRange() must result in rangeCount being 1 
-FAIL Range 15 [document.documentElement, 0, document.documentElement, 2] followed by Range 37 [testDiv, 0, comment, 5]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ
-</p><p id="b" s... but got Element node <html><head><title>Selection.addRange() tests</title>
-<me...
+FAIL Range 15 [document.documentElement, 0, document.documentElement, 2] followed by Range 37 [testDiv, 0, comment, 5]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: endContainer of the Selection's last Range must match the added Range expected Comment node <!--Alphabet soup?--> but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ
+</p><p id="b" s...
 FAIL Range 15 [document.documentElement, 0, document.documentElement, 2] followed by Range 37 [testDiv, 0, comment, 5]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ
 Ijklmnop
-QrstuvwxYzabcdefGhijklmn" but got object "Selection.addRange() tests
-
-Äb̈c̈d̈ëf̈g̈ḧ
+QrstuvwxYzabcdefGhijklmn" but got object "Äb̈c̈d̈ëf̈g̈ḧ
 Ijklmnop
-QrstuvwxYzabcdefGhijklmn
-
-
-
-
-
-"use strict";
-
-testAddRangeSubSet(12, 16);
-testDiv.style.display = "none";
-"
+QrstuvwxYzabcdefGhijklmn"
 FAIL Range 15 [document.documentElement, 0, document.documentElement, 2] followed by Range 37 [testDiv, 0, comment, 5]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
-" but got Element node <html><head><title>Selection.addRange() tests</title>
-<me...
+" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ
+</p><p id="b" s...
 FAIL Range 15 [document.documentElement, 0, document.documentElement, 2] followed by Range 37 [testDiv, 0, comment, 5]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 15 [document.documentElement, 0, document.documentElement, 2] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 15 [document.documentElement, 0, document.documentElement, 2] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: first addRange() must result in rangeCount being 1 
@@ -3323,26 +3001,10 @@
 PASS Range 15 [document.documentElement, 0, document.documentElement, 2] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: modifying the Selection's last Range must modify the first added Range 
 PASS Range 15 [document.documentElement, 0, document.documentElement, 2] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 15 [document.documentElement, 0, document.documentElement, 2] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: second addRange() must result in rangeCount being 1 
-FAIL Range 15 [document.documentElement, 0, document.documentElement, 2] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Qrstuvwx" but got Element node <html><head><title>Selection.addRange() tests</title>
-<me...
-FAIL Range 15 [document.documentElement, 0, document.documentElement, 2] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "uvwxYzabcdefGhijklmn" but got object "Selection.addRange() tests
-
-Äb̈c̈d̈ëf̈g̈ḧ
-Ijklmnop
-QrstuvwxYzabcdefGhijklmn
-
-
-
-
-
-"use strict";
-
-testAddRangeSubSet(12, 16);
-testDiv.style.display = "none";
+FAIL Range 15 [document.documentElement, 0, document.documentElement, 2] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Qrstuvwx" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ
 "
-FAIL Range 15 [document.documentElement, 0, document.documentElement, 2] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
-" but got Element node <html><head><title>Selection.addRange() tests</title>
-<me...
+FAIL Range 15 [document.documentElement, 0, document.documentElement, 2] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "uvwxYzabcdefGhijklmn" but got object ""
+FAIL Range 15 [document.documentElement, 0, document.documentElement, 2] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 FAIL Range 15 [document.documentElement, 0, document.documentElement, 2] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 15 [document.documentElement, 0, document.documentElement, 2] followed by Range 39 [paras[3], 1, comment, 8]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 15 [document.documentElement, 0, document.documentElement, 2] followed by Range 39 [paras[3], 1, comment, 8]: first addRange() must result in rangeCount being 1 
@@ -3352,26 +3014,10 @@
 PASS Range 15 [document.documentElement, 0, document.documentElement, 2] followed by Range 39 [paras[3], 1, comment, 8]: modifying the Selection's last Range must modify the first added Range 
 PASS Range 15 [document.documentElement, 0, document.documentElement, 2] followed by Range 39 [paras[3], 1, comment, 8]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 15 [document.documentElement, 0, document.documentElement, 2] followed by Range 39 [paras[3], 1, comment, 8]: second addRange() must result in rangeCount being 1 
-FAIL Range 15 [document.documentElement, 0, document.documentElement, 2] followed by Range 39 [paras[3], 1, comment, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <p id="d" style="display:none">Yzabcdef</p> but got Element node <html><head><title>Selection.addRange() tests</title>
-<me...
-FAIL Range 15 [document.documentElement, 0, document.documentElement, 2] followed by Range 39 [paras[3], 1, comment, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Ghijklmn" but got object "Selection.addRange() tests
-
-Äb̈c̈d̈ëf̈g̈ḧ
-Ijklmnop
-QrstuvwxYzabcdefGhijklmn
-
-
-
-
-
-"use strict";
-
-testAddRangeSubSet(12, 16);
-testDiv.style.display = "none";
+FAIL Range 15 [document.documentElement, 0, document.documentElement, 2] followed by Range 39 [paras[3], 1, comment, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <p id="d" style="display:none">Yzabcdef</p> but got Text node "Äb̈c̈d̈ëf̈g̈ḧ
 "
-FAIL Range 15 [document.documentElement, 0, document.documentElement, 2] followed by Range 39 [paras[3], 1, comment, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
-" but got Element node <html><head><title>Selection.addRange() tests</title>
-<me...
+FAIL Range 15 [document.documentElement, 0, document.documentElement, 2] followed by Range 39 [paras[3], 1, comment, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Ghijklmn" but got object ""
+FAIL Range 15 [document.documentElement, 0, document.documentElement, 2] followed by Range 39 [paras[3], 1, comment, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 FAIL Range 15 [document.documentElement, 0, document.documentElement, 2] followed by Range 39 [paras[3], 1, comment, 8]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 15 [document.documentElement, 0, document.documentElement, 2] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 15 [document.documentElement, 0, document.documentElement, 2] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: first addRange() must result in rangeCount being 1 
diff --git a/third_party/WebKit/LayoutTests/external/wpt/selection/addRange-16-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/selection/addRange-16-expected.txt
index 3641707..059dde7 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/selection/addRange-16-expected.txt
+++ b/third_party/WebKit/LayoutTests/external/wpt/selection/addRange-16-expected.txt
@@ -1,16 +1,3 @@
-CONSOLE ERROR: line 7: The given range isn't in document.
-CONSOLE ERROR: line 7: The given range isn't in document.
-CONSOLE ERROR: line 7: The given range isn't in document.
-CONSOLE ERROR: line 7: Discontiguous selection is not supported.
-CONSOLE ERROR: line 7: The given range isn't in document.
-CONSOLE ERROR: line 7: The given range isn't in document.
-CONSOLE ERROR: line 7: Discontiguous selection is not supported.
-CONSOLE ERROR: line 7: The given range isn't in document.
-CONSOLE ERROR: line 7: The given range isn't in document.
-CONSOLE ERROR: line 7: The given range isn't in document.
-CONSOLE ERROR: line 7: The given range isn't in document.
-CONSOLE ERROR: line 7: Discontiguous selection is not supported.
-CONSOLE ERROR: line 7: Discontiguous selection is not supported.
 CONSOLE ERROR: line 7: Discontiguous selection is not supported.
 CONSOLE ERROR: line 7: Discontiguous selection is not supported.
 CONSOLE ERROR: line 7: Discontiguous selection is not supported.
@@ -23,7 +10,6 @@
 CONSOLE ERROR: line 7: Discontiguous selection is not supported.
 CONSOLE ERROR: line 7: Discontiguous selection is not supported.
 CONSOLE ERROR: line 7: Discontiguous selection is not supported.
-CONSOLE ERROR: line 7: Discontiguous selection is not supported.
 CONSOLE ERROR: line 7: The given range isn't in document.
 CONSOLE ERROR: line 7: The given range isn't in document.
 CONSOLE ERROR: line 7: Discontiguous selection is not supported.
@@ -32,23 +18,54 @@
 CONSOLE ERROR: line 7: Discontiguous selection is not supported.
 CONSOLE ERROR: line 7: Discontiguous selection is not supported.
 CONSOLE ERROR: line 7: Discontiguous selection is not supported.
-CONSOLE ERROR: line 7: Discontiguous selection is not supported.
-CONSOLE ERROR: line 7: Discontiguous selection is not supported.
-CONSOLE ERROR: line 7: Discontiguous selection is not supported.
-CONSOLE ERROR: line 7: Discontiguous selection is not supported.
-CONSOLE ERROR: line 7: Discontiguous selection is not supported.
 CONSOLE ERROR: line 7: The given range isn't in document.
 CONSOLE ERROR: line 7: The given range isn't in document.
 CONSOLE ERROR: line 7: The given range isn't in document.
 CONSOLE ERROR: line 7: The given range isn't in document.
+CONSOLE ERROR: line 7: Discontiguous selection is not supported.
+CONSOLE ERROR: line 7: Discontiguous selection is not supported.
+CONSOLE ERROR: line 7: Discontiguous selection is not supported.
+CONSOLE ERROR: line 7: Discontiguous selection is not supported.
+CONSOLE ERROR: line 7: Discontiguous selection is not supported.
+CONSOLE ERROR: line 7: Discontiguous selection is not supported.
 CONSOLE ERROR: line 7: The given range isn't in document.
 CONSOLE ERROR: line 7: The given range isn't in document.
 CONSOLE ERROR: line 7: The given range isn't in document.
 CONSOLE ERROR: line 7: Discontiguous selection is not supported.
 CONSOLE ERROR: line 7: Discontiguous selection is not supported.
+CONSOLE ERROR: line 7: Discontiguous selection is not supported.
 CONSOLE ERROR: line 7: The given range isn't in document.
 CONSOLE ERROR: line 7: The given range isn't in document.
 CONSOLE ERROR: line 7: Discontiguous selection is not supported.
+CONSOLE ERROR: line 7: Discontiguous selection is not supported.
+CONSOLE ERROR: line 7: Discontiguous selection is not supported.
+CONSOLE ERROR: line 7: Discontiguous selection is not supported.
+CONSOLE ERROR: line 7: Discontiguous selection is not supported.
+CONSOLE ERROR: line 7: Discontiguous selection is not supported.
+CONSOLE ERROR: line 7: The given range isn't in document.
+CONSOLE ERROR: line 7: The given range isn't in document.
+CONSOLE ERROR: line 7: The given range isn't in document.
+CONSOLE ERROR: line 7: The given range isn't in document.
+CONSOLE ERROR: line 7: Discontiguous selection is not supported.
+CONSOLE ERROR: line 7: Discontiguous selection is not supported.
+CONSOLE ERROR: line 7: Discontiguous selection is not supported.
+CONSOLE ERROR: line 7: Discontiguous selection is not supported.
+CONSOLE ERROR: line 7: Discontiguous selection is not supported.
+CONSOLE ERROR: line 7: Discontiguous selection is not supported.
+CONSOLE ERROR: line 7: The given range isn't in document.
+CONSOLE ERROR: line 7: The given range isn't in document.
+CONSOLE ERROR: line 7: The given range isn't in document.
+CONSOLE ERROR: line 7: Discontiguous selection is not supported.
+CONSOLE ERROR: line 7: Discontiguous selection is not supported.
+CONSOLE ERROR: line 7: Discontiguous selection is not supported.
+CONSOLE ERROR: line 7: The given range isn't in document.
+CONSOLE ERROR: line 7: The given range isn't in document.
+CONSOLE ERROR: line 7: Discontiguous selection is not supported.
+CONSOLE ERROR: line 7: Discontiguous selection is not supported.
+CONSOLE ERROR: line 7: Discontiguous selection is not supported.
+CONSOLE ERROR: line 7: Discontiguous selection is not supported.
+CONSOLE ERROR: line 7: Discontiguous selection is not supported.
+CONSOLE ERROR: line 7: Discontiguous selection is not supported.
 CONSOLE ERROR: line 7: The given range isn't in document.
 CONSOLE ERROR: line 7: The given range isn't in document.
 CONSOLE ERROR: line 7: The given range isn't in document.
@@ -71,25 +88,9 @@
 PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: modifying the Selection's last Range must modify the first added Range 
 PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: second addRange() must result in rangeCount being 1 
-FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
-" but got Element node <html><head><title>Selection.addRange() tests</title>
-<me...
-FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "Äb̈c̈d̈ëf̈g̈ḧ
-Ijklmnop
-QrstuvwxYzabcdefGhijklmn
-
-
-
-
-
-"use strict";
-
-testAddRangeSubSet(16, 20);
-testDiv.style.display = "none";
-"
-FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
-" but got Element node <html><head><title>Selection.addRange() tests</title>
-<me...
+FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startOffset of the Selection's last Range must match the added Range expected 0 but got 6
+FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object ""
+FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: first addRange() must result in rangeCount being 1 
@@ -99,25 +100,9 @@
 PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: modifying the Selection's last Range must modify the first added Range 
 PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: second addRange() must result in rangeCount being 1 
-FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
-" but got Element node <html><head><title>Selection.addRange() tests</title>
-<me...
-FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "A" but got object "Äb̈c̈d̈ëf̈g̈ḧ
-Ijklmnop
-QrstuvwxYzabcdefGhijklmn
-
-
-
-
-
-"use strict";
-
-testAddRangeSubSet(16, 20);
-testDiv.style.display = "none";
-"
-FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
-" but got Element node <html><head><title>Selection.addRange() tests</title>
-<me...
+FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startOffset of the Selection's last Range must match the added Range expected 0 but got 6
+FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "A" but got object ""
+FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: first addRange() must result in rangeCount being 1 
@@ -127,25 +112,9 @@
 PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: modifying the Selection's last Range must modify the first added Range 
 PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: second addRange() must result in rangeCount being 1 
-FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
-" but got Element node <html><head><title>Selection.addRange() tests</title>
-<me...
-FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "b̈c̈d̈" but got object "Äb̈c̈d̈ëf̈g̈ḧ
-Ijklmnop
-QrstuvwxYzabcdefGhijklmn
-
-
-
-
-
-"use strict";
-
-testAddRangeSubSet(16, 20);
-testDiv.style.display = "none";
-"
-FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
-" but got Element node <html><head><title>Selection.addRange() tests</title>
-<me...
+PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: second addRange() must result in the selection's last range having the specified endpoints 
+FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "b̈c̈d̈" but got object "b̈c̈d̈"
+FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 2
 FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: first addRange() must result in rangeCount being 1 
@@ -155,25 +124,9 @@
 PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: modifying the Selection's last Range must modify the first added Range 
 PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: second addRange() must result in rangeCount being 1 
-FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
-" but got Element node <html><head><title>Selection.addRange() tests</title>
-<me...
-FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "b̈c̈d̈e" but got object "Äb̈c̈d̈ëf̈g̈ḧ
-Ijklmnop
-QrstuvwxYzabcdefGhijklmn
-
-
-
-
-
-"use strict";
-
-testAddRangeSubSet(16, 20);
-testDiv.style.display = "none";
-"
-FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
-" but got Element node <html><head><title>Selection.addRange() tests</title>
-<me...
+PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: second addRange() must result in the selection's last range having the specified endpoints 
+FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "b̈c̈d̈e" but got object "b̈c̈d̈e"
+FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 2
 FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: first addRange() must result in rangeCount being 1 
@@ -184,24 +137,10 @@
 PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: second addRange() must result in rangeCount being 1 
 FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Ijklmnop
-" but got Element node <html><head><title>Selection.addRange() tests</title>
-<me...
-FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "Äb̈c̈d̈ëf̈g̈ḧ
-Ijklmnop
-QrstuvwxYzabcdefGhijklmn
-
-
-
-
-
-"use strict";
-
-testAddRangeSubSet(16, 20);
-testDiv.style.display = "none";
+" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ
 "
-FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
-" but got Element node <html><head><title>Selection.addRange() tests</title>
-<me...
+FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object ""
+FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: first addRange() must result in rangeCount being 1 
@@ -212,24 +151,10 @@
 PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: second addRange() must result in rangeCount being 1 
 FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Ijklmnop
-" but got Element node <html><head><title>Selection.addRange() tests</title>
-<me...
-FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "I" but got object "Äb̈c̈d̈ëf̈g̈ḧ
-Ijklmnop
-QrstuvwxYzabcdefGhijklmn
-
-
-
-
-
-"use strict";
-
-testAddRangeSubSet(16, 20);
-testDiv.style.display = "none";
+" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ
 "
-FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
-" but got Element node <html><head><title>Selection.addRange() tests</title>
-<me...
+FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "I" but got object ""
+FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: first addRange() must result in rangeCount being 1 
@@ -240,24 +165,10 @@
 PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: second addRange() must result in rangeCount being 1 
 FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Ijklmnop
-" but got Element node <html><head><title>Selection.addRange() tests</title>
-<me...
-FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "klmnop" but got object "Äb̈c̈d̈ëf̈g̈ḧ
-Ijklmnop
-QrstuvwxYzabcdefGhijklmn
-
-
-
-
-
-"use strict";
-
-testAddRangeSubSet(16, 20);
-testDiv.style.display = "none";
+" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ
 "
-FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
-" but got Element node <html><head><title>Selection.addRange() tests</title>
-<me...
+FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "klmnop" but got object ""
+FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: first addRange() must result in rangeCount being 1 
@@ -268,25 +179,11 @@
 PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: second addRange() must result in rangeCount being 1 
 FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Ijklmnop
-" but got Element node <html><head><title>Selection.addRange() tests</title>
-<me...
-FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "klmnop
-" but got object "Äb̈c̈d̈ëf̈g̈ḧ
-Ijklmnop
-QrstuvwxYzabcdefGhijklmn
-
-
-
-
-
-"use strict";
-
-testAddRangeSubSet(16, 20);
-testDiv.style.display = "none";
+" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ
 "
-FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
-" but got Element node <html><head><title>Selection.addRange() tests</title>
-<me...
+FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "klmnop
+" but got object ""
+FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: first addRange() must result in rangeCount being 1 
@@ -374,27 +271,13 @@
 PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: modifying the Selection's last Range must modify the first added Range 
 PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: second addRange() must result in rangeCount being 1 
-FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: endOffset of the Selection's last Range must match the added Range expected 1 but got 2
+FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <html><head><title>Selection.addRange() tests</title>
+<me... but got Text node "Äb̈c̈d̈ëf̈g̈ḧ
+"
 FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Selection.addRange() tests
 
-" but got object "Selection.addRange() tests
-
-Äb̈c̈d̈ëf̈g̈ḧ
-Ijklmnop
-QrstuvwxYzabcdefGhijklmn
-
-
-
-
-
-"use strict";
-
-testAddRangeSubSet(16, 20);
-testDiv.style.display = "none";
-"
-FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
-" but got Element node <html><head><title>Selection.addRange() tests</title>
-<me...
+" but got object ""
+FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: first addRange() must result in rangeCount being 1 
@@ -498,27 +381,15 @@
 PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 18 [document.body, 0, document.body, 1]: modifying the Selection's last Range must modify the first added Range 
 PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 18 [document.body, 0, document.body, 1]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 18 [document.body, 0, document.body, 1]: second addRange() must result in rangeCount being 1 
-FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 18 [document.body, 0, document.body, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <body><div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ
-</p><p id... but got Element node <html><head><title>Selection.addRange() tests</title>
-<me...
+PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 18 [document.body, 0, document.body, 1]: second addRange() must result in the selection's last range having the specified endpoints 
 FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 18 [document.body, 0, document.body, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ
 Ijklmnop
 QrstuvwxYzabcdefGhijklmn" but got object "Äb̈c̈d̈ëf̈g̈ḧ
 Ijklmnop
-QrstuvwxYzabcdefGhijklmn
-
-
-
-
-
-"use strict";
-
-testAddRangeSubSet(16, 20);
-testDiv.style.display = "none";
-"
+QrstuvwxYzabcdefGhijklmn"
 FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 18 [document.body, 0, document.body, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
-" but got Element node <html><head><title>Selection.addRange() tests</title>
-<me...
+" but got Element node <body><div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ
+</p><p id...
 FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 18 [document.body, 0, document.body, 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: first addRange() must result in rangeCount being 1 
@@ -568,24 +439,10 @@
 PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 22 [paras[0], 0, paras[0], 0]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 22 [paras[0], 0, paras[0], 0]: second addRange() must result in rangeCount being 1 
 FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 22 [paras[0], 0, paras[0], 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ
-</p> but got Element node <html><head><title>Selection.addRange() tests</title>
-<me...
-FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 22 [paras[0], 0, paras[0], 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "Äb̈c̈d̈ëf̈g̈ḧ
-Ijklmnop
-QrstuvwxYzabcdefGhijklmn
-
-
-
-
-
-"use strict";
-
-testAddRangeSubSet(16, 20);
-testDiv.style.display = "none";
+</p> but got Text node "Äb̈c̈d̈ëf̈g̈ḧ
 "
-FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 22 [paras[0], 0, paras[0], 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
-" but got Element node <html><head><title>Selection.addRange() tests</title>
-<me...
+FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 22 [paras[0], 0, paras[0], 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object ""
+FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 22 [paras[0], 0, paras[0], 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 22 [paras[0], 0, paras[0], 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 23 [paras[0], 0, paras[0], 1]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 23 [paras[0], 0, paras[0], 1]: first addRange() must result in rangeCount being 1 
@@ -595,26 +452,13 @@
 PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 23 [paras[0], 0, paras[0], 1]: modifying the Selection's last Range must modify the first added Range 
 PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 23 [paras[0], 0, paras[0], 1]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 23 [paras[0], 0, paras[0], 1]: second addRange() must result in rangeCount being 1 
-FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 23 [paras[0], 0, paras[0], 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ
-</p> but got Element node <html><head><title>Selection.addRange() tests</title>
-<me...
+PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 23 [paras[0], 0, paras[0], 1]: second addRange() must result in the selection's last range having the specified endpoints 
 FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 23 [paras[0], 0, paras[0], 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ
 " but got object "Äb̈c̈d̈ëf̈g̈ḧ
-Ijklmnop
-QrstuvwxYzabcdefGhijklmn
-
-
-
-
-
-"use strict";
-
-testAddRangeSubSet(16, 20);
-testDiv.style.display = "none";
 "
 FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 23 [paras[0], 0, paras[0], 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
-" but got Element node <html><head><title>Selection.addRange() tests</title>
-<me...
+" but got Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ
+</p>
 FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 23 [paras[0], 0, paras[0], 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: first addRange() must result in rangeCount being 1 
@@ -650,26 +494,13 @@
 PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: modifying the Selection's last Range must modify the first added Range 
 PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: second addRange() must result in rangeCount being 1 
-FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
-" but got Element node <html><head><title>Selection.addRange() tests</title>
-<me...
+PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: second addRange() must result in the selection's last range having the specified endpoints 
 FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ
 " but got object "Äb̈c̈d̈ëf̈g̈ḧ
-Ijklmnop
-QrstuvwxYzabcdefGhijklmn
-
-
-
-
-
-"use strict";
-
-testAddRangeSubSet(16, 20);
-testDiv.style.display = "none";
 "
-FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
-" but got Element node <html><head><title>Selection.addRange() tests</title>
-<me...
+FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, endContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
+" but got Text node "Ijklmnop
+"
 FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: first addRange() must result in rangeCount being 1 
@@ -679,26 +510,13 @@
 PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: modifying the Selection's last Range must modify the first added Range 
 PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: second addRange() must result in rangeCount being 1 
-FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
-" but got Element node <html><head><title>Selection.addRange() tests</title>
-<me...
+PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: second addRange() must result in the selection's last range having the specified endpoints 
 FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ
 Ijklmnop" but got object "Äb̈c̈d̈ëf̈g̈ḧ
-Ijklmnop
-QrstuvwxYzabcdefGhijklmn
-
-
-
-
-
-"use strict";
-
-testAddRangeSubSet(16, 20);
-testDiv.style.display = "none";
+Ijklmnop"
+FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, endContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
+" but got Text node "Ijklmnop
 "
-FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
-" but got Element node <html><head><title>Selection.addRange() tests</title>
-<me...
 FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: first addRange() must result in rangeCount being 1 
@@ -708,27 +526,13 @@
 PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: modifying the Selection's last Range must modify the first added Range 
 PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: second addRange() must result in rangeCount being 1 
-FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
-" but got Element node <html><head><title>Selection.addRange() tests</title>
-<me...
+PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: second addRange() must result in the selection's last range having the specified endpoints 
 FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "̈c̈d̈ëf̈g̈ḧ
 Ijklmnop
-QrstuvwxYzabcdef" but got object "Äb̈c̈d̈ëf̈g̈ḧ
+QrstuvwxYzabcdef" but got object "̈c̈d̈ëf̈g̈ḧ
 Ijklmnop
-QrstuvwxYzabcdefGhijklmn
-
-
-
-
-
-"use strict";
-
-testAddRangeSubSet(16, 20);
-testDiv.style.display = "none";
-"
-FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
-" but got Element node <html><head><title>Selection.addRange() tests</title>
-<me...
+QrstuvwxYzabcdef"
+FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 3
 FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: first addRange() must result in rangeCount being 1 
@@ -738,25 +542,11 @@
 PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: modifying the Selection's last Range must modify the first added Range 
 PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: second addRange() must result in rangeCount being 1 
-FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ
-</p> but got Element node <html><head><title>Selection.addRange() tests</title>
-<me...
-FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d" but got object "Äb̈c̈d̈ëf̈g̈ḧ
-Ijklmnop
-QrstuvwxYzabcdefGhijklmn
-
-
-
-
-
-"use strict";
-
-testAddRangeSubSet(16, 20);
-testDiv.style.display = "none";
-"
+PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: second addRange() must result in the selection's last range having the specified endpoints 
+FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d" but got object "Äb̈c̈d"
 FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
-" but got Element node <html><head><title>Selection.addRange() tests</title>
-<me...
+" but got Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ
+</p>
 FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 30 [testDiv, 2, paras[4], 1]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 30 [testDiv, 2, paras[4], 1]: first addRange() must result in rangeCount being 1 
@@ -767,24 +557,10 @@
 PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 30 [testDiv, 2, paras[4], 1]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 30 [testDiv, 2, paras[4], 1]: second addRange() must result in rangeCount being 1 
 FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 30 [testDiv, 2, paras[4], 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ
-</p><p id="b" s... but got Element node <html><head><title>Selection.addRange() tests</title>
-<me...
-FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 30 [testDiv, 2, paras[4], 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "QrstuvwxYzabcdefGhijklmn" but got object "Äb̈c̈d̈ëf̈g̈ḧ
-Ijklmnop
-QrstuvwxYzabcdefGhijklmn
-
-
-
-
-
-"use strict";
-
-testAddRangeSubSet(16, 20);
-testDiv.style.display = "none";
+</p><p id="b" s... but got Text node "Äb̈c̈d̈ëf̈g̈ḧ
 "
-FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 30 [testDiv, 2, paras[4], 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
-" but got Element node <html><head><title>Selection.addRange() tests</title>
-<me...
+FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 30 [testDiv, 2, paras[4], 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "QrstuvwxYzabcdefGhijklmn" but got object ""
+FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 30 [testDiv, 2, paras[4], 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 30 [testDiv, 2, paras[4], 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: first addRange() must result in rangeCount being 1 
@@ -795,25 +571,11 @@
 PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: second addRange() must result in rangeCount being 1 
 FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ
-</p><p id="b" s... but got Element node <html><head><title>Selection.addRange() tests</title>
-<me...
-FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Ijklmnop
-Qrstu" but got object "Äb̈c̈d̈ëf̈g̈ḧ
-Ijklmnop
-QrstuvwxYzabcdefGhijklmn
-
-
-
-
-
-"use strict";
-
-testAddRangeSubSet(16, 20);
-testDiv.style.display = "none";
+</p><p id="b" s... but got Text node "Äb̈c̈d̈ëf̈g̈ḧ
 "
-FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
-" but got Element node <html><head><title>Selection.addRange() tests</title>
-<me...
+FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Ijklmnop
+Qrstu" but got object ""
+FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 32 [document.documentElement, 1, document.body, 0]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 32 [document.documentElement, 1, document.body, 0]: first addRange() must result in rangeCount being 1 
@@ -823,25 +585,11 @@
 PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 32 [document.documentElement, 1, document.body, 0]: modifying the Selection's last Range must modify the first added Range 
 PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 32 [document.documentElement, 1, document.body, 0]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 32 [document.documentElement, 1, document.body, 0]: second addRange() must result in rangeCount being 1 
-FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 32 [document.documentElement, 1, document.body, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: endContainer of the Selection's last Range must match the added Range expected Element node <body><div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ
-</p><p id... but got Element node <html><head><title>Selection.addRange() tests</title>
-<me...
-FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 32 [document.documentElement, 1, document.body, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "Äb̈c̈d̈ëf̈g̈ḧ
-Ijklmnop
-QrstuvwxYzabcdefGhijklmn
-
-
-
-
-
-"use strict";
-
-testAddRangeSubSet(16, 20);
-testDiv.style.display = "none";
+FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 32 [document.documentElement, 1, document.body, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <html><head><title>Selection.addRange() tests</title>
+<me... but got Text node "Äb̈c̈d̈ëf̈g̈ḧ
 "
-FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 32 [document.documentElement, 1, document.body, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
-" but got Element node <html><head><title>Selection.addRange() tests</title>
-<me...
+FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 32 [document.documentElement, 1, document.body, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object ""
+FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 32 [document.documentElement, 1, document.body, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 32 [document.documentElement, 1, document.body, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: first addRange() must result in rangeCount being 1 
@@ -959,27 +707,16 @@
 PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 37 [testDiv, 0, comment, 5]: modifying the Selection's last Range must modify the first added Range 
 PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 37 [testDiv, 0, comment, 5]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 37 [testDiv, 0, comment, 5]: second addRange() must result in rangeCount being 1 
-FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 37 [testDiv, 0, comment, 5]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ
-</p><p id="b" s... but got Element node <html><head><title>Selection.addRange() tests</title>
-<me...
+FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 37 [testDiv, 0, comment, 5]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: endContainer of the Selection's last Range must match the added Range expected Comment node <!--Alphabet soup?--> but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ
+</p><p id="b" s...
 FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 37 [testDiv, 0, comment, 5]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ
 Ijklmnop
 QrstuvwxYzabcdefGhijklmn" but got object "Äb̈c̈d̈ëf̈g̈ḧ
 Ijklmnop
-QrstuvwxYzabcdefGhijklmn
-
-
-
-
-
-"use strict";
-
-testAddRangeSubSet(16, 20);
-testDiv.style.display = "none";
-"
+QrstuvwxYzabcdefGhijklmn"
 FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 37 [testDiv, 0, comment, 5]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
-" but got Element node <html><head><title>Selection.addRange() tests</title>
-<me...
+" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ
+</p><p id="b" s...
 FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 37 [testDiv, 0, comment, 5]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: first addRange() must result in rangeCount being 1 
@@ -989,24 +726,10 @@
 PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: modifying the Selection's last Range must modify the first added Range 
 PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: second addRange() must result in rangeCount being 1 
-FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Qrstuvwx" but got Element node <html><head><title>Selection.addRange() tests</title>
-<me...
-FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "uvwxYzabcdefGhijklmn" but got object "Äb̈c̈d̈ëf̈g̈ḧ
-Ijklmnop
-QrstuvwxYzabcdefGhijklmn
-
-
-
-
-
-"use strict";
-
-testAddRangeSubSet(16, 20);
-testDiv.style.display = "none";
+FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Qrstuvwx" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ
 "
-FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
-" but got Element node <html><head><title>Selection.addRange() tests</title>
-<me...
+FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "uvwxYzabcdefGhijklmn" but got object ""
+FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 39 [paras[3], 1, comment, 8]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 39 [paras[3], 1, comment, 8]: first addRange() must result in rangeCount being 1 
@@ -1016,24 +739,10 @@
 PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 39 [paras[3], 1, comment, 8]: modifying the Selection's last Range must modify the first added Range 
 PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 39 [paras[3], 1, comment, 8]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 39 [paras[3], 1, comment, 8]: second addRange() must result in rangeCount being 1 
-FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 39 [paras[3], 1, comment, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <p id="d" style="display:none">Yzabcdef</p> but got Element node <html><head><title>Selection.addRange() tests</title>
-<me...
-FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 39 [paras[3], 1, comment, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Ghijklmn" but got object "Äb̈c̈d̈ëf̈g̈ḧ
-Ijklmnop
-QrstuvwxYzabcdefGhijklmn
-
-
-
-
-
-"use strict";
-
-testAddRangeSubSet(16, 20);
-testDiv.style.display = "none";
+FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 39 [paras[3], 1, comment, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <p id="d" style="display:none">Yzabcdef</p> but got Text node "Äb̈c̈d̈ëf̈g̈ḧ
 "
-FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 39 [paras[3], 1, comment, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
-" but got Element node <html><head><title>Selection.addRange() tests</title>
-<me...
+FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 39 [paras[3], 1, comment, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Ghijklmn" but got object ""
+FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 39 [paras[3], 1, comment, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 39 [paras[3], 1, comment, 8]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: first addRange() must result in rangeCount being 1 
@@ -1301,9 +1010,9 @@
 PASS Range 17 [document.head, 1, document.head, 1] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: modifying the Selection's last Range must modify the first added Range 
 PASS Range 17 [document.head, 1, document.head, 1] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 17 [document.head, 1, document.head, 1] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: second addRange() must result in rangeCount being 1 
-FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startOffset of the Selection's last Range must match the added Range expected 2 but got 6
-FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "b̈c̈d̈" but got object ""
-FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
+PASS Range 17 [document.head, 1, document.head, 1] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: second addRange() must result in the selection's last range having the specified endpoints 
+FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "b̈c̈d̈" but got object "b̈c̈d̈"
+FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 2
 FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 17 [document.head, 1, document.head, 1] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 17 [document.head, 1, document.head, 1] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: first addRange() must result in rangeCount being 1 
@@ -1313,9 +1022,9 @@
 PASS Range 17 [document.head, 1, document.head, 1] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: modifying the Selection's last Range must modify the first added Range 
 PASS Range 17 [document.head, 1, document.head, 1] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 17 [document.head, 1, document.head, 1] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: second addRange() must result in rangeCount being 1 
-FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startOffset of the Selection's last Range must match the added Range expected 2 but got 6
-FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "b̈c̈d̈e" but got object ""
-FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
+PASS Range 17 [document.head, 1, document.head, 1] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: second addRange() must result in the selection's last range having the specified endpoints 
+FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "b̈c̈d̈e" but got object "b̈c̈d̈e"
+FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 2
 FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 17 [document.head, 1, document.head, 1] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 17 [document.head, 1, document.head, 1] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: first addRange() must result in rangeCount being 1 
@@ -1460,15 +1169,13 @@
 PASS Range 17 [document.head, 1, document.head, 1] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: modifying the Selection's last Range must modify the first added Range 
 PASS Range 17 [document.head, 1, document.head, 1] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 17 [document.head, 1, document.head, 1] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: second addRange() must result in rangeCount being 1 
-PASS Range 17 [document.head, 1, document.head, 1] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: second addRange() must result in the selection's last range having the specified endpoints 
+FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <html><head><title>Selection.addRange() tests</title>
+<me... but got Text node "Äb̈c̈d̈ëf̈g̈ḧ
+"
 FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Selection.addRange() tests
 
-" but got object "Selection.addRange() tests
-
-"
-FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
-" but got Element node <html><head><title>Selection.addRange() tests</title>
-<me...
+" but got object ""
+FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 17 [document.head, 1, document.head, 1] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 17 [document.head, 1, document.head, 1] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: first addRange() must result in rangeCount being 1 
@@ -1520,9 +1227,7 @@
 PASS Range 17 [document.head, 1, document.head, 1] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: modifying the Selection's last Range must modify the first added Range 
 PASS Range 17 [document.head, 1, document.head, 1] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 17 [document.head, 1, document.head, 1] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: second addRange() must result in rangeCount being 1 
-FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <html><head><title>Selection.addRange() tests</title>
-<me... but got Text node "Äb̈c̈d̈ëf̈g̈ḧ
-"
+PASS Range 17 [document.head, 1, document.head, 1] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: second addRange() must result in the selection's last range having the specified endpoints 
 FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ
 Ijklmnop
 QrstuvwxYzabcdefGhijklmn
@@ -1535,8 +1240,22 @@
 
 testAddRangeSubSet(16, 20);
 testDiv.style.display = "none";
-" but got object ""
-FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
+" but got object "Äb̈c̈d̈ëf̈g̈ḧ
+Ijklmnop
+QrstuvwxYzabcdefGhijklmn
+
+
+
+
+
+"use strict";
+
+testAddRangeSubSet(16, 20);
+testDiv.style.display = "none";
+"
+FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
+" but got Element node <html><head><title>Selection.addRange() tests</title>
+<me...
 FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 17 [document.head, 1, document.head, 1] followed by Range 17 [document.head, 1, document.head, 1]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 17 [document.head, 1, document.head, 1] followed by Range 17 [document.head, 1, document.head, 1]: first addRange() must result in rangeCount being 1 
@@ -1546,11 +1265,11 @@
 PASS Range 17 [document.head, 1, document.head, 1] followed by Range 17 [document.head, 1, document.head, 1]: modifying the Selection's last Range must modify the first added Range 
 PASS Range 17 [document.head, 1, document.head, 1] followed by Range 17 [document.head, 1, document.head, 1]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 17 [document.head, 1, document.head, 1] followed by Range 17 [document.head, 1, document.head, 1]: second addRange() must result in rangeCount being 1 
-PASS Range 17 [document.head, 1, document.head, 1] followed by Range 17 [document.head, 1, document.head, 1]: second addRange() must result in the selection's last range having the specified endpoints 
+FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 17 [document.head, 1, document.head, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <head><title>Selection.addRange() tests</title>
+<meta nam... but got Text node "Äb̈c̈d̈ëf̈g̈ḧ
+"
 FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 17 [document.head, 1, document.head, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object ""
-FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 17 [document.head, 1, document.head, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
-" but got Element node <head><title>Selection.addRange() tests</title>
-<meta nam...
+FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 17 [document.head, 1, document.head, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 17 [document.head, 1, document.head, 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 17 [document.head, 1, document.head, 1] followed by Range 18 [document.body, 0, document.body, 1]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 17 [document.head, 1, document.head, 1] followed by Range 18 [document.body, 0, document.body, 1]: first addRange() must result in rangeCount being 1 
@@ -1560,13 +1279,15 @@
 PASS Range 17 [document.head, 1, document.head, 1] followed by Range 18 [document.body, 0, document.body, 1]: modifying the Selection's last Range must modify the first added Range 
 PASS Range 17 [document.head, 1, document.head, 1] followed by Range 18 [document.body, 0, document.body, 1]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 17 [document.head, 1, document.head, 1] followed by Range 18 [document.body, 0, document.body, 1]: second addRange() must result in rangeCount being 1 
-FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 18 [document.body, 0, document.body, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <body><div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ
-</p><p id... but got Text node "Äb̈c̈d̈ëf̈g̈ḧ
-"
+PASS Range 17 [document.head, 1, document.head, 1] followed by Range 18 [document.body, 0, document.body, 1]: second addRange() must result in the selection's last range having the specified endpoints 
 FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 18 [document.body, 0, document.body, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ
 Ijklmnop
-QrstuvwxYzabcdefGhijklmn" but got object ""
-FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 18 [document.body, 0, document.body, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
+QrstuvwxYzabcdefGhijklmn" but got object "Äb̈c̈d̈ëf̈g̈ḧ
+Ijklmnop
+QrstuvwxYzabcdefGhijklmn"
+FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 18 [document.body, 0, document.body, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
+" but got Element node <body><div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ
+</p><p id...
 FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 18 [document.body, 0, document.body, 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 17 [document.head, 1, document.head, 1] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 17 [document.head, 1, document.head, 1] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: first addRange() must result in rangeCount being 1 
@@ -1629,12 +1350,13 @@
 PASS Range 17 [document.head, 1, document.head, 1] followed by Range 23 [paras[0], 0, paras[0], 1]: modifying the Selection's last Range must modify the first added Range 
 PASS Range 17 [document.head, 1, document.head, 1] followed by Range 23 [paras[0], 0, paras[0], 1]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 17 [document.head, 1, document.head, 1] followed by Range 23 [paras[0], 0, paras[0], 1]: second addRange() must result in rangeCount being 1 
-FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 23 [paras[0], 0, paras[0], 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ
-</p> but got Text node "Äb̈c̈d̈ëf̈g̈ḧ
-"
+PASS Range 17 [document.head, 1, document.head, 1] followed by Range 23 [paras[0], 0, paras[0], 1]: second addRange() must result in the selection's last range having the specified endpoints 
 FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 23 [paras[0], 0, paras[0], 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ
-" but got object ""
-FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 23 [paras[0], 0, paras[0], 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
+" but got object "Äb̈c̈d̈ëf̈g̈ḧ
+"
+FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 23 [paras[0], 0, paras[0], 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
+" but got Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ
+</p>
 FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 23 [paras[0], 0, paras[0], 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 17 [document.head, 1, document.head, 1] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 17 [document.head, 1, document.head, 1] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: first addRange() must result in rangeCount being 1 
@@ -1670,10 +1392,13 @@
 PASS Range 17 [document.head, 1, document.head, 1] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: modifying the Selection's last Range must modify the first added Range 
 PASS Range 17 [document.head, 1, document.head, 1] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 17 [document.head, 1, document.head, 1] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: second addRange() must result in rangeCount being 1 
-FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startOffset of the Selection's last Range must match the added Range expected 0 but got 6
+PASS Range 17 [document.head, 1, document.head, 1] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: second addRange() must result in the selection's last range having the specified endpoints 
 FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ
-" but got object ""
-FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
+" but got object "Äb̈c̈d̈ëf̈g̈ḧ
+"
+FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, endContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
+" but got Text node "Ijklmnop
+"
 FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 17 [document.head, 1, document.head, 1] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 17 [document.head, 1, document.head, 1] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: first addRange() must result in rangeCount being 1 
@@ -1683,10 +1408,13 @@
 PASS Range 17 [document.head, 1, document.head, 1] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: modifying the Selection's last Range must modify the first added Range 
 PASS Range 17 [document.head, 1, document.head, 1] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 17 [document.head, 1, document.head, 1] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: second addRange() must result in rangeCount being 1 
-FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startOffset of the Selection's last Range must match the added Range expected 0 but got 6
+PASS Range 17 [document.head, 1, document.head, 1] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: second addRange() must result in the selection's last range having the specified endpoints 
 FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ
-Ijklmnop" but got object ""
-FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
+Ijklmnop" but got object "Äb̈c̈d̈ëf̈g̈ḧ
+Ijklmnop"
+FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, endContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
+" but got Text node "Ijklmnop
+"
 FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 17 [document.head, 1, document.head, 1] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 17 [document.head, 1, document.head, 1] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: first addRange() must result in rangeCount being 1 
@@ -1696,11 +1424,13 @@
 PASS Range 17 [document.head, 1, document.head, 1] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: modifying the Selection's last Range must modify the first added Range 
 PASS Range 17 [document.head, 1, document.head, 1] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 17 [document.head, 1, document.head, 1] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: second addRange() must result in rangeCount being 1 
-FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startOffset of the Selection's last Range must match the added Range expected 3 but got 6
+PASS Range 17 [document.head, 1, document.head, 1] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: second addRange() must result in the selection's last range having the specified endpoints 
 FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "̈c̈d̈ëf̈g̈ḧ
 Ijklmnop
-QrstuvwxYzabcdef" but got object ""
-FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
+QrstuvwxYzabcdef" but got object "̈c̈d̈ëf̈g̈ḧ
+Ijklmnop
+QrstuvwxYzabcdef"
+FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 3
 FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 17 [document.head, 1, document.head, 1] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 17 [document.head, 1, document.head, 1] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: first addRange() must result in rangeCount being 1 
@@ -1710,11 +1440,11 @@
 PASS Range 17 [document.head, 1, document.head, 1] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: modifying the Selection's last Range must modify the first added Range 
 PASS Range 17 [document.head, 1, document.head, 1] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 17 [document.head, 1, document.head, 1] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: second addRange() must result in rangeCount being 1 
-FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ
-</p> but got Text node "Äb̈c̈d̈ëf̈g̈ḧ
-"
-FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d" but got object ""
-FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
+PASS Range 17 [document.head, 1, document.head, 1] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: second addRange() must result in the selection's last range having the specified endpoints 
+FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d" but got object "Äb̈c̈d"
+FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
+" but got Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ
+</p>
 FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 17 [document.head, 1, document.head, 1] followed by Range 30 [testDiv, 2, paras[4], 1]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 17 [document.head, 1, document.head, 1] followed by Range 30 [testDiv, 2, paras[4], 1]: first addRange() must result in rangeCount being 1 
@@ -1875,13 +1605,16 @@
 PASS Range 17 [document.head, 1, document.head, 1] followed by Range 37 [testDiv, 0, comment, 5]: modifying the Selection's last Range must modify the first added Range 
 PASS Range 17 [document.head, 1, document.head, 1] followed by Range 37 [testDiv, 0, comment, 5]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 17 [document.head, 1, document.head, 1] followed by Range 37 [testDiv, 0, comment, 5]: second addRange() must result in rangeCount being 1 
-FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 37 [testDiv, 0, comment, 5]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ
-</p><p id="b" s... but got Text node "Äb̈c̈d̈ëf̈g̈ḧ
-"
+FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 37 [testDiv, 0, comment, 5]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: endContainer of the Selection's last Range must match the added Range expected Comment node <!--Alphabet soup?--> but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ
+</p><p id="b" s...
 FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 37 [testDiv, 0, comment, 5]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ
 Ijklmnop
-QrstuvwxYzabcdefGhijklmn" but got object ""
-FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 37 [testDiv, 0, comment, 5]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
+QrstuvwxYzabcdefGhijklmn" but got object "Äb̈c̈d̈ëf̈g̈ḧ
+Ijklmnop
+QrstuvwxYzabcdefGhijklmn"
+FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 37 [testDiv, 0, comment, 5]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
+" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ
+</p><p id="b" s...
 FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 37 [testDiv, 0, comment, 5]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 17 [document.head, 1, document.head, 1] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 17 [document.head, 1, document.head, 1] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: first addRange() must result in rangeCount being 1 
@@ -2151,15 +1884,9 @@
 PASS Range 18 [document.body, 0, document.body, 1] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: modifying the Selection's last Range must modify the first added Range 
 PASS Range 18 [document.body, 0, document.body, 1] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 18 [document.body, 0, document.body, 1] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: second addRange() must result in rangeCount being 1 
-FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
-" but got Element node <body><div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ
-</p><p id...
-FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "Äb̈c̈d̈ëf̈g̈ḧ
-Ijklmnop
-QrstuvwxYzabcdefGhijklmn"
-FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
-" but got Element node <body><div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ
-</p><p id...
+FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startOffset of the Selection's last Range must match the added Range expected 0 but got 6
+FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object ""
+FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 18 [document.body, 0, document.body, 1] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 18 [document.body, 0, document.body, 1] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: first addRange() must result in rangeCount being 1 
@@ -2169,15 +1896,9 @@
 PASS Range 18 [document.body, 0, document.body, 1] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: modifying the Selection's last Range must modify the first added Range 
 PASS Range 18 [document.body, 0, document.body, 1] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 18 [document.body, 0, document.body, 1] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: second addRange() must result in rangeCount being 1 
-FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
-" but got Element node <body><div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ
-</p><p id...
-FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "A" but got object "Äb̈c̈d̈ëf̈g̈ḧ
-Ijklmnop
-QrstuvwxYzabcdefGhijklmn"
-FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
-" but got Element node <body><div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ
-</p><p id...
+FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startOffset of the Selection's last Range must match the added Range expected 0 but got 6
+FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "A" but got object ""
+FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 18 [document.body, 0, document.body, 1] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 18 [document.body, 0, document.body, 1] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: first addRange() must result in rangeCount being 1 
@@ -2187,15 +1908,9 @@
 PASS Range 18 [document.body, 0, document.body, 1] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: modifying the Selection's last Range must modify the first added Range 
 PASS Range 18 [document.body, 0, document.body, 1] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 18 [document.body, 0, document.body, 1] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: second addRange() must result in rangeCount being 1 
-FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
-" but got Element node <body><div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ
-</p><p id...
-FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "b̈c̈d̈" but got object "Äb̈c̈d̈ëf̈g̈ḧ
-Ijklmnop
-QrstuvwxYzabcdefGhijklmn"
-FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
-" but got Element node <body><div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ
-</p><p id...
+PASS Range 18 [document.body, 0, document.body, 1] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: second addRange() must result in the selection's last range having the specified endpoints 
+FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "b̈c̈d̈" but got object "b̈c̈d̈"
+FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 2
 FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 18 [document.body, 0, document.body, 1] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 18 [document.body, 0, document.body, 1] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: first addRange() must result in rangeCount being 1 
@@ -2205,15 +1920,9 @@
 PASS Range 18 [document.body, 0, document.body, 1] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: modifying the Selection's last Range must modify the first added Range 
 PASS Range 18 [document.body, 0, document.body, 1] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 18 [document.body, 0, document.body, 1] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: second addRange() must result in rangeCount being 1 
-FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
-" but got Element node <body><div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ
-</p><p id...
-FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "b̈c̈d̈e" but got object "Äb̈c̈d̈ëf̈g̈ḧ
-Ijklmnop
-QrstuvwxYzabcdefGhijklmn"
-FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
-" but got Element node <body><div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ
-</p><p id...
+PASS Range 18 [document.body, 0, document.body, 1] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: second addRange() must result in the selection's last range having the specified endpoints 
+FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "b̈c̈d̈e" but got object "b̈c̈d̈e"
+FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 2
 FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 18 [document.body, 0, document.body, 1] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 18 [document.body, 0, document.body, 1] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: first addRange() must result in rangeCount being 1 
@@ -2224,14 +1933,10 @@
 PASS Range 18 [document.body, 0, document.body, 1] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 18 [document.body, 0, document.body, 1] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: second addRange() must result in rangeCount being 1 
 FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Ijklmnop
-" but got Element node <body><div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ
-</p><p id...
-FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "Äb̈c̈d̈ëf̈g̈ḧ
-Ijklmnop
-QrstuvwxYzabcdefGhijklmn"
-FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
-" but got Element node <body><div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ
-</p><p id...
+" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ
+"
+FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object ""
+FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 18 [document.body, 0, document.body, 1] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 18 [document.body, 0, document.body, 1] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: first addRange() must result in rangeCount being 1 
@@ -2242,14 +1947,10 @@
 PASS Range 18 [document.body, 0, document.body, 1] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 18 [document.body, 0, document.body, 1] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: second addRange() must result in rangeCount being 1 
 FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Ijklmnop
-" but got Element node <body><div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ
-</p><p id...
-FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "I" but got object "Äb̈c̈d̈ëf̈g̈ḧ
-Ijklmnop
-QrstuvwxYzabcdefGhijklmn"
-FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
-" but got Element node <body><div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ
-</p><p id...
+" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ
+"
+FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "I" but got object ""
+FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 18 [document.body, 0, document.body, 1] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 18 [document.body, 0, document.body, 1] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: first addRange() must result in rangeCount being 1 
@@ -2260,14 +1961,10 @@
 PASS Range 18 [document.body, 0, document.body, 1] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 18 [document.body, 0, document.body, 1] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: second addRange() must result in rangeCount being 1 
 FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Ijklmnop
-" but got Element node <body><div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ
-</p><p id...
-FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "klmnop" but got object "Äb̈c̈d̈ëf̈g̈ḧ
-Ijklmnop
-QrstuvwxYzabcdefGhijklmn"
-FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
-" but got Element node <body><div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ
-</p><p id...
+" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ
+"
+FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "klmnop" but got object ""
+FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 18 [document.body, 0, document.body, 1] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 18 [document.body, 0, document.body, 1] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: first addRange() must result in rangeCount being 1 
@@ -2278,15 +1975,11 @@
 PASS Range 18 [document.body, 0, document.body, 1] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 18 [document.body, 0, document.body, 1] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: second addRange() must result in rangeCount being 1 
 FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Ijklmnop
-" but got Element node <body><div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ
-</p><p id...
+" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ
+"
 FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "klmnop
-" but got object "Äb̈c̈d̈ëf̈g̈ḧ
-Ijklmnop
-QrstuvwxYzabcdefGhijklmn"
-FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
-" but got Element node <body><div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ
-</p><p id...
+" but got object ""
+FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 18 [document.body, 0, document.body, 1] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 18 [document.body, 0, document.body, 1] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: first addRange() must result in rangeCount being 1 
@@ -2542,14 +2235,10 @@
 PASS Range 18 [document.body, 0, document.body, 1] followed by Range 22 [paras[0], 0, paras[0], 0]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 18 [document.body, 0, document.body, 1] followed by Range 22 [paras[0], 0, paras[0], 0]: second addRange() must result in rangeCount being 1 
 FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 22 [paras[0], 0, paras[0], 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ
-</p> but got Element node <body><div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ
-</p><p id...
-FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 22 [paras[0], 0, paras[0], 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "Äb̈c̈d̈ëf̈g̈ḧ
-Ijklmnop
-QrstuvwxYzabcdefGhijklmn"
-FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 22 [paras[0], 0, paras[0], 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
-" but got Element node <body><div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ
-</p><p id...
+</p> but got Text node "Äb̈c̈d̈ëf̈g̈ḧ
+"
+FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 22 [paras[0], 0, paras[0], 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object ""
+FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 22 [paras[0], 0, paras[0], 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 22 [paras[0], 0, paras[0], 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 18 [document.body, 0, document.body, 1] followed by Range 23 [paras[0], 0, paras[0], 1]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 18 [document.body, 0, document.body, 1] followed by Range 23 [paras[0], 0, paras[0], 1]: first addRange() must result in rangeCount being 1 
@@ -2559,16 +2248,13 @@
 PASS Range 18 [document.body, 0, document.body, 1] followed by Range 23 [paras[0], 0, paras[0], 1]: modifying the Selection's last Range must modify the first added Range 
 PASS Range 18 [document.body, 0, document.body, 1] followed by Range 23 [paras[0], 0, paras[0], 1]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 18 [document.body, 0, document.body, 1] followed by Range 23 [paras[0], 0, paras[0], 1]: second addRange() must result in rangeCount being 1 
-FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 23 [paras[0], 0, paras[0], 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ
-</p> but got Element node <body><div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ
-</p><p id...
+PASS Range 18 [document.body, 0, document.body, 1] followed by Range 23 [paras[0], 0, paras[0], 1]: second addRange() must result in the selection's last range having the specified endpoints 
 FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 23 [paras[0], 0, paras[0], 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ
 " but got object "Äb̈c̈d̈ëf̈g̈ḧ
-Ijklmnop
-QrstuvwxYzabcdefGhijklmn"
+"
 FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 23 [paras[0], 0, paras[0], 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
-" but got Element node <body><div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ
-</p><p id...
+" but got Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ
+</p>
 FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 23 [paras[0], 0, paras[0], 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 18 [document.body, 0, document.body, 1] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 18 [document.body, 0, document.body, 1] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: first addRange() must result in rangeCount being 1 
@@ -2604,16 +2290,13 @@
 PASS Range 18 [document.body, 0, document.body, 1] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: modifying the Selection's last Range must modify the first added Range 
 PASS Range 18 [document.body, 0, document.body, 1] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 18 [document.body, 0, document.body, 1] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: second addRange() must result in rangeCount being 1 
-FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
-" but got Element node <body><div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ
-</p><p id...
+PASS Range 18 [document.body, 0, document.body, 1] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: second addRange() must result in the selection's last range having the specified endpoints 
 FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ
 " but got object "Äb̈c̈d̈ëf̈g̈ḧ
-Ijklmnop
-QrstuvwxYzabcdefGhijklmn"
-FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
-" but got Element node <body><div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ
-</p><p id...
+"
+FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, endContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
+" but got Text node "Ijklmnop
+"
 FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 18 [document.body, 0, document.body, 1] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 18 [document.body, 0, document.body, 1] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: first addRange() must result in rangeCount being 1 
@@ -2623,16 +2306,13 @@
 PASS Range 18 [document.body, 0, document.body, 1] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: modifying the Selection's last Range must modify the first added Range 
 PASS Range 18 [document.body, 0, document.body, 1] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 18 [document.body, 0, document.body, 1] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: second addRange() must result in rangeCount being 1 
-FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
-" but got Element node <body><div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ
-</p><p id...
+PASS Range 18 [document.body, 0, document.body, 1] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: second addRange() must result in the selection's last range having the specified endpoints 
 FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ
 Ijklmnop" but got object "Äb̈c̈d̈ëf̈g̈ḧ
-Ijklmnop
-QrstuvwxYzabcdefGhijklmn"
-FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
-" but got Element node <body><div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ
-</p><p id...
+Ijklmnop"
+FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, endContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
+" but got Text node "Ijklmnop
+"
 FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 18 [document.body, 0, document.body, 1] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 18 [document.body, 0, document.body, 1] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: first addRange() must result in rangeCount being 1 
@@ -2642,17 +2322,13 @@
 PASS Range 18 [document.body, 0, document.body, 1] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: modifying the Selection's last Range must modify the first added Range 
 PASS Range 18 [document.body, 0, document.body, 1] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 18 [document.body, 0, document.body, 1] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: second addRange() must result in rangeCount being 1 
-FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
-" but got Element node <body><div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ
-</p><p id...
+PASS Range 18 [document.body, 0, document.body, 1] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: second addRange() must result in the selection's last range having the specified endpoints 
 FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "̈c̈d̈ëf̈g̈ḧ
 Ijklmnop
-QrstuvwxYzabcdef" but got object "Äb̈c̈d̈ëf̈g̈ḧ
+QrstuvwxYzabcdef" but got object "̈c̈d̈ëf̈g̈ḧ
 Ijklmnop
-QrstuvwxYzabcdefGhijklmn"
-FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
-" but got Element node <body><div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ
-</p><p id...
+QrstuvwxYzabcdef"
+FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 3
 FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 18 [document.body, 0, document.body, 1] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 18 [document.body, 0, document.body, 1] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: first addRange() must result in rangeCount being 1 
@@ -2662,15 +2338,11 @@
 PASS Range 18 [document.body, 0, document.body, 1] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: modifying the Selection's last Range must modify the first added Range 
 PASS Range 18 [document.body, 0, document.body, 1] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 18 [document.body, 0, document.body, 1] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: second addRange() must result in rangeCount being 1 
-FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ
-</p> but got Element node <body><div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ
-</p><p id...
-FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d" but got object "Äb̈c̈d̈ëf̈g̈ḧ
-Ijklmnop
-QrstuvwxYzabcdefGhijklmn"
+PASS Range 18 [document.body, 0, document.body, 1] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: second addRange() must result in the selection's last range having the specified endpoints 
+FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d" but got object "Äb̈c̈d"
 FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
-" but got Element node <body><div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ
-</p><p id...
+" but got Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ
+</p>
 FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 18 [document.body, 0, document.body, 1] followed by Range 30 [testDiv, 2, paras[4], 1]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 18 [document.body, 0, document.body, 1] followed by Range 30 [testDiv, 2, paras[4], 1]: first addRange() must result in rangeCount being 1 
@@ -2681,14 +2353,10 @@
 PASS Range 18 [document.body, 0, document.body, 1] followed by Range 30 [testDiv, 2, paras[4], 1]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 18 [document.body, 0, document.body, 1] followed by Range 30 [testDiv, 2, paras[4], 1]: second addRange() must result in rangeCount being 1 
 FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 30 [testDiv, 2, paras[4], 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ
-</p><p id="b" s... but got Element node <body><div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ
-</p><p id...
-FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 30 [testDiv, 2, paras[4], 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "QrstuvwxYzabcdefGhijklmn" but got object "Äb̈c̈d̈ëf̈g̈ḧ
-Ijklmnop
-QrstuvwxYzabcdefGhijklmn"
-FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 30 [testDiv, 2, paras[4], 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
-" but got Element node <body><div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ
-</p><p id...
+</p><p id="b" s... but got Text node "Äb̈c̈d̈ëf̈g̈ḧ
+"
+FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 30 [testDiv, 2, paras[4], 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "QrstuvwxYzabcdefGhijklmn" but got object ""
+FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 30 [testDiv, 2, paras[4], 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 30 [testDiv, 2, paras[4], 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 18 [document.body, 0, document.body, 1] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 18 [document.body, 0, document.body, 1] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: first addRange() must result in rangeCount being 1 
@@ -2699,15 +2367,11 @@
 PASS Range 18 [document.body, 0, document.body, 1] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 18 [document.body, 0, document.body, 1] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: second addRange() must result in rangeCount being 1 
 FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ
-</p><p id="b" s... but got Element node <body><div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ
-</p><p id...
+</p><p id="b" s... but got Text node "Äb̈c̈d̈ëf̈g̈ḧ
+"
 FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Ijklmnop
-Qrstu" but got object "Äb̈c̈d̈ëf̈g̈ḧ
-Ijklmnop
-QrstuvwxYzabcdefGhijklmn"
-FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
-" but got Element node <body><div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ
-</p><p id...
+Qrstu" but got object ""
+FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 18 [document.body, 0, document.body, 1] followed by Range 32 [document.documentElement, 1, document.body, 0]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 18 [document.body, 0, document.body, 1] followed by Range 32 [document.documentElement, 1, document.body, 0]: first addRange() must result in rangeCount being 1 
@@ -2717,13 +2381,11 @@
 PASS Range 18 [document.body, 0, document.body, 1] followed by Range 32 [document.documentElement, 1, document.body, 0]: modifying the Selection's last Range must modify the first added Range 
 PASS Range 18 [document.body, 0, document.body, 1] followed by Range 32 [document.documentElement, 1, document.body, 0]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 18 [document.body, 0, document.body, 1] followed by Range 32 [document.documentElement, 1, document.body, 0]: second addRange() must result in rangeCount being 1 
-FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 32 [document.documentElement, 1, document.body, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: endOffset of the Selection's last Range must match the added Range expected 0 but got 1
-FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 32 [document.documentElement, 1, document.body, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "Äb̈c̈d̈ëf̈g̈ḧ
-Ijklmnop
-QrstuvwxYzabcdefGhijklmn"
-FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 32 [document.documentElement, 1, document.body, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
-" but got Element node <html><head><title>Selection.addRange() tests</title>
-<me...
+FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 32 [document.documentElement, 1, document.body, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <html><head><title>Selection.addRange() tests</title>
+<me... but got Text node "Äb̈c̈d̈ëf̈g̈ḧ
+"
+FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 32 [document.documentElement, 1, document.body, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object ""
+FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 32 [document.documentElement, 1, document.body, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 32 [document.documentElement, 1, document.body, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 18 [document.body, 0, document.body, 1] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 18 [document.body, 0, document.body, 1] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: first addRange() must result in rangeCount being 1 
@@ -2841,17 +2503,16 @@
 PASS Range 18 [document.body, 0, document.body, 1] followed by Range 37 [testDiv, 0, comment, 5]: modifying the Selection's last Range must modify the first added Range 
 PASS Range 18 [document.body, 0, document.body, 1] followed by Range 37 [testDiv, 0, comment, 5]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 18 [document.body, 0, document.body, 1] followed by Range 37 [testDiv, 0, comment, 5]: second addRange() must result in rangeCount being 1 
-FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 37 [testDiv, 0, comment, 5]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ
-</p><p id="b" s... but got Element node <body><div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ
-</p><p id...
+FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 37 [testDiv, 0, comment, 5]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: endContainer of the Selection's last Range must match the added Range expected Comment node <!--Alphabet soup?--> but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ
+</p><p id="b" s...
 FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 37 [testDiv, 0, comment, 5]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ
 Ijklmnop
 QrstuvwxYzabcdefGhijklmn" but got object "Äb̈c̈d̈ëf̈g̈ḧ
 Ijklmnop
 QrstuvwxYzabcdefGhijklmn"
 FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 37 [testDiv, 0, comment, 5]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
-" but got Element node <body><div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ
-</p><p id...
+" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ
+</p><p id="b" s...
 FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 37 [testDiv, 0, comment, 5]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 18 [document.body, 0, document.body, 1] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 18 [document.body, 0, document.body, 1] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: first addRange() must result in rangeCount being 1 
@@ -2861,14 +2522,10 @@
 PASS Range 18 [document.body, 0, document.body, 1] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: modifying the Selection's last Range must modify the first added Range 
 PASS Range 18 [document.body, 0, document.body, 1] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 18 [document.body, 0, document.body, 1] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: second addRange() must result in rangeCount being 1 
-FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Qrstuvwx" but got Element node <body><div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ
-</p><p id...
-FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "uvwxYzabcdefGhijklmn" but got object "Äb̈c̈d̈ëf̈g̈ḧ
-Ijklmnop
-QrstuvwxYzabcdefGhijklmn"
-FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
-" but got Element node <body><div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ
-</p><p id...
+FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Qrstuvwx" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ
+"
+FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "uvwxYzabcdefGhijklmn" but got object ""
+FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 18 [document.body, 0, document.body, 1] followed by Range 39 [paras[3], 1, comment, 8]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 18 [document.body, 0, document.body, 1] followed by Range 39 [paras[3], 1, comment, 8]: first addRange() must result in rangeCount being 1 
@@ -2878,14 +2535,10 @@
 PASS Range 18 [document.body, 0, document.body, 1] followed by Range 39 [paras[3], 1, comment, 8]: modifying the Selection's last Range must modify the first added Range 
 PASS Range 18 [document.body, 0, document.body, 1] followed by Range 39 [paras[3], 1, comment, 8]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 18 [document.body, 0, document.body, 1] followed by Range 39 [paras[3], 1, comment, 8]: second addRange() must result in rangeCount being 1 
-FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 39 [paras[3], 1, comment, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <p id="d" style="display:none">Yzabcdef</p> but got Element node <body><div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ
-</p><p id...
-FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 39 [paras[3], 1, comment, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Ghijklmn" but got object "Äb̈c̈d̈ëf̈g̈ḧ
-Ijklmnop
-QrstuvwxYzabcdefGhijklmn"
-FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 39 [paras[3], 1, comment, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
-" but got Element node <body><div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ
-</p><p id...
+FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 39 [paras[3], 1, comment, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <p id="d" style="display:none">Yzabcdef</p> but got Text node "Äb̈c̈d̈ëf̈g̈ḧ
+"
+FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 39 [paras[3], 1, comment, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Ghijklmn" but got object ""
+FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 39 [paras[3], 1, comment, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 39 [paras[3], 1, comment, 8]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 18 [document.body, 0, document.body, 1] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 18 [document.body, 0, document.body, 1] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: first addRange() must result in rangeCount being 1 
diff --git a/third_party/WebKit/LayoutTests/external/wpt/selection/addRange-20-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/selection/addRange-20-expected.txt
index df22d1d..0ef25b0 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/selection/addRange-20-expected.txt
+++ b/third_party/WebKit/LayoutTests/external/wpt/selection/addRange-20-expected.txt
@@ -22,13 +22,12 @@
 CONSOLE ERROR: line 7: Discontiguous selection is not supported.
 CONSOLE ERROR: line 7: Discontiguous selection is not supported.
 CONSOLE ERROR: line 7: Discontiguous selection is not supported.
-CONSOLE ERROR: line 7: Discontiguous selection is not supported.
-CONSOLE ERROR: line 7: Discontiguous selection is not supported.
 CONSOLE ERROR: line 7: The given range isn't in document.
 CONSOLE ERROR: line 7: The given range isn't in document.
 CONSOLE ERROR: line 7: The given range isn't in document.
 CONSOLE ERROR: line 7: Discontiguous selection is not supported.
 CONSOLE ERROR: line 7: Discontiguous selection is not supported.
+CONSOLE ERROR: line 7: Discontiguous selection is not supported.
 CONSOLE ERROR: line 7: The given range isn't in document.
 CONSOLE ERROR: line 7: The given range isn't in document.
 CONSOLE ERROR: line 7: Discontiguous selection is not supported.
@@ -37,9 +36,6 @@
 CONSOLE ERROR: line 7: Discontiguous selection is not supported.
 CONSOLE ERROR: line 7: Discontiguous selection is not supported.
 CONSOLE ERROR: line 7: Discontiguous selection is not supported.
-CONSOLE ERROR: line 7: Discontiguous selection is not supported.
-CONSOLE ERROR: line 7: Discontiguous selection is not supported.
-CONSOLE ERROR: line 7: Discontiguous selection is not supported.
 CONSOLE ERROR: line 7: The given range isn't in document.
 CONSOLE ERROR: line 7: The given range isn't in document.
 CONSOLE ERROR: line 7: The given range isn't in document.
@@ -48,11 +44,14 @@
 CONSOLE ERROR: line 7: Discontiguous selection is not supported.
 CONSOLE ERROR: line 7: Discontiguous selection is not supported.
 CONSOLE ERROR: line 7: Discontiguous selection is not supported.
+CONSOLE ERROR: line 7: Discontiguous selection is not supported.
+CONSOLE ERROR: line 7: Discontiguous selection is not supported.
 CONSOLE ERROR: line 7: The given range isn't in document.
 CONSOLE ERROR: line 7: The given range isn't in document.
 CONSOLE ERROR: line 7: The given range isn't in document.
 CONSOLE ERROR: line 7: Discontiguous selection is not supported.
 CONSOLE ERROR: line 7: Discontiguous selection is not supported.
+CONSOLE ERROR: line 7: Discontiguous selection is not supported.
 CONSOLE ERROR: line 7: The given range isn't in document.
 CONSOLE ERROR: line 7: The given range isn't in document.
 CONSOLE ERROR: line 7: Discontiguous selection is not supported.
@@ -1490,9 +1489,9 @@
 PASS Range 22 [paras[0], 0, paras[0], 0] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: modifying the Selection's last Range must modify the first added Range 
 PASS Range 22 [paras[0], 0, paras[0], 0] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 22 [paras[0], 0, paras[0], 0] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: second addRange() must result in rangeCount being 1 
-FAIL Range 22 [paras[0], 0, paras[0], 0] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startOffset of the Selection's last Range must match the added Range expected 2 but got 6
-FAIL Range 22 [paras[0], 0, paras[0], 0] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "b̈c̈d̈" but got object ""
-FAIL Range 22 [paras[0], 0, paras[0], 0] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
+PASS Range 22 [paras[0], 0, paras[0], 0] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: second addRange() must result in the selection's last range having the specified endpoints 
+FAIL Range 22 [paras[0], 0, paras[0], 0] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "b̈c̈d̈" but got object "b̈c̈d̈"
+FAIL Range 22 [paras[0], 0, paras[0], 0] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 2
 FAIL Range 22 [paras[0], 0, paras[0], 0] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 22 [paras[0], 0, paras[0], 0] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 22 [paras[0], 0, paras[0], 0] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: first addRange() must result in rangeCount being 1 
@@ -1502,9 +1501,9 @@
 PASS Range 22 [paras[0], 0, paras[0], 0] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: modifying the Selection's last Range must modify the first added Range 
 PASS Range 22 [paras[0], 0, paras[0], 0] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 22 [paras[0], 0, paras[0], 0] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: second addRange() must result in rangeCount being 1 
-FAIL Range 22 [paras[0], 0, paras[0], 0] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startOffset of the Selection's last Range must match the added Range expected 2 but got 6
-FAIL Range 22 [paras[0], 0, paras[0], 0] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "b̈c̈d̈e" but got object ""
-FAIL Range 22 [paras[0], 0, paras[0], 0] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
+PASS Range 22 [paras[0], 0, paras[0], 0] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: second addRange() must result in the selection's last range having the specified endpoints 
+FAIL Range 22 [paras[0], 0, paras[0], 0] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "b̈c̈d̈e" but got object "b̈c̈d̈e"
+FAIL Range 22 [paras[0], 0, paras[0], 0] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 2
 FAIL Range 22 [paras[0], 0, paras[0], 0] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 22 [paras[0], 0, paras[0], 0] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 22 [paras[0], 0, paras[0], 0] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: first addRange() must result in rangeCount being 1 
@@ -1816,11 +1815,11 @@
 PASS Range 22 [paras[0], 0, paras[0], 0] followed by Range 22 [paras[0], 0, paras[0], 0]: modifying the Selection's last Range must modify the first added Range 
 PASS Range 22 [paras[0], 0, paras[0], 0] followed by Range 22 [paras[0], 0, paras[0], 0]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 22 [paras[0], 0, paras[0], 0] followed by Range 22 [paras[0], 0, paras[0], 0]: second addRange() must result in rangeCount being 1 
-PASS Range 22 [paras[0], 0, paras[0], 0] followed by Range 22 [paras[0], 0, paras[0], 0]: second addRange() must result in the selection's last range having the specified endpoints 
+FAIL Range 22 [paras[0], 0, paras[0], 0] followed by Range 22 [paras[0], 0, paras[0], 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ
+</p> but got Text node "Äb̈c̈d̈ëf̈g̈ḧ
+"
 FAIL Range 22 [paras[0], 0, paras[0], 0] followed by Range 22 [paras[0], 0, paras[0], 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object ""
-FAIL Range 22 [paras[0], 0, paras[0], 0] followed by Range 22 [paras[0], 0, paras[0], 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
-" but got Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ
-</p>
+FAIL Range 22 [paras[0], 0, paras[0], 0] followed by Range 22 [paras[0], 0, paras[0], 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 FAIL Range 22 [paras[0], 0, paras[0], 0] followed by Range 22 [paras[0], 0, paras[0], 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 22 [paras[0], 0, paras[0], 0] followed by Range 23 [paras[0], 0, paras[0], 1]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 22 [paras[0], 0, paras[0], 0] followed by Range 23 [paras[0], 0, paras[0], 1]: first addRange() must result in rangeCount being 1 
@@ -1872,10 +1871,13 @@
 PASS Range 22 [paras[0], 0, paras[0], 0] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: modifying the Selection's last Range must modify the first added Range 
 PASS Range 22 [paras[0], 0, paras[0], 0] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 22 [paras[0], 0, paras[0], 0] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: second addRange() must result in rangeCount being 1 
-FAIL Range 22 [paras[0], 0, paras[0], 0] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startOffset of the Selection's last Range must match the added Range expected 0 but got 6
+PASS Range 22 [paras[0], 0, paras[0], 0] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: second addRange() must result in the selection's last range having the specified endpoints 
 FAIL Range 22 [paras[0], 0, paras[0], 0] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ
-" but got object ""
-FAIL Range 22 [paras[0], 0, paras[0], 0] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
+" but got object "Äb̈c̈d̈ëf̈g̈ḧ
+"
+FAIL Range 22 [paras[0], 0, paras[0], 0] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, endContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
+" but got Text node "Ijklmnop
+"
 FAIL Range 22 [paras[0], 0, paras[0], 0] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 22 [paras[0], 0, paras[0], 0] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 22 [paras[0], 0, paras[0], 0] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: first addRange() must result in rangeCount being 1 
@@ -1885,10 +1887,13 @@
 PASS Range 22 [paras[0], 0, paras[0], 0] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: modifying the Selection's last Range must modify the first added Range 
 PASS Range 22 [paras[0], 0, paras[0], 0] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 22 [paras[0], 0, paras[0], 0] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: second addRange() must result in rangeCount being 1 
-FAIL Range 22 [paras[0], 0, paras[0], 0] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startOffset of the Selection's last Range must match the added Range expected 0 but got 6
+PASS Range 22 [paras[0], 0, paras[0], 0] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: second addRange() must result in the selection's last range having the specified endpoints 
 FAIL Range 22 [paras[0], 0, paras[0], 0] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ
-Ijklmnop" but got object ""
-FAIL Range 22 [paras[0], 0, paras[0], 0] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
+Ijklmnop" but got object "Äb̈c̈d̈ëf̈g̈ḧ
+Ijklmnop"
+FAIL Range 22 [paras[0], 0, paras[0], 0] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, endContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
+" but got Text node "Ijklmnop
+"
 FAIL Range 22 [paras[0], 0, paras[0], 0] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 22 [paras[0], 0, paras[0], 0] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 22 [paras[0], 0, paras[0], 0] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: first addRange() must result in rangeCount being 1 
@@ -1898,11 +1903,13 @@
 PASS Range 22 [paras[0], 0, paras[0], 0] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: modifying the Selection's last Range must modify the first added Range 
 PASS Range 22 [paras[0], 0, paras[0], 0] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 22 [paras[0], 0, paras[0], 0] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: second addRange() must result in rangeCount being 1 
-FAIL Range 22 [paras[0], 0, paras[0], 0] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startOffset of the Selection's last Range must match the added Range expected 3 but got 6
+PASS Range 22 [paras[0], 0, paras[0], 0] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: second addRange() must result in the selection's last range having the specified endpoints 
 FAIL Range 22 [paras[0], 0, paras[0], 0] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "̈c̈d̈ëf̈g̈ḧ
 Ijklmnop
-QrstuvwxYzabcdef" but got object ""
-FAIL Range 22 [paras[0], 0, paras[0], 0] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
+QrstuvwxYzabcdef" but got object "̈c̈d̈ëf̈g̈ḧ
+Ijklmnop
+QrstuvwxYzabcdef"
+FAIL Range 22 [paras[0], 0, paras[0], 0] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 3
 FAIL Range 22 [paras[0], 0, paras[0], 0] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 22 [paras[0], 0, paras[0], 0] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 22 [paras[0], 0, paras[0], 0] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: first addRange() must result in rangeCount being 1 
@@ -2356,14 +2363,9 @@
 PASS Range 23 [paras[0], 0, paras[0], 1] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: modifying the Selection's last Range must modify the first added Range 
 PASS Range 23 [paras[0], 0, paras[0], 1] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 23 [paras[0], 0, paras[0], 1] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: second addRange() must result in rangeCount being 1 
-FAIL Range 23 [paras[0], 0, paras[0], 1] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
-" but got Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ
-</p>
-FAIL Range 23 [paras[0], 0, paras[0], 1] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "Äb̈c̈d̈ëf̈g̈ḧ
-"
-FAIL Range 23 [paras[0], 0, paras[0], 1] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
-" but got Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ
-</p>
+FAIL Range 23 [paras[0], 0, paras[0], 1] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startOffset of the Selection's last Range must match the added Range expected 0 but got 6
+FAIL Range 23 [paras[0], 0, paras[0], 1] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object ""
+FAIL Range 23 [paras[0], 0, paras[0], 1] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 FAIL Range 23 [paras[0], 0, paras[0], 1] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 23 [paras[0], 0, paras[0], 1] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 23 [paras[0], 0, paras[0], 1] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: first addRange() must result in rangeCount being 1 
@@ -2373,14 +2375,9 @@
 PASS Range 23 [paras[0], 0, paras[0], 1] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: modifying the Selection's last Range must modify the first added Range 
 PASS Range 23 [paras[0], 0, paras[0], 1] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 23 [paras[0], 0, paras[0], 1] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: second addRange() must result in rangeCount being 1 
-FAIL Range 23 [paras[0], 0, paras[0], 1] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
-" but got Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ
-</p>
-FAIL Range 23 [paras[0], 0, paras[0], 1] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "A" but got object "Äb̈c̈d̈ëf̈g̈ḧ
-"
-FAIL Range 23 [paras[0], 0, paras[0], 1] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
-" but got Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ
-</p>
+FAIL Range 23 [paras[0], 0, paras[0], 1] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startOffset of the Selection's last Range must match the added Range expected 0 but got 6
+FAIL Range 23 [paras[0], 0, paras[0], 1] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "A" but got object ""
+FAIL Range 23 [paras[0], 0, paras[0], 1] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 FAIL Range 23 [paras[0], 0, paras[0], 1] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 23 [paras[0], 0, paras[0], 1] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 23 [paras[0], 0, paras[0], 1] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: first addRange() must result in rangeCount being 1 
@@ -2390,14 +2387,9 @@
 PASS Range 23 [paras[0], 0, paras[0], 1] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: modifying the Selection's last Range must modify the first added Range 
 PASS Range 23 [paras[0], 0, paras[0], 1] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 23 [paras[0], 0, paras[0], 1] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: second addRange() must result in rangeCount being 1 
-FAIL Range 23 [paras[0], 0, paras[0], 1] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
-" but got Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ
-</p>
-FAIL Range 23 [paras[0], 0, paras[0], 1] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "b̈c̈d̈" but got object "Äb̈c̈d̈ëf̈g̈ḧ
-"
-FAIL Range 23 [paras[0], 0, paras[0], 1] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
-" but got Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ
-</p>
+PASS Range 23 [paras[0], 0, paras[0], 1] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: second addRange() must result in the selection's last range having the specified endpoints 
+FAIL Range 23 [paras[0], 0, paras[0], 1] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "b̈c̈d̈" but got object "b̈c̈d̈"
+FAIL Range 23 [paras[0], 0, paras[0], 1] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 2
 FAIL Range 23 [paras[0], 0, paras[0], 1] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 23 [paras[0], 0, paras[0], 1] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 23 [paras[0], 0, paras[0], 1] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: first addRange() must result in rangeCount being 1 
@@ -2407,14 +2399,9 @@
 PASS Range 23 [paras[0], 0, paras[0], 1] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: modifying the Selection's last Range must modify the first added Range 
 PASS Range 23 [paras[0], 0, paras[0], 1] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 23 [paras[0], 0, paras[0], 1] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: second addRange() must result in rangeCount being 1 
-FAIL Range 23 [paras[0], 0, paras[0], 1] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
-" but got Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ
-</p>
-FAIL Range 23 [paras[0], 0, paras[0], 1] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "b̈c̈d̈e" but got object "Äb̈c̈d̈ëf̈g̈ḧ
-"
-FAIL Range 23 [paras[0], 0, paras[0], 1] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
-" but got Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ
-</p>
+PASS Range 23 [paras[0], 0, paras[0], 1] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: second addRange() must result in the selection's last range having the specified endpoints 
+FAIL Range 23 [paras[0], 0, paras[0], 1] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "b̈c̈d̈e" but got object "b̈c̈d̈e"
+FAIL Range 23 [paras[0], 0, paras[0], 1] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 2
 FAIL Range 23 [paras[0], 0, paras[0], 1] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 23 [paras[0], 0, paras[0], 1] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 23 [paras[0], 0, paras[0], 1] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: first addRange() must result in rangeCount being 1 
@@ -2726,12 +2713,11 @@
 PASS Range 23 [paras[0], 0, paras[0], 1] followed by Range 22 [paras[0], 0, paras[0], 0]: modifying the Selection's last Range must modify the first added Range 
 PASS Range 23 [paras[0], 0, paras[0], 1] followed by Range 22 [paras[0], 0, paras[0], 0]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 23 [paras[0], 0, paras[0], 1] followed by Range 22 [paras[0], 0, paras[0], 0]: second addRange() must result in rangeCount being 1 
-FAIL Range 23 [paras[0], 0, paras[0], 1] followed by Range 22 [paras[0], 0, paras[0], 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: endOffset of the Selection's last Range must match the added Range expected 0 but got 1
-FAIL Range 23 [paras[0], 0, paras[0], 1] followed by Range 22 [paras[0], 0, paras[0], 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "Äb̈c̈d̈ëf̈g̈ḧ
+FAIL Range 23 [paras[0], 0, paras[0], 1] followed by Range 22 [paras[0], 0, paras[0], 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ
+</p> but got Text node "Äb̈c̈d̈ëf̈g̈ḧ
 "
-FAIL Range 23 [paras[0], 0, paras[0], 1] followed by Range 22 [paras[0], 0, paras[0], 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
-" but got Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ
-</p>
+FAIL Range 23 [paras[0], 0, paras[0], 1] followed by Range 22 [paras[0], 0, paras[0], 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object ""
+FAIL Range 23 [paras[0], 0, paras[0], 1] followed by Range 22 [paras[0], 0, paras[0], 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 FAIL Range 23 [paras[0], 0, paras[0], 1] followed by Range 22 [paras[0], 0, paras[0], 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 23 [paras[0], 0, paras[0], 1] followed by Range 23 [paras[0], 0, paras[0], 1]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 23 [paras[0], 0, paras[0], 1] followed by Range 23 [paras[0], 0, paras[0], 1]: first addRange() must result in rangeCount being 1 
@@ -2783,15 +2769,13 @@
 PASS Range 23 [paras[0], 0, paras[0], 1] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: modifying the Selection's last Range must modify the first added Range 
 PASS Range 23 [paras[0], 0, paras[0], 1] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 23 [paras[0], 0, paras[0], 1] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: second addRange() must result in rangeCount being 1 
-FAIL Range 23 [paras[0], 0, paras[0], 1] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
-" but got Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ
-</p>
+PASS Range 23 [paras[0], 0, paras[0], 1] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: second addRange() must result in the selection's last range having the specified endpoints 
 FAIL Range 23 [paras[0], 0, paras[0], 1] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ
 " but got object "Äb̈c̈d̈ëf̈g̈ḧ
 "
-FAIL Range 23 [paras[0], 0, paras[0], 1] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
-" but got Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ
-</p>
+FAIL Range 23 [paras[0], 0, paras[0], 1] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, endContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
+" but got Text node "Ijklmnop
+"
 FAIL Range 23 [paras[0], 0, paras[0], 1] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 23 [paras[0], 0, paras[0], 1] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 23 [paras[0], 0, paras[0], 1] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: first addRange() must result in rangeCount being 1 
@@ -2801,15 +2785,13 @@
 PASS Range 23 [paras[0], 0, paras[0], 1] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: modifying the Selection's last Range must modify the first added Range 
 PASS Range 23 [paras[0], 0, paras[0], 1] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 23 [paras[0], 0, paras[0], 1] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: second addRange() must result in rangeCount being 1 
-FAIL Range 23 [paras[0], 0, paras[0], 1] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
-" but got Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ
-</p>
+PASS Range 23 [paras[0], 0, paras[0], 1] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: second addRange() must result in the selection's last range having the specified endpoints 
 FAIL Range 23 [paras[0], 0, paras[0], 1] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ
 Ijklmnop" but got object "Äb̈c̈d̈ëf̈g̈ḧ
 Ijklmnop"
-FAIL Range 23 [paras[0], 0, paras[0], 1] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
-" but got Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ
-</p>
+FAIL Range 23 [paras[0], 0, paras[0], 1] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, endContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
+" but got Text node "Ijklmnop
+"
 FAIL Range 23 [paras[0], 0, paras[0], 1] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 23 [paras[0], 0, paras[0], 1] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 23 [paras[0], 0, paras[0], 1] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: first addRange() must result in rangeCount being 1 
@@ -2819,17 +2801,13 @@
 PASS Range 23 [paras[0], 0, paras[0], 1] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: modifying the Selection's last Range must modify the first added Range 
 PASS Range 23 [paras[0], 0, paras[0], 1] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 23 [paras[0], 0, paras[0], 1] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: second addRange() must result in rangeCount being 1 
-FAIL Range 23 [paras[0], 0, paras[0], 1] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
-" but got Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ
-</p>
+PASS Range 23 [paras[0], 0, paras[0], 1] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: second addRange() must result in the selection's last range having the specified endpoints 
 FAIL Range 23 [paras[0], 0, paras[0], 1] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "̈c̈d̈ëf̈g̈ḧ
 Ijklmnop
-QrstuvwxYzabcdef" but got object "Äb̈c̈d̈ëf̈g̈ḧ
+QrstuvwxYzabcdef" but got object "̈c̈d̈ëf̈g̈ḧ
 Ijklmnop
 QrstuvwxYzabcdef"
-FAIL Range 23 [paras[0], 0, paras[0], 1] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
-" but got Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ
-</p>
+FAIL Range 23 [paras[0], 0, paras[0], 1] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 3
 FAIL Range 23 [paras[0], 0, paras[0], 1] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 23 [paras[0], 0, paras[0], 1] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 23 [paras[0], 0, paras[0], 1] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: first addRange() must result in rangeCount being 1 
@@ -2839,11 +2817,8 @@
 PASS Range 23 [paras[0], 0, paras[0], 1] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: modifying the Selection's last Range must modify the first added Range 
 PASS Range 23 [paras[0], 0, paras[0], 1] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 23 [paras[0], 0, paras[0], 1] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: second addRange() must result in rangeCount being 1 
-FAIL Range 23 [paras[0], 0, paras[0], 1] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: endContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
-" but got Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ
-</p>
-FAIL Range 23 [paras[0], 0, paras[0], 1] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d" but got object "Äb̈c̈d̈ëf̈g̈ḧ
-"
+PASS Range 23 [paras[0], 0, paras[0], 1] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: second addRange() must result in the selection's last range having the specified endpoints 
+FAIL Range 23 [paras[0], 0, paras[0], 1] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d" but got object "Äb̈c̈d"
 FAIL Range 23 [paras[0], 0, paras[0], 1] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
 " but got Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ
 </p>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/selection/addRange-24-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/selection/addRange-24-expected.txt
index 552374e..5b918b75 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/selection/addRange-24-expected.txt
+++ b/third_party/WebKit/LayoutTests/external/wpt/selection/addRange-24-expected.txt
@@ -134,6 +134,10 @@
 CONSOLE ERROR: line 7: The given range isn't in document.
 CONSOLE ERROR: line 7: Discontiguous selection is not supported.
 CONSOLE ERROR: line 7: Discontiguous selection is not supported.
+CONSOLE ERROR: line 7: Discontiguous selection is not supported.
+CONSOLE ERROR: line 7: Discontiguous selection is not supported.
+CONSOLE ERROR: line 7: Discontiguous selection is not supported.
+CONSOLE ERROR: line 7: Discontiguous selection is not supported.
 CONSOLE ERROR: line 7: The given range isn't in document.
 CONSOLE ERROR: line 7: The given range isn't in document.
 CONSOLE ERROR: line 7: The given range isn't in document.
@@ -147,10 +151,17 @@
 CONSOLE ERROR: line 7: Discontiguous selection is not supported.
 CONSOLE ERROR: line 7: Discontiguous selection is not supported.
 CONSOLE ERROR: line 7: Discontiguous selection is not supported.
+CONSOLE ERROR: line 7: Discontiguous selection is not supported.
 CONSOLE ERROR: line 7: The given range isn't in document.
 CONSOLE ERROR: line 7: The given range isn't in document.
 CONSOLE ERROR: line 7: The given range isn't in document.
 CONSOLE ERROR: line 7: The given range isn't in document.
+CONSOLE ERROR: line 7: Discontiguous selection is not supported.
+CONSOLE ERROR: line 7: Discontiguous selection is not supported.
+CONSOLE ERROR: line 7: Discontiguous selection is not supported.
+CONSOLE ERROR: line 7: Discontiguous selection is not supported.
+CONSOLE ERROR: line 7: Discontiguous selection is not supported.
+CONSOLE ERROR: line 7: Discontiguous selection is not supported.
 CONSOLE ERROR: line 7: The given range isn't in document.
 CONSOLE ERROR: line 7: The given range isn't in document.
 CONSOLE ERROR: line 7: The given range isn't in document.
@@ -164,6 +175,7 @@
 CONSOLE ERROR: line 7: Discontiguous selection is not supported.
 CONSOLE ERROR: line 7: Discontiguous selection is not supported.
 CONSOLE ERROR: line 7: Discontiguous selection is not supported.
+CONSOLE ERROR: line 7: Discontiguous selection is not supported.
 CONSOLE ERROR: line 7: The given range isn't in document.
 CONSOLE ERROR: line 7: The given range isn't in document.
 CONSOLE ERROR: line 7: The given range isn't in document.
@@ -1569,14 +1581,9 @@
 PASS Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: modifying the Selection's last Range must modify the first added Range 
 PASS Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: second addRange() must result in rangeCount being 1 
-FAIL Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: endContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
-" but got Text node "Ijklmnop
-"
-FAIL Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "Äb̈c̈d̈ëf̈g̈ḧ
-"
-FAIL Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, endContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
-" but got Text node "Ijklmnop
-"
+FAIL Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startOffset of the Selection's last Range must match the added Range expected 0 but got 6
+FAIL Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object ""
+FAIL Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 FAIL Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: first addRange() must result in rangeCount being 1 
@@ -1586,14 +1593,9 @@
 PASS Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: modifying the Selection's last Range must modify the first added Range 
 PASS Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: second addRange() must result in rangeCount being 1 
-FAIL Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: endContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
-" but got Text node "Ijklmnop
-"
-FAIL Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "A" but got object "Äb̈c̈d̈ëf̈g̈ḧ
-"
-FAIL Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, endContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
-" but got Text node "Ijklmnop
-"
+FAIL Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startOffset of the Selection's last Range must match the added Range expected 0 but got 6
+FAIL Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "A" but got object ""
+FAIL Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 FAIL Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: first addRange() must result in rangeCount being 1 
@@ -1603,12 +1605,9 @@
 PASS Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: modifying the Selection's last Range must modify the first added Range 
 PASS Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: second addRange() must result in rangeCount being 1 
-FAIL Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startOffset of the Selection's last Range must match the added Range expected 2 but got 0
-FAIL Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "b̈c̈d̈" but got object "Äb̈c̈d̈ëf̈g̈ḧ
-"
-FAIL Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, endContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
-" but got Text node "Ijklmnop
-"
+PASS Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: second addRange() must result in the selection's last range having the specified endpoints 
+FAIL Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "b̈c̈d̈" but got object "b̈c̈d̈"
+FAIL Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 2
 FAIL Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: first addRange() must result in rangeCount being 1 
@@ -1618,12 +1617,9 @@
 PASS Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: modifying the Selection's last Range must modify the first added Range 
 PASS Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: second addRange() must result in rangeCount being 1 
-FAIL Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startOffset of the Selection's last Range must match the added Range expected 2 but got 0
-FAIL Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "b̈c̈d̈e" but got object "Äb̈c̈d̈ëf̈g̈ḧ
-"
-FAIL Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, endContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
-" but got Text node "Ijklmnop
-"
+PASS Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: second addRange() must result in the selection's last range having the specified endpoints 
+FAIL Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "b̈c̈d̈e" but got object "b̈c̈d̈e"
+FAIL Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 2
 FAIL Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: first addRange() must result in rangeCount being 1 
@@ -1636,11 +1632,8 @@
 FAIL Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Ijklmnop
 " but got Text node "Äb̈c̈d̈ëf̈g̈ḧ
 "
-FAIL Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "Äb̈c̈d̈ëf̈g̈ḧ
-"
-FAIL Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, endContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
-" but got Text node "Ijklmnop
-"
+FAIL Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object ""
+FAIL Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 FAIL Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: first addRange() must result in rangeCount being 1 
@@ -1653,11 +1646,8 @@
 FAIL Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Ijklmnop
 " but got Text node "Äb̈c̈d̈ëf̈g̈ḧ
 "
-FAIL Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "I" but got object "Äb̈c̈d̈ëf̈g̈ḧ
-I"
-FAIL Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, endContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
-" but got Text node "Ijklmnop
-"
+FAIL Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "I" but got object ""
+FAIL Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 FAIL Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: first addRange() must result in rangeCount being 1 
@@ -1955,9 +1945,7 @@
 PASS Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0] followed by Range 23 [paras[0], 0, paras[0], 1]: modifying the Selection's last Range must modify the first added Range 
 PASS Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0] followed by Range 23 [paras[0], 0, paras[0], 1]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0] followed by Range 23 [paras[0], 0, paras[0], 1]: second addRange() must result in rangeCount being 1 
-FAIL Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0] followed by Range 23 [paras[0], 0, paras[0], 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: endContainer of the Selection's last Range must match the added Range expected Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ
-</p> but got Text node "Ijklmnop
-"
+PASS Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0] followed by Range 23 [paras[0], 0, paras[0], 1]: second addRange() must result in the selection's last range having the specified endpoints 
 FAIL Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0] followed by Range 23 [paras[0], 0, paras[0], 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ
 " but got object "Äb̈c̈d̈ëf̈g̈ḧ
 "
@@ -2031,14 +2019,13 @@
 PASS Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: modifying the Selection's last Range must modify the first added Range 
 PASS Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: second addRange() must result in rangeCount being 1 
-FAIL Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startOffset of the Selection's last Range must match the added Range expected 3 but got 0
+PASS Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: second addRange() must result in the selection's last range having the specified endpoints 
 FAIL Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "̈c̈d̈ëf̈g̈ḧ
 Ijklmnop
-QrstuvwxYzabcdef" but got object "Äb̈c̈d̈ëf̈g̈ḧ
+QrstuvwxYzabcdef" but got object "̈c̈d̈ëf̈g̈ḧ
 Ijklmnop
 QrstuvwxYzabcdef"
-FAIL Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, endContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
-" but got Element node <p id="d" style="display:none">Yzabcdef</p>
+FAIL Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 3
 FAIL Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: first addRange() must result in rangeCount being 1 
@@ -2048,11 +2035,8 @@
 PASS Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: modifying the Selection's last Range must modify the first added Range 
 PASS Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: second addRange() must result in rangeCount being 1 
-FAIL Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: endContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
-" but got Text node "Ijklmnop
-"
-FAIL Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d" but got object "Äb̈c̈d̈ëf̈g̈ḧ
-"
+PASS Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: second addRange() must result in the selection's last range having the specified endpoints 
+FAIL Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d" but got object "Äb̈c̈d"
 FAIL Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
 " but got Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ
 </p>
@@ -2083,11 +2067,8 @@
 </p><p id="b" s... but got Text node "Äb̈c̈d̈ëf̈g̈ḧ
 "
 FAIL Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Ijklmnop
-Qrstu" but got object "Äb̈c̈d̈ëf̈g̈ḧ
-Ijklmnop
-Qrstu"
-FAIL Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, endContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
-" but got Text node "Qrstuvwx"
+Qrstu" but got object ""
+FAIL Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 FAIL Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0] followed by Range 32 [document.documentElement, 1, document.body, 0]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0] followed by Range 32 [document.documentElement, 1, document.body, 0]: first addRange() must result in rangeCount being 1 
@@ -2498,14 +2479,9 @@
 PASS Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: modifying the Selection's last Range must modify the first added Range 
 PASS Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: second addRange() must result in rangeCount being 1 
-FAIL Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: endContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
-" but got Text node "Ijklmnop
-"
-FAIL Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "Äb̈c̈d̈ëf̈g̈ḧ
-Ijklmnop"
-FAIL Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, endContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
-" but got Text node "Ijklmnop
-"
+FAIL Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startOffset of the Selection's last Range must match the added Range expected 0 but got 6
+FAIL Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object ""
+FAIL Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 FAIL Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: first addRange() must result in rangeCount being 1 
@@ -2515,14 +2491,9 @@
 PASS Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: modifying the Selection's last Range must modify the first added Range 
 PASS Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: second addRange() must result in rangeCount being 1 
-FAIL Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: endContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
-" but got Text node "Ijklmnop
-"
-FAIL Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "A" but got object "Äb̈c̈d̈ëf̈g̈ḧ
-Ijklmnop"
-FAIL Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, endContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
-" but got Text node "Ijklmnop
-"
+FAIL Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startOffset of the Selection's last Range must match the added Range expected 0 but got 6
+FAIL Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "A" but got object ""
+FAIL Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 FAIL Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: first addRange() must result in rangeCount being 1 
@@ -2532,12 +2503,9 @@
 PASS Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: modifying the Selection's last Range must modify the first added Range 
 PASS Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: second addRange() must result in rangeCount being 1 
-FAIL Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startOffset of the Selection's last Range must match the added Range expected 2 but got 0
-FAIL Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "b̈c̈d̈" but got object "Äb̈c̈d̈ëf̈g̈ḧ
-Ijklmnop"
-FAIL Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, endContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
-" but got Text node "Ijklmnop
-"
+PASS Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: second addRange() must result in the selection's last range having the specified endpoints 
+FAIL Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "b̈c̈d̈" but got object "b̈c̈d̈"
+FAIL Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 2
 FAIL Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: first addRange() must result in rangeCount being 1 
@@ -2547,12 +2515,9 @@
 PASS Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: modifying the Selection's last Range must modify the first added Range 
 PASS Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: second addRange() must result in rangeCount being 1 
-FAIL Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startOffset of the Selection's last Range must match the added Range expected 2 but got 0
-FAIL Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "b̈c̈d̈e" but got object "Äb̈c̈d̈ëf̈g̈ḧ
-Ijklmnop"
-FAIL Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, endContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
-" but got Text node "Ijklmnop
-"
+PASS Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: second addRange() must result in the selection's last range having the specified endpoints 
+FAIL Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "b̈c̈d̈e" but got object "b̈c̈d̈e"
+FAIL Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 2
 FAIL Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: first addRange() must result in rangeCount being 1 
@@ -2565,11 +2530,8 @@
 FAIL Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Ijklmnop
 " but got Text node "Äb̈c̈d̈ëf̈g̈ḧ
 "
-FAIL Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "Äb̈c̈d̈ëf̈g̈ḧ
-Ijklmnop"
-FAIL Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, endContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
-" but got Text node "Ijklmnop
-"
+FAIL Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object ""
+FAIL Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 FAIL Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: first addRange() must result in rangeCount being 1 
@@ -2582,11 +2544,8 @@
 FAIL Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Ijklmnop
 " but got Text node "Äb̈c̈d̈ëf̈g̈ḧ
 "
-FAIL Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "I" but got object "Äb̈c̈d̈ëf̈g̈ḧ
-Ijklmnop"
-FAIL Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, endContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
-" but got Text node "Ijklmnop
-"
+FAIL Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "I" but got object ""
+FAIL Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 FAIL Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: first addRange() must result in rangeCount being 1 
@@ -2599,11 +2558,8 @@
 FAIL Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Ijklmnop
 " but got Text node "Äb̈c̈d̈ëf̈g̈ḧ
 "
-FAIL Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "klmnop" but got object "Äb̈c̈d̈ëf̈g̈ḧ
-Ijklmnop"
-FAIL Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, endContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
-" but got Text node "Ijklmnop
-"
+FAIL Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "klmnop" but got object ""
+FAIL Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 FAIL Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: first addRange() must result in rangeCount being 1 
@@ -2617,12 +2573,8 @@
 " but got Text node "Äb̈c̈d̈ëf̈g̈ḧ
 "
 FAIL Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "klmnop
-" but got object "Äb̈c̈d̈ëf̈g̈ḧ
-Ijklmnop
-"
-FAIL Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, endContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
-" but got Text node "Ijklmnop
-"
+" but got object ""
+FAIL Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 FAIL Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: first addRange() must result in rangeCount being 1 
@@ -2891,12 +2843,10 @@
 PASS Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8] followed by Range 23 [paras[0], 0, paras[0], 1]: modifying the Selection's last Range must modify the first added Range 
 PASS Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8] followed by Range 23 [paras[0], 0, paras[0], 1]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8] followed by Range 23 [paras[0], 0, paras[0], 1]: second addRange() must result in rangeCount being 1 
-FAIL Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8] followed by Range 23 [paras[0], 0, paras[0], 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: endContainer of the Selection's last Range must match the added Range expected Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ
-</p> but got Text node "Ijklmnop
-"
+PASS Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8] followed by Range 23 [paras[0], 0, paras[0], 1]: second addRange() must result in the selection's last range having the specified endpoints 
 FAIL Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8] followed by Range 23 [paras[0], 0, paras[0], 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ
 " but got object "Äb̈c̈d̈ëf̈g̈ḧ
-Ijklmnop"
+"
 FAIL Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8] followed by Range 23 [paras[0], 0, paras[0], 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
 " but got Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ
 </p>
@@ -2935,10 +2885,10 @@
 PASS Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: modifying the Selection's last Range must modify the first added Range 
 PASS Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: second addRange() must result in rangeCount being 1 
-FAIL Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: endOffset of the Selection's last Range must match the added Range expected 0 but got 8
+PASS Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: second addRange() must result in the selection's last range having the specified endpoints 
 FAIL Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ
 " but got object "Äb̈c̈d̈ëf̈g̈ḧ
-Ijklmnop"
+"
 FAIL Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, endContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
 " but got Text node "Ijklmnop
 "
@@ -2967,14 +2917,13 @@
 PASS Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: modifying the Selection's last Range must modify the first added Range 
 PASS Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: second addRange() must result in rangeCount being 1 
-FAIL Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startOffset of the Selection's last Range must match the added Range expected 3 but got 0
+PASS Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: second addRange() must result in the selection's last range having the specified endpoints 
 FAIL Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "̈c̈d̈ëf̈g̈ḧ
 Ijklmnop
-QrstuvwxYzabcdef" but got object "Äb̈c̈d̈ëf̈g̈ḧ
+QrstuvwxYzabcdef" but got object "̈c̈d̈ëf̈g̈ḧ
 Ijklmnop
 QrstuvwxYzabcdef"
-FAIL Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, endContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
-" but got Element node <p id="d" style="display:none">Yzabcdef</p>
+FAIL Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 3
 FAIL Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: first addRange() must result in rangeCount being 1 
@@ -2984,11 +2933,8 @@
 PASS Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: modifying the Selection's last Range must modify the first added Range 
 PASS Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: second addRange() must result in rangeCount being 1 
-FAIL Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: endContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
-" but got Text node "Ijklmnop
-"
-FAIL Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d" but got object "Äb̈c̈d̈ëf̈g̈ḧ
-Ijklmnop"
+PASS Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: second addRange() must result in the selection's last range having the specified endpoints 
+FAIL Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d" but got object "Äb̈c̈d"
 FAIL Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
 " but got Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ
 </p>
@@ -3019,11 +2965,8 @@
 </p><p id="b" s... but got Text node "Äb̈c̈d̈ëf̈g̈ḧ
 "
 FAIL Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Ijklmnop
-Qrstu" but got object "Äb̈c̈d̈ëf̈g̈ḧ
-Ijklmnop
-Qrstu"
-FAIL Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, endContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
-" but got Text node "Qrstuvwx"
+Qrstu" but got object ""
+FAIL Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 FAIL Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8] followed by Range 32 [document.documentElement, 1, document.body, 0]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8] followed by Range 32 [document.documentElement, 1, document.body, 0]: first addRange() must result in rangeCount being 1 
diff --git a/third_party/WebKit/LayoutTests/external/wpt/selection/addRange-28-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/selection/addRange-28-expected.txt
index 4ca869f..844c6c04 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/selection/addRange-28-expected.txt
+++ b/third_party/WebKit/LayoutTests/external/wpt/selection/addRange-28-expected.txt
@@ -1,19 +1,5 @@
 CONSOLE ERROR: line 7: Discontiguous selection is not supported.
 CONSOLE ERROR: line 7: Discontiguous selection is not supported.
-CONSOLE ERROR: line 7: The given range isn't in document.
-CONSOLE ERROR: line 7: The given range isn't in document.
-CONSOLE ERROR: line 7: The given range isn't in document.
-CONSOLE ERROR: line 7: Discontiguous selection is not supported.
-CONSOLE ERROR: line 7: Discontiguous selection is not supported.
-CONSOLE ERROR: line 7: Discontiguous selection is not supported.
-CONSOLE ERROR: line 7: The given range isn't in document.
-CONSOLE ERROR: line 7: The given range isn't in document.
-CONSOLE ERROR: line 7: Discontiguous selection is not supported.
-CONSOLE ERROR: line 7: Discontiguous selection is not supported.
-CONSOLE ERROR: line 7: The given range isn't in document.
-CONSOLE ERROR: line 7: The given range isn't in document.
-CONSOLE ERROR: line 7: The given range isn't in document.
-CONSOLE ERROR: line 7: The given range isn't in document.
 CONSOLE ERROR: line 7: Discontiguous selection is not supported.
 CONSOLE ERROR: line 7: Discontiguous selection is not supported.
 CONSOLE ERROR: line 7: Discontiguous selection is not supported.
@@ -23,6 +9,7 @@
 CONSOLE ERROR: line 7: The given range isn't in document.
 CONSOLE ERROR: line 7: Discontiguous selection is not supported.
 CONSOLE ERROR: line 7: Discontiguous selection is not supported.
+CONSOLE ERROR: line 7: Discontiguous selection is not supported.
 CONSOLE ERROR: line 7: The given range isn't in document.
 CONSOLE ERROR: line 7: The given range isn't in document.
 CONSOLE ERROR: line 7: Discontiguous selection is not supported.
@@ -41,17 +28,15 @@
 CONSOLE ERROR: line 7: Discontiguous selection is not supported.
 CONSOLE ERROR: line 7: Discontiguous selection is not supported.
 CONSOLE ERROR: line 7: Discontiguous selection is not supported.
-CONSOLE ERROR: line 7: Discontiguous selection is not supported.
-CONSOLE ERROR: line 7: Discontiguous selection is not supported.
 CONSOLE ERROR: line 7: The given range isn't in document.
 CONSOLE ERROR: line 7: The given range isn't in document.
 CONSOLE ERROR: line 7: The given range isn't in document.
 CONSOLE ERROR: line 7: Discontiguous selection is not supported.
 CONSOLE ERROR: line 7: Discontiguous selection is not supported.
 CONSOLE ERROR: line 7: Discontiguous selection is not supported.
+CONSOLE ERROR: line 7: The given range isn't in document.
+CONSOLE ERROR: line 7: The given range isn't in document.
 CONSOLE ERROR: line 7: Discontiguous selection is not supported.
-CONSOLE ERROR: line 7: The given range isn't in document.
-CONSOLE ERROR: line 7: The given range isn't in document.
 CONSOLE ERROR: line 7: Discontiguous selection is not supported.
 CONSOLE ERROR: line 7: Discontiguous selection is not supported.
 CONSOLE ERROR: line 7: Discontiguous selection is not supported.
@@ -65,6 +50,23 @@
 CONSOLE ERROR: line 7: Discontiguous selection is not supported.
 CONSOLE ERROR: line 7: Discontiguous selection is not supported.
 CONSOLE ERROR: line 7: Discontiguous selection is not supported.
+CONSOLE ERROR: line 7: Discontiguous selection is not supported.
+CONSOLE ERROR: line 7: Discontiguous selection is not supported.
+CONSOLE ERROR: line 7: The given range isn't in document.
+CONSOLE ERROR: line 7: The given range isn't in document.
+CONSOLE ERROR: line 7: The given range isn't in document.
+CONSOLE ERROR: line 7: Discontiguous selection is not supported.
+CONSOLE ERROR: line 7: Discontiguous selection is not supported.
+CONSOLE ERROR: line 7: Discontiguous selection is not supported.
+CONSOLE ERROR: line 7: The given range isn't in document.
+CONSOLE ERROR: line 7: The given range isn't in document.
+CONSOLE ERROR: line 7: Discontiguous selection is not supported.
+CONSOLE ERROR: line 7: Discontiguous selection is not supported.
+CONSOLE ERROR: line 7: Discontiguous selection is not supported.
+CONSOLE ERROR: line 7: Discontiguous selection is not supported.
+CONSOLE ERROR: line 7: Discontiguous selection is not supported.
+CONSOLE ERROR: line 7: Discontiguous selection is not supported.
+CONSOLE ERROR: line 7: The given range isn't in document.
 CONSOLE ERROR: line 7: The given range isn't in document.
 CONSOLE ERROR: line 7: The given range isn't in document.
 CONSOLE ERROR: line 7: The given range isn't in document.
@@ -72,8 +74,18 @@
 CONSOLE ERROR: line 7: Discontiguous selection is not supported.
 CONSOLE ERROR: line 7: Discontiguous selection is not supported.
 CONSOLE ERROR: line 7: Discontiguous selection is not supported.
+CONSOLE ERROR: line 7: Discontiguous selection is not supported.
+CONSOLE ERROR: line 7: Discontiguous selection is not supported.
 CONSOLE ERROR: line 7: The given range isn't in document.
 CONSOLE ERROR: line 7: The given range isn't in document.
+CONSOLE ERROR: line 7: The given range isn't in document.
+CONSOLE ERROR: line 7: Discontiguous selection is not supported.
+CONSOLE ERROR: line 7: Discontiguous selection is not supported.
+CONSOLE ERROR: line 7: Discontiguous selection is not supported.
+CONSOLE ERROR: line 7: The given range isn't in document.
+CONSOLE ERROR: line 7: The given range isn't in document.
+CONSOLE ERROR: line 7: Discontiguous selection is not supported.
+CONSOLE ERROR: line 7: Discontiguous selection is not supported.
 CONSOLE ERROR: line 7: Discontiguous selection is not supported.
 CONSOLE ERROR: line 7: Discontiguous selection is not supported.
 CONSOLE ERROR: line 7: Discontiguous selection is not supported.
@@ -115,11 +127,8 @@
 PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: modifying the Selection's last Range must modify the first added Range 
 PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: second addRange() must result in rangeCount being 1 
-FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: endContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
-" but got Element node <p id="d" style="display:none">Yzabcdef</p>
-FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "b̈c̈d̈" but got object "b̈c̈d̈ëf̈g̈ḧ
-Ijklmnop
-QrstuvwxYzabcdef"
+PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: second addRange() must result in the selection's last range having the specified endpoints 
+FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "b̈c̈d̈" but got object "b̈c̈d̈"
 FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 2
 FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: first addRange() must not throw exceptions or modify the range it's given 
@@ -130,11 +139,8 @@
 PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: modifying the Selection's last Range must modify the first added Range 
 PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: second addRange() must result in rangeCount being 1 
-FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: endContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
-" but got Element node <p id="d" style="display:none">Yzabcdef</p>
-FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "b̈c̈d̈e" but got object "b̈c̈d̈ëf̈g̈ḧ
-Ijklmnop
-QrstuvwxYzabcdef"
+PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: second addRange() must result in the selection's last range having the specified endpoints 
+FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "b̈c̈d̈e" but got object "b̈c̈d̈e"
 FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 2
 FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: first addRange() must not throw exceptions or modify the range it's given 
@@ -148,10 +154,8 @@
 FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Ijklmnop
 " but got Text node "Äb̈c̈d̈ëf̈g̈ḧ
 "
-FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "̈c̈d̈ëf̈g̈ḧ
-Ijklmnop
-QrstuvwxYzabcdef"
-FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 3
+FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object ""
+FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: first addRange() must result in rangeCount being 1 
@@ -164,10 +168,8 @@
 FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Ijklmnop
 " but got Text node "Äb̈c̈d̈ëf̈g̈ḧ
 "
-FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "I" but got object "̈c̈d̈ëf̈g̈ḧ
-Ijklmnop
-QrstuvwxYzabcdef"
-FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 3
+FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "I" but got object ""
+FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: first addRange() must result in rangeCount being 1 
@@ -180,10 +182,8 @@
 FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Ijklmnop
 " but got Text node "Äb̈c̈d̈ëf̈g̈ḧ
 "
-FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "klmnop" but got object "̈c̈d̈ëf̈g̈ḧ
-Ijklmnop
-QrstuvwxYzabcdef"
-FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 3
+FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "klmnop" but got object ""
+FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: first addRange() must result in rangeCount being 1 
@@ -197,10 +197,8 @@
 " but got Text node "Äb̈c̈d̈ëf̈g̈ḧ
 "
 FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "klmnop
-" but got object "̈c̈d̈ëf̈g̈ḧ
-Ijklmnop
-QrstuvwxYzabcdef"
-FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 3
+" but got object ""
+FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: first addRange() must result in rangeCount being 1 
@@ -469,12 +467,10 @@
 PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 23 [paras[0], 0, paras[0], 1]: modifying the Selection's last Range must modify the first added Range 
 PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 23 [paras[0], 0, paras[0], 1]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 23 [paras[0], 0, paras[0], 1]: second addRange() must result in rangeCount being 1 
-FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 23 [paras[0], 0, paras[0], 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: endContainer of the Selection's last Range must match the added Range expected Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ
-</p> but got Element node <p id="d" style="display:none">Yzabcdef</p>
+PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 23 [paras[0], 0, paras[0], 1]: second addRange() must result in the selection's last range having the specified endpoints 
 FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 23 [paras[0], 0, paras[0], 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ
 " but got object "Äb̈c̈d̈ëf̈g̈ḧ
-Ijklmnop
-QrstuvwxYzabcdef"
+"
 FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 23 [paras[0], 0, paras[0], 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
 " but got Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ
 </p>
@@ -513,14 +509,13 @@
 PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: modifying the Selection's last Range must modify the first added Range 
 PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: second addRange() must result in rangeCount being 1 
-FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: endContainer of the Selection's last Range must match the added Range expected Text node "Ijklmnop
-" but got Element node <p id="d" style="display:none">Yzabcdef</p>
+PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: second addRange() must result in the selection's last range having the specified endpoints 
 FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ
 " but got object "Äb̈c̈d̈ëf̈g̈ḧ
-Ijklmnop
-QrstuvwxYzabcdef"
+"
 FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, endContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
-" but got Element node <p id="d" style="display:none">Yzabcdef</p>
+" but got Text node "Ijklmnop
+"
 FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: first addRange() must result in rangeCount being 1 
@@ -530,14 +525,13 @@
 PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: modifying the Selection's last Range must modify the first added Range 
 PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: second addRange() must result in rangeCount being 1 
-FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: endContainer of the Selection's last Range must match the added Range expected Text node "Ijklmnop
-" but got Element node <p id="d" style="display:none">Yzabcdef</p>
+PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: second addRange() must result in the selection's last range having the specified endpoints 
 FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ
 Ijklmnop" but got object "Äb̈c̈d̈ëf̈g̈ḧ
-Ijklmnop
-QrstuvwxYzabcdef"
+Ijklmnop"
 FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, endContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
-" but got Element node <p id="d" style="display:none">Yzabcdef</p>
+" but got Text node "Ijklmnop
+"
 FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: first addRange() must result in rangeCount being 1 
@@ -563,11 +557,8 @@
 PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: modifying the Selection's last Range must modify the first added Range 
 PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: second addRange() must result in rangeCount being 1 
-FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: endContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
-" but got Element node <p id="d" style="display:none">Yzabcdef</p>
-FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d" but got object "Äb̈c̈d̈ëf̈g̈ḧ
-Ijklmnop
-QrstuvwxYzabcdef"
+PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: second addRange() must result in the selection's last range having the specified endpoints 
+FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d" but got object "Äb̈c̈d"
 FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
 " but got Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ
 </p>
@@ -583,10 +574,8 @@
 FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 30 [testDiv, 2, paras[4], 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ
 </p><p id="b" s... but got Text node "Äb̈c̈d̈ëf̈g̈ḧ
 "
-FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 30 [testDiv, 2, paras[4], 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "QrstuvwxYzabcdefGhijklmn" but got object "̈c̈d̈ëf̈g̈ḧ
-Ijklmnop
-QrstuvwxYzabcdefGhijklmn"
-FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 30 [testDiv, 2, paras[4], 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 3
+FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 30 [testDiv, 2, paras[4], 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "QrstuvwxYzabcdefGhijklmn" but got object ""
+FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 30 [testDiv, 2, paras[4], 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 30 [testDiv, 2, paras[4], 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: first addRange() must result in rangeCount being 1 
@@ -600,10 +589,8 @@
 </p><p id="b" s... but got Text node "Äb̈c̈d̈ëf̈g̈ḧ
 "
 FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Ijklmnop
-Qrstu" but got object "̈c̈d̈ëf̈g̈ḧ
-Ijklmnop
-QrstuvwxYzabcdef"
-FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 3
+Qrstu" but got object ""
+FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 32 [document.documentElement, 1, document.body, 0]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 32 [document.documentElement, 1, document.body, 0]: first addRange() must result in rangeCount being 1 
@@ -756,10 +743,8 @@
 PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: second addRange() must result in rangeCount being 1 
 FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Qrstuvwx" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ
 "
-FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "uvwxYzabcdefGhijklmn" but got object "̈c̈d̈ëf̈g̈ḧ
-Ijklmnop
-QrstuvwxYzabcdefGhijklmn"
-FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 3
+FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "uvwxYzabcdefGhijklmn" but got object ""
+FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 39 [paras[3], 1, comment, 8]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 39 [paras[3], 1, comment, 8]: first addRange() must result in rangeCount being 1 
@@ -771,10 +756,8 @@
 PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 39 [paras[3], 1, comment, 8]: second addRange() must result in rangeCount being 1 
 FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 39 [paras[3], 1, comment, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <p id="d" style="display:none">Yzabcdef</p> but got Text node "Äb̈c̈d̈ëf̈g̈ḧ
 "
-FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 39 [paras[3], 1, comment, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Ghijklmn" but got object "̈c̈d̈ëf̈g̈ḧ
-Ijklmnop
-QrstuvwxYzabcdefGhijklmn"
-FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 39 [paras[3], 1, comment, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 3
+FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 39 [paras[3], 1, comment, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Ghijklmn" but got object ""
+FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 39 [paras[3], 1, comment, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 39 [paras[3], 1, comment, 8]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: first addRange() must result in rangeCount being 1 
@@ -1018,13 +1001,9 @@
 PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: modifying the Selection's last Range must modify the first added Range 
 PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: second addRange() must result in rangeCount being 1 
-FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
-" but got Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ
-</p>
-FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "Äb̈c̈d"
-FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
-" but got Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ
-</p>
+FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startOffset of the Selection's last Range must match the added Range expected 0 but got 6
+FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object ""
+FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: first addRange() must result in rangeCount being 1 
@@ -1034,13 +1013,9 @@
 PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: modifying the Selection's last Range must modify the first added Range 
 PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: second addRange() must result in rangeCount being 1 
-FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
-" but got Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ
-</p>
-FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "A" but got object "Äb̈c̈d"
-FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
-" but got Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ
-</p>
+FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startOffset of the Selection's last Range must match the added Range expected 0 but got 6
+FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "A" but got object ""
+FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: first addRange() must result in rangeCount being 1 
@@ -1050,13 +1025,9 @@
 PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: modifying the Selection's last Range must modify the first added Range 
 PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: second addRange() must result in rangeCount being 1 
-FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
-" but got Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ
-</p>
-FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "b̈c̈d̈" but got object "Äb̈c̈d̈"
-FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
-" but got Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ
-</p>
+PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: second addRange() must result in the selection's last range having the specified endpoints 
+FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "b̈c̈d̈" but got object "b̈c̈d̈"
+FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 2
 FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: first addRange() must result in rangeCount being 1 
@@ -1066,13 +1037,9 @@
 PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: modifying the Selection's last Range must modify the first added Range 
 PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: second addRange() must result in rangeCount being 1 
-FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
-" but got Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ
-</p>
-FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "b̈c̈d̈e" but got object "Äb̈c̈d̈e"
-FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
-" but got Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ
-</p>
+PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: second addRange() must result in the selection's last range having the specified endpoints 
+FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "b̈c̈d̈e" but got object "b̈c̈d̈e"
+FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 2
 FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: first addRange() must result in rangeCount being 1 
@@ -1384,13 +1351,11 @@
 PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 22 [paras[0], 0, paras[0], 0]: modifying the Selection's last Range must modify the first added Range 
 PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 22 [paras[0], 0, paras[0], 0]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 22 [paras[0], 0, paras[0], 0]: second addRange() must result in rangeCount being 1 
-FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 22 [paras[0], 0, paras[0], 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: endContainer of the Selection's last Range must match the added Range expected Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ
+FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 22 [paras[0], 0, paras[0], 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ
 </p> but got Text node "Äb̈c̈d̈ëf̈g̈ḧ
 "
-FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 22 [paras[0], 0, paras[0], 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "Äb̈c̈d"
-FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 22 [paras[0], 0, paras[0], 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
-" but got Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ
-</p>
+FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 22 [paras[0], 0, paras[0], 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object ""
+FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 22 [paras[0], 0, paras[0], 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 22 [paras[0], 0, paras[0], 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 23 [paras[0], 0, paras[0], 1]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 23 [paras[0], 0, paras[0], 1]: first addRange() must result in rangeCount being 1 
@@ -1442,15 +1407,13 @@
 PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: modifying the Selection's last Range must modify the first added Range 
 PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: second addRange() must result in rangeCount being 1 
-FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
-" but got Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ
-</p>
+PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: second addRange() must result in the selection's last range having the specified endpoints 
 FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ
 " but got object "Äb̈c̈d̈ëf̈g̈ḧ
 "
-FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
-" but got Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ
-</p>
+FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, endContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
+" but got Text node "Ijklmnop
+"
 FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: first addRange() must result in rangeCount being 1 
@@ -1460,15 +1423,13 @@
 PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: modifying the Selection's last Range must modify the first added Range 
 PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: second addRange() must result in rangeCount being 1 
-FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
-" but got Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ
-</p>
+PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: second addRange() must result in the selection's last range having the specified endpoints 
 FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ
 Ijklmnop" but got object "Äb̈c̈d̈ëf̈g̈ḧ
 Ijklmnop"
-FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
-" but got Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ
-</p>
+FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, endContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
+" but got Text node "Ijklmnop
+"
 FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: first addRange() must result in rangeCount being 1 
@@ -1478,17 +1439,13 @@
 PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: modifying the Selection's last Range must modify the first added Range 
 PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: second addRange() must result in rangeCount being 1 
-FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
-" but got Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ
-</p>
+PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: second addRange() must result in the selection's last range having the specified endpoints 
 FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "̈c̈d̈ëf̈g̈ḧ
 Ijklmnop
-QrstuvwxYzabcdef" but got object "Äb̈c̈d̈ëf̈g̈ḧ
+QrstuvwxYzabcdef" but got object "̈c̈d̈ëf̈g̈ḧ
 Ijklmnop
 QrstuvwxYzabcdef"
-FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
-" but got Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ
-</p>
+FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 3
 FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: first addRange() must result in rangeCount being 1 
@@ -1966,9 +1923,9 @@
 PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: modifying the Selection's last Range must modify the first added Range 
 PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: second addRange() must result in rangeCount being 1 
-FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startOffset of the Selection's last Range must match the added Range expected 2 but got 6
-FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "b̈c̈d̈" but got object ""
-FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
+PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: second addRange() must result in the selection's last range having the specified endpoints 
+FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "b̈c̈d̈" but got object "b̈c̈d̈"
+FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 2
 FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: first addRange() must result in rangeCount being 1 
@@ -1978,9 +1935,9 @@
 PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: modifying the Selection's last Range must modify the first added Range 
 PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: second addRange() must result in rangeCount being 1 
-FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startOffset of the Selection's last Range must match the added Range expected 2 but got 6
-FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "b̈c̈d̈e" but got object ""
-FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
+PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: second addRange() must result in the selection's last range having the specified endpoints 
+FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "b̈c̈d̈e" but got object "b̈c̈d̈e"
+FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 2
 FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: first addRange() must result in rangeCount being 1 
@@ -2306,12 +2263,13 @@
 PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 23 [paras[0], 0, paras[0], 1]: modifying the Selection's last Range must modify the first added Range 
 PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 23 [paras[0], 0, paras[0], 1]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 23 [paras[0], 0, paras[0], 1]: second addRange() must result in rangeCount being 1 
-FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 23 [paras[0], 0, paras[0], 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ
-</p> but got Text node "Äb̈c̈d̈ëf̈g̈ḧ
-"
+PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 23 [paras[0], 0, paras[0], 1]: second addRange() must result in the selection's last range having the specified endpoints 
 FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 23 [paras[0], 0, paras[0], 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ
-" but got object ""
-FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 23 [paras[0], 0, paras[0], 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
+" but got object "Äb̈c̈d̈ëf̈g̈ḧ
+"
+FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 23 [paras[0], 0, paras[0], 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
+" but got Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ
+</p>
 FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 23 [paras[0], 0, paras[0], 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: first addRange() must result in rangeCount being 1 
@@ -2347,10 +2305,13 @@
 PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: modifying the Selection's last Range must modify the first added Range 
 PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: second addRange() must result in rangeCount being 1 
-FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startOffset of the Selection's last Range must match the added Range expected 0 but got 6
+PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: second addRange() must result in the selection's last range having the specified endpoints 
 FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ
-" but got object ""
-FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
+" but got object "Äb̈c̈d̈ëf̈g̈ḧ
+"
+FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, endContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
+" but got Text node "Ijklmnop
+"
 FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: first addRange() must result in rangeCount being 1 
@@ -2360,10 +2321,13 @@
 PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: modifying the Selection's last Range must modify the first added Range 
 PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: second addRange() must result in rangeCount being 1 
-FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startOffset of the Selection's last Range must match the added Range expected 0 but got 6
+PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: second addRange() must result in the selection's last range having the specified endpoints 
 FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ
-Ijklmnop" but got object ""
-FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
+Ijklmnop" but got object "Äb̈c̈d̈ëf̈g̈ḧ
+Ijklmnop"
+FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, endContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
+" but got Text node "Ijklmnop
+"
 FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: first addRange() must result in rangeCount being 1 
@@ -2373,12 +2337,12 @@
 PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: modifying the Selection's last Range must modify the first added Range 
 PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: second addRange() must result in rangeCount being 1 
-FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: endContainer of the Selection's last Range must match the added Range expected Element node <p id="d" style="display:none">Yzabcdef</p> but got Element node <p id="e" style="display:none">Ghijklmn</p>
+PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: second addRange() must result in the selection's last range having the specified endpoints 
 FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "̈c̈d̈ëf̈g̈ḧ
 Ijklmnop
 QrstuvwxYzabcdef" but got object "̈c̈d̈ëf̈g̈ḧ
 Ijklmnop
-QrstuvwxYzabcdefGhijklmn"
+QrstuvwxYzabcdef"
 FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 3
 FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: first addRange() must not throw exceptions or modify the range it's given 
@@ -2389,11 +2353,11 @@
 PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: modifying the Selection's last Range must modify the first added Range 
 PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: second addRange() must result in rangeCount being 1 
-FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ
-</p> but got Text node "Äb̈c̈d̈ëf̈g̈ḧ
-"
-FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d" but got object ""
-FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
+PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: second addRange() must result in the selection's last range having the specified endpoints 
+FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d" but got object "Äb̈c̈d"
+FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
+" but got Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ
+</p>
 FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 30 [testDiv, 2, paras[4], 1]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 30 [testDiv, 2, paras[4], 1]: first addRange() must result in rangeCount being 1 
@@ -2403,11 +2367,11 @@
 PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 30 [testDiv, 2, paras[4], 1]: modifying the Selection's last Range must modify the first added Range 
 PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 30 [testDiv, 2, paras[4], 1]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 30 [testDiv, 2, paras[4], 1]: second addRange() must result in rangeCount being 1 
-PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 30 [testDiv, 2, paras[4], 1]: second addRange() must result in the selection's last range having the specified endpoints 
-FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 30 [testDiv, 2, paras[4], 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "QrstuvwxYzabcdefGhijklmn" but got object "QrstuvwxYzabcdefGhijklmn"
-FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 30 [testDiv, 2, paras[4], 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
-" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ
-</p><p id="b" s...
+FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 30 [testDiv, 2, paras[4], 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ
+</p><p id="b" s... but got Text node "Äb̈c̈d̈ëf̈g̈ḧ
+"
+FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 30 [testDiv, 2, paras[4], 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "QrstuvwxYzabcdefGhijklmn" but got object ""
+FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 30 [testDiv, 2, paras[4], 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 30 [testDiv, 2, paras[4], 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: first addRange() must result in rangeCount being 1 
@@ -2417,13 +2381,12 @@
 PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: modifying the Selection's last Range must modify the first added Range 
 PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: second addRange() must result in rangeCount being 1 
-FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: endContainer of the Selection's last Range must match the added Range expected Text node "Qrstuvwx" but got Element node <p id="e" style="display:none">Ghijklmn</p>
+FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ
+</p><p id="b" s... but got Text node "Äb̈c̈d̈ëf̈g̈ḧ
+"
 FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Ijklmnop
-Qrstu" but got object "Ijklmnop
-QrstuvwxYzabcdefGhijklmn"
-FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
-" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ
-</p><p id="b" s...
+Qrstu" but got object ""
+FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 32 [document.documentElement, 1, document.body, 0]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 32 [document.documentElement, 1, document.body, 0]: first addRange() must result in rangeCount being 1 
@@ -2574,12 +2537,10 @@
 PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: modifying the Selection's last Range must modify the first added Range 
 PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: second addRange() must result in rangeCount being 1 
-FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Qrstuvwx" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ
-</p><p id="b" s...
-FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "uvwxYzabcdefGhijklmn" but got object "QrstuvwxYzabcdefGhijklmn"
-FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
-" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ
-</p><p id="b" s...
+FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Qrstuvwx" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ
+"
+FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "uvwxYzabcdefGhijklmn" but got object ""
+FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 39 [paras[3], 1, comment, 8]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 39 [paras[3], 1, comment, 8]: first addRange() must result in rangeCount being 1 
@@ -2589,12 +2550,10 @@
 PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 39 [paras[3], 1, comment, 8]: modifying the Selection's last Range must modify the first added Range 
 PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 39 [paras[3], 1, comment, 8]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 39 [paras[3], 1, comment, 8]: second addRange() must result in rangeCount being 1 
-FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 39 [paras[3], 1, comment, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <p id="d" style="display:none">Yzabcdef</p> but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ
-</p><p id="b" s...
-FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 39 [paras[3], 1, comment, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Ghijklmn" but got object "QrstuvwxYzabcdefGhijklmn"
-FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 39 [paras[3], 1, comment, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
-" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ
-</p><p id="b" s...
+FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 39 [paras[3], 1, comment, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <p id="d" style="display:none">Yzabcdef</p> but got Text node "Äb̈c̈d̈ëf̈g̈ḧ
+"
+FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 39 [paras[3], 1, comment, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Ghijklmn" but got object ""
+FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 39 [paras[3], 1, comment, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 39 [paras[3], 1, comment, 8]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: first addRange() must result in rangeCount being 1 
@@ -2862,9 +2821,9 @@
 PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: modifying the Selection's last Range must modify the first added Range 
 PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: second addRange() must result in rangeCount being 1 
-FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startOffset of the Selection's last Range must match the added Range expected 2 but got 6
-FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "b̈c̈d̈" but got object ""
-FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
+PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: second addRange() must result in the selection's last range having the specified endpoints 
+FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "b̈c̈d̈" but got object "b̈c̈d̈"
+FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 2
 FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: first addRange() must result in rangeCount being 1 
@@ -2874,9 +2833,9 @@
 PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: modifying the Selection's last Range must modify the first added Range 
 PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: second addRange() must result in rangeCount being 1 
-FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startOffset of the Selection's last Range must match the added Range expected 2 but got 6
-FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "b̈c̈d̈e" but got object ""
-FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
+PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: second addRange() must result in the selection's last range having the specified endpoints 
+FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "b̈c̈d̈e" but got object "b̈c̈d̈e"
+FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 2
 FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: first addRange() must result in rangeCount being 1 
@@ -2887,13 +2846,10 @@
 PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: second addRange() must result in rangeCount being 1 
 FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Ijklmnop
-" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ
-</p><p id="b" s...
-FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "Ijklmnop
-Qrstu"
-FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
-" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ
-</p><p id="b" s...
+" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ
+"
+FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object ""
+FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: first addRange() must result in rangeCount being 1 
@@ -2904,13 +2860,10 @@
 PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: second addRange() must result in rangeCount being 1 
 FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Ijklmnop
-" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ
-</p><p id="b" s...
-FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "I" but got object "Ijklmnop
-Qrstu"
-FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
-" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ
-</p><p id="b" s...
+" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ
+"
+FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "I" but got object ""
+FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: first addRange() must result in rangeCount being 1 
@@ -2921,13 +2874,10 @@
 PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: second addRange() must result in rangeCount being 1 
 FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Ijklmnop
-" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ
-</p><p id="b" s...
-FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "klmnop" but got object "Ijklmnop
-Qrstu"
-FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
-" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ
-</p><p id="b" s...
+" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ
+"
+FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "klmnop" but got object ""
+FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: first addRange() must result in rangeCount being 1 
@@ -2938,14 +2888,11 @@
 PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: second addRange() must result in rangeCount being 1 
 FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Ijklmnop
-" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ
-</p><p id="b" s...
+" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ
+"
 FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "klmnop
-" but got object "Ijklmnop
-Qrstu"
-FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
-" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ
-</p><p id="b" s...
+" but got object ""
+FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: first addRange() must result in rangeCount being 1 
@@ -3214,12 +3161,13 @@
 PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 23 [paras[0], 0, paras[0], 1]: modifying the Selection's last Range must modify the first added Range 
 PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 23 [paras[0], 0, paras[0], 1]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 23 [paras[0], 0, paras[0], 1]: second addRange() must result in rangeCount being 1 
-FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 23 [paras[0], 0, paras[0], 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ
-</p> but got Text node "Äb̈c̈d̈ëf̈g̈ḧ
-"
+PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 23 [paras[0], 0, paras[0], 1]: second addRange() must result in the selection's last range having the specified endpoints 
 FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 23 [paras[0], 0, paras[0], 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ
-" but got object ""
-FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 23 [paras[0], 0, paras[0], 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
+" but got object "Äb̈c̈d̈ëf̈g̈ḧ
+"
+FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 23 [paras[0], 0, paras[0], 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
+" but got Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ
+</p>
 FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 23 [paras[0], 0, paras[0], 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: first addRange() must result in rangeCount being 1 
@@ -3255,14 +3203,13 @@
 PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: modifying the Selection's last Range must modify the first added Range 
 PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: second addRange() must result in rangeCount being 1 
-FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: endContainer of the Selection's last Range must match the added Range expected Text node "Ijklmnop
-" but got Text node "Qrstuvwx"
+PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: second addRange() must result in the selection's last range having the specified endpoints 
 FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ
 " but got object "Äb̈c̈d̈ëf̈g̈ḧ
-Ijklmnop
-Qrstu"
+"
 FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, endContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
-" but got Text node "Qrstuvwx"
+" but got Text node "Ijklmnop
+"
 FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: first addRange() must result in rangeCount being 1 
@@ -3272,14 +3219,13 @@
 PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: modifying the Selection's last Range must modify the first added Range 
 PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: second addRange() must result in rangeCount being 1 
-FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: endContainer of the Selection's last Range must match the added Range expected Text node "Ijklmnop
-" but got Text node "Qrstuvwx"
+PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: second addRange() must result in the selection's last range having the specified endpoints 
 FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ
 Ijklmnop" but got object "Äb̈c̈d̈ëf̈g̈ḧ
-Ijklmnop
-Qrstu"
+Ijklmnop"
 FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, endContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
-" but got Text node "Qrstuvwx"
+" but got Text node "Ijklmnop
+"
 FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: first addRange() must result in rangeCount being 1 
@@ -3305,11 +3251,11 @@
 PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: modifying the Selection's last Range must modify the first added Range 
 PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: second addRange() must result in rangeCount being 1 
-FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ
-</p> but got Text node "Äb̈c̈d̈ëf̈g̈ḧ
-"
-FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d" but got object ""
-FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
+PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: second addRange() must result in the selection's last range having the specified endpoints 
+FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d" but got object "Äb̈c̈d"
+FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
+" but got Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ
+</p>
 FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 30 [testDiv, 2, paras[4], 1]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 30 [testDiv, 2, paras[4], 1]: first addRange() must result in rangeCount being 1 
@@ -3319,12 +3265,11 @@
 PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 30 [testDiv, 2, paras[4], 1]: modifying the Selection's last Range must modify the first added Range 
 PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 30 [testDiv, 2, paras[4], 1]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 30 [testDiv, 2, paras[4], 1]: second addRange() must result in rangeCount being 1 
-FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 30 [testDiv, 2, paras[4], 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startOffset of the Selection's last Range must match the added Range expected 2 but got 1
-FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 30 [testDiv, 2, paras[4], 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "QrstuvwxYzabcdefGhijklmn" but got object "Ijklmnop
-QrstuvwxYzabcdefGhijklmn"
-FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 30 [testDiv, 2, paras[4], 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
-" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ
-</p><p id="b" s...
+FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 30 [testDiv, 2, paras[4], 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ
+</p><p id="b" s... but got Text node "Äb̈c̈d̈ëf̈g̈ḧ
+"
+FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 30 [testDiv, 2, paras[4], 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "QrstuvwxYzabcdefGhijklmn" but got object ""
+FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 30 [testDiv, 2, paras[4], 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 30 [testDiv, 2, paras[4], 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: first addRange() must result in rangeCount being 1 
@@ -3334,13 +3279,12 @@
 PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: modifying the Selection's last Range must modify the first added Range 
 PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: second addRange() must result in rangeCount being 1 
-PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: second addRange() must result in the selection's last range having the specified endpoints 
+FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ
+</p><p id="b" s... but got Text node "Äb̈c̈d̈ëf̈g̈ḧ
+"
 FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Ijklmnop
-Qrstu" but got object "Ijklmnop
-Qrstu"
-FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
-" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ
-</p><p id="b" s...
+Qrstu" but got object ""
+FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 32 [document.documentElement, 1, document.body, 0]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 32 [document.documentElement, 1, document.body, 0]: first addRange() must result in rangeCount being 1 
@@ -3491,13 +3435,10 @@
 PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: modifying the Selection's last Range must modify the first added Range 
 PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: second addRange() must result in rangeCount being 1 
-FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Qrstuvwx" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ
-</p><p id="b" s...
-FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "uvwxYzabcdefGhijklmn" but got object "Ijklmnop
-QrstuvwxYzabcdefGhijklmn"
-FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
-" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ
-</p><p id="b" s...
+FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Qrstuvwx" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ
+"
+FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "uvwxYzabcdefGhijklmn" but got object ""
+FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 39 [paras[3], 1, comment, 8]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 39 [paras[3], 1, comment, 8]: first addRange() must result in rangeCount being 1 
diff --git a/third_party/WebKit/LayoutTests/external/wpt/selection/addRange-32-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/selection/addRange-32-expected.txt
index 6863e90..a959f5d 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/selection/addRange-32-expected.txt
+++ b/third_party/WebKit/LayoutTests/external/wpt/selection/addRange-32-expected.txt
@@ -4,8 +4,6 @@
 CONSOLE ERROR: line 7: Discontiguous selection is not supported.
 CONSOLE ERROR: line 7: Discontiguous selection is not supported.
 CONSOLE ERROR: line 7: Discontiguous selection is not supported.
-CONSOLE ERROR: line 7: Discontiguous selection is not supported.
-CONSOLE ERROR: line 7: Discontiguous selection is not supported.
 CONSOLE ERROR: line 7: The given range isn't in document.
 CONSOLE ERROR: line 7: The given range isn't in document.
 CONSOLE ERROR: line 7: The given range isn't in document.
@@ -20,10 +18,6 @@
 CONSOLE ERROR: line 7: Discontiguous selection is not supported.
 CONSOLE ERROR: line 7: Discontiguous selection is not supported.
 CONSOLE ERROR: line 7: Discontiguous selection is not supported.
-CONSOLE ERROR: line 7: Discontiguous selection is not supported.
-CONSOLE ERROR: line 7: Discontiguous selection is not supported.
-CONSOLE ERROR: line 7: Discontiguous selection is not supported.
-CONSOLE ERROR: line 7: Discontiguous selection is not supported.
 CONSOLE ERROR: line 7: The given range isn't in document.
 CONSOLE ERROR: line 7: The given range isn't in document.
 CONSOLE ERROR: line 7: The given range isn't in document.
@@ -43,18 +37,12 @@
 CONSOLE ERROR: line 7: Discontiguous selection is not supported.
 CONSOLE ERROR: line 7: Discontiguous selection is not supported.
 CONSOLE ERROR: line 7: Discontiguous selection is not supported.
-CONSOLE ERROR: line 7: Discontiguous selection is not supported.
-CONSOLE ERROR: line 7: Discontiguous selection is not supported.
 CONSOLE ERROR: line 7: The given range isn't in document.
 CONSOLE ERROR: line 7: The given range isn't in document.
 CONSOLE ERROR: line 7: The given range isn't in document.
 CONSOLE ERROR: line 7: Discontiguous selection is not supported.
 CONSOLE ERROR: line 7: Discontiguous selection is not supported.
 CONSOLE ERROR: line 7: Discontiguous selection is not supported.
-CONSOLE ERROR: line 7: Discontiguous selection is not supported.
-CONSOLE ERROR: line 7: Discontiguous selection is not supported.
-CONSOLE ERROR: line 7: Discontiguous selection is not supported.
-CONSOLE ERROR: line 7: Discontiguous selection is not supported.
 CONSOLE ERROR: line 7: The given range isn't in document.
 CONSOLE ERROR: line 7: The given range isn't in document.
 CONSOLE ERROR: line 7: Discontiguous selection is not supported.
@@ -63,6 +51,12 @@
 CONSOLE ERROR: line 7: Discontiguous selection is not supported.
 CONSOLE ERROR: line 7: Discontiguous selection is not supported.
 CONSOLE ERROR: line 7: Discontiguous selection is not supported.
+CONSOLE ERROR: line 7: The given range isn't in document.
+CONSOLE ERROR: line 7: The given range isn't in document.
+CONSOLE ERROR: line 7: The given range isn't in document.
+CONSOLE ERROR: line 7: The given range isn't in document.
+CONSOLE ERROR: line 7: Discontiguous selection is not supported.
+CONSOLE ERROR: line 7: Discontiguous selection is not supported.
 CONSOLE ERROR: line 7: Discontiguous selection is not supported.
 CONSOLE ERROR: line 7: Discontiguous selection is not supported.
 CONSOLE ERROR: line 7: Discontiguous selection is not supported.
@@ -70,12 +64,17 @@
 CONSOLE ERROR: line 7: The given range isn't in document.
 CONSOLE ERROR: line 7: The given range isn't in document.
 CONSOLE ERROR: line 7: The given range isn't in document.
+CONSOLE ERROR: line 7: Discontiguous selection is not supported.
+CONSOLE ERROR: line 7: Discontiguous selection is not supported.
+CONSOLE ERROR: line 7: Discontiguous selection is not supported.
 CONSOLE ERROR: line 7: The given range isn't in document.
 CONSOLE ERROR: line 7: The given range isn't in document.
-CONSOLE ERROR: line 7: The given range isn't in document.
-CONSOLE ERROR: line 7: The given range isn't in document.
-CONSOLE ERROR: line 7: The given range isn't in document.
-CONSOLE ERROR: line 7: The given range isn't in document.
+CONSOLE ERROR: line 7: Discontiguous selection is not supported.
+CONSOLE ERROR: line 7: Discontiguous selection is not supported.
+CONSOLE ERROR: line 7: Discontiguous selection is not supported.
+CONSOLE ERROR: line 7: Discontiguous selection is not supported.
+CONSOLE ERROR: line 7: Discontiguous selection is not supported.
+CONSOLE ERROR: line 7: Discontiguous selection is not supported.
 CONSOLE ERROR: line 7: The given range isn't in document.
 CONSOLE ERROR: line 7: The given range isn't in document.
 CONSOLE ERROR: line 7: The given range isn't in document.
@@ -113,9 +112,9 @@
 PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: modifying the Selection's last Range must modify the first added Range 
 PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: second addRange() must result in rangeCount being 1 
-FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startOffset of the Selection's last Range must match the added Range expected 2 but got 6
-FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "b̈c̈d̈" but got object ""
-FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
+PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: second addRange() must result in the selection's last range having the specified endpoints 
+FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "b̈c̈d̈" but got object "b̈c̈d̈"
+FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 2
 FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: first addRange() must result in rangeCount being 1 
@@ -125,9 +124,9 @@
 PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: modifying the Selection's last Range must modify the first added Range 
 PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: second addRange() must result in rangeCount being 1 
-FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startOffset of the Selection's last Range must match the added Range expected 2 but got 6
-FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "b̈c̈d̈e" but got object ""
-FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
+PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: second addRange() must result in the selection's last range having the specified endpoints 
+FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "b̈c̈d̈e" but got object "b̈c̈d̈e"
+FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 2
 FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: first addRange() must result in rangeCount being 1 
@@ -272,17 +271,13 @@
 PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: modifying the Selection's last Range must modify the first added Range 
 PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: second addRange() must result in rangeCount being 1 
-FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: endContainer of the Selection's last Range must match the added Range expected Element node <html><head><title>Selection.addRange() tests</title>
-<me... but got Element node <body><div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ
-</p><p id...
+FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <html><head><title>Selection.addRange() tests</title>
+<me... but got Text node "Äb̈c̈d̈ëf̈g̈ḧ
+"
 FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Selection.addRange() tests
 
-" but got object "Selection.addRange() tests
-
-"
-FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
-" but got Element node <html><head><title>Selection.addRange() tests</title>
-<me...
+" but got object ""
+FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: first addRange() must result in rangeCount being 1 
@@ -386,17 +381,15 @@
 PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 18 [document.body, 0, document.body, 1]: modifying the Selection's last Range must modify the first added Range 
 PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 18 [document.body, 0, document.body, 1]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 18 [document.body, 0, document.body, 1]: second addRange() must result in rangeCount being 1 
-FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 18 [document.body, 0, document.body, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <body><div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ
-</p><p id... but got Element node <html><head><title>Selection.addRange() tests</title>
-<me...
+PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 18 [document.body, 0, document.body, 1]: second addRange() must result in the selection's last range having the specified endpoints 
 FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 18 [document.body, 0, document.body, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ
 Ijklmnop
 QrstuvwxYzabcdefGhijklmn" but got object "Äb̈c̈d̈ëf̈g̈ḧ
 Ijklmnop
 QrstuvwxYzabcdefGhijklmn"
 FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 18 [document.body, 0, document.body, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
-" but got Element node <html><head><title>Selection.addRange() tests</title>
-<me...
+" but got Element node <body><div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ
+</p><p id...
 FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 18 [document.body, 0, document.body, 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: first addRange() must result in rangeCount being 1 
@@ -459,12 +452,13 @@
 PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 23 [paras[0], 0, paras[0], 1]: modifying the Selection's last Range must modify the first added Range 
 PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 23 [paras[0], 0, paras[0], 1]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 23 [paras[0], 0, paras[0], 1]: second addRange() must result in rangeCount being 1 
-FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 23 [paras[0], 0, paras[0], 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ
-</p> but got Text node "Äb̈c̈d̈ëf̈g̈ḧ
-"
+PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 23 [paras[0], 0, paras[0], 1]: second addRange() must result in the selection's last range having the specified endpoints 
 FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 23 [paras[0], 0, paras[0], 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ
-" but got object ""
-FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 23 [paras[0], 0, paras[0], 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
+" but got object "Äb̈c̈d̈ëf̈g̈ḧ
+"
+FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 23 [paras[0], 0, paras[0], 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
+" but got Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ
+</p>
 FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 23 [paras[0], 0, paras[0], 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: first addRange() must result in rangeCount being 1 
@@ -500,10 +494,13 @@
 PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: modifying the Selection's last Range must modify the first added Range 
 PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: second addRange() must result in rangeCount being 1 
-FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startOffset of the Selection's last Range must match the added Range expected 0 but got 6
+PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: second addRange() must result in the selection's last range having the specified endpoints 
 FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ
-" but got object ""
-FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
+" but got object "Äb̈c̈d̈ëf̈g̈ḧ
+"
+FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, endContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
+" but got Text node "Ijklmnop
+"
 FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: first addRange() must result in rangeCount being 1 
@@ -513,10 +510,13 @@
 PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: modifying the Selection's last Range must modify the first added Range 
 PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: second addRange() must result in rangeCount being 1 
-FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startOffset of the Selection's last Range must match the added Range expected 0 but got 6
+PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: second addRange() must result in the selection's last range having the specified endpoints 
 FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ
-Ijklmnop" but got object ""
-FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
+Ijklmnop" but got object "Äb̈c̈d̈ëf̈g̈ḧ
+Ijklmnop"
+FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, endContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
+" but got Text node "Ijklmnop
+"
 FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: first addRange() must result in rangeCount being 1 
@@ -526,11 +526,13 @@
 PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: modifying the Selection's last Range must modify the first added Range 
 PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: second addRange() must result in rangeCount being 1 
-FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startOffset of the Selection's last Range must match the added Range expected 3 but got 6
+PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: second addRange() must result in the selection's last range having the specified endpoints 
 FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "̈c̈d̈ëf̈g̈ḧ
 Ijklmnop
-QrstuvwxYzabcdef" but got object ""
-FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
+QrstuvwxYzabcdef" but got object "̈c̈d̈ëf̈g̈ḧ
+Ijklmnop
+QrstuvwxYzabcdef"
+FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 3
 FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: first addRange() must result in rangeCount being 1 
@@ -540,11 +542,11 @@
 PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: modifying the Selection's last Range must modify the first added Range 
 PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: second addRange() must result in rangeCount being 1 
-FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ
-</p> but got Text node "Äb̈c̈d̈ëf̈g̈ḧ
-"
-FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d" but got object ""
-FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
+PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: second addRange() must result in the selection's last range having the specified endpoints 
+FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d" but got object "Äb̈c̈d"
+FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
+" but got Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ
+</p>
 FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 30 [testDiv, 2, paras[4], 1]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 30 [testDiv, 2, paras[4], 1]: first addRange() must result in rangeCount being 1 
@@ -583,11 +585,11 @@
 PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 32 [document.documentElement, 1, document.body, 0]: modifying the Selection's last Range must modify the first added Range 
 PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 32 [document.documentElement, 1, document.body, 0]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 32 [document.documentElement, 1, document.body, 0]: second addRange() must result in rangeCount being 1 
-PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 32 [document.documentElement, 1, document.body, 0]: second addRange() must result in the selection's last range having the specified endpoints 
+FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 32 [document.documentElement, 1, document.body, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <html><head><title>Selection.addRange() tests</title>
+<me... but got Text node "Äb̈c̈d̈ëf̈g̈ḧ
+"
 FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 32 [document.documentElement, 1, document.body, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object ""
-FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 32 [document.documentElement, 1, document.body, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
-" but got Element node <html><head><title>Selection.addRange() tests</title>
-<me...
+FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 32 [document.documentElement, 1, document.body, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 32 [document.documentElement, 1, document.body, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: first addRange() must result in rangeCount being 1 
@@ -705,13 +707,16 @@
 PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 37 [testDiv, 0, comment, 5]: modifying the Selection's last Range must modify the first added Range 
 PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 37 [testDiv, 0, comment, 5]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 37 [testDiv, 0, comment, 5]: second addRange() must result in rangeCount being 1 
-FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 37 [testDiv, 0, comment, 5]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ
-</p><p id="b" s... but got Text node "Äb̈c̈d̈ëf̈g̈ḧ
-"
+FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 37 [testDiv, 0, comment, 5]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: endContainer of the Selection's last Range must match the added Range expected Comment node <!--Alphabet soup?--> but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ
+</p><p id="b" s...
 FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 37 [testDiv, 0, comment, 5]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ
 Ijklmnop
-QrstuvwxYzabcdefGhijklmn" but got object ""
-FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 37 [testDiv, 0, comment, 5]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
+QrstuvwxYzabcdefGhijklmn" but got object "Äb̈c̈d̈ëf̈g̈ḧ
+Ijklmnop
+QrstuvwxYzabcdefGhijklmn"
+FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 37 [testDiv, 0, comment, 5]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
+" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ
+</p><p id="b" s...
 FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 37 [testDiv, 0, comment, 5]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: first addRange() must result in rangeCount being 1 
@@ -1701,9 +1706,9 @@
 PASS Range 34 [document, 0, document, 1] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: modifying the Selection's last Range must modify the first added Range 
 PASS Range 34 [document, 0, document, 1] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 34 [document, 0, document, 1] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: second addRange() must result in rangeCount being 1 
-FAIL Range 34 [document, 0, document, 1] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startOffset of the Selection's last Range must match the added Range expected 2 but got 6
-FAIL Range 34 [document, 0, document, 1] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "b̈c̈d̈" but got object ""
-FAIL Range 34 [document, 0, document, 1] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
+PASS Range 34 [document, 0, document, 1] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: second addRange() must result in the selection's last range having the specified endpoints 
+FAIL Range 34 [document, 0, document, 1] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "b̈c̈d̈" but got object "b̈c̈d̈"
+FAIL Range 34 [document, 0, document, 1] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 2
 FAIL Range 34 [document, 0, document, 1] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 34 [document, 0, document, 1] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 34 [document, 0, document, 1] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: first addRange() must result in rangeCount being 1 
@@ -1713,9 +1718,9 @@
 PASS Range 34 [document, 0, document, 1] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: modifying the Selection's last Range must modify the first added Range 
 PASS Range 34 [document, 0, document, 1] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 34 [document, 0, document, 1] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: second addRange() must result in rangeCount being 1 
-FAIL Range 34 [document, 0, document, 1] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startOffset of the Selection's last Range must match the added Range expected 2 but got 6
-FAIL Range 34 [document, 0, document, 1] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "b̈c̈d̈e" but got object ""
-FAIL Range 34 [document, 0, document, 1] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
+PASS Range 34 [document, 0, document, 1] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: second addRange() must result in the selection's last range having the specified endpoints 
+FAIL Range 34 [document, 0, document, 1] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "b̈c̈d̈e" but got object "b̈c̈d̈e"
+FAIL Range 34 [document, 0, document, 1] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 2
 FAIL Range 34 [document, 0, document, 1] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 34 [document, 0, document, 1] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 34 [document, 0, document, 1] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: first addRange() must result in rangeCount being 1 
@@ -1876,9 +1881,7 @@
 PASS Range 34 [document, 0, document, 1] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: modifying the Selection's last Range must modify the first added Range 
 PASS Range 34 [document, 0, document, 1] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 34 [document, 0, document, 1] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: second addRange() must result in rangeCount being 1 
-FAIL Range 34 [document, 0, document, 1] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <html><head><title>Selection.addRange() tests</title>
-<me... but got Text node "Äb̈c̈d̈ëf̈g̈ḧ
-"
+PASS Range 34 [document, 0, document, 1] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: second addRange() must result in the selection's last range having the specified endpoints 
 FAIL Range 34 [document, 0, document, 1] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Selection.addRange() tests
 
 Äb̈c̈d̈ëf̈g̈ḧ
@@ -1893,8 +1896,24 @@
 
 testAddRangeSubSet(32, 36);
 testDiv.style.display = "none";
-" but got object ""
-FAIL Range 34 [document, 0, document, 1] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
+" but got object "Selection.addRange() tests
+
+Äb̈c̈d̈ëf̈g̈ḧ
+Ijklmnop
+QrstuvwxYzabcdefGhijklmn
+
+
+
+
+
+"use strict";
+
+testAddRangeSubSet(32, 36);
+testDiv.style.display = "none";
+"
+FAIL Range 34 [document, 0, document, 1] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
+" but got Element node <html><head><title>Selection.addRange() tests</title>
+<me...
 FAIL Range 34 [document, 0, document, 1] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 34 [document, 0, document, 1] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 34 [document, 0, document, 1] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: first addRange() must result in rangeCount being 1 
@@ -1904,9 +1923,7 @@
 PASS Range 34 [document, 0, document, 1] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: modifying the Selection's last Range must modify the first added Range 
 PASS Range 34 [document, 0, document, 1] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 34 [document, 0, document, 1] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: second addRange() must result in rangeCount being 1 
-FAIL Range 34 [document, 0, document, 1] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <html><head><title>Selection.addRange() tests</title>
-<me... but got Text node "Äb̈c̈d̈ëf̈g̈ḧ
-"
+PASS Range 34 [document, 0, document, 1] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: second addRange() must result in the selection's last range having the specified endpoints 
 FAIL Range 34 [document, 0, document, 1] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ
 Ijklmnop
 QrstuvwxYzabcdefGhijklmn
@@ -1919,8 +1936,22 @@
 
 testAddRangeSubSet(32, 36);
 testDiv.style.display = "none";
-" but got object ""
-FAIL Range 34 [document, 0, document, 1] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
+" but got object "Äb̈c̈d̈ëf̈g̈ḧ
+Ijklmnop
+QrstuvwxYzabcdefGhijklmn
+
+
+
+
+
+"use strict";
+
+testAddRangeSubSet(32, 36);
+testDiv.style.display = "none";
+"
+FAIL Range 34 [document, 0, document, 1] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
+" but got Element node <html><head><title>Selection.addRange() tests</title>
+<me...
 FAIL Range 34 [document, 0, document, 1] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 34 [document, 0, document, 1] followed by Range 17 [document.head, 1, document.head, 1]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 34 [document, 0, document, 1] followed by Range 17 [document.head, 1, document.head, 1]: first addRange() must result in rangeCount being 1 
@@ -1944,13 +1975,15 @@
 PASS Range 34 [document, 0, document, 1] followed by Range 18 [document.body, 0, document.body, 1]: modifying the Selection's last Range must modify the first added Range 
 PASS Range 34 [document, 0, document, 1] followed by Range 18 [document.body, 0, document.body, 1]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 34 [document, 0, document, 1] followed by Range 18 [document.body, 0, document.body, 1]: second addRange() must result in rangeCount being 1 
-FAIL Range 34 [document, 0, document, 1] followed by Range 18 [document.body, 0, document.body, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <body><div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ
-</p><p id... but got Text node "Äb̈c̈d̈ëf̈g̈ḧ
-"
+PASS Range 34 [document, 0, document, 1] followed by Range 18 [document.body, 0, document.body, 1]: second addRange() must result in the selection's last range having the specified endpoints 
 FAIL Range 34 [document, 0, document, 1] followed by Range 18 [document.body, 0, document.body, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ
 Ijklmnop
-QrstuvwxYzabcdefGhijklmn" but got object ""
-FAIL Range 34 [document, 0, document, 1] followed by Range 18 [document.body, 0, document.body, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
+QrstuvwxYzabcdefGhijklmn" but got object "Äb̈c̈d̈ëf̈g̈ḧ
+Ijklmnop
+QrstuvwxYzabcdefGhijklmn"
+FAIL Range 34 [document, 0, document, 1] followed by Range 18 [document.body, 0, document.body, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
+" but got Element node <body><div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ
+</p><p id...
 FAIL Range 34 [document, 0, document, 1] followed by Range 18 [document.body, 0, document.body, 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 34 [document, 0, document, 1] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 34 [document, 0, document, 1] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: first addRange() must result in rangeCount being 1 
@@ -2013,12 +2046,13 @@
 PASS Range 34 [document, 0, document, 1] followed by Range 23 [paras[0], 0, paras[0], 1]: modifying the Selection's last Range must modify the first added Range 
 PASS Range 34 [document, 0, document, 1] followed by Range 23 [paras[0], 0, paras[0], 1]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 34 [document, 0, document, 1] followed by Range 23 [paras[0], 0, paras[0], 1]: second addRange() must result in rangeCount being 1 
-FAIL Range 34 [document, 0, document, 1] followed by Range 23 [paras[0], 0, paras[0], 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ
-</p> but got Text node "Äb̈c̈d̈ëf̈g̈ḧ
-"
+PASS Range 34 [document, 0, document, 1] followed by Range 23 [paras[0], 0, paras[0], 1]: second addRange() must result in the selection's last range having the specified endpoints 
 FAIL Range 34 [document, 0, document, 1] followed by Range 23 [paras[0], 0, paras[0], 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ
-" but got object ""
-FAIL Range 34 [document, 0, document, 1] followed by Range 23 [paras[0], 0, paras[0], 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
+" but got object "Äb̈c̈d̈ëf̈g̈ḧ
+"
+FAIL Range 34 [document, 0, document, 1] followed by Range 23 [paras[0], 0, paras[0], 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
+" but got Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ
+</p>
 FAIL Range 34 [document, 0, document, 1] followed by Range 23 [paras[0], 0, paras[0], 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 34 [document, 0, document, 1] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 34 [document, 0, document, 1] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: first addRange() must result in rangeCount being 1 
@@ -2054,10 +2088,13 @@
 PASS Range 34 [document, 0, document, 1] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: modifying the Selection's last Range must modify the first added Range 
 PASS Range 34 [document, 0, document, 1] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 34 [document, 0, document, 1] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: second addRange() must result in rangeCount being 1 
-FAIL Range 34 [document, 0, document, 1] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startOffset of the Selection's last Range must match the added Range expected 0 but got 6
+PASS Range 34 [document, 0, document, 1] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: second addRange() must result in the selection's last range having the specified endpoints 
 FAIL Range 34 [document, 0, document, 1] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ
-" but got object ""
-FAIL Range 34 [document, 0, document, 1] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
+" but got object "Äb̈c̈d̈ëf̈g̈ḧ
+"
+FAIL Range 34 [document, 0, document, 1] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, endContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
+" but got Text node "Ijklmnop
+"
 FAIL Range 34 [document, 0, document, 1] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 34 [document, 0, document, 1] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 34 [document, 0, document, 1] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: first addRange() must result in rangeCount being 1 
@@ -2067,10 +2104,13 @@
 PASS Range 34 [document, 0, document, 1] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: modifying the Selection's last Range must modify the first added Range 
 PASS Range 34 [document, 0, document, 1] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 34 [document, 0, document, 1] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: second addRange() must result in rangeCount being 1 
-FAIL Range 34 [document, 0, document, 1] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startOffset of the Selection's last Range must match the added Range expected 0 but got 6
+PASS Range 34 [document, 0, document, 1] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: second addRange() must result in the selection's last range having the specified endpoints 
 FAIL Range 34 [document, 0, document, 1] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ
-Ijklmnop" but got object ""
-FAIL Range 34 [document, 0, document, 1] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
+Ijklmnop" but got object "Äb̈c̈d̈ëf̈g̈ḧ
+Ijklmnop"
+FAIL Range 34 [document, 0, document, 1] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, endContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
+" but got Text node "Ijklmnop
+"
 FAIL Range 34 [document, 0, document, 1] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 34 [document, 0, document, 1] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 34 [document, 0, document, 1] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: first addRange() must result in rangeCount being 1 
@@ -2080,11 +2120,13 @@
 PASS Range 34 [document, 0, document, 1] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: modifying the Selection's last Range must modify the first added Range 
 PASS Range 34 [document, 0, document, 1] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 34 [document, 0, document, 1] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: second addRange() must result in rangeCount being 1 
-FAIL Range 34 [document, 0, document, 1] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startOffset of the Selection's last Range must match the added Range expected 3 but got 6
+PASS Range 34 [document, 0, document, 1] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: second addRange() must result in the selection's last range having the specified endpoints 
 FAIL Range 34 [document, 0, document, 1] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "̈c̈d̈ëf̈g̈ḧ
 Ijklmnop
-QrstuvwxYzabcdef" but got object ""
-FAIL Range 34 [document, 0, document, 1] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
+QrstuvwxYzabcdef" but got object "̈c̈d̈ëf̈g̈ḧ
+Ijklmnop
+QrstuvwxYzabcdef"
+FAIL Range 34 [document, 0, document, 1] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 3
 FAIL Range 34 [document, 0, document, 1] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 34 [document, 0, document, 1] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 34 [document, 0, document, 1] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: first addRange() must result in rangeCount being 1 
@@ -2094,11 +2136,11 @@
 PASS Range 34 [document, 0, document, 1] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: modifying the Selection's last Range must modify the first added Range 
 PASS Range 34 [document, 0, document, 1] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 34 [document, 0, document, 1] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: second addRange() must result in rangeCount being 1 
-FAIL Range 34 [document, 0, document, 1] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ
-</p> but got Text node "Äb̈c̈d̈ëf̈g̈ḧ
-"
-FAIL Range 34 [document, 0, document, 1] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d" but got object ""
-FAIL Range 34 [document, 0, document, 1] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
+PASS Range 34 [document, 0, document, 1] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: second addRange() must result in the selection's last range having the specified endpoints 
+FAIL Range 34 [document, 0, document, 1] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d" but got object "Äb̈c̈d"
+FAIL Range 34 [document, 0, document, 1] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
+" but got Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ
+</p>
 FAIL Range 34 [document, 0, document, 1] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 34 [document, 0, document, 1] followed by Range 30 [testDiv, 2, paras[4], 1]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 34 [document, 0, document, 1] followed by Range 30 [testDiv, 2, paras[4], 1]: first addRange() must result in rangeCount being 1 
@@ -2164,10 +2206,10 @@
 PASS Range 34 [document, 0, document, 1] followed by Range 34 [document, 0, document, 1]: modifying the Selection's last Range must modify the first added Range 
 PASS Range 34 [document, 0, document, 1] followed by Range 34 [document, 0, document, 1]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 34 [document, 0, document, 1] followed by Range 34 [document, 0, document, 1]: second addRange() must result in rangeCount being 1 
-PASS Range 34 [document, 0, document, 1] followed by Range 34 [document, 0, document, 1]: second addRange() must result in the selection's last range having the specified endpoints 
+FAIL Range 34 [document, 0, document, 1] followed by Range 34 [document, 0, document, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Document node with 2 children but got Text node "Äb̈c̈d̈ëf̈g̈ḧ
+"
 FAIL Range 34 [document, 0, document, 1] followed by Range 34 [document, 0, document, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object ""
-FAIL Range 34 [document, 0, document, 1] followed by Range 34 [document, 0, document, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
-" but got Document node with 2 children
+FAIL Range 34 [document, 0, document, 1] followed by Range 34 [document, 0, document, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 FAIL Range 34 [document, 0, document, 1] followed by Range 34 [document, 0, document, 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 34 [document, 0, document, 1] followed by Range 35 [document, 0, document, 2]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 34 [document, 0, document, 1] followed by Range 35 [document, 0, document, 2]: first addRange() must result in rangeCount being 1 
@@ -2218,7 +2260,7 @@
 PASS Range 34 [document, 0, document, 1] followed by Range 36 [document, 1, document, 2]: modifying the Selection's last Range must modify the first added Range 
 PASS Range 34 [document, 0, document, 1] followed by Range 36 [document, 1, document, 2]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 34 [document, 0, document, 1] followed by Range 36 [document, 1, document, 2]: second addRange() must result in rangeCount being 1 
-FAIL Range 34 [document, 0, document, 1] followed by Range 36 [document, 1, document, 2]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startOffset of the Selection's last Range must match the added Range expected 1 but got 0
+PASS Range 34 [document, 0, document, 1] followed by Range 36 [document, 1, document, 2]: second addRange() must result in the selection's last range having the specified endpoints 
 FAIL Range 34 [document, 0, document, 1] followed by Range 36 [document, 1, document, 2]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Selection.addRange() tests
 
 Äb̈c̈d̈ëf̈g̈ḧ
@@ -2259,13 +2301,16 @@
 PASS Range 34 [document, 0, document, 1] followed by Range 37 [testDiv, 0, comment, 5]: modifying the Selection's last Range must modify the first added Range 
 PASS Range 34 [document, 0, document, 1] followed by Range 37 [testDiv, 0, comment, 5]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 34 [document, 0, document, 1] followed by Range 37 [testDiv, 0, comment, 5]: second addRange() must result in rangeCount being 1 
-FAIL Range 34 [document, 0, document, 1] followed by Range 37 [testDiv, 0, comment, 5]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ
-</p><p id="b" s... but got Text node "Äb̈c̈d̈ëf̈g̈ḧ
-"
+FAIL Range 34 [document, 0, document, 1] followed by Range 37 [testDiv, 0, comment, 5]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: endContainer of the Selection's last Range must match the added Range expected Comment node <!--Alphabet soup?--> but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ
+</p><p id="b" s...
 FAIL Range 34 [document, 0, document, 1] followed by Range 37 [testDiv, 0, comment, 5]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ
 Ijklmnop
-QrstuvwxYzabcdefGhijklmn" but got object ""
-FAIL Range 34 [document, 0, document, 1] followed by Range 37 [testDiv, 0, comment, 5]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
+QrstuvwxYzabcdefGhijklmn" but got object "Äb̈c̈d̈ëf̈g̈ḧ
+Ijklmnop
+QrstuvwxYzabcdefGhijklmn"
+FAIL Range 34 [document, 0, document, 1] followed by Range 37 [testDiv, 0, comment, 5]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
+" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ
+</p><p id="b" s...
 FAIL Range 34 [document, 0, document, 1] followed by Range 37 [testDiv, 0, comment, 5]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 34 [document, 0, document, 1] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 34 [document, 0, document, 1] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: first addRange() must result in rangeCount being 1 
@@ -2535,25 +2580,9 @@
 PASS Range 35 [document, 0, document, 2] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: modifying the Selection's last Range must modify the first added Range 
 PASS Range 35 [document, 0, document, 2] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 35 [document, 0, document, 2] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: second addRange() must result in rangeCount being 1 
-FAIL Range 35 [document, 0, document, 2] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
-" but got Document node with 2 children
-FAIL Range 35 [document, 0, document, 2] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "Selection.addRange() tests
-
-Äb̈c̈d̈ëf̈g̈ḧ
-Ijklmnop
-QrstuvwxYzabcdefGhijklmn
-
-
-
-
-
-"use strict";
-
-testAddRangeSubSet(32, 36);
-testDiv.style.display = "none";
-"
-FAIL Range 35 [document, 0, document, 2] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
-" but got Document node with 2 children
+FAIL Range 35 [document, 0, document, 2] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startOffset of the Selection's last Range must match the added Range expected 0 but got 6
+FAIL Range 35 [document, 0, document, 2] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object ""
+FAIL Range 35 [document, 0, document, 2] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 FAIL Range 35 [document, 0, document, 2] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 35 [document, 0, document, 2] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 35 [document, 0, document, 2] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: first addRange() must result in rangeCount being 1 
@@ -2563,25 +2592,9 @@
 PASS Range 35 [document, 0, document, 2] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: modifying the Selection's last Range must modify the first added Range 
 PASS Range 35 [document, 0, document, 2] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 35 [document, 0, document, 2] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: second addRange() must result in rangeCount being 1 
-FAIL Range 35 [document, 0, document, 2] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
-" but got Document node with 2 children
-FAIL Range 35 [document, 0, document, 2] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "A" but got object "Selection.addRange() tests
-
-Äb̈c̈d̈ëf̈g̈ḧ
-Ijklmnop
-QrstuvwxYzabcdefGhijklmn
-
-
-
-
-
-"use strict";
-
-testAddRangeSubSet(32, 36);
-testDiv.style.display = "none";
-"
-FAIL Range 35 [document, 0, document, 2] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
-" but got Document node with 2 children
+FAIL Range 35 [document, 0, document, 2] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startOffset of the Selection's last Range must match the added Range expected 0 but got 6
+FAIL Range 35 [document, 0, document, 2] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "A" but got object ""
+FAIL Range 35 [document, 0, document, 2] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 FAIL Range 35 [document, 0, document, 2] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 35 [document, 0, document, 2] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 35 [document, 0, document, 2] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: first addRange() must result in rangeCount being 1 
@@ -2591,25 +2604,9 @@
 PASS Range 35 [document, 0, document, 2] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: modifying the Selection's last Range must modify the first added Range 
 PASS Range 35 [document, 0, document, 2] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 35 [document, 0, document, 2] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: second addRange() must result in rangeCount being 1 
-FAIL Range 35 [document, 0, document, 2] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
-" but got Document node with 2 children
-FAIL Range 35 [document, 0, document, 2] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "b̈c̈d̈" but got object "Selection.addRange() tests
-
-Äb̈c̈d̈ëf̈g̈ḧ
-Ijklmnop
-QrstuvwxYzabcdefGhijklmn
-
-
-
-
-
-"use strict";
-
-testAddRangeSubSet(32, 36);
-testDiv.style.display = "none";
-"
-FAIL Range 35 [document, 0, document, 2] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
-" but got Document node with 2 children
+PASS Range 35 [document, 0, document, 2] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: second addRange() must result in the selection's last range having the specified endpoints 
+FAIL Range 35 [document, 0, document, 2] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "b̈c̈d̈" but got object "b̈c̈d̈"
+FAIL Range 35 [document, 0, document, 2] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 2
 FAIL Range 35 [document, 0, document, 2] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 35 [document, 0, document, 2] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 35 [document, 0, document, 2] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: first addRange() must result in rangeCount being 1 
@@ -2619,25 +2616,9 @@
 PASS Range 35 [document, 0, document, 2] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: modifying the Selection's last Range must modify the first added Range 
 PASS Range 35 [document, 0, document, 2] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 35 [document, 0, document, 2] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: second addRange() must result in rangeCount being 1 
-FAIL Range 35 [document, 0, document, 2] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
-" but got Document node with 2 children
-FAIL Range 35 [document, 0, document, 2] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "b̈c̈d̈e" but got object "Selection.addRange() tests
-
-Äb̈c̈d̈ëf̈g̈ḧ
-Ijklmnop
-QrstuvwxYzabcdefGhijklmn
-
-
-
-
-
-"use strict";
-
-testAddRangeSubSet(32, 36);
-testDiv.style.display = "none";
-"
-FAIL Range 35 [document, 0, document, 2] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
-" but got Document node with 2 children
+PASS Range 35 [document, 0, document, 2] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: second addRange() must result in the selection's last range having the specified endpoints 
+FAIL Range 35 [document, 0, document, 2] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "b̈c̈d̈e" but got object "b̈c̈d̈e"
+FAIL Range 35 [document, 0, document, 2] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 2
 FAIL Range 35 [document, 0, document, 2] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 35 [document, 0, document, 2] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 35 [document, 0, document, 2] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: first addRange() must result in rangeCount being 1 
@@ -2648,24 +2629,10 @@
 PASS Range 35 [document, 0, document, 2] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 35 [document, 0, document, 2] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: second addRange() must result in rangeCount being 1 
 FAIL Range 35 [document, 0, document, 2] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Ijklmnop
-" but got Document node with 2 children
-FAIL Range 35 [document, 0, document, 2] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "Selection.addRange() tests
-
-Äb̈c̈d̈ëf̈g̈ḧ
-Ijklmnop
-QrstuvwxYzabcdefGhijklmn
-
-
-
-
-
-"use strict";
-
-testAddRangeSubSet(32, 36);
-testDiv.style.display = "none";
+" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ
 "
-FAIL Range 35 [document, 0, document, 2] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
-" but got Document node with 2 children
+FAIL Range 35 [document, 0, document, 2] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object ""
+FAIL Range 35 [document, 0, document, 2] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 FAIL Range 35 [document, 0, document, 2] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 35 [document, 0, document, 2] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 35 [document, 0, document, 2] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: first addRange() must result in rangeCount being 1 
@@ -2676,24 +2643,10 @@
 PASS Range 35 [document, 0, document, 2] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 35 [document, 0, document, 2] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: second addRange() must result in rangeCount being 1 
 FAIL Range 35 [document, 0, document, 2] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Ijklmnop
-" but got Document node with 2 children
-FAIL Range 35 [document, 0, document, 2] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "I" but got object "Selection.addRange() tests
-
-Äb̈c̈d̈ëf̈g̈ḧ
-Ijklmnop
-QrstuvwxYzabcdefGhijklmn
-
-
-
-
-
-"use strict";
-
-testAddRangeSubSet(32, 36);
-testDiv.style.display = "none";
+" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ
 "
-FAIL Range 35 [document, 0, document, 2] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
-" but got Document node with 2 children
+FAIL Range 35 [document, 0, document, 2] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "I" but got object ""
+FAIL Range 35 [document, 0, document, 2] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 FAIL Range 35 [document, 0, document, 2] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 35 [document, 0, document, 2] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 35 [document, 0, document, 2] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: first addRange() must result in rangeCount being 1 
@@ -2704,24 +2657,10 @@
 PASS Range 35 [document, 0, document, 2] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 35 [document, 0, document, 2] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: second addRange() must result in rangeCount being 1 
 FAIL Range 35 [document, 0, document, 2] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Ijklmnop
-" but got Document node with 2 children
-FAIL Range 35 [document, 0, document, 2] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "klmnop" but got object "Selection.addRange() tests
-
-Äb̈c̈d̈ëf̈g̈ḧ
-Ijklmnop
-QrstuvwxYzabcdefGhijklmn
-
-
-
-
-
-"use strict";
-
-testAddRangeSubSet(32, 36);
-testDiv.style.display = "none";
+" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ
 "
-FAIL Range 35 [document, 0, document, 2] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
-" but got Document node with 2 children
+FAIL Range 35 [document, 0, document, 2] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "klmnop" but got object ""
+FAIL Range 35 [document, 0, document, 2] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 FAIL Range 35 [document, 0, document, 2] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 35 [document, 0, document, 2] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 35 [document, 0, document, 2] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: first addRange() must result in rangeCount being 1 
@@ -2732,25 +2671,11 @@
 PASS Range 35 [document, 0, document, 2] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 35 [document, 0, document, 2] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: second addRange() must result in rangeCount being 1 
 FAIL Range 35 [document, 0, document, 2] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Ijklmnop
-" but got Document node with 2 children
-FAIL Range 35 [document, 0, document, 2] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "klmnop
-" but got object "Selection.addRange() tests
-
-Äb̈c̈d̈ëf̈g̈ḧ
-Ijklmnop
-QrstuvwxYzabcdefGhijklmn
-
-
-
-
-
-"use strict";
-
-testAddRangeSubSet(32, 36);
-testDiv.style.display = "none";
+" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ
 "
-FAIL Range 35 [document, 0, document, 2] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
-" but got Document node with 2 children
+FAIL Range 35 [document, 0, document, 2] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "klmnop
+" but got object ""
+FAIL Range 35 [document, 0, document, 2] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 FAIL Range 35 [document, 0, document, 2] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 35 [document, 0, document, 2] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 35 [document, 0, document, 2] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: first addRange() must result in rangeCount being 1 
@@ -2839,26 +2764,12 @@
 PASS Range 35 [document, 0, document, 2] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 35 [document, 0, document, 2] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: second addRange() must result in rangeCount being 1 
 FAIL Range 35 [document, 0, document, 2] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <html><head><title>Selection.addRange() tests</title>
-<me... but got Document node with 2 children
+<me... but got Text node "Äb̈c̈d̈ëf̈g̈ḧ
+"
 FAIL Range 35 [document, 0, document, 2] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Selection.addRange() tests
 
-" but got object "Selection.addRange() tests
-
-Äb̈c̈d̈ëf̈g̈ḧ
-Ijklmnop
-QrstuvwxYzabcdefGhijklmn
-
-
-
-
-
-"use strict";
-
-testAddRangeSubSet(32, 36);
-testDiv.style.display = "none";
-"
-FAIL Range 35 [document, 0, document, 2] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
-" but got Document node with 2 children
+" but got object ""
+FAIL Range 35 [document, 0, document, 2] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 FAIL Range 35 [document, 0, document, 2] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 35 [document, 0, document, 2] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 35 [document, 0, document, 2] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: first addRange() must result in rangeCount being 1 
@@ -2868,8 +2779,7 @@
 PASS Range 35 [document, 0, document, 2] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: modifying the Selection's last Range must modify the first added Range 
 PASS Range 35 [document, 0, document, 2] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 35 [document, 0, document, 2] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: second addRange() must result in rangeCount being 1 
-FAIL Range 35 [document, 0, document, 2] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <html><head><title>Selection.addRange() tests</title>
-<me... but got Document node with 2 children
+PASS Range 35 [document, 0, document, 2] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: second addRange() must result in the selection's last range having the specified endpoints 
 FAIL Range 35 [document, 0, document, 2] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Selection.addRange() tests
 
 Äb̈c̈d̈ëf̈g̈ḧ
@@ -2900,7 +2810,8 @@
 testDiv.style.display = "none";
 "
 FAIL Range 35 [document, 0, document, 2] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
-" but got Document node with 2 children
+" but got Element node <html><head><title>Selection.addRange() tests</title>
+<me...
 FAIL Range 35 [document, 0, document, 2] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 35 [document, 0, document, 2] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 35 [document, 0, document, 2] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: first addRange() must result in rangeCount being 1 
@@ -2910,8 +2821,7 @@
 PASS Range 35 [document, 0, document, 2] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: modifying the Selection's last Range must modify the first added Range 
 PASS Range 35 [document, 0, document, 2] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 35 [document, 0, document, 2] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: second addRange() must result in rangeCount being 1 
-FAIL Range 35 [document, 0, document, 2] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <html><head><title>Selection.addRange() tests</title>
-<me... but got Document node with 2 children
+PASS Range 35 [document, 0, document, 2] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: second addRange() must result in the selection's last range having the specified endpoints 
 FAIL Range 35 [document, 0, document, 2] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ
 Ijklmnop
 QrstuvwxYzabcdefGhijklmn
@@ -2924,9 +2834,7 @@
 
 testAddRangeSubSet(32, 36);
 testDiv.style.display = "none";
-" but got object "Selection.addRange() tests
-
-Äb̈c̈d̈ëf̈g̈ḧ
+" but got object "Äb̈c̈d̈ëf̈g̈ḧ
 Ijklmnop
 QrstuvwxYzabcdefGhijklmn
 
@@ -2940,7 +2848,8 @@
 testDiv.style.display = "none";
 "
 FAIL Range 35 [document, 0, document, 2] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
-" but got Document node with 2 children
+" but got Element node <html><head><title>Selection.addRange() tests</title>
+<me...
 FAIL Range 35 [document, 0, document, 2] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 35 [document, 0, document, 2] followed by Range 17 [document.head, 1, document.head, 1]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 35 [document, 0, document, 2] followed by Range 17 [document.head, 1, document.head, 1]: first addRange() must result in rangeCount being 1 
@@ -2951,24 +2860,10 @@
 PASS Range 35 [document, 0, document, 2] followed by Range 17 [document.head, 1, document.head, 1]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 35 [document, 0, document, 2] followed by Range 17 [document.head, 1, document.head, 1]: second addRange() must result in rangeCount being 1 
 FAIL Range 35 [document, 0, document, 2] followed by Range 17 [document.head, 1, document.head, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <head><title>Selection.addRange() tests</title>
-<meta nam... but got Document node with 2 children
-FAIL Range 35 [document, 0, document, 2] followed by Range 17 [document.head, 1, document.head, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "Selection.addRange() tests
-
-Äb̈c̈d̈ëf̈g̈ḧ
-Ijklmnop
-QrstuvwxYzabcdefGhijklmn
-
-
-
-
-
-"use strict";
-
-testAddRangeSubSet(32, 36);
-testDiv.style.display = "none";
+<meta nam... but got Text node "Äb̈c̈d̈ëf̈g̈ḧ
 "
-FAIL Range 35 [document, 0, document, 2] followed by Range 17 [document.head, 1, document.head, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
-" but got Document node with 2 children
+FAIL Range 35 [document, 0, document, 2] followed by Range 17 [document.head, 1, document.head, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object ""
+FAIL Range 35 [document, 0, document, 2] followed by Range 17 [document.head, 1, document.head, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 FAIL Range 35 [document, 0, document, 2] followed by Range 17 [document.head, 1, document.head, 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 35 [document, 0, document, 2] followed by Range 18 [document.body, 0, document.body, 1]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 35 [document, 0, document, 2] followed by Range 18 [document.body, 0, document.body, 1]: first addRange() must result in rangeCount being 1 
@@ -2978,27 +2873,15 @@
 PASS Range 35 [document, 0, document, 2] followed by Range 18 [document.body, 0, document.body, 1]: modifying the Selection's last Range must modify the first added Range 
 PASS Range 35 [document, 0, document, 2] followed by Range 18 [document.body, 0, document.body, 1]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 35 [document, 0, document, 2] followed by Range 18 [document.body, 0, document.body, 1]: second addRange() must result in rangeCount being 1 
-FAIL Range 35 [document, 0, document, 2] followed by Range 18 [document.body, 0, document.body, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <body><div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ
-</p><p id... but got Document node with 2 children
+PASS Range 35 [document, 0, document, 2] followed by Range 18 [document.body, 0, document.body, 1]: second addRange() must result in the selection's last range having the specified endpoints 
 FAIL Range 35 [document, 0, document, 2] followed by Range 18 [document.body, 0, document.body, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ
 Ijklmnop
-QrstuvwxYzabcdefGhijklmn" but got object "Selection.addRange() tests
-
-Äb̈c̈d̈ëf̈g̈ḧ
+QrstuvwxYzabcdefGhijklmn" but got object "Äb̈c̈d̈ëf̈g̈ḧ
 Ijklmnop
-QrstuvwxYzabcdefGhijklmn
-
-
-
-
-
-"use strict";
-
-testAddRangeSubSet(32, 36);
-testDiv.style.display = "none";
-"
+QrstuvwxYzabcdefGhijklmn"
 FAIL Range 35 [document, 0, document, 2] followed by Range 18 [document.body, 0, document.body, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
-" but got Document node with 2 children
+" but got Element node <body><div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ
+</p><p id...
 FAIL Range 35 [document, 0, document, 2] followed by Range 18 [document.body, 0, document.body, 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 35 [document, 0, document, 2] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 35 [document, 0, document, 2] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: first addRange() must result in rangeCount being 1 
@@ -3048,24 +2931,10 @@
 PASS Range 35 [document, 0, document, 2] followed by Range 22 [paras[0], 0, paras[0], 0]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 35 [document, 0, document, 2] followed by Range 22 [paras[0], 0, paras[0], 0]: second addRange() must result in rangeCount being 1 
 FAIL Range 35 [document, 0, document, 2] followed by Range 22 [paras[0], 0, paras[0], 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ
-</p> but got Document node with 2 children
-FAIL Range 35 [document, 0, document, 2] followed by Range 22 [paras[0], 0, paras[0], 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "Selection.addRange() tests
-
-Äb̈c̈d̈ëf̈g̈ḧ
-Ijklmnop
-QrstuvwxYzabcdefGhijklmn
-
-
-
-
-
-"use strict";
-
-testAddRangeSubSet(32, 36);
-testDiv.style.display = "none";
+</p> but got Text node "Äb̈c̈d̈ëf̈g̈ḧ
 "
-FAIL Range 35 [document, 0, document, 2] followed by Range 22 [paras[0], 0, paras[0], 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
-" but got Document node with 2 children
+FAIL Range 35 [document, 0, document, 2] followed by Range 22 [paras[0], 0, paras[0], 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object ""
+FAIL Range 35 [document, 0, document, 2] followed by Range 22 [paras[0], 0, paras[0], 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 FAIL Range 35 [document, 0, document, 2] followed by Range 22 [paras[0], 0, paras[0], 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 35 [document, 0, document, 2] followed by Range 23 [paras[0], 0, paras[0], 1]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 35 [document, 0, document, 2] followed by Range 23 [paras[0], 0, paras[0], 1]: first addRange() must result in rangeCount being 1 
@@ -3075,26 +2944,13 @@
 PASS Range 35 [document, 0, document, 2] followed by Range 23 [paras[0], 0, paras[0], 1]: modifying the Selection's last Range must modify the first added Range 
 PASS Range 35 [document, 0, document, 2] followed by Range 23 [paras[0], 0, paras[0], 1]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 35 [document, 0, document, 2] followed by Range 23 [paras[0], 0, paras[0], 1]: second addRange() must result in rangeCount being 1 
-FAIL Range 35 [document, 0, document, 2] followed by Range 23 [paras[0], 0, paras[0], 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ
-</p> but got Document node with 2 children
+PASS Range 35 [document, 0, document, 2] followed by Range 23 [paras[0], 0, paras[0], 1]: second addRange() must result in the selection's last range having the specified endpoints 
 FAIL Range 35 [document, 0, document, 2] followed by Range 23 [paras[0], 0, paras[0], 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ
-" but got object "Selection.addRange() tests
-
-Äb̈c̈d̈ëf̈g̈ḧ
-Ijklmnop
-QrstuvwxYzabcdefGhijklmn
-
-
-
-
-
-"use strict";
-
-testAddRangeSubSet(32, 36);
-testDiv.style.display = "none";
+" but got object "Äb̈c̈d̈ëf̈g̈ḧ
 "
 FAIL Range 35 [document, 0, document, 2] followed by Range 23 [paras[0], 0, paras[0], 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
-" but got Document node with 2 children
+" but got Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ
+</p>
 FAIL Range 35 [document, 0, document, 2] followed by Range 23 [paras[0], 0, paras[0], 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 35 [document, 0, document, 2] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 35 [document, 0, document, 2] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: first addRange() must result in rangeCount being 1 
@@ -3130,26 +2986,13 @@
 PASS Range 35 [document, 0, document, 2] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: modifying the Selection's last Range must modify the first added Range 
 PASS Range 35 [document, 0, document, 2] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 35 [document, 0, document, 2] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: second addRange() must result in rangeCount being 1 
-FAIL Range 35 [document, 0, document, 2] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
-" but got Document node with 2 children
+PASS Range 35 [document, 0, document, 2] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: second addRange() must result in the selection's last range having the specified endpoints 
 FAIL Range 35 [document, 0, document, 2] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ
-" but got object "Selection.addRange() tests
-
-Äb̈c̈d̈ëf̈g̈ḧ
-Ijklmnop
-QrstuvwxYzabcdefGhijklmn
-
-
-
-
-
-"use strict";
-
-testAddRangeSubSet(32, 36);
-testDiv.style.display = "none";
+" but got object "Äb̈c̈d̈ëf̈g̈ḧ
 "
-FAIL Range 35 [document, 0, document, 2] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
-" but got Document node with 2 children
+FAIL Range 35 [document, 0, document, 2] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, endContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
+" but got Text node "Ijklmnop
+"
 FAIL Range 35 [document, 0, document, 2] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 35 [document, 0, document, 2] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 35 [document, 0, document, 2] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: first addRange() must result in rangeCount being 1 
@@ -3159,26 +3002,13 @@
 PASS Range 35 [document, 0, document, 2] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: modifying the Selection's last Range must modify the first added Range 
 PASS Range 35 [document, 0, document, 2] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 35 [document, 0, document, 2] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: second addRange() must result in rangeCount being 1 
-FAIL Range 35 [document, 0, document, 2] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
-" but got Document node with 2 children
+PASS Range 35 [document, 0, document, 2] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: second addRange() must result in the selection's last range having the specified endpoints 
 FAIL Range 35 [document, 0, document, 2] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ
-Ijklmnop" but got object "Selection.addRange() tests
-
-Äb̈c̈d̈ëf̈g̈ḧ
-Ijklmnop
-QrstuvwxYzabcdefGhijklmn
-
-
-
-
-
-"use strict";
-
-testAddRangeSubSet(32, 36);
-testDiv.style.display = "none";
+Ijklmnop" but got object "Äb̈c̈d̈ëf̈g̈ḧ
+Ijklmnop"
+FAIL Range 35 [document, 0, document, 2] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, endContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
+" but got Text node "Ijklmnop
 "
-FAIL Range 35 [document, 0, document, 2] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
-" but got Document node with 2 children
 FAIL Range 35 [document, 0, document, 2] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 35 [document, 0, document, 2] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 35 [document, 0, document, 2] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: first addRange() must result in rangeCount being 1 
@@ -3188,27 +3018,13 @@
 PASS Range 35 [document, 0, document, 2] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: modifying the Selection's last Range must modify the first added Range 
 PASS Range 35 [document, 0, document, 2] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 35 [document, 0, document, 2] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: second addRange() must result in rangeCount being 1 
-FAIL Range 35 [document, 0, document, 2] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
-" but got Document node with 2 children
+PASS Range 35 [document, 0, document, 2] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: second addRange() must result in the selection's last range having the specified endpoints 
 FAIL Range 35 [document, 0, document, 2] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "̈c̈d̈ëf̈g̈ḧ
 Ijklmnop
-QrstuvwxYzabcdef" but got object "Selection.addRange() tests
-
-Äb̈c̈d̈ëf̈g̈ḧ
+QrstuvwxYzabcdef" but got object "̈c̈d̈ëf̈g̈ḧ
 Ijklmnop
-QrstuvwxYzabcdefGhijklmn
-
-
-
-
-
-"use strict";
-
-testAddRangeSubSet(32, 36);
-testDiv.style.display = "none";
-"
-FAIL Range 35 [document, 0, document, 2] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
-" but got Document node with 2 children
+QrstuvwxYzabcdef"
+FAIL Range 35 [document, 0, document, 2] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 3
 FAIL Range 35 [document, 0, document, 2] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 35 [document, 0, document, 2] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 35 [document, 0, document, 2] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: first addRange() must result in rangeCount being 1 
@@ -3218,25 +3034,11 @@
 PASS Range 35 [document, 0, document, 2] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: modifying the Selection's last Range must modify the first added Range 
 PASS Range 35 [document, 0, document, 2] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 35 [document, 0, document, 2] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: second addRange() must result in rangeCount being 1 
-FAIL Range 35 [document, 0, document, 2] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ
-</p> but got Document node with 2 children
-FAIL Range 35 [document, 0, document, 2] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d" but got object "Selection.addRange() tests
-
-Äb̈c̈d̈ëf̈g̈ḧ
-Ijklmnop
-QrstuvwxYzabcdefGhijklmn
-
-
-
-
-
-"use strict";
-
-testAddRangeSubSet(32, 36);
-testDiv.style.display = "none";
-"
+PASS Range 35 [document, 0, document, 2] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: second addRange() must result in the selection's last range having the specified endpoints 
+FAIL Range 35 [document, 0, document, 2] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d" but got object "Äb̈c̈d"
 FAIL Range 35 [document, 0, document, 2] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
-" but got Document node with 2 children
+" but got Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ
+</p>
 FAIL Range 35 [document, 0, document, 2] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 35 [document, 0, document, 2] followed by Range 30 [testDiv, 2, paras[4], 1]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 35 [document, 0, document, 2] followed by Range 30 [testDiv, 2, paras[4], 1]: first addRange() must result in rangeCount being 1 
@@ -3247,24 +3049,10 @@
 PASS Range 35 [document, 0, document, 2] followed by Range 30 [testDiv, 2, paras[4], 1]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 35 [document, 0, document, 2] followed by Range 30 [testDiv, 2, paras[4], 1]: second addRange() must result in rangeCount being 1 
 FAIL Range 35 [document, 0, document, 2] followed by Range 30 [testDiv, 2, paras[4], 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ
-</p><p id="b" s... but got Document node with 2 children
-FAIL Range 35 [document, 0, document, 2] followed by Range 30 [testDiv, 2, paras[4], 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "QrstuvwxYzabcdefGhijklmn" but got object "Selection.addRange() tests
-
-Äb̈c̈d̈ëf̈g̈ḧ
-Ijklmnop
-QrstuvwxYzabcdefGhijklmn
-
-
-
-
-
-"use strict";
-
-testAddRangeSubSet(32, 36);
-testDiv.style.display = "none";
+</p><p id="b" s... but got Text node "Äb̈c̈d̈ëf̈g̈ḧ
 "
-FAIL Range 35 [document, 0, document, 2] followed by Range 30 [testDiv, 2, paras[4], 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
-" but got Document node with 2 children
+FAIL Range 35 [document, 0, document, 2] followed by Range 30 [testDiv, 2, paras[4], 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "QrstuvwxYzabcdefGhijklmn" but got object ""
+FAIL Range 35 [document, 0, document, 2] followed by Range 30 [testDiv, 2, paras[4], 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 FAIL Range 35 [document, 0, document, 2] followed by Range 30 [testDiv, 2, paras[4], 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 35 [document, 0, document, 2] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 35 [document, 0, document, 2] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: first addRange() must result in rangeCount being 1 
@@ -3275,25 +3063,11 @@
 PASS Range 35 [document, 0, document, 2] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 35 [document, 0, document, 2] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: second addRange() must result in rangeCount being 1 
 FAIL Range 35 [document, 0, document, 2] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ
-</p><p id="b" s... but got Document node with 2 children
-FAIL Range 35 [document, 0, document, 2] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Ijklmnop
-Qrstu" but got object "Selection.addRange() tests
-
-Äb̈c̈d̈ëf̈g̈ḧ
-Ijklmnop
-QrstuvwxYzabcdefGhijklmn
-
-
-
-
-
-"use strict";
-
-testAddRangeSubSet(32, 36);
-testDiv.style.display = "none";
+</p><p id="b" s... but got Text node "Äb̈c̈d̈ëf̈g̈ḧ
 "
-FAIL Range 35 [document, 0, document, 2] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
-" but got Document node with 2 children
+FAIL Range 35 [document, 0, document, 2] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Ijklmnop
+Qrstu" but got object ""
+FAIL Range 35 [document, 0, document, 2] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 FAIL Range 35 [document, 0, document, 2] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 35 [document, 0, document, 2] followed by Range 32 [document.documentElement, 1, document.body, 0]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 35 [document, 0, document, 2] followed by Range 32 [document.documentElement, 1, document.body, 0]: first addRange() must result in rangeCount being 1 
@@ -3304,24 +3078,10 @@
 PASS Range 35 [document, 0, document, 2] followed by Range 32 [document.documentElement, 1, document.body, 0]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 35 [document, 0, document, 2] followed by Range 32 [document.documentElement, 1, document.body, 0]: second addRange() must result in rangeCount being 1 
 FAIL Range 35 [document, 0, document, 2] followed by Range 32 [document.documentElement, 1, document.body, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <html><head><title>Selection.addRange() tests</title>
-<me... but got Document node with 2 children
-FAIL Range 35 [document, 0, document, 2] followed by Range 32 [document.documentElement, 1, document.body, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "Selection.addRange() tests
-
-Äb̈c̈d̈ëf̈g̈ḧ
-Ijklmnop
-QrstuvwxYzabcdefGhijklmn
-
-
-
-
-
-"use strict";
-
-testAddRangeSubSet(32, 36);
-testDiv.style.display = "none";
+<me... but got Text node "Äb̈c̈d̈ëf̈g̈ḧ
 "
-FAIL Range 35 [document, 0, document, 2] followed by Range 32 [document.documentElement, 1, document.body, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
-" but got Document node with 2 children
+FAIL Range 35 [document, 0, document, 2] followed by Range 32 [document.documentElement, 1, document.body, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object ""
+FAIL Range 35 [document, 0, document, 2] followed by Range 32 [document.documentElement, 1, document.body, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 FAIL Range 35 [document, 0, document, 2] followed by Range 32 [document.documentElement, 1, document.body, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 35 [document, 0, document, 2] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 35 [document, 0, document, 2] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: first addRange() must result in rangeCount being 1 
@@ -3344,24 +3104,10 @@
 PASS Range 35 [document, 0, document, 2] followed by Range 34 [document, 0, document, 1]: modifying the Selection's last Range must modify the first added Range 
 PASS Range 35 [document, 0, document, 2] followed by Range 34 [document, 0, document, 1]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 35 [document, 0, document, 2] followed by Range 34 [document, 0, document, 1]: second addRange() must result in rangeCount being 1 
-FAIL Range 35 [document, 0, document, 2] followed by Range 34 [document, 0, document, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: endOffset of the Selection's last Range must match the added Range expected 1 but got 2
-FAIL Range 35 [document, 0, document, 2] followed by Range 34 [document, 0, document, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "Selection.addRange() tests
-
-Äb̈c̈d̈ëf̈g̈ḧ
-Ijklmnop
-QrstuvwxYzabcdefGhijklmn
-
-
-
-
-
-"use strict";
-
-testAddRangeSubSet(32, 36);
-testDiv.style.display = "none";
+FAIL Range 35 [document, 0, document, 2] followed by Range 34 [document, 0, document, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Document node with 2 children but got Text node "Äb̈c̈d̈ëf̈g̈ḧ
 "
-FAIL Range 35 [document, 0, document, 2] followed by Range 34 [document, 0, document, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
-" but got Document node with 2 children
+FAIL Range 35 [document, 0, document, 2] followed by Range 34 [document, 0, document, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object ""
+FAIL Range 35 [document, 0, document, 2] followed by Range 34 [document, 0, document, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 FAIL Range 35 [document, 0, document, 2] followed by Range 34 [document, 0, document, 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 35 [document, 0, document, 2] followed by Range 35 [document, 0, document, 2]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 35 [document, 0, document, 2] followed by Range 35 [document, 0, document, 2]: first addRange() must result in rangeCount being 1 
@@ -3412,7 +3158,7 @@
 PASS Range 35 [document, 0, document, 2] followed by Range 36 [document, 1, document, 2]: modifying the Selection's last Range must modify the first added Range 
 PASS Range 35 [document, 0, document, 2] followed by Range 36 [document, 1, document, 2]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 35 [document, 0, document, 2] followed by Range 36 [document, 1, document, 2]: second addRange() must result in rangeCount being 1 
-FAIL Range 35 [document, 0, document, 2] followed by Range 36 [document, 1, document, 2]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startOffset of the Selection's last Range must match the added Range expected 1 but got 0
+PASS Range 35 [document, 0, document, 2] followed by Range 36 [document, 1, document, 2]: second addRange() must result in the selection's last range having the specified endpoints 
 FAIL Range 35 [document, 0, document, 2] followed by Range 36 [document, 1, document, 2]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Selection.addRange() tests
 
 Äb̈c̈d̈ëf̈g̈ḧ
@@ -3453,27 +3199,16 @@
 PASS Range 35 [document, 0, document, 2] followed by Range 37 [testDiv, 0, comment, 5]: modifying the Selection's last Range must modify the first added Range 
 PASS Range 35 [document, 0, document, 2] followed by Range 37 [testDiv, 0, comment, 5]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 35 [document, 0, document, 2] followed by Range 37 [testDiv, 0, comment, 5]: second addRange() must result in rangeCount being 1 
-FAIL Range 35 [document, 0, document, 2] followed by Range 37 [testDiv, 0, comment, 5]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ
-</p><p id="b" s... but got Document node with 2 children
+FAIL Range 35 [document, 0, document, 2] followed by Range 37 [testDiv, 0, comment, 5]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: endContainer of the Selection's last Range must match the added Range expected Comment node <!--Alphabet soup?--> but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ
+</p><p id="b" s...
 FAIL Range 35 [document, 0, document, 2] followed by Range 37 [testDiv, 0, comment, 5]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ
 Ijklmnop
-QrstuvwxYzabcdefGhijklmn" but got object "Selection.addRange() tests
-
-Äb̈c̈d̈ëf̈g̈ḧ
+QrstuvwxYzabcdefGhijklmn" but got object "Äb̈c̈d̈ëf̈g̈ḧ
 Ijklmnop
-QrstuvwxYzabcdefGhijklmn
-
-
-
-
-
-"use strict";
-
-testAddRangeSubSet(32, 36);
-testDiv.style.display = "none";
-"
+QrstuvwxYzabcdefGhijklmn"
 FAIL Range 35 [document, 0, document, 2] followed by Range 37 [testDiv, 0, comment, 5]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
-" but got Document node with 2 children
+" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ
+</p><p id="b" s...
 FAIL Range 35 [document, 0, document, 2] followed by Range 37 [testDiv, 0, comment, 5]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 35 [document, 0, document, 2] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 35 [document, 0, document, 2] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: first addRange() must result in rangeCount being 1 
@@ -3483,24 +3218,10 @@
 PASS Range 35 [document, 0, document, 2] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: modifying the Selection's last Range must modify the first added Range 
 PASS Range 35 [document, 0, document, 2] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 35 [document, 0, document, 2] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: second addRange() must result in rangeCount being 1 
-FAIL Range 35 [document, 0, document, 2] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Qrstuvwx" but got Document node with 2 children
-FAIL Range 35 [document, 0, document, 2] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "uvwxYzabcdefGhijklmn" but got object "Selection.addRange() tests
-
-Äb̈c̈d̈ëf̈g̈ḧ
-Ijklmnop
-QrstuvwxYzabcdefGhijklmn
-
-
-
-
-
-"use strict";
-
-testAddRangeSubSet(32, 36);
-testDiv.style.display = "none";
+FAIL Range 35 [document, 0, document, 2] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Qrstuvwx" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ
 "
-FAIL Range 35 [document, 0, document, 2] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
-" but got Document node with 2 children
+FAIL Range 35 [document, 0, document, 2] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "uvwxYzabcdefGhijklmn" but got object ""
+FAIL Range 35 [document, 0, document, 2] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 FAIL Range 35 [document, 0, document, 2] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 35 [document, 0, document, 2] followed by Range 39 [paras[3], 1, comment, 8]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 35 [document, 0, document, 2] followed by Range 39 [paras[3], 1, comment, 8]: first addRange() must result in rangeCount being 1 
@@ -3510,24 +3231,10 @@
 PASS Range 35 [document, 0, document, 2] followed by Range 39 [paras[3], 1, comment, 8]: modifying the Selection's last Range must modify the first added Range 
 PASS Range 35 [document, 0, document, 2] followed by Range 39 [paras[3], 1, comment, 8]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 35 [document, 0, document, 2] followed by Range 39 [paras[3], 1, comment, 8]: second addRange() must result in rangeCount being 1 
-FAIL Range 35 [document, 0, document, 2] followed by Range 39 [paras[3], 1, comment, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <p id="d" style="display:none">Yzabcdef</p> but got Document node with 2 children
-FAIL Range 35 [document, 0, document, 2] followed by Range 39 [paras[3], 1, comment, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Ghijklmn" but got object "Selection.addRange() tests
-
-Äb̈c̈d̈ëf̈g̈ḧ
-Ijklmnop
-QrstuvwxYzabcdefGhijklmn
-
-
-
-
-
-"use strict";
-
-testAddRangeSubSet(32, 36);
-testDiv.style.display = "none";
+FAIL Range 35 [document, 0, document, 2] followed by Range 39 [paras[3], 1, comment, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <p id="d" style="display:none">Yzabcdef</p> but got Text node "Äb̈c̈d̈ëf̈g̈ḧ
 "
-FAIL Range 35 [document, 0, document, 2] followed by Range 39 [paras[3], 1, comment, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
-" but got Document node with 2 children
+FAIL Range 35 [document, 0, document, 2] followed by Range 39 [paras[3], 1, comment, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Ghijklmn" but got object ""
+FAIL Range 35 [document, 0, document, 2] followed by Range 39 [paras[3], 1, comment, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 FAIL Range 35 [document, 0, document, 2] followed by Range 39 [paras[3], 1, comment, 8]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 35 [document, 0, document, 2] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 35 [document, 0, document, 2] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: first addRange() must result in rangeCount being 1 
diff --git a/third_party/WebKit/LayoutTests/external/wpt/selection/addRange-36-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/selection/addRange-36-expected.txt
index 20e7c1bb..a6cd30f 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/selection/addRange-36-expected.txt
+++ b/third_party/WebKit/LayoutTests/external/wpt/selection/addRange-36-expected.txt
@@ -1,27 +1,3 @@
-CONSOLE ERROR: line 7: The given range isn't in document.
-CONSOLE ERROR: line 7: The given range isn't in document.
-CONSOLE ERROR: line 7: The given range isn't in document.
-CONSOLE ERROR: line 7: The given range isn't in document.
-CONSOLE ERROR: line 7: The given range isn't in document.
-CONSOLE ERROR: line 7: The given range isn't in document.
-CONSOLE ERROR: line 7: The given range isn't in document.
-CONSOLE ERROR: line 7: The given range isn't in document.
-CONSOLE ERROR: line 7: The given range isn't in document.
-CONSOLE ERROR: line 7: The given range isn't in document.
-CONSOLE ERROR: line 7: The given range isn't in document.
-CONSOLE ERROR: line 7: The given range isn't in document.
-CONSOLE ERROR: line 7: Discontiguous selection is not supported.
-CONSOLE ERROR: line 7: Discontiguous selection is not supported.
-CONSOLE ERROR: line 7: The given range isn't in document.
-CONSOLE ERROR: line 7: The given range isn't in document.
-CONSOLE ERROR: line 7: Discontiguous selection is not supported.
-CONSOLE ERROR: line 7: Discontiguous selection is not supported.
-CONSOLE ERROR: line 7: The given range isn't in document.
-CONSOLE ERROR: line 7: The given range isn't in document.
-CONSOLE ERROR: line 7: The given range isn't in document.
-CONSOLE ERROR: line 7: The given range isn't in document.
-CONSOLE ERROR: line 7: Discontiguous selection is not supported.
-CONSOLE ERROR: line 7: Discontiguous selection is not supported.
 CONSOLE ERROR: line 7: Discontiguous selection is not supported.
 CONSOLE ERROR: line 7: Discontiguous selection is not supported.
 CONSOLE ERROR: line 7: Discontiguous selection is not supported.
@@ -34,9 +10,9 @@
 CONSOLE ERROR: line 7: Discontiguous selection is not supported.
 CONSOLE ERROR: line 7: Discontiguous selection is not supported.
 CONSOLE ERROR: line 7: Discontiguous selection is not supported.
+CONSOLE ERROR: line 7: The given range isn't in document.
+CONSOLE ERROR: line 7: The given range isn't in document.
 CONSOLE ERROR: line 7: Discontiguous selection is not supported.
-CONSOLE ERROR: line 7: The given range isn't in document.
-CONSOLE ERROR: line 7: The given range isn't in document.
 CONSOLE ERROR: line 7: Discontiguous selection is not supported.
 CONSOLE ERROR: line 7: Discontiguous selection is not supported.
 CONSOLE ERROR: line 7: Discontiguous selection is not supported.
@@ -52,6 +28,28 @@
 CONSOLE ERROR: line 7: Discontiguous selection is not supported.
 CONSOLE ERROR: line 7: Discontiguous selection is not supported.
 CONSOLE ERROR: line 7: Discontiguous selection is not supported.
+CONSOLE ERROR: line 7: The given range isn't in document.
+CONSOLE ERROR: line 7: The given range isn't in document.
+CONSOLE ERROR: line 7: The given range isn't in document.
+CONSOLE ERROR: line 7: Discontiguous selection is not supported.
+CONSOLE ERROR: line 7: Discontiguous selection is not supported.
+CONSOLE ERROR: line 7: Discontiguous selection is not supported.
+CONSOLE ERROR: line 7: The given range isn't in document.
+CONSOLE ERROR: line 7: The given range isn't in document.
+CONSOLE ERROR: line 7: Discontiguous selection is not supported.
+CONSOLE ERROR: line 7: Discontiguous selection is not supported.
+CONSOLE ERROR: line 7: Discontiguous selection is not supported.
+CONSOLE ERROR: line 7: Discontiguous selection is not supported.
+CONSOLE ERROR: line 7: Discontiguous selection is not supported.
+CONSOLE ERROR: line 7: Discontiguous selection is not supported.
+CONSOLE ERROR: line 7: The given range isn't in document.
+CONSOLE ERROR: line 7: The given range isn't in document.
+CONSOLE ERROR: line 7: The given range isn't in document.
+CONSOLE ERROR: line 7: The given range isn't in document.
+CONSOLE ERROR: line 7: Discontiguous selection is not supported.
+CONSOLE ERROR: line 7: Discontiguous selection is not supported.
+CONSOLE ERROR: line 7: Discontiguous selection is not supported.
+CONSOLE ERROR: line 7: Discontiguous selection is not supported.
 CONSOLE ERROR: line 7: Discontiguous selection is not supported.
 CONSOLE ERROR: line 7: Discontiguous selection is not supported.
 CONSOLE ERROR: line 7: The given range isn't in document.
@@ -60,6 +58,29 @@
 CONSOLE ERROR: line 7: Discontiguous selection is not supported.
 CONSOLE ERROR: line 7: Discontiguous selection is not supported.
 CONSOLE ERROR: line 7: Discontiguous selection is not supported.
+CONSOLE ERROR: line 7: The given range isn't in document.
+CONSOLE ERROR: line 7: The given range isn't in document.
+CONSOLE ERROR: line 7: Discontiguous selection is not supported.
+CONSOLE ERROR: line 7: Discontiguous selection is not supported.
+CONSOLE ERROR: line 7: Discontiguous selection is not supported.
+CONSOLE ERROR: line 7: Discontiguous selection is not supported.
+CONSOLE ERROR: line 7: Discontiguous selection is not supported.
+CONSOLE ERROR: line 7: Discontiguous selection is not supported.
+CONSOLE ERROR: line 7: The given range isn't in document.
+CONSOLE ERROR: line 7: The given range isn't in document.
+CONSOLE ERROR: line 7: The given range isn't in document.
+CONSOLE ERROR: line 7: The given range isn't in document.
+CONSOLE ERROR: line 7: Discontiguous selection is not supported.
+CONSOLE ERROR: line 7: Discontiguous selection is not supported.
+CONSOLE ERROR: line 7: Discontiguous selection is not supported.
+CONSOLE ERROR: line 7: Discontiguous selection is not supported.
+CONSOLE ERROR: line 7: Discontiguous selection is not supported.
+CONSOLE ERROR: line 7: Discontiguous selection is not supported.
+CONSOLE ERROR: line 7: The given range isn't in document.
+CONSOLE ERROR: line 7: The given range isn't in document.
+CONSOLE ERROR: line 7: The given range isn't in document.
+CONSOLE ERROR: line 7: Discontiguous selection is not supported.
+CONSOLE ERROR: line 7: Discontiguous selection is not supported.
 CONSOLE ERROR: line 7: Discontiguous selection is not supported.
 CONSOLE ERROR: line 7: The given range isn't in document.
 CONSOLE ERROR: line 7: The given range isn't in document.
@@ -82,25 +103,9 @@
 PASS Range 36 [document, 1, document, 2] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: modifying the Selection's last Range must modify the first added Range 
 PASS Range 36 [document, 1, document, 2] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 36 [document, 1, document, 2] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: second addRange() must result in rangeCount being 1 
-FAIL Range 36 [document, 1, document, 2] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
-" but got Document node with 2 children
-FAIL Range 36 [document, 1, document, 2] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "Selection.addRange() tests
-
-Äb̈c̈d̈ëf̈g̈ḧ
-Ijklmnop
-QrstuvwxYzabcdefGhijklmn
-
-
-
-
-
-"use strict";
-
-testAddRangeSubSet(36, 40);
-testDiv.style.display = "none";
-"
-FAIL Range 36 [document, 1, document, 2] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
-" but got Document node with 2 children
+FAIL Range 36 [document, 1, document, 2] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startOffset of the Selection's last Range must match the added Range expected 0 but got 6
+FAIL Range 36 [document, 1, document, 2] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object ""
+FAIL Range 36 [document, 1, document, 2] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 FAIL Range 36 [document, 1, document, 2] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 36 [document, 1, document, 2] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 36 [document, 1, document, 2] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: first addRange() must result in rangeCount being 1 
@@ -110,25 +115,9 @@
 PASS Range 36 [document, 1, document, 2] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: modifying the Selection's last Range must modify the first added Range 
 PASS Range 36 [document, 1, document, 2] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 36 [document, 1, document, 2] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: second addRange() must result in rangeCount being 1 
-FAIL Range 36 [document, 1, document, 2] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
-" but got Document node with 2 children
-FAIL Range 36 [document, 1, document, 2] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "A" but got object "Selection.addRange() tests
-
-Äb̈c̈d̈ëf̈g̈ḧ
-Ijklmnop
-QrstuvwxYzabcdefGhijklmn
-
-
-
-
-
-"use strict";
-
-testAddRangeSubSet(36, 40);
-testDiv.style.display = "none";
-"
-FAIL Range 36 [document, 1, document, 2] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
-" but got Document node with 2 children
+FAIL Range 36 [document, 1, document, 2] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startOffset of the Selection's last Range must match the added Range expected 0 but got 6
+FAIL Range 36 [document, 1, document, 2] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "A" but got object ""
+FAIL Range 36 [document, 1, document, 2] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 FAIL Range 36 [document, 1, document, 2] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 36 [document, 1, document, 2] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 36 [document, 1, document, 2] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: first addRange() must result in rangeCount being 1 
@@ -138,25 +127,9 @@
 PASS Range 36 [document, 1, document, 2] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: modifying the Selection's last Range must modify the first added Range 
 PASS Range 36 [document, 1, document, 2] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 36 [document, 1, document, 2] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: second addRange() must result in rangeCount being 1 
-FAIL Range 36 [document, 1, document, 2] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
-" but got Document node with 2 children
-FAIL Range 36 [document, 1, document, 2] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "b̈c̈d̈" but got object "Selection.addRange() tests
-
-Äb̈c̈d̈ëf̈g̈ḧ
-Ijklmnop
-QrstuvwxYzabcdefGhijklmn
-
-
-
-
-
-"use strict";
-
-testAddRangeSubSet(36, 40);
-testDiv.style.display = "none";
-"
-FAIL Range 36 [document, 1, document, 2] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
-" but got Document node with 2 children
+PASS Range 36 [document, 1, document, 2] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: second addRange() must result in the selection's last range having the specified endpoints 
+FAIL Range 36 [document, 1, document, 2] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "b̈c̈d̈" but got object "b̈c̈d̈"
+FAIL Range 36 [document, 1, document, 2] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 2
 FAIL Range 36 [document, 1, document, 2] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 36 [document, 1, document, 2] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 36 [document, 1, document, 2] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: first addRange() must result in rangeCount being 1 
@@ -166,25 +139,9 @@
 PASS Range 36 [document, 1, document, 2] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: modifying the Selection's last Range must modify the first added Range 
 PASS Range 36 [document, 1, document, 2] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 36 [document, 1, document, 2] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: second addRange() must result in rangeCount being 1 
-FAIL Range 36 [document, 1, document, 2] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
-" but got Document node with 2 children
-FAIL Range 36 [document, 1, document, 2] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "b̈c̈d̈e" but got object "Selection.addRange() tests
-
-Äb̈c̈d̈ëf̈g̈ḧ
-Ijklmnop
-QrstuvwxYzabcdefGhijklmn
-
-
-
-
-
-"use strict";
-
-testAddRangeSubSet(36, 40);
-testDiv.style.display = "none";
-"
-FAIL Range 36 [document, 1, document, 2] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
-" but got Document node with 2 children
+PASS Range 36 [document, 1, document, 2] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: second addRange() must result in the selection's last range having the specified endpoints 
+FAIL Range 36 [document, 1, document, 2] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "b̈c̈d̈e" but got object "b̈c̈d̈e"
+FAIL Range 36 [document, 1, document, 2] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 2
 FAIL Range 36 [document, 1, document, 2] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 36 [document, 1, document, 2] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 36 [document, 1, document, 2] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: first addRange() must result in rangeCount being 1 
@@ -195,24 +152,10 @@
 PASS Range 36 [document, 1, document, 2] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 36 [document, 1, document, 2] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: second addRange() must result in rangeCount being 1 
 FAIL Range 36 [document, 1, document, 2] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Ijklmnop
-" but got Document node with 2 children
-FAIL Range 36 [document, 1, document, 2] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "Selection.addRange() tests
-
-Äb̈c̈d̈ëf̈g̈ḧ
-Ijklmnop
-QrstuvwxYzabcdefGhijklmn
-
-
-
-
-
-"use strict";
-
-testAddRangeSubSet(36, 40);
-testDiv.style.display = "none";
+" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ
 "
-FAIL Range 36 [document, 1, document, 2] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
-" but got Document node with 2 children
+FAIL Range 36 [document, 1, document, 2] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object ""
+FAIL Range 36 [document, 1, document, 2] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 FAIL Range 36 [document, 1, document, 2] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 36 [document, 1, document, 2] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 36 [document, 1, document, 2] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: first addRange() must result in rangeCount being 1 
@@ -223,24 +166,10 @@
 PASS Range 36 [document, 1, document, 2] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 36 [document, 1, document, 2] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: second addRange() must result in rangeCount being 1 
 FAIL Range 36 [document, 1, document, 2] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Ijklmnop
-" but got Document node with 2 children
-FAIL Range 36 [document, 1, document, 2] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "I" but got object "Selection.addRange() tests
-
-Äb̈c̈d̈ëf̈g̈ḧ
-Ijklmnop
-QrstuvwxYzabcdefGhijklmn
-
-
-
-
-
-"use strict";
-
-testAddRangeSubSet(36, 40);
-testDiv.style.display = "none";
+" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ
 "
-FAIL Range 36 [document, 1, document, 2] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
-" but got Document node with 2 children
+FAIL Range 36 [document, 1, document, 2] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "I" but got object ""
+FAIL Range 36 [document, 1, document, 2] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 FAIL Range 36 [document, 1, document, 2] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 36 [document, 1, document, 2] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 36 [document, 1, document, 2] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: first addRange() must result in rangeCount being 1 
@@ -251,24 +180,10 @@
 PASS Range 36 [document, 1, document, 2] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 36 [document, 1, document, 2] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: second addRange() must result in rangeCount being 1 
 FAIL Range 36 [document, 1, document, 2] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Ijklmnop
-" but got Document node with 2 children
-FAIL Range 36 [document, 1, document, 2] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "klmnop" but got object "Selection.addRange() tests
-
-Äb̈c̈d̈ëf̈g̈ḧ
-Ijklmnop
-QrstuvwxYzabcdefGhijklmn
-
-
-
-
-
-"use strict";
-
-testAddRangeSubSet(36, 40);
-testDiv.style.display = "none";
+" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ
 "
-FAIL Range 36 [document, 1, document, 2] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
-" but got Document node with 2 children
+FAIL Range 36 [document, 1, document, 2] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "klmnop" but got object ""
+FAIL Range 36 [document, 1, document, 2] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 FAIL Range 36 [document, 1, document, 2] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 36 [document, 1, document, 2] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 36 [document, 1, document, 2] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: first addRange() must result in rangeCount being 1 
@@ -279,25 +194,11 @@
 PASS Range 36 [document, 1, document, 2] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 36 [document, 1, document, 2] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: second addRange() must result in rangeCount being 1 
 FAIL Range 36 [document, 1, document, 2] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Ijklmnop
-" but got Document node with 2 children
-FAIL Range 36 [document, 1, document, 2] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "klmnop
-" but got object "Selection.addRange() tests
-
-Äb̈c̈d̈ëf̈g̈ḧ
-Ijklmnop
-QrstuvwxYzabcdefGhijklmn
-
-
-
-
-
-"use strict";
-
-testAddRangeSubSet(36, 40);
-testDiv.style.display = "none";
+" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ
 "
-FAIL Range 36 [document, 1, document, 2] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
-" but got Document node with 2 children
+FAIL Range 36 [document, 1, document, 2] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "klmnop
+" but got object ""
+FAIL Range 36 [document, 1, document, 2] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 FAIL Range 36 [document, 1, document, 2] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 36 [document, 1, document, 2] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 36 [document, 1, document, 2] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: first addRange() must result in rangeCount being 1 
@@ -386,26 +287,12 @@
 PASS Range 36 [document, 1, document, 2] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 36 [document, 1, document, 2] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: second addRange() must result in rangeCount being 1 
 FAIL Range 36 [document, 1, document, 2] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <html><head><title>Selection.addRange() tests</title>
-<me... but got Document node with 2 children
+<me... but got Text node "Äb̈c̈d̈ëf̈g̈ḧ
+"
 FAIL Range 36 [document, 1, document, 2] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Selection.addRange() tests
 
-" but got object "Selection.addRange() tests
-
-Äb̈c̈d̈ëf̈g̈ḧ
-Ijklmnop
-QrstuvwxYzabcdefGhijklmn
-
-
-
-
-
-"use strict";
-
-testAddRangeSubSet(36, 40);
-testDiv.style.display = "none";
-"
-FAIL Range 36 [document, 1, document, 2] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
-" but got Document node with 2 children
+" but got object ""
+FAIL Range 36 [document, 1, document, 2] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 FAIL Range 36 [document, 1, document, 2] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 36 [document, 1, document, 2] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 36 [document, 1, document, 2] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: first addRange() must result in rangeCount being 1 
@@ -415,8 +302,7 @@
 PASS Range 36 [document, 1, document, 2] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: modifying the Selection's last Range must modify the first added Range 
 PASS Range 36 [document, 1, document, 2] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 36 [document, 1, document, 2] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: second addRange() must result in rangeCount being 1 
-FAIL Range 36 [document, 1, document, 2] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <html><head><title>Selection.addRange() tests</title>
-<me... but got Document node with 2 children
+PASS Range 36 [document, 1, document, 2] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: second addRange() must result in the selection's last range having the specified endpoints 
 FAIL Range 36 [document, 1, document, 2] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Selection.addRange() tests
 
 Äb̈c̈d̈ëf̈g̈ḧ
@@ -447,7 +333,8 @@
 testDiv.style.display = "none";
 "
 FAIL Range 36 [document, 1, document, 2] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
-" but got Document node with 2 children
+" but got Element node <html><head><title>Selection.addRange() tests</title>
+<me...
 FAIL Range 36 [document, 1, document, 2] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 36 [document, 1, document, 2] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 36 [document, 1, document, 2] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: first addRange() must result in rangeCount being 1 
@@ -457,8 +344,7 @@
 PASS Range 36 [document, 1, document, 2] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: modifying the Selection's last Range must modify the first added Range 
 PASS Range 36 [document, 1, document, 2] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 36 [document, 1, document, 2] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: second addRange() must result in rangeCount being 1 
-FAIL Range 36 [document, 1, document, 2] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <html><head><title>Selection.addRange() tests</title>
-<me... but got Document node with 2 children
+PASS Range 36 [document, 1, document, 2] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: second addRange() must result in the selection's last range having the specified endpoints 
 FAIL Range 36 [document, 1, document, 2] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ
 Ijklmnop
 QrstuvwxYzabcdefGhijklmn
@@ -471,9 +357,7 @@
 
 testAddRangeSubSet(36, 40);
 testDiv.style.display = "none";
-" but got object "Selection.addRange() tests
-
-Äb̈c̈d̈ëf̈g̈ḧ
+" but got object "Äb̈c̈d̈ëf̈g̈ḧ
 Ijklmnop
 QrstuvwxYzabcdefGhijklmn
 
@@ -487,7 +371,8 @@
 testDiv.style.display = "none";
 "
 FAIL Range 36 [document, 1, document, 2] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
-" but got Document node with 2 children
+" but got Element node <html><head><title>Selection.addRange() tests</title>
+<me...
 FAIL Range 36 [document, 1, document, 2] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 36 [document, 1, document, 2] followed by Range 17 [document.head, 1, document.head, 1]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 36 [document, 1, document, 2] followed by Range 17 [document.head, 1, document.head, 1]: first addRange() must result in rangeCount being 1 
@@ -498,24 +383,10 @@
 PASS Range 36 [document, 1, document, 2] followed by Range 17 [document.head, 1, document.head, 1]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 36 [document, 1, document, 2] followed by Range 17 [document.head, 1, document.head, 1]: second addRange() must result in rangeCount being 1 
 FAIL Range 36 [document, 1, document, 2] followed by Range 17 [document.head, 1, document.head, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <head><title>Selection.addRange() tests</title>
-<meta nam... but got Document node with 2 children
-FAIL Range 36 [document, 1, document, 2] followed by Range 17 [document.head, 1, document.head, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "Selection.addRange() tests
-
-Äb̈c̈d̈ëf̈g̈ḧ
-Ijklmnop
-QrstuvwxYzabcdefGhijklmn
-
-
-
-
-
-"use strict";
-
-testAddRangeSubSet(36, 40);
-testDiv.style.display = "none";
+<meta nam... but got Text node "Äb̈c̈d̈ëf̈g̈ḧ
 "
-FAIL Range 36 [document, 1, document, 2] followed by Range 17 [document.head, 1, document.head, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
-" but got Document node with 2 children
+FAIL Range 36 [document, 1, document, 2] followed by Range 17 [document.head, 1, document.head, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object ""
+FAIL Range 36 [document, 1, document, 2] followed by Range 17 [document.head, 1, document.head, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 FAIL Range 36 [document, 1, document, 2] followed by Range 17 [document.head, 1, document.head, 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 36 [document, 1, document, 2] followed by Range 18 [document.body, 0, document.body, 1]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 36 [document, 1, document, 2] followed by Range 18 [document.body, 0, document.body, 1]: first addRange() must result in rangeCount being 1 
@@ -525,27 +396,15 @@
 PASS Range 36 [document, 1, document, 2] followed by Range 18 [document.body, 0, document.body, 1]: modifying the Selection's last Range must modify the first added Range 
 PASS Range 36 [document, 1, document, 2] followed by Range 18 [document.body, 0, document.body, 1]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 36 [document, 1, document, 2] followed by Range 18 [document.body, 0, document.body, 1]: second addRange() must result in rangeCount being 1 
-FAIL Range 36 [document, 1, document, 2] followed by Range 18 [document.body, 0, document.body, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <body><div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ
-</p><p id... but got Document node with 2 children
+PASS Range 36 [document, 1, document, 2] followed by Range 18 [document.body, 0, document.body, 1]: second addRange() must result in the selection's last range having the specified endpoints 
 FAIL Range 36 [document, 1, document, 2] followed by Range 18 [document.body, 0, document.body, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ
 Ijklmnop
-QrstuvwxYzabcdefGhijklmn" but got object "Selection.addRange() tests
-
-Äb̈c̈d̈ëf̈g̈ḧ
+QrstuvwxYzabcdefGhijklmn" but got object "Äb̈c̈d̈ëf̈g̈ḧ
 Ijklmnop
-QrstuvwxYzabcdefGhijklmn
-
-
-
-
-
-"use strict";
-
-testAddRangeSubSet(36, 40);
-testDiv.style.display = "none";
-"
+QrstuvwxYzabcdefGhijklmn"
 FAIL Range 36 [document, 1, document, 2] followed by Range 18 [document.body, 0, document.body, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
-" but got Document node with 2 children
+" but got Element node <body><div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ
+</p><p id...
 FAIL Range 36 [document, 1, document, 2] followed by Range 18 [document.body, 0, document.body, 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 36 [document, 1, document, 2] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 36 [document, 1, document, 2] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: first addRange() must result in rangeCount being 1 
@@ -595,24 +454,10 @@
 PASS Range 36 [document, 1, document, 2] followed by Range 22 [paras[0], 0, paras[0], 0]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 36 [document, 1, document, 2] followed by Range 22 [paras[0], 0, paras[0], 0]: second addRange() must result in rangeCount being 1 
 FAIL Range 36 [document, 1, document, 2] followed by Range 22 [paras[0], 0, paras[0], 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ
-</p> but got Document node with 2 children
-FAIL Range 36 [document, 1, document, 2] followed by Range 22 [paras[0], 0, paras[0], 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "Selection.addRange() tests
-
-Äb̈c̈d̈ëf̈g̈ḧ
-Ijklmnop
-QrstuvwxYzabcdefGhijklmn
-
-
-
-
-
-"use strict";
-
-testAddRangeSubSet(36, 40);
-testDiv.style.display = "none";
+</p> but got Text node "Äb̈c̈d̈ëf̈g̈ḧ
 "
-FAIL Range 36 [document, 1, document, 2] followed by Range 22 [paras[0], 0, paras[0], 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
-" but got Document node with 2 children
+FAIL Range 36 [document, 1, document, 2] followed by Range 22 [paras[0], 0, paras[0], 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object ""
+FAIL Range 36 [document, 1, document, 2] followed by Range 22 [paras[0], 0, paras[0], 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 FAIL Range 36 [document, 1, document, 2] followed by Range 22 [paras[0], 0, paras[0], 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 36 [document, 1, document, 2] followed by Range 23 [paras[0], 0, paras[0], 1]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 36 [document, 1, document, 2] followed by Range 23 [paras[0], 0, paras[0], 1]: first addRange() must result in rangeCount being 1 
@@ -622,26 +467,13 @@
 PASS Range 36 [document, 1, document, 2] followed by Range 23 [paras[0], 0, paras[0], 1]: modifying the Selection's last Range must modify the first added Range 
 PASS Range 36 [document, 1, document, 2] followed by Range 23 [paras[0], 0, paras[0], 1]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 36 [document, 1, document, 2] followed by Range 23 [paras[0], 0, paras[0], 1]: second addRange() must result in rangeCount being 1 
-FAIL Range 36 [document, 1, document, 2] followed by Range 23 [paras[0], 0, paras[0], 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ
-</p> but got Document node with 2 children
+PASS Range 36 [document, 1, document, 2] followed by Range 23 [paras[0], 0, paras[0], 1]: second addRange() must result in the selection's last range having the specified endpoints 
 FAIL Range 36 [document, 1, document, 2] followed by Range 23 [paras[0], 0, paras[0], 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ
-" but got object "Selection.addRange() tests
-
-Äb̈c̈d̈ëf̈g̈ḧ
-Ijklmnop
-QrstuvwxYzabcdefGhijklmn
-
-
-
-
-
-"use strict";
-
-testAddRangeSubSet(36, 40);
-testDiv.style.display = "none";
+" but got object "Äb̈c̈d̈ëf̈g̈ḧ
 "
 FAIL Range 36 [document, 1, document, 2] followed by Range 23 [paras[0], 0, paras[0], 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
-" but got Document node with 2 children
+" but got Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ
+</p>
 FAIL Range 36 [document, 1, document, 2] followed by Range 23 [paras[0], 0, paras[0], 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 36 [document, 1, document, 2] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 36 [document, 1, document, 2] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: first addRange() must result in rangeCount being 1 
@@ -677,26 +509,13 @@
 PASS Range 36 [document, 1, document, 2] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: modifying the Selection's last Range must modify the first added Range 
 PASS Range 36 [document, 1, document, 2] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 36 [document, 1, document, 2] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: second addRange() must result in rangeCount being 1 
-FAIL Range 36 [document, 1, document, 2] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
-" but got Document node with 2 children
+PASS Range 36 [document, 1, document, 2] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: second addRange() must result in the selection's last range having the specified endpoints 
 FAIL Range 36 [document, 1, document, 2] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ
-" but got object "Selection.addRange() tests
-
-Äb̈c̈d̈ëf̈g̈ḧ
-Ijklmnop
-QrstuvwxYzabcdefGhijklmn
-
-
-
-
-
-"use strict";
-
-testAddRangeSubSet(36, 40);
-testDiv.style.display = "none";
+" but got object "Äb̈c̈d̈ëf̈g̈ḧ
 "
-FAIL Range 36 [document, 1, document, 2] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
-" but got Document node with 2 children
+FAIL Range 36 [document, 1, document, 2] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, endContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
+" but got Text node "Ijklmnop
+"
 FAIL Range 36 [document, 1, document, 2] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 36 [document, 1, document, 2] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 36 [document, 1, document, 2] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: first addRange() must result in rangeCount being 1 
@@ -706,26 +525,13 @@
 PASS Range 36 [document, 1, document, 2] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: modifying the Selection's last Range must modify the first added Range 
 PASS Range 36 [document, 1, document, 2] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 36 [document, 1, document, 2] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: second addRange() must result in rangeCount being 1 
-FAIL Range 36 [document, 1, document, 2] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
-" but got Document node with 2 children
+PASS Range 36 [document, 1, document, 2] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: second addRange() must result in the selection's last range having the specified endpoints 
 FAIL Range 36 [document, 1, document, 2] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ
-Ijklmnop" but got object "Selection.addRange() tests
-
-Äb̈c̈d̈ëf̈g̈ḧ
-Ijklmnop
-QrstuvwxYzabcdefGhijklmn
-
-
-
-
-
-"use strict";
-
-testAddRangeSubSet(36, 40);
-testDiv.style.display = "none";
+Ijklmnop" but got object "Äb̈c̈d̈ëf̈g̈ḧ
+Ijklmnop"
+FAIL Range 36 [document, 1, document, 2] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, endContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
+" but got Text node "Ijklmnop
 "
-FAIL Range 36 [document, 1, document, 2] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
-" but got Document node with 2 children
 FAIL Range 36 [document, 1, document, 2] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 36 [document, 1, document, 2] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 36 [document, 1, document, 2] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: first addRange() must result in rangeCount being 1 
@@ -735,27 +541,13 @@
 PASS Range 36 [document, 1, document, 2] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: modifying the Selection's last Range must modify the first added Range 
 PASS Range 36 [document, 1, document, 2] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 36 [document, 1, document, 2] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: second addRange() must result in rangeCount being 1 
-FAIL Range 36 [document, 1, document, 2] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
-" but got Document node with 2 children
+PASS Range 36 [document, 1, document, 2] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: second addRange() must result in the selection's last range having the specified endpoints 
 FAIL Range 36 [document, 1, document, 2] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "̈c̈d̈ëf̈g̈ḧ
 Ijklmnop
-QrstuvwxYzabcdef" but got object "Selection.addRange() tests
-
-Äb̈c̈d̈ëf̈g̈ḧ
+QrstuvwxYzabcdef" but got object "̈c̈d̈ëf̈g̈ḧ
 Ijklmnop
-QrstuvwxYzabcdefGhijklmn
-
-
-
-
-
-"use strict";
-
-testAddRangeSubSet(36, 40);
-testDiv.style.display = "none";
-"
-FAIL Range 36 [document, 1, document, 2] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
-" but got Document node with 2 children
+QrstuvwxYzabcdef"
+FAIL Range 36 [document, 1, document, 2] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 3
 FAIL Range 36 [document, 1, document, 2] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 36 [document, 1, document, 2] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 36 [document, 1, document, 2] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: first addRange() must result in rangeCount being 1 
@@ -765,25 +557,11 @@
 PASS Range 36 [document, 1, document, 2] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: modifying the Selection's last Range must modify the first added Range 
 PASS Range 36 [document, 1, document, 2] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 36 [document, 1, document, 2] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: second addRange() must result in rangeCount being 1 
-FAIL Range 36 [document, 1, document, 2] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ
-</p> but got Document node with 2 children
-FAIL Range 36 [document, 1, document, 2] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d" but got object "Selection.addRange() tests
-
-Äb̈c̈d̈ëf̈g̈ḧ
-Ijklmnop
-QrstuvwxYzabcdefGhijklmn
-
-
-
-
-
-"use strict";
-
-testAddRangeSubSet(36, 40);
-testDiv.style.display = "none";
-"
+PASS Range 36 [document, 1, document, 2] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: second addRange() must result in the selection's last range having the specified endpoints 
+FAIL Range 36 [document, 1, document, 2] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d" but got object "Äb̈c̈d"
 FAIL Range 36 [document, 1, document, 2] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
-" but got Document node with 2 children
+" but got Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ
+</p>
 FAIL Range 36 [document, 1, document, 2] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 36 [document, 1, document, 2] followed by Range 30 [testDiv, 2, paras[4], 1]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 36 [document, 1, document, 2] followed by Range 30 [testDiv, 2, paras[4], 1]: first addRange() must result in rangeCount being 1 
@@ -794,24 +572,10 @@
 PASS Range 36 [document, 1, document, 2] followed by Range 30 [testDiv, 2, paras[4], 1]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 36 [document, 1, document, 2] followed by Range 30 [testDiv, 2, paras[4], 1]: second addRange() must result in rangeCount being 1 
 FAIL Range 36 [document, 1, document, 2] followed by Range 30 [testDiv, 2, paras[4], 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ
-</p><p id="b" s... but got Document node with 2 children
-FAIL Range 36 [document, 1, document, 2] followed by Range 30 [testDiv, 2, paras[4], 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "QrstuvwxYzabcdefGhijklmn" but got object "Selection.addRange() tests
-
-Äb̈c̈d̈ëf̈g̈ḧ
-Ijklmnop
-QrstuvwxYzabcdefGhijklmn
-
-
-
-
-
-"use strict";
-
-testAddRangeSubSet(36, 40);
-testDiv.style.display = "none";
+</p><p id="b" s... but got Text node "Äb̈c̈d̈ëf̈g̈ḧ
 "
-FAIL Range 36 [document, 1, document, 2] followed by Range 30 [testDiv, 2, paras[4], 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
-" but got Document node with 2 children
+FAIL Range 36 [document, 1, document, 2] followed by Range 30 [testDiv, 2, paras[4], 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "QrstuvwxYzabcdefGhijklmn" but got object ""
+FAIL Range 36 [document, 1, document, 2] followed by Range 30 [testDiv, 2, paras[4], 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 FAIL Range 36 [document, 1, document, 2] followed by Range 30 [testDiv, 2, paras[4], 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 36 [document, 1, document, 2] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 36 [document, 1, document, 2] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: first addRange() must result in rangeCount being 1 
@@ -822,25 +586,11 @@
 PASS Range 36 [document, 1, document, 2] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 36 [document, 1, document, 2] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: second addRange() must result in rangeCount being 1 
 FAIL Range 36 [document, 1, document, 2] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ
-</p><p id="b" s... but got Document node with 2 children
-FAIL Range 36 [document, 1, document, 2] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Ijklmnop
-Qrstu" but got object "Selection.addRange() tests
-
-Äb̈c̈d̈ëf̈g̈ḧ
-Ijklmnop
-QrstuvwxYzabcdefGhijklmn
-
-
-
-
-
-"use strict";
-
-testAddRangeSubSet(36, 40);
-testDiv.style.display = "none";
+</p><p id="b" s... but got Text node "Äb̈c̈d̈ëf̈g̈ḧ
 "
-FAIL Range 36 [document, 1, document, 2] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
-" but got Document node with 2 children
+FAIL Range 36 [document, 1, document, 2] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Ijklmnop
+Qrstu" but got object ""
+FAIL Range 36 [document, 1, document, 2] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 FAIL Range 36 [document, 1, document, 2] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 36 [document, 1, document, 2] followed by Range 32 [document.documentElement, 1, document.body, 0]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 36 [document, 1, document, 2] followed by Range 32 [document.documentElement, 1, document.body, 0]: first addRange() must result in rangeCount being 1 
@@ -851,24 +601,10 @@
 PASS Range 36 [document, 1, document, 2] followed by Range 32 [document.documentElement, 1, document.body, 0]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 36 [document, 1, document, 2] followed by Range 32 [document.documentElement, 1, document.body, 0]: second addRange() must result in rangeCount being 1 
 FAIL Range 36 [document, 1, document, 2] followed by Range 32 [document.documentElement, 1, document.body, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <html><head><title>Selection.addRange() tests</title>
-<me... but got Document node with 2 children
-FAIL Range 36 [document, 1, document, 2] followed by Range 32 [document.documentElement, 1, document.body, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "Selection.addRange() tests
-
-Äb̈c̈d̈ëf̈g̈ḧ
-Ijklmnop
-QrstuvwxYzabcdefGhijklmn
-
-
-
-
-
-"use strict";
-
-testAddRangeSubSet(36, 40);
-testDiv.style.display = "none";
+<me... but got Text node "Äb̈c̈d̈ëf̈g̈ḧ
 "
-FAIL Range 36 [document, 1, document, 2] followed by Range 32 [document.documentElement, 1, document.body, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
-" but got Document node with 2 children
+FAIL Range 36 [document, 1, document, 2] followed by Range 32 [document.documentElement, 1, document.body, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object ""
+FAIL Range 36 [document, 1, document, 2] followed by Range 32 [document.documentElement, 1, document.body, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 FAIL Range 36 [document, 1, document, 2] followed by Range 32 [document.documentElement, 1, document.body, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 36 [document, 1, document, 2] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 36 [document, 1, document, 2] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: first addRange() must result in rangeCount being 1 
@@ -891,24 +627,10 @@
 PASS Range 36 [document, 1, document, 2] followed by Range 34 [document, 0, document, 1]: modifying the Selection's last Range must modify the first added Range 
 PASS Range 36 [document, 1, document, 2] followed by Range 34 [document, 0, document, 1]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 36 [document, 1, document, 2] followed by Range 34 [document, 0, document, 1]: second addRange() must result in rangeCount being 1 
-FAIL Range 36 [document, 1, document, 2] followed by Range 34 [document, 0, document, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: endOffset of the Selection's last Range must match the added Range expected 1 but got 2
-FAIL Range 36 [document, 1, document, 2] followed by Range 34 [document, 0, document, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "Selection.addRange() tests
-
-Äb̈c̈d̈ëf̈g̈ḧ
-Ijklmnop
-QrstuvwxYzabcdefGhijklmn
-
-
-
-
-
-"use strict";
-
-testAddRangeSubSet(36, 40);
-testDiv.style.display = "none";
+FAIL Range 36 [document, 1, document, 2] followed by Range 34 [document, 0, document, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Document node with 2 children but got Text node "Äb̈c̈d̈ëf̈g̈ḧ
 "
-FAIL Range 36 [document, 1, document, 2] followed by Range 34 [document, 0, document, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
-" but got Document node with 2 children
+FAIL Range 36 [document, 1, document, 2] followed by Range 34 [document, 0, document, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object ""
+FAIL Range 36 [document, 1, document, 2] followed by Range 34 [document, 0, document, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 FAIL Range 36 [document, 1, document, 2] followed by Range 34 [document, 0, document, 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 36 [document, 1, document, 2] followed by Range 35 [document, 0, document, 2]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 36 [document, 1, document, 2] followed by Range 35 [document, 0, document, 2]: first addRange() must result in rangeCount being 1 
@@ -1000,27 +722,16 @@
 PASS Range 36 [document, 1, document, 2] followed by Range 37 [testDiv, 0, comment, 5]: modifying the Selection's last Range must modify the first added Range 
 PASS Range 36 [document, 1, document, 2] followed by Range 37 [testDiv, 0, comment, 5]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 36 [document, 1, document, 2] followed by Range 37 [testDiv, 0, comment, 5]: second addRange() must result in rangeCount being 1 
-FAIL Range 36 [document, 1, document, 2] followed by Range 37 [testDiv, 0, comment, 5]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ
-</p><p id="b" s... but got Document node with 2 children
+FAIL Range 36 [document, 1, document, 2] followed by Range 37 [testDiv, 0, comment, 5]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: endContainer of the Selection's last Range must match the added Range expected Comment node <!--Alphabet soup?--> but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ
+</p><p id="b" s...
 FAIL Range 36 [document, 1, document, 2] followed by Range 37 [testDiv, 0, comment, 5]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ
 Ijklmnop
-QrstuvwxYzabcdefGhijklmn" but got object "Selection.addRange() tests
-
-Äb̈c̈d̈ëf̈g̈ḧ
+QrstuvwxYzabcdefGhijklmn" but got object "Äb̈c̈d̈ëf̈g̈ḧ
 Ijklmnop
-QrstuvwxYzabcdefGhijklmn
-
-
-
-
-
-"use strict";
-
-testAddRangeSubSet(36, 40);
-testDiv.style.display = "none";
-"
+QrstuvwxYzabcdefGhijklmn"
 FAIL Range 36 [document, 1, document, 2] followed by Range 37 [testDiv, 0, comment, 5]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
-" but got Document node with 2 children
+" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ
+</p><p id="b" s...
 FAIL Range 36 [document, 1, document, 2] followed by Range 37 [testDiv, 0, comment, 5]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 36 [document, 1, document, 2] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 36 [document, 1, document, 2] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: first addRange() must result in rangeCount being 1 
@@ -1030,24 +741,10 @@
 PASS Range 36 [document, 1, document, 2] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: modifying the Selection's last Range must modify the first added Range 
 PASS Range 36 [document, 1, document, 2] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 36 [document, 1, document, 2] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: second addRange() must result in rangeCount being 1 
-FAIL Range 36 [document, 1, document, 2] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Qrstuvwx" but got Document node with 2 children
-FAIL Range 36 [document, 1, document, 2] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "uvwxYzabcdefGhijklmn" but got object "Selection.addRange() tests
-
-Äb̈c̈d̈ëf̈g̈ḧ
-Ijklmnop
-QrstuvwxYzabcdefGhijklmn
-
-
-
-
-
-"use strict";
-
-testAddRangeSubSet(36, 40);
-testDiv.style.display = "none";
+FAIL Range 36 [document, 1, document, 2] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Qrstuvwx" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ
 "
-FAIL Range 36 [document, 1, document, 2] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
-" but got Document node with 2 children
+FAIL Range 36 [document, 1, document, 2] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "uvwxYzabcdefGhijklmn" but got object ""
+FAIL Range 36 [document, 1, document, 2] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 FAIL Range 36 [document, 1, document, 2] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 36 [document, 1, document, 2] followed by Range 39 [paras[3], 1, comment, 8]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 36 [document, 1, document, 2] followed by Range 39 [paras[3], 1, comment, 8]: first addRange() must result in rangeCount being 1 
@@ -1057,24 +754,10 @@
 PASS Range 36 [document, 1, document, 2] followed by Range 39 [paras[3], 1, comment, 8]: modifying the Selection's last Range must modify the first added Range 
 PASS Range 36 [document, 1, document, 2] followed by Range 39 [paras[3], 1, comment, 8]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 36 [document, 1, document, 2] followed by Range 39 [paras[3], 1, comment, 8]: second addRange() must result in rangeCount being 1 
-FAIL Range 36 [document, 1, document, 2] followed by Range 39 [paras[3], 1, comment, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <p id="d" style="display:none">Yzabcdef</p> but got Document node with 2 children
-FAIL Range 36 [document, 1, document, 2] followed by Range 39 [paras[3], 1, comment, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Ghijklmn" but got object "Selection.addRange() tests
-
-Äb̈c̈d̈ëf̈g̈ḧ
-Ijklmnop
-QrstuvwxYzabcdefGhijklmn
-
-
-
-
-
-"use strict";
-
-testAddRangeSubSet(36, 40);
-testDiv.style.display = "none";
+FAIL Range 36 [document, 1, document, 2] followed by Range 39 [paras[3], 1, comment, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <p id="d" style="display:none">Yzabcdef</p> but got Text node "Äb̈c̈d̈ëf̈g̈ḧ
 "
-FAIL Range 36 [document, 1, document, 2] followed by Range 39 [paras[3], 1, comment, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
-" but got Document node with 2 children
+FAIL Range 36 [document, 1, document, 2] followed by Range 39 [paras[3], 1, comment, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Ghijklmn" but got object ""
+FAIL Range 36 [document, 1, document, 2] followed by Range 39 [paras[3], 1, comment, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 FAIL Range 36 [document, 1, document, 2] followed by Range 39 [paras[3], 1, comment, 8]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 36 [document, 1, document, 2] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 36 [document, 1, document, 2] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: first addRange() must result in rangeCount being 1 
@@ -1318,15 +1001,9 @@
 PASS Range 37 [testDiv, 0, comment, 5] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: modifying the Selection's last Range must modify the first added Range 
 PASS Range 37 [testDiv, 0, comment, 5] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 37 [testDiv, 0, comment, 5] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: second addRange() must result in rangeCount being 1 
-FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
-" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ
-</p><p id="b" s...
-FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "Äb̈c̈d̈ëf̈g̈ḧ
-Ijklmnop
-QrstuvwxYzabcdefGhijklmn"
-FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
-" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ
-</p><p id="b" s...
+FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startOffset of the Selection's last Range must match the added Range expected 0 but got 6
+FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object ""
+FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 37 [testDiv, 0, comment, 5] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 37 [testDiv, 0, comment, 5] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: first addRange() must result in rangeCount being 1 
@@ -1336,15 +1013,9 @@
 PASS Range 37 [testDiv, 0, comment, 5] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: modifying the Selection's last Range must modify the first added Range 
 PASS Range 37 [testDiv, 0, comment, 5] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 37 [testDiv, 0, comment, 5] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: second addRange() must result in rangeCount being 1 
-FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
-" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ
-</p><p id="b" s...
-FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "A" but got object "Äb̈c̈d̈ëf̈g̈ḧ
-Ijklmnop
-QrstuvwxYzabcdefGhijklmn"
-FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
-" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ
-</p><p id="b" s...
+FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startOffset of the Selection's last Range must match the added Range expected 0 but got 6
+FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "A" but got object ""
+FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 37 [testDiv, 0, comment, 5] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 37 [testDiv, 0, comment, 5] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: first addRange() must result in rangeCount being 1 
@@ -1354,15 +1025,9 @@
 PASS Range 37 [testDiv, 0, comment, 5] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: modifying the Selection's last Range must modify the first added Range 
 PASS Range 37 [testDiv, 0, comment, 5] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 37 [testDiv, 0, comment, 5] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: second addRange() must result in rangeCount being 1 
-FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
-" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ
-</p><p id="b" s...
-FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "b̈c̈d̈" but got object "Äb̈c̈d̈ëf̈g̈ḧ
-Ijklmnop
-QrstuvwxYzabcdefGhijklmn"
-FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
-" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ
-</p><p id="b" s...
+PASS Range 37 [testDiv, 0, comment, 5] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: second addRange() must result in the selection's last range having the specified endpoints 
+FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "b̈c̈d̈" but got object "b̈c̈d̈"
+FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 2
 FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 37 [testDiv, 0, comment, 5] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 37 [testDiv, 0, comment, 5] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: first addRange() must result in rangeCount being 1 
@@ -1372,15 +1037,9 @@
 PASS Range 37 [testDiv, 0, comment, 5] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: modifying the Selection's last Range must modify the first added Range 
 PASS Range 37 [testDiv, 0, comment, 5] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 37 [testDiv, 0, comment, 5] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: second addRange() must result in rangeCount being 1 
-FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
-" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ
-</p><p id="b" s...
-FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "b̈c̈d̈e" but got object "Äb̈c̈d̈ëf̈g̈ḧ
-Ijklmnop
-QrstuvwxYzabcdefGhijklmn"
-FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
-" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ
-</p><p id="b" s...
+PASS Range 37 [testDiv, 0, comment, 5] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: second addRange() must result in the selection's last range having the specified endpoints 
+FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "b̈c̈d̈e" but got object "b̈c̈d̈e"
+FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 2
 FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 37 [testDiv, 0, comment, 5] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 37 [testDiv, 0, comment, 5] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: first addRange() must result in rangeCount being 1 
@@ -1391,14 +1050,10 @@
 PASS Range 37 [testDiv, 0, comment, 5] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 37 [testDiv, 0, comment, 5] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: second addRange() must result in rangeCount being 1 
 FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Ijklmnop
-" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ
-</p><p id="b" s...
-FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "Äb̈c̈d̈ëf̈g̈ḧ
-Ijklmnop
-QrstuvwxYzabcdefGhijklmn"
-FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
-" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ
-</p><p id="b" s...
+" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ
+"
+FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object ""
+FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 37 [testDiv, 0, comment, 5] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 37 [testDiv, 0, comment, 5] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: first addRange() must result in rangeCount being 1 
@@ -1409,14 +1064,10 @@
 PASS Range 37 [testDiv, 0, comment, 5] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 37 [testDiv, 0, comment, 5] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: second addRange() must result in rangeCount being 1 
 FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Ijklmnop
-" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ
-</p><p id="b" s...
-FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "I" but got object "Äb̈c̈d̈ëf̈g̈ḧ
-Ijklmnop
-QrstuvwxYzabcdefGhijklmn"
-FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
-" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ
-</p><p id="b" s...
+" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ
+"
+FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "I" but got object ""
+FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 37 [testDiv, 0, comment, 5] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 37 [testDiv, 0, comment, 5] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: first addRange() must result in rangeCount being 1 
@@ -1427,14 +1078,10 @@
 PASS Range 37 [testDiv, 0, comment, 5] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 37 [testDiv, 0, comment, 5] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: second addRange() must result in rangeCount being 1 
 FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Ijklmnop
-" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ
-</p><p id="b" s...
-FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "klmnop" but got object "Äb̈c̈d̈ëf̈g̈ḧ
-Ijklmnop
-QrstuvwxYzabcdefGhijklmn"
-FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
-" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ
-</p><p id="b" s...
+" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ
+"
+FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "klmnop" but got object ""
+FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 37 [testDiv, 0, comment, 5] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 37 [testDiv, 0, comment, 5] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: first addRange() must result in rangeCount being 1 
@@ -1445,15 +1092,11 @@
 PASS Range 37 [testDiv, 0, comment, 5] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 37 [testDiv, 0, comment, 5] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: second addRange() must result in rangeCount being 1 
 FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Ijklmnop
-" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ
-</p><p id="b" s...
+" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ
+"
 FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "klmnop
-" but got object "Äb̈c̈d̈ëf̈g̈ḧ
-Ijklmnop
-QrstuvwxYzabcdefGhijklmn"
-FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
-" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ
-</p><p id="b" s...
+" but got object ""
+FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 37 [testDiv, 0, comment, 5] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 37 [testDiv, 0, comment, 5] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: first addRange() must result in rangeCount being 1 
@@ -1709,14 +1352,10 @@
 PASS Range 37 [testDiv, 0, comment, 5] followed by Range 22 [paras[0], 0, paras[0], 0]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 37 [testDiv, 0, comment, 5] followed by Range 22 [paras[0], 0, paras[0], 0]: second addRange() must result in rangeCount being 1 
 FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 22 [paras[0], 0, paras[0], 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ
-</p> but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ
-</p><p id="b" s...
-FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 22 [paras[0], 0, paras[0], 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "Äb̈c̈d̈ëf̈g̈ḧ
-Ijklmnop
-QrstuvwxYzabcdefGhijklmn"
-FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 22 [paras[0], 0, paras[0], 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
-" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ
-</p><p id="b" s...
+</p> but got Text node "Äb̈c̈d̈ëf̈g̈ḧ
+"
+FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 22 [paras[0], 0, paras[0], 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object ""
+FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 22 [paras[0], 0, paras[0], 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 22 [paras[0], 0, paras[0], 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 37 [testDiv, 0, comment, 5] followed by Range 23 [paras[0], 0, paras[0], 1]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 37 [testDiv, 0, comment, 5] followed by Range 23 [paras[0], 0, paras[0], 1]: first addRange() must result in rangeCount being 1 
@@ -1726,16 +1365,13 @@
 PASS Range 37 [testDiv, 0, comment, 5] followed by Range 23 [paras[0], 0, paras[0], 1]: modifying the Selection's last Range must modify the first added Range 
 PASS Range 37 [testDiv, 0, comment, 5] followed by Range 23 [paras[0], 0, paras[0], 1]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 37 [testDiv, 0, comment, 5] followed by Range 23 [paras[0], 0, paras[0], 1]: second addRange() must result in rangeCount being 1 
-FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 23 [paras[0], 0, paras[0], 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ
-</p> but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ
-</p><p id="b" s...
+PASS Range 37 [testDiv, 0, comment, 5] followed by Range 23 [paras[0], 0, paras[0], 1]: second addRange() must result in the selection's last range having the specified endpoints 
 FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 23 [paras[0], 0, paras[0], 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ
 " but got object "Äb̈c̈d̈ëf̈g̈ḧ
-Ijklmnop
-QrstuvwxYzabcdefGhijklmn"
+"
 FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 23 [paras[0], 0, paras[0], 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
-" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ
-</p><p id="b" s...
+" but got Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ
+</p>
 FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 23 [paras[0], 0, paras[0], 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 37 [testDiv, 0, comment, 5] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 37 [testDiv, 0, comment, 5] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: first addRange() must result in rangeCount being 1 
@@ -1771,16 +1407,13 @@
 PASS Range 37 [testDiv, 0, comment, 5] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: modifying the Selection's last Range must modify the first added Range 
 PASS Range 37 [testDiv, 0, comment, 5] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 37 [testDiv, 0, comment, 5] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: second addRange() must result in rangeCount being 1 
-FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
-" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ
-</p><p id="b" s...
+PASS Range 37 [testDiv, 0, comment, 5] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: second addRange() must result in the selection's last range having the specified endpoints 
 FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ
 " but got object "Äb̈c̈d̈ëf̈g̈ḧ
-Ijklmnop
-QrstuvwxYzabcdefGhijklmn"
-FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
-" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ
-</p><p id="b" s...
+"
+FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, endContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
+" but got Text node "Ijklmnop
+"
 FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 37 [testDiv, 0, comment, 5] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 37 [testDiv, 0, comment, 5] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: first addRange() must result in rangeCount being 1 
@@ -1790,16 +1423,13 @@
 PASS Range 37 [testDiv, 0, comment, 5] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: modifying the Selection's last Range must modify the first added Range 
 PASS Range 37 [testDiv, 0, comment, 5] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 37 [testDiv, 0, comment, 5] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: second addRange() must result in rangeCount being 1 
-FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
-" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ
-</p><p id="b" s...
+PASS Range 37 [testDiv, 0, comment, 5] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: second addRange() must result in the selection's last range having the specified endpoints 
 FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ
 Ijklmnop" but got object "Äb̈c̈d̈ëf̈g̈ḧ
-Ijklmnop
-QrstuvwxYzabcdefGhijklmn"
-FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
-" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ
-</p><p id="b" s...
+Ijklmnop"
+FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, endContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
+" but got Text node "Ijklmnop
+"
 FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 37 [testDiv, 0, comment, 5] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 37 [testDiv, 0, comment, 5] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: first addRange() must result in rangeCount being 1 
@@ -1809,17 +1439,13 @@
 PASS Range 37 [testDiv, 0, comment, 5] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: modifying the Selection's last Range must modify the first added Range 
 PASS Range 37 [testDiv, 0, comment, 5] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 37 [testDiv, 0, comment, 5] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: second addRange() must result in rangeCount being 1 
-FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
-" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ
-</p><p id="b" s...
+PASS Range 37 [testDiv, 0, comment, 5] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: second addRange() must result in the selection's last range having the specified endpoints 
 FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "̈c̈d̈ëf̈g̈ḧ
 Ijklmnop
-QrstuvwxYzabcdef" but got object "Äb̈c̈d̈ëf̈g̈ḧ
+QrstuvwxYzabcdef" but got object "̈c̈d̈ëf̈g̈ḧ
 Ijklmnop
-QrstuvwxYzabcdefGhijklmn"
-FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
-" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ
-</p><p id="b" s...
+QrstuvwxYzabcdef"
+FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 3
 FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 37 [testDiv, 0, comment, 5] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 37 [testDiv, 0, comment, 5] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: first addRange() must result in rangeCount being 1 
@@ -1829,15 +1455,11 @@
 PASS Range 37 [testDiv, 0, comment, 5] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: modifying the Selection's last Range must modify the first added Range 
 PASS Range 37 [testDiv, 0, comment, 5] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 37 [testDiv, 0, comment, 5] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: second addRange() must result in rangeCount being 1 
-FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ
-</p> but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ
-</p><p id="b" s...
-FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d" but got object "Äb̈c̈d̈ëf̈g̈ḧ
-Ijklmnop
-QrstuvwxYzabcdefGhijklmn"
+PASS Range 37 [testDiv, 0, comment, 5] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: second addRange() must result in the selection's last range having the specified endpoints 
+FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d" but got object "Äb̈c̈d"
 FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
-" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ
-</p><p id="b" s...
+" but got Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ
+</p>
 FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 37 [testDiv, 0, comment, 5] followed by Range 30 [testDiv, 2, paras[4], 1]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 37 [testDiv, 0, comment, 5] followed by Range 30 [testDiv, 2, paras[4], 1]: first addRange() must result in rangeCount being 1 
@@ -1847,13 +1469,11 @@
 PASS Range 37 [testDiv, 0, comment, 5] followed by Range 30 [testDiv, 2, paras[4], 1]: modifying the Selection's last Range must modify the first added Range 
 PASS Range 37 [testDiv, 0, comment, 5] followed by Range 30 [testDiv, 2, paras[4], 1]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 37 [testDiv, 0, comment, 5] followed by Range 30 [testDiv, 2, paras[4], 1]: second addRange() must result in rangeCount being 1 
-FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 30 [testDiv, 2, paras[4], 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startOffset of the Selection's last Range must match the added Range expected 2 but got 0
-FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 30 [testDiv, 2, paras[4], 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "QrstuvwxYzabcdefGhijklmn" but got object "Äb̈c̈d̈ëf̈g̈ḧ
-Ijklmnop
-QrstuvwxYzabcdefGhijklmn"
-FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 30 [testDiv, 2, paras[4], 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
-" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ
-</p><p id="b" s...
+FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 30 [testDiv, 2, paras[4], 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ
+</p><p id="b" s... but got Text node "Äb̈c̈d̈ëf̈g̈ḧ
+"
+FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 30 [testDiv, 2, paras[4], 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "QrstuvwxYzabcdefGhijklmn" but got object ""
+FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 30 [testDiv, 2, paras[4], 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 30 [testDiv, 2, paras[4], 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 37 [testDiv, 0, comment, 5] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 37 [testDiv, 0, comment, 5] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: first addRange() must result in rangeCount being 1 
@@ -1863,14 +1483,12 @@
 PASS Range 37 [testDiv, 0, comment, 5] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: modifying the Selection's last Range must modify the first added Range 
 PASS Range 37 [testDiv, 0, comment, 5] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 37 [testDiv, 0, comment, 5] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: second addRange() must result in rangeCount being 1 
-FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startOffset of the Selection's last Range must match the added Range expected 1 but got 0
+FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ
+</p><p id="b" s... but got Text node "Äb̈c̈d̈ëf̈g̈ḧ
+"
 FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Ijklmnop
-Qrstu" but got object "Äb̈c̈d̈ëf̈g̈ḧ
-Ijklmnop
-QrstuvwxYzabcdefGhijklmn"
-FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
-" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ
-</p><p id="b" s...
+Qrstu" but got object ""
+FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 37 [testDiv, 0, comment, 5] followed by Range 32 [document.documentElement, 1, document.body, 0]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 37 [testDiv, 0, comment, 5] followed by Range 32 [document.documentElement, 1, document.body, 0]: first addRange() must result in rangeCount being 1 
@@ -2021,14 +1639,10 @@
 PASS Range 37 [testDiv, 0, comment, 5] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: modifying the Selection's last Range must modify the first added Range 
 PASS Range 37 [testDiv, 0, comment, 5] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 37 [testDiv, 0, comment, 5] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: second addRange() must result in rangeCount being 1 
-FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Qrstuvwx" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ
-</p><p id="b" s...
-FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "uvwxYzabcdefGhijklmn" but got object "Äb̈c̈d̈ëf̈g̈ḧ
-Ijklmnop
-QrstuvwxYzabcdefGhijklmn"
-FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
-" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ
-</p><p id="b" s...
+FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Qrstuvwx" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ
+"
+FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "uvwxYzabcdefGhijklmn" but got object ""
+FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 37 [testDiv, 0, comment, 5] followed by Range 39 [paras[3], 1, comment, 8]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 37 [testDiv, 0, comment, 5] followed by Range 39 [paras[3], 1, comment, 8]: first addRange() must result in rangeCount being 1 
@@ -2038,14 +1652,10 @@
 PASS Range 37 [testDiv, 0, comment, 5] followed by Range 39 [paras[3], 1, comment, 8]: modifying the Selection's last Range must modify the first added Range 
 PASS Range 37 [testDiv, 0, comment, 5] followed by Range 39 [paras[3], 1, comment, 8]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 37 [testDiv, 0, comment, 5] followed by Range 39 [paras[3], 1, comment, 8]: second addRange() must result in rangeCount being 1 
-FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 39 [paras[3], 1, comment, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <p id="d" style="display:none">Yzabcdef</p> but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ
-</p><p id="b" s...
-FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 39 [paras[3], 1, comment, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Ghijklmn" but got object "Äb̈c̈d̈ëf̈g̈ḧ
-Ijklmnop
-QrstuvwxYzabcdefGhijklmn"
-FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 39 [paras[3], 1, comment, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
-" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ
-</p><p id="b" s...
+FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 39 [paras[3], 1, comment, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <p id="d" style="display:none">Yzabcdef</p> but got Text node "Äb̈c̈d̈ëf̈g̈ḧ
+"
+FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 39 [paras[3], 1, comment, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Ghijklmn" but got object ""
+FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 39 [paras[3], 1, comment, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 39 [paras[3], 1, comment, 8]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 37 [testDiv, 0, comment, 5] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 37 [testDiv, 0, comment, 5] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: first addRange() must result in rangeCount being 1 
@@ -2313,9 +1923,9 @@
 PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: modifying the Selection's last Range must modify the first added Range 
 PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: second addRange() must result in rangeCount being 1 
-FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startOffset of the Selection's last Range must match the added Range expected 2 but got 6
-FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "b̈c̈d̈" but got object ""
-FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
+PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: second addRange() must result in the selection's last range having the specified endpoints 
+FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "b̈c̈d̈" but got object "b̈c̈d̈"
+FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 2
 FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: first addRange() must result in rangeCount being 1 
@@ -2325,9 +1935,9 @@
 PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: modifying the Selection's last Range must modify the first added Range 
 PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: second addRange() must result in rangeCount being 1 
-FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startOffset of the Selection's last Range must match the added Range expected 2 but got 6
-FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "b̈c̈d̈e" but got object ""
-FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
+PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: second addRange() must result in the selection's last range having the specified endpoints 
+FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "b̈c̈d̈e" but got object "b̈c̈d̈e"
+FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 2
 FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: first addRange() must result in rangeCount being 1 
@@ -2653,12 +2263,13 @@
 PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 23 [paras[0], 0, paras[0], 1]: modifying the Selection's last Range must modify the first added Range 
 PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 23 [paras[0], 0, paras[0], 1]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 23 [paras[0], 0, paras[0], 1]: second addRange() must result in rangeCount being 1 
-FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 23 [paras[0], 0, paras[0], 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ
-</p> but got Text node "Äb̈c̈d̈ëf̈g̈ḧ
-"
+PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 23 [paras[0], 0, paras[0], 1]: second addRange() must result in the selection's last range having the specified endpoints 
 FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 23 [paras[0], 0, paras[0], 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ
-" but got object ""
-FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 23 [paras[0], 0, paras[0], 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
+" but got object "Äb̈c̈d̈ëf̈g̈ḧ
+"
+FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 23 [paras[0], 0, paras[0], 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
+" but got Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ
+</p>
 FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 23 [paras[0], 0, paras[0], 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: first addRange() must result in rangeCount being 1 
@@ -2694,10 +2305,13 @@
 PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: modifying the Selection's last Range must modify the first added Range 
 PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: second addRange() must result in rangeCount being 1 
-FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startOffset of the Selection's last Range must match the added Range expected 0 but got 6
+PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: second addRange() must result in the selection's last range having the specified endpoints 
 FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ
-" but got object ""
-FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
+" but got object "Äb̈c̈d̈ëf̈g̈ḧ
+"
+FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, endContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
+" but got Text node "Ijklmnop
+"
 FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: first addRange() must result in rangeCount being 1 
@@ -2707,10 +2321,13 @@
 PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: modifying the Selection's last Range must modify the first added Range 
 PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: second addRange() must result in rangeCount being 1 
-FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startOffset of the Selection's last Range must match the added Range expected 0 but got 6
+PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: second addRange() must result in the selection's last range having the specified endpoints 
 FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ
-Ijklmnop" but got object ""
-FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
+Ijklmnop" but got object "Äb̈c̈d̈ëf̈g̈ḧ
+Ijklmnop"
+FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, endContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
+" but got Text node "Ijklmnop
+"
 FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: first addRange() must result in rangeCount being 1 
@@ -2720,13 +2337,12 @@
 PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: modifying the Selection's last Range must modify the first added Range 
 PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: second addRange() must result in rangeCount being 1 
-FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: endContainer of the Selection's last Range must match the added Range expected Element node <p id="d" style="display:none">Yzabcdef</p> but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ
-</p><p id="b" s...
+PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: second addRange() must result in the selection's last range having the specified endpoints 
 FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "̈c̈d̈ëf̈g̈ḧ
 Ijklmnop
 QrstuvwxYzabcdef" but got object "̈c̈d̈ëf̈g̈ḧ
 Ijklmnop
-QrstuvwxYzabcdefGhijklmn"
+QrstuvwxYzabcdef"
 FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 3
 FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: first addRange() must not throw exceptions or modify the range it's given 
@@ -2737,11 +2353,11 @@
 PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: modifying the Selection's last Range must modify the first added Range 
 PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: second addRange() must result in rangeCount being 1 
-FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ
-</p> but got Text node "Äb̈c̈d̈ëf̈g̈ḧ
-"
-FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d" but got object ""
-FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
+PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: second addRange() must result in the selection's last range having the specified endpoints 
+FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d" but got object "Äb̈c̈d"
+FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
+" but got Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ
+</p>
 FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 30 [testDiv, 2, paras[4], 1]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 30 [testDiv, 2, paras[4], 1]: first addRange() must result in rangeCount being 1 
@@ -2751,12 +2367,11 @@
 PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 30 [testDiv, 2, paras[4], 1]: modifying the Selection's last Range must modify the first added Range 
 PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 30 [testDiv, 2, paras[4], 1]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 30 [testDiv, 2, paras[4], 1]: second addRange() must result in rangeCount being 1 
-FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 30 [testDiv, 2, paras[4], 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: endContainer of the Selection's last Range must match the added Range expected Element node <p id="e" style="display:none">Ghijklmn</p> but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ
-</p><p id="b" s...
-FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 30 [testDiv, 2, paras[4], 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "QrstuvwxYzabcdefGhijklmn" but got object "QrstuvwxYzabcdefGhijklmn"
-FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 30 [testDiv, 2, paras[4], 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
-" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ
-</p><p id="b" s...
+FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 30 [testDiv, 2, paras[4], 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ
+</p><p id="b" s... but got Text node "Äb̈c̈d̈ëf̈g̈ḧ
+"
+FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 30 [testDiv, 2, paras[4], 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "QrstuvwxYzabcdefGhijklmn" but got object ""
+FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 30 [testDiv, 2, paras[4], 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 30 [testDiv, 2, paras[4], 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: first addRange() must result in rangeCount being 1 
@@ -2766,14 +2381,12 @@
 PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: modifying the Selection's last Range must modify the first added Range 
 PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: second addRange() must result in rangeCount being 1 
-FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: endContainer of the Selection's last Range must match the added Range expected Text node "Qrstuvwx" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ
-</p><p id="b" s...
+FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ
+</p><p id="b" s... but got Text node "Äb̈c̈d̈ëf̈g̈ḧ
+"
 FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Ijklmnop
-Qrstu" but got object "Ijklmnop
-QrstuvwxYzabcdefGhijklmn"
-FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
-" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ
-</p><p id="b" s...
+Qrstu" but got object ""
+FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 32 [document.documentElement, 1, document.body, 0]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 32 [document.documentElement, 1, document.body, 0]: first addRange() must result in rangeCount being 1 
@@ -2924,11 +2537,10 @@
 PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: modifying the Selection's last Range must modify the first added Range 
 PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: second addRange() must result in rangeCount being 1 
-FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: endContainer of the Selection's last Range must match the added Range expected Comment node <!--Alphabet soup?--> but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ
-</p><p id="b" s...
-FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "uvwxYzabcdefGhijklmn" but got object "uvwxYzabcdefGhijklmn"
-FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
-" but got Text node "Qrstuvwx"
+FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Qrstuvwx" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ
+"
+FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "uvwxYzabcdefGhijklmn" but got object ""
+FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 39 [paras[3], 1, comment, 8]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 39 [paras[3], 1, comment, 8]: first addRange() must result in rangeCount being 1 
@@ -2938,10 +2550,10 @@
 PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 39 [paras[3], 1, comment, 8]: modifying the Selection's last Range must modify the first added Range 
 PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 39 [paras[3], 1, comment, 8]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 39 [paras[3], 1, comment, 8]: second addRange() must result in rangeCount being 1 
-FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 39 [paras[3], 1, comment, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <p id="d" style="display:none">Yzabcdef</p> but got Text node "Qrstuvwx"
-FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 39 [paras[3], 1, comment, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Ghijklmn" but got object "uvwxYzabcdefGhijklmn"
-FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 39 [paras[3], 1, comment, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
-" but got Text node "Qrstuvwx"
+FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 39 [paras[3], 1, comment, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <p id="d" style="display:none">Yzabcdef</p> but got Text node "Äb̈c̈d̈ëf̈g̈ḧ
+"
+FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 39 [paras[3], 1, comment, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Ghijklmn" but got object ""
+FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 39 [paras[3], 1, comment, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 39 [paras[3], 1, comment, 8]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: first addRange() must result in rangeCount being 1 
@@ -3209,9 +2821,9 @@
 PASS Range 39 [paras[3], 1, comment, 8] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: modifying the Selection's last Range must modify the first added Range 
 PASS Range 39 [paras[3], 1, comment, 8] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 39 [paras[3], 1, comment, 8] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: second addRange() must result in rangeCount being 1 
-FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startOffset of the Selection's last Range must match the added Range expected 2 but got 6
-FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "b̈c̈d̈" but got object ""
-FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
+PASS Range 39 [paras[3], 1, comment, 8] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: second addRange() must result in the selection's last range having the specified endpoints 
+FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "b̈c̈d̈" but got object "b̈c̈d̈"
+FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 2
 FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 39 [paras[3], 1, comment, 8] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 39 [paras[3], 1, comment, 8] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: first addRange() must result in rangeCount being 1 
@@ -3221,9 +2833,9 @@
 PASS Range 39 [paras[3], 1, comment, 8] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: modifying the Selection's last Range must modify the first added Range 
 PASS Range 39 [paras[3], 1, comment, 8] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 39 [paras[3], 1, comment, 8] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: second addRange() must result in rangeCount being 1 
-FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startOffset of the Selection's last Range must match the added Range expected 2 but got 6
-FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "b̈c̈d̈e" but got object ""
-FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
+PASS Range 39 [paras[3], 1, comment, 8] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: second addRange() must result in the selection's last range having the specified endpoints 
+FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "b̈c̈d̈e" but got object "b̈c̈d̈e"
+FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 2
 FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 39 [paras[3], 1, comment, 8] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 39 [paras[3], 1, comment, 8] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: first addRange() must result in rangeCount being 1 
@@ -3549,12 +3161,13 @@
 PASS Range 39 [paras[3], 1, comment, 8] followed by Range 23 [paras[0], 0, paras[0], 1]: modifying the Selection's last Range must modify the first added Range 
 PASS Range 39 [paras[3], 1, comment, 8] followed by Range 23 [paras[0], 0, paras[0], 1]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 39 [paras[3], 1, comment, 8] followed by Range 23 [paras[0], 0, paras[0], 1]: second addRange() must result in rangeCount being 1 
-FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 23 [paras[0], 0, paras[0], 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ
-</p> but got Text node "Äb̈c̈d̈ëf̈g̈ḧ
-"
+PASS Range 39 [paras[3], 1, comment, 8] followed by Range 23 [paras[0], 0, paras[0], 1]: second addRange() must result in the selection's last range having the specified endpoints 
 FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 23 [paras[0], 0, paras[0], 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ
-" but got object ""
-FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 23 [paras[0], 0, paras[0], 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
+" but got object "Äb̈c̈d̈ëf̈g̈ḧ
+"
+FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 23 [paras[0], 0, paras[0], 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
+" but got Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ
+</p>
 FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 23 [paras[0], 0, paras[0], 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 39 [paras[3], 1, comment, 8] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 39 [paras[3], 1, comment, 8] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: first addRange() must result in rangeCount being 1 
@@ -3590,10 +3203,13 @@
 PASS Range 39 [paras[3], 1, comment, 8] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: modifying the Selection's last Range must modify the first added Range 
 PASS Range 39 [paras[3], 1, comment, 8] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 39 [paras[3], 1, comment, 8] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: second addRange() must result in rangeCount being 1 
-FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startOffset of the Selection's last Range must match the added Range expected 0 but got 6
+PASS Range 39 [paras[3], 1, comment, 8] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: second addRange() must result in the selection's last range having the specified endpoints 
 FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ
-" but got object ""
-FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
+" but got object "Äb̈c̈d̈ëf̈g̈ḧ
+"
+FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, endContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
+" but got Text node "Ijklmnop
+"
 FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 39 [paras[3], 1, comment, 8] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 39 [paras[3], 1, comment, 8] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: first addRange() must result in rangeCount being 1 
@@ -3603,10 +3219,13 @@
 PASS Range 39 [paras[3], 1, comment, 8] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: modifying the Selection's last Range must modify the first added Range 
 PASS Range 39 [paras[3], 1, comment, 8] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 39 [paras[3], 1, comment, 8] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: second addRange() must result in rangeCount being 1 
-FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startOffset of the Selection's last Range must match the added Range expected 0 but got 6
+PASS Range 39 [paras[3], 1, comment, 8] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: second addRange() must result in the selection's last range having the specified endpoints 
 FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ
-Ijklmnop" but got object ""
-FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
+Ijklmnop" but got object "Äb̈c̈d̈ëf̈g̈ḧ
+Ijklmnop"
+FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, endContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
+" but got Text node "Ijklmnop
+"
 FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 39 [paras[3], 1, comment, 8] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 39 [paras[3], 1, comment, 8] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: first addRange() must result in rangeCount being 1 
@@ -3616,13 +3235,12 @@
 PASS Range 39 [paras[3], 1, comment, 8] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: modifying the Selection's last Range must modify the first added Range 
 PASS Range 39 [paras[3], 1, comment, 8] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 39 [paras[3], 1, comment, 8] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: second addRange() must result in rangeCount being 1 
-FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: endContainer of the Selection's last Range must match the added Range expected Element node <p id="d" style="display:none">Yzabcdef</p> but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ
-</p><p id="b" s...
+PASS Range 39 [paras[3], 1, comment, 8] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: second addRange() must result in the selection's last range having the specified endpoints 
 FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "̈c̈d̈ëf̈g̈ḧ
 Ijklmnop
 QrstuvwxYzabcdef" but got object "̈c̈d̈ëf̈g̈ḧ
 Ijklmnop
-QrstuvwxYzabcdefGhijklmn"
+QrstuvwxYzabcdef"
 FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 3
 FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 39 [paras[3], 1, comment, 8] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: first addRange() must not throw exceptions or modify the range it's given 
@@ -3633,11 +3251,11 @@
 PASS Range 39 [paras[3], 1, comment, 8] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: modifying the Selection's last Range must modify the first added Range 
 PASS Range 39 [paras[3], 1, comment, 8] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 39 [paras[3], 1, comment, 8] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: second addRange() must result in rangeCount being 1 
-FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ
-</p> but got Text node "Äb̈c̈d̈ëf̈g̈ḧ
-"
-FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d" but got object ""
-FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
+PASS Range 39 [paras[3], 1, comment, 8] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: second addRange() must result in the selection's last range having the specified endpoints 
+FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d" but got object "Äb̈c̈d"
+FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
+" but got Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ
+</p>
 FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 39 [paras[3], 1, comment, 8] followed by Range 30 [testDiv, 2, paras[4], 1]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 39 [paras[3], 1, comment, 8] followed by Range 30 [testDiv, 2, paras[4], 1]: first addRange() must result in rangeCount being 1 
@@ -3647,12 +3265,11 @@
 PASS Range 39 [paras[3], 1, comment, 8] followed by Range 30 [testDiv, 2, paras[4], 1]: modifying the Selection's last Range must modify the first added Range 
 PASS Range 39 [paras[3], 1, comment, 8] followed by Range 30 [testDiv, 2, paras[4], 1]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 39 [paras[3], 1, comment, 8] followed by Range 30 [testDiv, 2, paras[4], 1]: second addRange() must result in rangeCount being 1 
-FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 30 [testDiv, 2, paras[4], 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: endContainer of the Selection's last Range must match the added Range expected Element node <p id="e" style="display:none">Ghijklmn</p> but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ
-</p><p id="b" s...
-FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 30 [testDiv, 2, paras[4], 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "QrstuvwxYzabcdefGhijklmn" but got object "QrstuvwxYzabcdefGhijklmn"
-FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 30 [testDiv, 2, paras[4], 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
-" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ
-</p><p id="b" s...
+FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 30 [testDiv, 2, paras[4], 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ
+</p><p id="b" s... but got Text node "Äb̈c̈d̈ëf̈g̈ḧ
+"
+FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 30 [testDiv, 2, paras[4], 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "QrstuvwxYzabcdefGhijklmn" but got object ""
+FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 30 [testDiv, 2, paras[4], 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 30 [testDiv, 2, paras[4], 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 39 [paras[3], 1, comment, 8] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 39 [paras[3], 1, comment, 8] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: first addRange() must result in rangeCount being 1 
@@ -3818,11 +3435,10 @@
 PASS Range 39 [paras[3], 1, comment, 8] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: modifying the Selection's last Range must modify the first added Range 
 PASS Range 39 [paras[3], 1, comment, 8] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 39 [paras[3], 1, comment, 8] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: second addRange() must result in rangeCount being 1 
-FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: endContainer of the Selection's last Range must match the added Range expected Comment node <!--Alphabet soup?--> but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ
-</p><p id="b" s...
-FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "uvwxYzabcdefGhijklmn" but got object "uvwxYzabcdefGhijklmn"
-FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
-" but got Text node "Qrstuvwx"
+FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Qrstuvwx" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ
+"
+FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "uvwxYzabcdefGhijklmn" but got object ""
+FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 39 [paras[3], 1, comment, 8] followed by Range 39 [paras[3], 1, comment, 8]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 39 [paras[3], 1, comment, 8] followed by Range 39 [paras[3], 1, comment, 8]: first addRange() must result in rangeCount being 1 
@@ -3832,11 +3448,10 @@
 PASS Range 39 [paras[3], 1, comment, 8] followed by Range 39 [paras[3], 1, comment, 8]: modifying the Selection's last Range must modify the first added Range 
 PASS Range 39 [paras[3], 1, comment, 8] followed by Range 39 [paras[3], 1, comment, 8]: second addRange() must not throw exceptions or modify the range it's given 
 PASS Range 39 [paras[3], 1, comment, 8] followed by Range 39 [paras[3], 1, comment, 8]: second addRange() must result in rangeCount being 1 
-FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 39 [paras[3], 1, comment, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: endContainer of the Selection's last Range must match the added Range expected Comment node <!--Alphabet soup?--> but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ
-</p><p id="b" s...
-FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 39 [paras[3], 1, comment, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Ghijklmn" but got object "Ghijklmn"
-FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 39 [paras[3], 1, comment, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ
-" but got Element node <p id="d" style="display:none">Yzabcdef</p>
+FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 39 [paras[3], 1, comment, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <p id="d" style="display:none">Yzabcdef</p> but got Text node "Äb̈c̈d̈ëf̈g̈ḧ
+"
+FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 39 [paras[3], 1, comment, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Ghijklmn" but got object ""
+FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 39 [paras[3], 1, comment, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 39 [paras[3], 1, comment, 8]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6
 PASS Range 39 [paras[3], 1, comment, 8] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: first addRange() must not throw exceptions or modify the range it's given 
 PASS Range 39 [paras[3], 1, comment, 8] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: first addRange() must result in rangeCount being 1 
diff --git a/third_party/WebKit/LayoutTests/fast/dom/defaultView-on-detached-document-expected.txt b/third_party/WebKit/LayoutTests/fast/dom/defaultView-on-detached-document-expected.txt
index 1f6252f..6e91db4a 100644
--- a/third_party/WebKit/LayoutTests/fast/dom/defaultView-on-detached-document-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/dom/defaultView-on-detached-document-expected.txt
@@ -4,7 +4,7 @@
 
 
 PASS testFrameUnloaded is true
-PASS cachedDocument.defaultView is null
+PASS cachedDocument.defaultView is undefined.
 PASS successfullyParsed is true
 
 TEST COMPLETE
diff --git a/third_party/WebKit/LayoutTests/fast/dom/defaultView-on-detached-document.html b/third_party/WebKit/LayoutTests/fast/dom/defaultView-on-detached-document.html
index 0a14301..b5095d2d 100644
--- a/third_party/WebKit/LayoutTests/fast/dom/defaultView-on-detached-document.html
+++ b/third_party/WebKit/LayoutTests/fast/dom/defaultView-on-detached-document.html
@@ -40,7 +40,7 @@
 function finishTest()
 {
     shouldBeTrue("testFrameUnloaded");
-    shouldBeNull("cachedDocument.defaultView");
+    shouldBeUndefined("cachedDocument.defaultView");
     finishJSTest();
 }
 </script>
diff --git a/third_party/WebKit/LayoutTests/fast/text/insert-text-crash-expected.txt b/third_party/WebKit/LayoutTests/fast/text/insert-text-crash-expected.txt
index 8df2d0b1..f2bb124 100644
--- a/third_party/WebKit/LayoutTests/fast/text/insert-text-crash-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/text/insert-text-crash-expected.txt
@@ -1,5 +1,4 @@
 CONSOLE ERROR: line 24: Uncaught TypeError: oElement.insertAdjacentHTML is not a function
 CONSOLE ERROR: line 60: Uncaught TypeError: Cannot read property 'parentNode' of null
 a:ce#@::l
-
 Test passes if it does not CRASH.
diff --git a/third_party/WebKit/LayoutTests/images/element-gcd-while-generating-alt-content-expected.txt b/third_party/WebKit/LayoutTests/images/element-gcd-while-generating-alt-content-expected.txt
index 21b6d46..e004062 100644
--- a/third_party/WebKit/LayoutTests/images/element-gcd-while-generating-alt-content-expected.txt
+++ b/third_party/WebKit/LayoutTests/images/element-gcd-while-generating-alt-content-expected.txt
@@ -2,7 +2,7 @@
  
    
 
-A	A
+A	
  
    
 
diff --git a/third_party/WebKit/LayoutTests/platform/linux/editing/selection/addRange-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/editing/selection/addRange-expected.txt
index b4b35312..ba63f0c 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/editing/selection/addRange-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/linux/editing/selection/addRange-expected.txt
@@ -1,5 +1,5 @@
-CONSOLE ERROR: line 25: Discontiguous selection is not supported.
-CONSOLE ERROR: line 30: Discontiguous selection is not supported.
+CONSOLE ERROR: line 28: Discontiguous selection is not supported.
+CONSOLE ERROR: line 34: Discontiguous selection is not supported.
 layer at (0,0) size 800x600
   LayoutView at (0,0) size 800x600
 layer at (0,0) size 800x600
diff --git a/third_party/WebKit/LayoutTests/platform/mac/editing/selection/addRange-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/editing/selection/addRange-expected.txt
index fb6e2de..198bd8e3 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/editing/selection/addRange-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/mac/editing/selection/addRange-expected.txt
@@ -1,5 +1,5 @@
-CONSOLE ERROR: line 25: Discontiguous selection is not supported.
-CONSOLE ERROR: line 30: Discontiguous selection is not supported.
+CONSOLE ERROR: line 28: Discontiguous selection is not supported.
+CONSOLE ERROR: line 34: Discontiguous selection is not supported.
 layer at (0,0) size 800x600
   LayoutView at (0,0) size 800x600
 layer at (0,0) size 800x600
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/spellmarkers/document-markers-expected.png b/third_party/WebKit/LayoutTests/platform/mac/paint/spellmarkers/document-markers-expected.png
index 0f500d6..881865c 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/paint/spellmarkers/document-markers-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/mac/paint/spellmarkers/document-markers-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/spellmarkers/document-markers-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/spellmarkers/document-markers-expected.txt
index 124104d..c2d3ebf 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/paint/spellmarkers/document-markers-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/mac/paint/spellmarkers/document-markers-expected.txt
@@ -6,4 +6,5 @@
       LayoutBlockFlow {DIV} at (0,0) size 784x18
         LayoutText {#text} at (0,0) size 180x18
           text run at (0,0) width 180: "wellcome should be marked"
-caret: position 0 of child 0 {#text} of child 1 {DIV} of body
+selection start: position 0 of child 0 {#text} of child 1 {DIV} of body
+selection end:   position 25 of child 0 {#text} of child 1 {DIV} of body
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/spellmarkers/document-markers-zoom-125-expected.png b/third_party/WebKit/LayoutTests/platform/mac/paint/spellmarkers/document-markers-zoom-125-expected.png
index ed440400..d248f5a 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/paint/spellmarkers/document-markers-zoom-125-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/mac/paint/spellmarkers/document-markers-zoom-125-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/spellmarkers/document-markers-zoom-125-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/spellmarkers/document-markers-zoom-125-expected.txt
index 8024668..4df17bb 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/paint/spellmarkers/document-markers-zoom-125-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/mac/paint/spellmarkers/document-markers-zoom-125-expected.txt
@@ -6,4 +6,5 @@
       LayoutBlockFlow {DIV} at (0,0) size 784x23
         LayoutText {#text} at (0,0) size 225x23
           text run at (0,0) width 225: "wellcome should be marked"
-caret: position 0 of child 0 {#text} of child 1 {DIV} of body
+selection start: position 0 of child 0 {#text} of child 1 {DIV} of body
+selection end:   position 25 of child 0 {#text} of child 1 {DIV} of body
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/spellmarkers/document-markers-zoom-150-expected.png b/third_party/WebKit/LayoutTests/platform/mac/paint/spellmarkers/document-markers-zoom-150-expected.png
index c545e327..ada195f 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/paint/spellmarkers/document-markers-zoom-150-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/mac/paint/spellmarkers/document-markers-zoom-150-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/spellmarkers/document-markers-zoom-150-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/spellmarkers/document-markers-zoom-150-expected.txt
index e881a6f..30daec7 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/paint/spellmarkers/document-markers-zoom-150-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/mac/paint/spellmarkers/document-markers-zoom-150-expected.txt
@@ -6,4 +6,5 @@
       LayoutBlockFlow {DIV} at (0,0) size 784x28
         LayoutText {#text} at (0,0) size 270x28
           text run at (0,0) width 270: "wellcome should be marked"
-caret: position 0 of child 0 {#text} of child 1 {DIV} of body
+selection start: position 0 of child 0 {#text} of child 1 {DIV} of body
+selection end:   position 25 of child 0 {#text} of child 1 {DIV} of body
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/spellmarkers/document-markers-zoom-175-expected.png b/third_party/WebKit/LayoutTests/platform/mac/paint/spellmarkers/document-markers-zoom-175-expected.png
index 4562f674..eae0784 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/paint/spellmarkers/document-markers-zoom-175-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/mac/paint/spellmarkers/document-markers-zoom-175-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/spellmarkers/document-markers-zoom-175-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/spellmarkers/document-markers-zoom-175-expected.txt
index 7db867d..4eb18544 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/paint/spellmarkers/document-markers-zoom-175-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/mac/paint/spellmarkers/document-markers-zoom-175-expected.txt
@@ -6,4 +6,5 @@
       LayoutBlockFlow {DIV} at (0,0) size 784x32
         LayoutText {#text} at (0,0) size 315x32
           text run at (0,0) width 315: "wellcome should be marked"
-caret: position 0 of child 0 {#text} of child 1 {DIV} of body
+selection start: position 0 of child 0 {#text} of child 1 {DIV} of body
+selection end:   position 25 of child 0 {#text} of child 1 {DIV} of body
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/spellmarkers/document-markers-zoom-200-expected.png b/third_party/WebKit/LayoutTests/platform/mac/paint/spellmarkers/document-markers-zoom-200-expected.png
index 08e28e686..788e923 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/paint/spellmarkers/document-markers-zoom-200-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/mac/paint/spellmarkers/document-markers-zoom-200-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/spellmarkers/document-markers-zoom-200-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/spellmarkers/document-markers-zoom-200-expected.txt
index 9c6028283..7447344 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/paint/spellmarkers/document-markers-zoom-200-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/mac/paint/spellmarkers/document-markers-zoom-200-expected.txt
@@ -6,4 +6,5 @@
       LayoutBlockFlow {DIV} at (0,0) size 784x37
         LayoutText {#text} at (0,0) size 360x37
           text run at (0,0) width 360: "wellcome should be marked"
-caret: position 0 of child 0 {#text} of child 1 {DIV} of body
+selection start: position 0 of child 0 {#text} of child 1 {DIV} of body
+selection end:   position 25 of child 0 {#text} of child 1 {DIV} of body
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/spellmarkers/document-markers-zoom-250-expected.png b/third_party/WebKit/LayoutTests/platform/mac/paint/spellmarkers/document-markers-zoom-250-expected.png
index 483a9ace..6f6d99ed 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/paint/spellmarkers/document-markers-zoom-250-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/mac/paint/spellmarkers/document-markers-zoom-250-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/spellmarkers/document-markers-zoom-250-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/spellmarkers/document-markers-zoom-250-expected.txt
index df14c014..20059bc2 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/paint/spellmarkers/document-markers-zoom-250-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/mac/paint/spellmarkers/document-markers-zoom-250-expected.txt
@@ -6,4 +6,5 @@
       LayoutBlockFlow {DIV} at (0,0) size 784x46
         LayoutText {#text} at (0,0) size 450x46
           text run at (0,0) width 450: "wellcome should be marked"
-caret: position 0 of child 0 {#text} of child 1 {DIV} of body
+selection start: position 0 of child 0 {#text} of child 1 {DIV} of body
+selection end:   position 25 of child 0 {#text} of child 1 {DIV} of body
diff --git a/third_party/WebKit/LayoutTests/platform/win/editing/selection/addRange-expected.txt b/third_party/WebKit/LayoutTests/platform/win/editing/selection/addRange-expected.txt
index 1886bc80..38d78eb 100644
--- a/third_party/WebKit/LayoutTests/platform/win/editing/selection/addRange-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/win/editing/selection/addRange-expected.txt
@@ -1,5 +1,5 @@
-CONSOLE ERROR: line 25: Discontiguous selection is not supported.
-CONSOLE ERROR: line 30: Discontiguous selection is not supported.
+CONSOLE ERROR: line 28: Discontiguous selection is not supported.
+CONSOLE ERROR: line 34: Discontiguous selection is not supported.
 layer at (0,0) size 800x600
   LayoutView at (0,0) size 800x600
 layer at (0,0) size 800x600
diff --git a/third_party/WebKit/Source/bindings/bindings.gni b/third_party/WebKit/Source/bindings/bindings.gni
index 470cac7..a4ba8791 100644
--- a/third_party/WebKit/Source/bindings/bindings.gni
+++ b/third_party/WebKit/Source/bindings/bindings.gni
@@ -130,6 +130,7 @@
                     "core/v8/TraceWrapperMember.h",
                     "core/v8/TraceWrapperV8Reference.h",
                     "core/v8/Transferables.h",
+                    "core/v8/ToV8.cpp",
                     "core/v8/ToV8.h",
                     "core/v8/V8AbstractEventListener.cpp",
                     "core/v8/V8AbstractEventListener.h",
diff --git a/third_party/WebKit/Source/bindings/core/v8/DOMDataStore.h b/third_party/WebKit/Source/bindings/core/v8/DOMDataStore.h
index 9969a1e..7a06239 100644
--- a/third_party/WebKit/Source/bindings/core/v8/DOMDataStore.h
+++ b/third_party/WebKit/Source/bindings/core/v8/DOMDataStore.h
@@ -156,12 +156,6 @@
     m_wrapperMap->markWrapper(scriptWrappable);
   }
 
-  // Dissociates a wrapper, if any, from |scriptWrappable|.
-  void unsetWrapperIfAny(ScriptWrappable* scriptWrappable) {
-    DCHECK(!m_isMainWorld);
-    m_wrapperMap->removeIfAny(scriptWrappable);
-  }
-
   bool setReturnValueFrom(v8::ReturnValue<v8::Value> returnValue,
                           ScriptWrappable* object) {
     if (m_isMainWorld)
@@ -219,16 +213,18 @@
 template <>
 inline void DOMWrapperMap<ScriptWrappable>::PersistentValueMapTraits::Dispose(
     v8::Isolate*,
-    v8::Global<v8::Object>,
+    v8::Global<v8::Object> value,
     ScriptWrappable*) {
-  WrapperTypeInfo::wrapperDestroyed();
+  toWrapperTypeInfo(value)->wrapperDestroyed();
 }
 
 template <>
 inline void
 DOMWrapperMap<ScriptWrappable>::PersistentValueMapTraits::DisposeWeak(
-    const v8::WeakCallbackInfo<WeakCallbackDataType>&) {
-  WrapperTypeInfo::wrapperDestroyed();
+    const v8::WeakCallbackInfo<WeakCallbackDataType>& data) {
+  auto wrapperTypeInfo = reinterpret_cast<WrapperTypeInfo*>(
+      data.GetInternalField(v8DOMWrapperTypeIndex));
+  wrapperTypeInfo->wrapperDestroyed();
 }
 
 }  // namespace blink
diff --git a/third_party/WebKit/Source/bindings/core/v8/DOMWrapperMap.h b/third_party/WebKit/Source/bindings/core/v8/DOMWrapperMap.h
index 6bf1f758..3cbbca9e 100644
--- a/third_party/WebKit/Source/bindings/core/v8/DOMWrapperMap.h
+++ b/third_party/WebKit/Source/bindings/core/v8/DOMWrapperMap.h
@@ -79,12 +79,13 @@
     return true;
   }
 
-  void removeIfAny(KeyType* key) {
+  void clear() { m_map.Clear(); }
+
+  void removeAndDispose(KeyType* key) {
+    ASSERT(containsKey(key));
     m_map.Remove(key);
   }
 
-  void clear() { m_map.Clear(); }
-
   void markWrapper(KeyType* object) {
     m_map.RegisterExternallyReferencedObject(object);
   }
diff --git a/third_party/WebKit/Source/bindings/core/v8/DOMWrapperWorld.cpp b/third_party/WebKit/Source/bindings/core/v8/DOMWrapperWorld.cpp
index e6d7abb8..10b5dbee 100644
--- a/third_party/WebKit/Source/bindings/core/v8/DOMWrapperWorld.cpp
+++ b/third_party/WebKit/Source/bindings/core/v8/DOMWrapperWorld.cpp
@@ -30,13 +30,19 @@
 
 #include "bindings/core/v8/DOMWrapperWorld.h"
 
-#include <memory>
-
 #include "bindings/core/v8/DOMDataStore.h"
-#include "bindings/core/v8/ScriptFunction.h"
+#include "bindings/core/v8/ScriptController.h"
+#include "bindings/core/v8/V8Binding.h"
+#include "bindings/core/v8/V8DOMActivityLogger.h"
+#include "bindings/core/v8/V8DOMWrapper.h"
+#include "bindings/core/v8/V8Window.h"
+#include "bindings/core/v8/WindowProxy.h"
+#include "bindings/core/v8/WrapperTypeInfo.h"
+#include "core/dom/ExecutionContext.h"
 #include "wtf/HashTraits.h"
 #include "wtf/PtrUtil.h"
 #include "wtf/StdLibExtras.h"
+#include <memory>
 
 namespace blink {
 
@@ -309,16 +315,4 @@
   holderBase->world()->unregisterDOMObjectHolder(holderBase);
 }
 
-void DOMWrapperWorld::dissociateDOMWindowWrappersInAllWorlds(
-    ScriptWrappable* scriptWrappable) {
-  DCHECK(scriptWrappable);
-  DCHECK(isMainThread());
-
-  scriptWrappable->unsetWrapperIfAny();
-
-  for (auto& world : isolatedWorldMap().values()) {
-    world->domDataStore().unsetWrapperIfAny(scriptWrappable);
-  }
-}
-
 }  // namespace blink
diff --git a/third_party/WebKit/Source/bindings/core/v8/DOMWrapperWorld.h b/third_party/WebKit/Source/bindings/core/v8/DOMWrapperWorld.h
index 2f6db850..fdbaa43 100644
--- a/third_party/WebKit/Source/bindings/core/v8/DOMWrapperWorld.h
+++ b/third_party/WebKit/Source/bindings/core/v8/DOMWrapperWorld.h
@@ -43,7 +43,6 @@
 namespace blink {
 
 class DOMDataStore;
-class DOMObjectHolderBase;
 
 enum WorldIdConstants {
   MainWorldId = 0,
@@ -55,6 +54,8 @@
   TestingWorldId,
 };
 
+class DOMObjectHolderBase;
+
 // This class represent a collection of DOM wrappers for a specific world.
 class CORE_EXPORT DOMWrapperWorld : public RefCounted<DOMWrapperWorld> {
  public:
@@ -113,6 +114,7 @@
   int worldId() const { return m_worldId; }
   DOMDataStore& domDataStore() const { return *m_domDataStore; }
 
+ public:
   template <typename T>
   void registerDOMObjectHolder(v8::Isolate*, T*, v8::Local<v8::Value>);
 
@@ -124,29 +126,6 @@
   void registerDOMObjectHolderInternal(std::unique_ptr<DOMObjectHolderBase>);
   void unregisterDOMObjectHolder(DOMObjectHolderBase*);
 
-  // Dissociates all wrappers in all worlds associated with |scriptWrappable|.
-  //
-  // Do not use this function except for DOMWindow.  Only DOMWindow needs to
-  // dissociate wrappers from the ScriptWrappable because of the following two
-  // reasons.
-  //
-  // Reason 1) Case of the main world
-  // A DOMWindow may be collected by Blink GC *before* V8 GC collects the
-  // wrapper because the wrapper object associated with a DOMWindow is a global
-  // proxy object, which remains after navigations.  We don't want V8 GC
-  // to reset the weak persistent handle within the DOMWindow *after* Blink GC
-  // collects the DOMWindow because it's use-after-free.  Thus, we need to
-  // dissociate the wrapper in advance.
-  //
-  // Reason 2) Case of isolated worlds
-  // As same, a DOMWindow may be collected before the wrapper gets collected.
-  // A DOMWrapperMap supports mapping from ScriptWrappable* to v8::Global<T>,
-  // and we don't want to leave an entry of an already-dead DOMWindow* to the
-  // persistent handle for the global proxy object, especially considering that
-  // the address to the already-dead DOMWindow* may be re-used.
-  friend class DOMWindow;
-  static void dissociateDOMWindowWrappersInAllWorlds(ScriptWrappable*);
-
   static unsigned isolatedWorldCount;
 
   const int m_worldId;
diff --git a/third_party/WebKit/Source/bindings/core/v8/ScriptWrappable.h b/third_party/WebKit/Source/bindings/core/v8/ScriptWrappable.h
index 86f7ae5..cc970e7 100644
--- a/third_party/WebKit/Source/bindings/core/v8/ScriptWrappable.h
+++ b/third_party/WebKit/Source/bindings/core/v8/ScriptWrappable.h
@@ -128,14 +128,6 @@
     return true;
   }
 
-  // Dissociates the wrapper, if any, from this instance.
-  void unsetWrapperIfAny() {
-    if (containsWrapper()) {
-      m_mainWorldWrapper.Reset();
-      WrapperTypeInfo::wrapperDestroyed();
-    }
-  }
-
   bool isEqualTo(const v8::Local<v8::Object>& other) const {
     return m_mainWorldWrapper == other;
   }
diff --git a/third_party/WebKit/Source/bindings/core/v8/ToV8.cpp b/third_party/WebKit/Source/bindings/core/v8/ToV8.cpp
new file mode 100644
index 0000000..4288949
--- /dev/null
+++ b/third_party/WebKit/Source/bindings/core/v8/ToV8.cpp
@@ -0,0 +1,43 @@
+// Copyright 2015 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "bindings/core/v8/ToV8.h"
+
+#include "bindings/core/v8/WindowProxy.h"
+#include "core/events/EventTarget.h"
+#include "core/frame/DOMWindow.h"
+#include "core/frame/Frame.h"
+
+namespace blink {
+
+v8::Local<v8::Value> ToV8(DOMWindow* window,
+                          v8::Local<v8::Object> creationContext,
+                          v8::Isolate* isolate) {
+  // Notice that we explicitly ignore creationContext because the DOMWindow
+  // has its own creationContext.
+
+  if (UNLIKELY(!window))
+    return v8::Null(isolate);
+  // Initializes environment of a frame, and return the global object
+  // of the frame.
+  Frame* frame = window->frame();
+  if (!frame)
+    return v8Undefined();
+
+  return frame->windowProxy(DOMWrapperWorld::current(isolate))
+      ->globalIfNotDetached();
+}
+
+v8::Local<v8::Value> ToV8(EventTarget* impl,
+                          v8::Local<v8::Object> creationContext,
+                          v8::Isolate* isolate) {
+  if (UNLIKELY(!impl))
+    return v8::Null(isolate);
+
+  if (impl->interfaceName() == EventTargetNames::DOMWindow)
+    return ToV8(static_cast<DOMWindow*>(impl), creationContext, isolate);
+  return ToV8(static_cast<ScriptWrappable*>(impl), creationContext, isolate);
+}
+
+}  // namespace blink
diff --git a/third_party/WebKit/Source/bindings/core/v8/ToV8.h b/third_party/WebKit/Source/bindings/core/v8/ToV8.h
index c3530fe..3e1503a6 100644
--- a/third_party/WebKit/Source/bindings/core/v8/ToV8.h
+++ b/third_party/WebKit/Source/bindings/core/v8/ToV8.h
@@ -22,7 +22,9 @@
 
 namespace blink {
 
+class DOMWindow;
 class Dictionary;
+class EventTarget;
 
 // ScriptWrappable
 
@@ -54,6 +56,15 @@
   return wrapper;
 }
 
+// Special versions for DOMWindow and EventTarget
+
+CORE_EXPORT v8::Local<v8::Value> ToV8(DOMWindow*,
+                                      v8::Local<v8::Object> creationContext,
+                                      v8::Isolate*);
+CORE_EXPORT v8::Local<v8::Value> ToV8(EventTarget*,
+                                      v8::Local<v8::Object> creationContext,
+                                      v8::Isolate*);
+
 // Primitives
 
 inline v8::Local<v8::Value> ToV8(const String& value,
diff --git a/third_party/WebKit/Source/bindings/core/v8/V8Binding.h b/third_party/WebKit/Source/bindings/core/v8/V8Binding.h
index 8df4565..2a52935 100644
--- a/third_party/WebKit/Source/bindings/core/v8/V8Binding.h
+++ b/third_party/WebKit/Source/bindings/core/v8/V8Binding.h
@@ -202,6 +202,22 @@
   v8SetReturnValue(callbackInfo, wrapper);
 }
 
+// Special versions for DOMWindow and EventTarget
+
+template <typename CallbackInfo>
+inline void v8SetReturnValue(const CallbackInfo& callbackInfo,
+                             DOMWindow* impl) {
+  v8SetReturnValue(callbackInfo, ToV8(impl, callbackInfo.Holder(),
+                                      callbackInfo.GetIsolate()));
+}
+
+template <typename CallbackInfo>
+inline void v8SetReturnValue(const CallbackInfo& callbackInfo,
+                             EventTarget* impl) {
+  v8SetReturnValue(callbackInfo, ToV8(impl, callbackInfo.Holder(),
+                                      callbackInfo.GetIsolate()));
+}
+
 template <typename CallbackInfo, typename T>
 inline void v8SetReturnValue(const CallbackInfo& callbackInfo,
                              PassRefPtr<T> impl) {
@@ -224,6 +240,46 @@
   v8SetReturnValue(callbackInfo, wrapper);
 }
 
+template <typename CallbackInfo>
+inline void v8SetReturnValueForMainWorld(const CallbackInfo& callbackInfo,
+                                         Node* impl) {
+  // Since EventTarget has a special version of ToV8 and V8EventTarget.h
+  // defines its own v8SetReturnValue family, which are slow, we need to
+  // override them with optimized versions for Node and its subclasses.
+  // Without this overload, v8SetReturnValueForMainWorld for Node would be
+  // very slow.
+  //
+  // class hierarchy:
+  //     ScriptWrappable <-- EventTarget <--+-- Node <-- ...
+  //                                        +-- Window
+  // overloads:
+  //     v8SetReturnValueForMainWorld(ScriptWrappable*)
+  //         Optimized and very fast.
+  //     v8SetReturnValueForMainWorld(EventTarget*)
+  //         Uses custom toV8 function and slow.
+  //     v8SetReturnValueForMainWorld(Node*)
+  //         Optimized and very fast.
+  //     v8SetReturnValueForMainWorld(Window*)
+  //         Uses custom toV8 function and slow.
+  v8SetReturnValueForMainWorld(callbackInfo, ScriptWrappable::fromNode(impl));
+}
+
+// Special versions for DOMWindow and EventTarget
+
+template <typename CallbackInfo>
+inline void v8SetReturnValueForMainWorld(const CallbackInfo& callbackInfo,
+                                         DOMWindow* impl) {
+  v8SetReturnValue(callbackInfo, ToV8(impl, callbackInfo.Holder(),
+                                      callbackInfo.GetIsolate()));
+}
+
+template <typename CallbackInfo>
+inline void v8SetReturnValueForMainWorld(const CallbackInfo& callbackInfo,
+                                         EventTarget* impl) {
+  v8SetReturnValue(callbackInfo, ToV8(impl, callbackInfo.Holder(),
+                                      callbackInfo.GetIsolate()));
+}
+
 template <typename CallbackInfo, typename T>
 inline void v8SetReturnValueForMainWorld(const CallbackInfo& callbackInfo,
                                          PassRefPtr<T> impl) {
@@ -262,6 +318,24 @@
   v8SetReturnValue(callbackInfo, wrapper);
 }
 
+// Special versions for DOMWindow and EventTarget
+
+template <typename CallbackInfo>
+inline void v8SetReturnValueFast(const CallbackInfo& callbackInfo,
+                                 DOMWindow* impl,
+                                 const ScriptWrappable*) {
+  v8SetReturnValue(callbackInfo, ToV8(impl, callbackInfo.Holder(),
+                                      callbackInfo.GetIsolate()));
+}
+
+template <typename CallbackInfo>
+inline void v8SetReturnValueFast(const CallbackInfo& callbackInfo,
+                                 EventTarget* impl,
+                                 const ScriptWrappable*) {
+  v8SetReturnValue(callbackInfo, ToV8(impl, callbackInfo.Holder(),
+                                      callbackInfo.GetIsolate()));
+}
+
 template <typename CallbackInfo, typename T, typename Wrappable>
 inline void v8SetReturnValueFast(const CallbackInfo& callbackInfo,
                                  PassRefPtr<T> impl,
diff --git a/third_party/WebKit/Source/bindings/core/v8/V8DOMWrapper.h b/third_party/WebKit/Source/bindings/core/v8/V8DOMWrapper.h
index 84b0c6d9..2d4af91 100644
--- a/third_party/WebKit/Source/bindings/core/v8/V8DOMWrapper.h
+++ b/third_party/WebKit/Source/bindings/core/v8/V8DOMWrapper.h
@@ -117,7 +117,7 @@
     const WrapperTypeInfo* wrapperTypeInfo,
     v8::Local<v8::Object> wrapper) {
   if (DOMDataStore::setWrapper(isolate, impl, wrapperTypeInfo, wrapper)) {
-    WrapperTypeInfo::wrapperCreated();
+    wrapperTypeInfo->wrapperCreated();
     setNativeInfo(isolate, wrapper, wrapperTypeInfo, impl);
     ASSERT(hasInternalFieldsSet(wrapper));
   }
@@ -131,7 +131,7 @@
     const WrapperTypeInfo* wrapperTypeInfo,
     v8::Local<v8::Object> wrapper) {
   if (DOMDataStore::setWrapper(isolate, node, wrapperTypeInfo, wrapper)) {
-    WrapperTypeInfo::wrapperCreated();
+    wrapperTypeInfo->wrapperCreated();
     setNativeInfo(isolate, wrapper, wrapperTypeInfo,
                   ScriptWrappable::fromNode(node));
     ASSERT(hasInternalFieldsSet(wrapper));
diff --git a/third_party/WebKit/Source/bindings/core/v8/V8GCController.cpp b/third_party/WebKit/Source/bindings/core/v8/V8GCController.cpp
index 4c0255f..0d099cca 100644
--- a/third_party/WebKit/Source/bindings/core/v8/V8GCController.cpp
+++ b/third_party/WebKit/Source/bindings/core/v8/V8GCController.cpp
@@ -468,9 +468,7 @@
 
 class DOMWrapperTracer : public v8::PersistentHandleVisitor {
  public:
-  explicit DOMWrapperTracer(Visitor* visitor) : m_visitor(visitor) {
-    DCHECK(m_visitor);
-  }
+  explicit DOMWrapperTracer(Visitor* visitor) : m_visitor(visitor) {}
 
   void VisitPersistentHandle(v8::Persistent<v8::Value>* value,
                              uint16_t classId) override {
@@ -481,8 +479,8 @@
     const v8::Persistent<v8::Object>& wrapper =
         v8::Persistent<v8::Object>::Cast(*value);
 
-    if (ScriptWrappable* scriptWrappable = toScriptWrappable(wrapper))
-      toWrapperTypeInfo(wrapper)->trace(m_visitor, scriptWrappable);
+    if (m_visitor)
+      toWrapperTypeInfo(wrapper)->trace(m_visitor, toScriptWrappable(wrapper));
   }
 
  private:
diff --git a/third_party/WebKit/Source/bindings/core/v8/WindowProxy.cpp b/third_party/WebKit/Source/bindings/core/v8/WindowProxy.cpp
index 30be01c..b750f26 100644
--- a/third_party/WebKit/Source/bindings/core/v8/WindowProxy.cpp
+++ b/third_party/WebKit/Source/bindings/core/v8/WindowProxy.cpp
@@ -204,18 +204,6 @@
   //   object is created together with a new v8::Context, but the global proxy
   //   object doesn't change.
   // [3] WindowProperties is a named properties object of Window interface.
-  //
-  // Note that the wrapper object of a DOMWindow is the global proxy object, not
-  // the global object, although both of them have the internal field which
-  // points to the DOMWindow.  Since the global proxy object remains the same
-  // while navigations, the management of the wrapper association for DOMWindow
-  // is special compared to other objects.  See DOMWindow::~DOMWindow for the
-  // need of dissociation of the wrappers from DOMWindow instance.
-  //
-  //   global proxy object <====> DOMWindow instance
-  //                               ^
-  //                               |
-  //   global object       --------+
 
   DOMWindow* window = m_frame->domWindow();
   const WrapperTypeInfo* wrapperTypeInfo = window->wrapperTypeInfo();
@@ -224,10 +212,7 @@
   // The global proxy object.  Note this is not the global object.
   v8::Local<v8::Object> globalProxy = context->Global();
   CHECK(m_globalProxy == globalProxy);
-  v8::Local<v8::Object> associatedWrapper =
-      V8DOMWrapper::associateObjectWithWrapper(
-          m_isolate, window, wrapperTypeInfo, globalProxy);
-  CHECK(globalProxy == associatedWrapper);
+  V8DOMWrapper::setNativeInfo(m_isolate, globalProxy, wrapperTypeInfo, window);
   // Mark the handle to be traced by Oilpan, since the global proxy has a
   // reference to the DOMWindow.
   m_globalProxy.get().SetWrapperClassId(wrapperTypeInfo->wrapperClassId);
@@ -235,8 +220,8 @@
   // The global object, aka window wrapper object.
   v8::Local<v8::Object> windowWrapper =
       globalProxy->GetPrototype().As<v8::Object>();
-  V8DOMWrapper::setNativeInfo(m_isolate, windowWrapper, wrapperTypeInfo,
-                              window);
+  windowWrapper = V8DOMWrapper::associateObjectWithWrapper(
+      m_isolate, window, wrapperTypeInfo, windowWrapper);
 
   // The prototype object of Window interface.
   v8::Local<v8::Object> windowPrototype =
diff --git a/third_party/WebKit/Source/bindings/core/v8/WrapperTypeInfo.h b/third_party/WebKit/Source/bindings/core/v8/WrapperTypeInfo.h
index bb33cfe2..9b32a213 100644
--- a/third_party/WebKit/Source/bindings/core/v8/WrapperTypeInfo.h
+++ b/third_party/WebKit/Source/bindings/core/v8/WrapperTypeInfo.h
@@ -134,11 +134,11 @@
     return domTemplateFunction(isolate, world);
   }
 
-  static void wrapperCreated() {
+  void wrapperCreated() const {
     ThreadState::current()->heap().heapStats().increaseWrapperCount(1);
   }
 
-  static void wrapperDestroyed() {
+  void wrapperDestroyed() const {
     ThreadHeapStats& heapStats = ThreadState::current()->heap().heapStats();
     heapStats.decreaseWrapperCount(1);
     heapStats.increaseCollectedWrapperCount(1);
@@ -203,8 +203,6 @@
       wrapper->GetAlignedPointerFromInternalField(offset));
 }
 
-// The return value can be null if |wrapper| is a global proxy object, which
-// points to nothing while a navigation.
 inline ScriptWrappable* toScriptWrappable(
     const v8::PersistentBase<v8::Object>& wrapper) {
   return getInternalField<ScriptWrappable, v8DOMWrapperObjectIndex>(wrapper);
diff --git a/third_party/WebKit/Source/core/css/ElementRuleCollector.cpp b/third_party/WebKit/Source/core/css/ElementRuleCollector.cpp
index 3be2f2c..22d131e79 100644
--- a/third_party/WebKit/Source/core/css/ElementRuleCollector.cpp
+++ b/third_party/WebKit/Source/core/css/ElementRuleCollector.cpp
@@ -340,7 +340,7 @@
     m_style->setHasPseudoStyle(dynamicPseudo);
   } else {
     if (m_style && ruleData.containsUncommonAttributeSelector())
-      m_style->setUnique(true);
+      m_style->setUnique();
 
     m_matchedRules.push_back(
         MatchedRule(&ruleData, result.specificity, cascadeOrder,
diff --git a/third_party/WebKit/Source/core/css/SelectorChecker.cpp b/third_party/WebKit/Source/core/css/SelectorChecker.cpp
index e6327380..da7b0ec 100644
--- a/third_party/WebKit/Source/core/css/SelectorChecker.cpp
+++ b/third_party/WebKit/Source/core/css/SelectorChecker.cpp
@@ -884,7 +884,7 @@
         if (context.inRightmostCompound) {
           m_elementStyle->setAffectedByDrag();
         } else {
-          m_elementStyle->setUnique(true);
+          m_elementStyle->setUnique();
           element.setChildrenOrSiblingsAffectedByDrag();
         }
       }
@@ -896,7 +896,7 @@
         if (context.inRightmostCompound) {
           m_elementStyle->setAffectedByFocus();
         } else {
-          m_elementStyle->setUnique(true);
+          m_elementStyle->setUnique();
           element.setChildrenOrSiblingsAffectedByFocus();
         }
       }
@@ -908,7 +908,7 @@
         if (context.inRightmostCompound) {
           m_elementStyle->setAffectedByHover();
         } else {
-          m_elementStyle->setUnique(true);
+          m_elementStyle->setUnique();
           element.setChildrenOrSiblingsAffectedByHover();
         }
       }
@@ -925,7 +925,7 @@
         if (context.inRightmostCompound) {
           m_elementStyle->setAffectedByActive();
         } else {
-          m_elementStyle->setUnique(true);
+          m_elementStyle->setUnique();
           element.setChildrenOrSiblingsAffectedByActive();
         }
       }
diff --git a/third_party/WebKit/Source/core/css/resolver/StyleAdjuster.cpp b/third_party/WebKit/Source/core/css/resolver/StyleAdjuster.cpp
index 31d6f404..1a23328 100644
--- a/third_party/WebKit/Source/core/css/resolver/StyleAdjuster.cpp
+++ b/third_party/WebKit/Source/core/css/resolver/StyleAdjuster.cpp
@@ -458,7 +458,7 @@
   // share this style.
   if (style.hasPseudoStyle(PseudoIdFirstLetter) || style.transitions() ||
       style.animations())
-    style.setUnique(true);
+    style.setUnique();
 
   adjustStyleForEditing(style);
 
diff --git a/third_party/WebKit/Source/core/css/resolver/StyleBuilderCustom.cpp b/third_party/WebKit/Source/core/css/resolver/StyleBuilderCustom.cpp
index ba5f4f2..a3a30d32 100644
--- a/third_party/WebKit/Source/core/css/resolver/StyleBuilderCustom.cpp
+++ b/third_party/WebKit/Source/core/css/resolver/StyleBuilderCustom.cpp
@@ -794,9 +794,9 @@
         DCHECK_EQ(functionValue->functionType(), CSSValueAttr);
         // FIXME: Can a namespace be specified for an attr(foo)?
         if (state.style()->styleType() == PseudoIdNone)
-          state.style()->setUnique(true);
+          state.style()->setUnique();
         else
-          state.parentStyle()->setUnique(true);
+          state.parentStyle()->setUnique();
         QualifiedName attr(
             nullAtom, toCSSCustomIdentValue(functionValue->item(0)).value(),
             nullAtom);
diff --git a/third_party/WebKit/Source/core/css/resolver/StyleResolver.cpp b/third_party/WebKit/Source/core/css/resolver/StyleResolver.cpp
index 56c31fe..7f86007 100644
--- a/third_party/WebKit/Source/core/css/resolver/StyleResolver.cpp
+++ b/third_party/WebKit/Source/core/css/resolver/StyleResolver.cpp
@@ -736,7 +736,7 @@
       // computation of font-relative lengths.
       state.style()->setTextAutosizingMultiplier(
           element->computedStyle()->textAutosizingMultiplier());
-      state.style()->setUnique(true);
+      state.style()->setUnique();
     }
 
     if (state.hasDirAutoAttribute())
diff --git a/third_party/WebKit/Source/core/dom/Document.cpp b/third_party/WebKit/Source/core/dom/Document.cpp
index 6eb130f..77c1366b 100644
--- a/third_party/WebKit/Source/core/dom/Document.cpp
+++ b/third_party/WebKit/Source/core/dom/Document.cpp
@@ -5211,13 +5211,6 @@
                                                         name);
 }
 
-LocalDOMWindow* Document::defaultView() const {
-  // The HTML spec requires to return null if the document is detached from a
-  // frame.  However, |m_domWindow| is not cleared on the detachment.  So, we
-  // need to check |m_frame| to tell whether the document is attached or not.
-  return m_frame ? m_domWindow : nullptr;
-}
-
 void Document::finishedParsing() {
   DCHECK(!scriptableDocumentParser() || !m_parser->isParsing());
   DCHECK(!scriptableDocumentParser() || m_readyState != Loading);
diff --git a/third_party/WebKit/Source/core/dom/Document.h b/third_party/WebKit/Source/core/dom/Document.h
index f8a84c2..0ed30f7 100644
--- a/third_party/WebKit/Source/core/dom/Document.h
+++ b/third_party/WebKit/Source/core/dom/Document.h
@@ -415,9 +415,6 @@
   HTMLCollection* windowNamedItems(const AtomicString& name);
   DocumentNameCollection* documentNamedItems(const AtomicString& name);
 
-  // "defaultView" attribute defined in HTML spec.
-  LocalDOMWindow* defaultView() const;
-
   bool isHTMLDocument() const { return m_documentClasses & HTMLDocumentClass; }
   bool isXHTMLDocument() const {
     return m_documentClasses & XHTMLDocumentClass;
diff --git a/third_party/WebKit/Source/core/dom/Document.idl b/third_party/WebKit/Source/core/dom/Document.idl
index a9f225e..87ca6f5 100644
--- a/third_party/WebKit/Source/core/dom/Document.idl
+++ b/third_party/WebKit/Source/core/dom/Document.idl
@@ -119,7 +119,7 @@
     [CallWith=EnteredWindow, CEReactions, CustomElementCallbacks, RaisesException] void writeln(DOMString... text);
 
     // user interaction
-    readonly attribute Window? defaultView;
+    [ImplementedAs=domWindow] readonly attribute Window? defaultView;
     boolean hasFocus();
     [CEReactions, CustomElementCallbacks, MeasureAs=DocumentDesignMode] attribute DOMString designMode;
     [CEReactions, CustomElementCallbacks, RaisesException] boolean execCommand(DOMString commandId, optional boolean showUI = false, optional DOMString value = "");
diff --git a/third_party/WebKit/Source/core/dom/Range.cpp b/third_party/WebKit/Source/core/dom/Range.cpp
index 3187a1e9..0805621 100644
--- a/third_party/WebKit/Source/core/dom/Range.cpp
+++ b/third_party/WebKit/Source/core/dom/Range.cpp
@@ -36,6 +36,8 @@
 #include "core/dom/ProcessingInstruction.h"
 #include "core/dom/Text.h"
 #include "core/editing/EditingUtilities.h"
+#include "core/editing/EphemeralRange.h"
+#include "core/editing/FrameSelection.h"
 #include "core/editing/VisiblePosition.h"
 #include "core/editing/VisibleUnits.h"
 #include "core/editing/iterators/TextIterator.h"
@@ -170,6 +172,7 @@
     return;
   }
 
+  Document& oldDocument = ownerDocument();
   bool didMoveDocument = false;
   if (refNode->document() != m_ownerDocument) {
     setDocument(refNode->document());
@@ -182,8 +185,12 @@
 
   m_start.set(refNode, offset, childNode);
 
-  if (didMoveDocument || checkForDifferentRootContainer(m_start, m_end))
+  if (didMoveDocument || checkForDifferentRootContainer(m_start, m_end)) {
+    removeFromSelectionIfInDifferentRoot(oldDocument);
     collapse(true);
+    return;
+  }
+  updateSelectionIfAddedToSelection();
 }
 
 void Range::setEnd(Node* refNode, int offset, ExceptionState& exceptionState) {
@@ -195,6 +202,7 @@
   }
 
   bool didMoveDocument = false;
+  Document& oldDocument = ownerDocument();
   if (refNode->document() != m_ownerDocument) {
     setDocument(refNode->document());
     didMoveDocument = true;
@@ -206,8 +214,12 @@
 
   m_end.set(refNode, offset, childNode);
 
-  if (didMoveDocument || checkForDifferentRootContainer(m_start, m_end))
+  if (didMoveDocument || checkForDifferentRootContainer(m_start, m_end)) {
+    removeFromSelectionIfInDifferentRoot(oldDocument);
     collapse(false);
+    return;
+  }
+  updateSelectionIfAddedToSelection();
 }
 
 void Range::setStart(const Position& start, ExceptionState& exceptionState) {
@@ -227,6 +239,7 @@
     m_end = m_start;
   else
     m_start = m_end;
+  updateSelectionIfAddedToSelection();
 }
 
 bool Range::isNodeFullyContained(Node& node) const {
@@ -1176,9 +1189,6 @@
       return;
   }
 
-  if (m_ownerDocument != refNode->document())
-    setDocument(refNode->document());
-
   setStartBefore(refNode);
   setEndAfter(refNode);
 }
@@ -1213,11 +1223,14 @@
     }
   }
 
+  Document& oldDocument = ownerDocument();
   if (m_ownerDocument != refNode->document())
     setDocument(refNode->document());
 
   m_start.setToStartOfNode(*refNode);
   m_end.setToEndOfNode(*refNode);
+  removeFromSelectionIfInDifferentRoot(oldDocument);
+  updateSelectionIfAddedToSelection();
 }
 
 bool Range::selectNodeContents(Node* refNode, Position& start, Position& end) {
@@ -1700,6 +1713,33 @@
   return result;
 }
 
+void Range::updateSelectionIfAddedToSelection() {
+  if (!ownerDocument().frame())
+    return;
+  FrameSelection& selection = ownerDocument().frame()->selection();
+  if (this != selection.documentCachedRange())
+    return;
+  DCHECK(startContainer()->isConnected());
+  DCHECK(startContainer()->document() == ownerDocument());
+  DCHECK(endContainer()->isConnected());
+  DCHECK(endContainer()->document() == ownerDocument());
+  selection.setSelectedRange(EphemeralRange(this), VP_DEFAULT_AFFINITY);
+  selection.cacheRangeOfDocument(this);
+}
+
+void Range::removeFromSelectionIfInDifferentRoot(Document& oldDocument) {
+  if (!oldDocument.frame())
+    return;
+  FrameSelection& selection = oldDocument.frame()->selection();
+  if (this != selection.documentCachedRange())
+    return;
+  if (ownerDocument() == oldDocument && startContainer()->isConnected() &&
+      endContainer()->isConnected())
+    return;
+  selection.clear();
+  selection.clearDocumentCachedRange();
+}
+
 DEFINE_TRACE(Range) {
   visitor->trace(m_ownerDocument);
   visitor->trace(m_start);
diff --git a/third_party/WebKit/Source/core/dom/Range.h b/third_party/WebKit/Source/core/dom/Range.h
index 7332da6..18bc278c 100644
--- a/third_party/WebKit/Source/core/dom/Range.h
+++ b/third_party/WebKit/Source/core/dom/Range.h
@@ -207,6 +207,8 @@
                                                 Node* clonedContainer,
                                                 Node* commonRoot,
                                                 ExceptionState&);
+  void updateSelectionIfAddedToSelection();
+  void removeFromSelectionIfInDifferentRoot(Document& oldDocument);
 
   Member<Document> m_ownerDocument;  // Cannot be null.
   RangeBoundaryPoint m_start;
diff --git a/third_party/WebKit/Source/core/frame/DOMWindow.cpp b/third_party/WebKit/Source/core/frame/DOMWindow.cpp
index b61c198c..6a8dfce8 100644
--- a/third_party/WebKit/Source/core/frame/DOMWindow.cpp
+++ b/third_party/WebKit/Source/core/frame/DOMWindow.cpp
@@ -5,7 +5,6 @@
 #include "core/frame/DOMWindow.h"
 
 #include <memory>
-#include "bindings/core/v8/WindowProxy.h"
 #include "core/dom/Document.h"
 #include "core/dom/ExecutionContext.h"
 #include "core/dom/SecurityContext.h"
@@ -35,34 +34,23 @@
 DOMWindow::~DOMWindow() {
   // The frame must be disconnected before finalization.
   DCHECK(!m_frame);
-
-  // Because the wrapper object of a DOMWindow is the global proxy object which
-  // may live much longer than the DOMWindow, we need to dissociate all wrappers
-  // for this instance.
-  DOMWrapperWorld::dissociateDOMWindowWrappersInAllWorlds(this);
 }
 
-v8::Local<v8::Object> DOMWindow::wrap(v8::Isolate* isolate,
+v8::Local<v8::Object> DOMWindow::wrap(v8::Isolate*,
                                       v8::Local<v8::Object> creationContext) {
-  // Notice that we explicitly ignore |creationContext| because the DOMWindow
-  // has its own creation context.
-
-  Frame* frame = this->frame();
-  CHECK(frame);
-
-  v8::Local<v8::Object> globalProxy =
-      frame->windowProxy(DOMWrapperWorld::current(isolate))
-      ->globalIfNotDetached();
-  CHECK(!globalProxy.IsEmpty());
-
-  return globalProxy;
+  LOG(FATAL) << "DOMWindow must never be wrapped with wrap method.  The "
+                "wrappers must be created at WindowProxy::createContext() and "
+                "setupWindowPrototypeChain().";
+  return v8::Local<v8::Object>();
 }
 
 v8::Local<v8::Object> DOMWindow::associateWithWrapper(
     v8::Isolate*,
     const WrapperTypeInfo*,
     v8::Local<v8::Object> wrapper) {
-  NOTREACHED();
+  LOG(FATAL) << "DOMWindow must never be wrapped with wrap method.  The "
+                "wrappers must be created at WindowProxy::createContext() and "
+                "setupWindowPrototypeChain().";
   return v8::Local<v8::Object>();
 }
 
diff --git a/third_party/WebKit/Source/core/frame/FrameView.h b/third_party/WebKit/Source/core/frame/FrameView.h
index 9d4f245..f9384441 100644
--- a/third_party/WebKit/Source/core/frame/FrameView.h
+++ b/third_party/WebKit/Source/core/frame/FrameView.h
@@ -1039,13 +1039,6 @@
   // Member<Widget> instead.
   HashSet<RefPtr<LayoutPart>> m_parts;
 
-  // The RefPtr cycle between LocalFrame and FrameView is broken
-  // when a LocalFrame is detached by LocalFrame::detach().
-  // It clears the LocalFrame's m_view reference via setView(nullptr).
-  //
-  // For Oilpan, Member reference cycles pose no problem, but
-  // LocalFrame's FrameView is also cleared by that setView(), so as to
-  // keep the observable lifespan of LocalFrame::view() identical.
   Member<LocalFrame> m_frame;
 
   WebDisplayMode m_displayMode;
diff --git a/third_party/WebKit/Source/core/frame/LocalFrame.h b/third_party/WebKit/Source/core/frame/LocalFrame.h
index f6018a4..d18ac13 100644
--- a/third_party/WebKit/Source/core/frame/LocalFrame.h
+++ b/third_party/WebKit/Source/core/frame/LocalFrame.h
@@ -249,6 +249,8 @@
   mutable FrameLoader m_loader;
   Member<NavigationScheduler> m_navigationScheduler;
 
+  // Cleared by LocalFrame::detach(), so as to keep the observable lifespan
+  // of LocalFrame::view().
   Member<FrameView> m_view;
   // Usually 0. Non-null if this is the top frame of PagePopup.
   Member<Element> m_pagePopupOwner;
diff --git a/third_party/WebKit/Source/core/html/HTMLFrameOwnerElement.h b/third_party/WebKit/Source/core/html/HTMLFrameOwnerElement.h
index 90bea16..16e7a51b 100644
--- a/third_party/WebKit/Source/core/html/HTMLFrameOwnerElement.h
+++ b/third_party/WebKit/Source/core/html/HTMLFrameOwnerElement.h
@@ -23,7 +23,6 @@
 
 #include "core/CoreExport.h"
 #include "core/dom/Document.h"
-#include "core/frame/DOMWindow.h"
 #include "core/frame/FrameOwner.h"
 #include "core/html/HTMLElement.h"
 #include "platform/heap/Handle.h"
diff --git a/third_party/WebKit/Source/core/html/forms/MultipleFieldsTemporalInputTypeView.cpp b/third_party/WebKit/Source/core/html/forms/MultipleFieldsTemporalInputTypeView.cpp
index 184f3b7f..2094e3a6 100644
--- a/third_party/WebKit/Source/core/html/forms/MultipleFieldsTemporalInputTypeView.cpp
+++ b/third_party/WebKit/Source/core/html/forms/MultipleFieldsTemporalInputTypeView.cpp
@@ -346,7 +346,7 @@
   RefPtr<ComputedStyle> style = ComputedStyle::clone(*originalStyle);
   style->setDirection(contentDirection);
   style->setDisplay(newDisplay);
-  style->setUnique(true);
+  style->setUnique();
   return style.release();
 }
 
diff --git a/third_party/WebKit/Source/core/html/shadow/DateTimeEditElement.cpp b/third_party/WebKit/Source/core/html/shadow/DateTimeEditElement.cpp
index 0cc8b09..38d5e27 100644
--- a/third_party/WebKit/Source/core/html/shadow/DateTimeEditElement.cpp
+++ b/third_party/WebKit/Source/core/html/shadow/DateTimeEditElement.cpp
@@ -581,7 +581,7 @@
     }
   }
   style->setWidth(Length(ceilf(width), Fixed));
-  style->setUnique(true);
+  style->setUnique();
   return style.release();
 }
 
diff --git a/third_party/WebKit/Source/core/html/shadow/TextControlInnerElements.cpp b/third_party/WebKit/Source/core/html/shadow/TextControlInnerElements.cpp
index 94e72359..7ba751e3 100644
--- a/third_party/WebKit/Source/core/html/shadow/TextControlInnerElements.cpp
+++ b/third_party/WebKit/Source/core/html/shadow/TextControlInnerElements.cpp
@@ -87,7 +87,7 @@
   // We don't want the shadow dom to be editable, so we set this block to
   // read-only in case the input itself is editable.
   style->setUserModify(READ_ONLY);
-  style->setUnique(true);
+  style->setUnique();
 
   if (const ComputedStyle* parentStyle = parentComputedStyle())
     StyleAdjuster::adjustStyleForAlignment(*style, *parentStyle);
diff --git a/third_party/WebKit/Source/core/layout/LayoutTextControlMultiLine.cpp b/third_party/WebKit/Source/core/layout/LayoutTextControlMultiLine.cpp
index 38bf0e9..3a7bf40 100644
--- a/third_party/WebKit/Source/core/layout/LayoutTextControlMultiLine.cpp
+++ b/third_party/WebKit/Source/core/layout/LayoutTextControlMultiLine.cpp
@@ -93,7 +93,7 @@
   textBlockStyle->inheritFrom(startStyle);
   adjustInnerEditorStyle(*textBlockStyle);
   textBlockStyle->setDisplay(EDisplay::Block);
-  textBlockStyle->setUnique(true);
+  textBlockStyle->setUnique();
 
   return textBlockStyle.release();
 }
diff --git a/third_party/WebKit/Source/core/layout/LayoutTextControlSingleLine.cpp b/third_party/WebKit/Source/core/layout/LayoutTextControlSingleLine.cpp
index 2580d9b83..f0ea860 100644
--- a/third_party/WebKit/Source/core/layout/LayoutTextControlSingleLine.cpp
+++ b/third_party/WebKit/Source/core/layout/LayoutTextControlSingleLine.cpp
@@ -327,7 +327,7 @@
     textBlockStyle->setLineHeight(ComputedStyle::initialLineHeight());
 
   textBlockStyle->setDisplay(EDisplay::Block);
-  textBlockStyle->setUnique(true);
+  textBlockStyle->setUnique();
 
   if (inputElement()->shouldRevealPassword())
     textBlockStyle->setTextSecurity(TSNONE);
diff --git a/third_party/WebKit/Source/core/layout/TextAutosizer.cpp b/third_party/WebKit/Source/core/layout/TextAutosizer.cpp
index 4b838e0..af61f4e 100644
--- a/third_party/WebKit/Source/core/layout/TextAutosizer.cpp
+++ b/third_party/WebKit/Source/core/layout/TextAutosizer.cpp
@@ -1163,7 +1163,7 @@
   // We need to clone the layoutObject style to avoid breaking style sharing.
   RefPtr<ComputedStyle> style = ComputedStyle::clone(currentStyle);
   style->setTextAutosizingMultiplier(multiplier);
-  style->setUnique(true);
+  style->setUnique();
 
   switch (relayoutBehavior) {
     case AlreadyInLayout:
diff --git a/third_party/WebKit/Source/core/style/ComputedStyle.h b/third_party/WebKit/Source/core/style/ComputedStyle.h
index 3ea19184..e026aad5 100644
--- a/third_party/WebKit/Source/core/style/ComputedStyle.h
+++ b/third_party/WebKit/Source/core/style/ComputedStyle.h
@@ -2515,7 +2515,7 @@
 
   bool emptyState() const { return m_nonInheritedData.m_emptyState; }
   void setEmptyState(bool b) {
-    setUnique(true);
+    setUnique();
     m_nonInheritedData.m_emptyState = b;
   }
 
@@ -2588,7 +2588,7 @@
   // A unique style is one that has matches something that makes it impossible
   // to share.
   bool unique() const { return m_nonInheritedData.m_unique; }
-  void setUnique(bool v) { m_nonInheritedData.m_unique = v; }
+  void setUnique() { m_nonInheritedData.m_unique = true; }
 
   float textAutosizingMultiplier() const {
     return m_styleInheritedData->textAutosizingMultiplier;
diff --git a/third_party/WebKit/Source/core/workers/WorkerThread.cpp b/third_party/WebKit/Source/core/workers/WorkerThread.cpp
index 43970ce..cd48725 100644
--- a/third_party/WebKit/Source/core/workers/WorkerThread.cpp
+++ b/third_party/WebKit/Source/core/workers/WorkerThread.cpp
@@ -225,11 +225,8 @@
   ThreadDebugger::idleStarted(isolate());
   std::unique_ptr<CrossThreadClosure> task;
   do {
-    {
-      SafePointScope safePointScope(BlinkGC::HeapPointersOnStack);
-      task =
-          m_inspectorTaskRunner->takeNextTask(InspectorTaskRunner::WaitForTask);
-    }
+    task =
+        m_inspectorTaskRunner->takeNextTask(InspectorTaskRunner::WaitForTask);
     if (task)
       (*task)();
     // Keep waiting until execution is resumed.
diff --git a/third_party/WebKit/Source/modules/webdatabase/sqlite/SQLiteFileSystem.cpp b/third_party/WebKit/Source/modules/webdatabase/sqlite/SQLiteFileSystem.cpp
index 9c25341c..e87cfa1f 100644
--- a/third_party/WebKit/Source/modules/webdatabase/sqlite/SQLiteFileSystem.cpp
+++ b/third_party/WebKit/Source/modules/webdatabase/sqlite/SQLiteFileSystem.cpp
@@ -42,7 +42,6 @@
 SQLiteFileSystem::SQLiteFileSystem() {}
 
 int SQLiteFileSystem::openDatabase(const String& filename, sqlite3** database) {
-  SafePointScope scope(BlinkGC::HeapPointersOnStack);
   return sqlite3_open_v2(filename.utf8().data(), database,
                          SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE,
                          "chromium_vfs");
diff --git a/third_party/WebKit/Source/modules/webdatabase/sqlite/SQLiteStatement.cpp b/third_party/WebKit/Source/modules/webdatabase/sqlite/SQLiteStatement.cpp
index b2ad120..251daa0 100644
--- a/third_party/WebKit/Source/modules/webdatabase/sqlite/SQLiteStatement.cpp
+++ b/third_party/WebKit/Source/modules/webdatabase/sqlite/SQLiteStatement.cpp
@@ -102,8 +102,6 @@
   *statement = nullptr;
   int error;
   {
-    SafePointScope scope(BlinkGC::HeapPointersOnStack);
-
     SQL_DVLOG(1) << "SQL - prepare - " << query.data();
 
     // Pass the length of the string including the null character to
@@ -130,9 +128,6 @@
 }
 
 int SQLiteStatement::step() {
-  SafePointScope scope(BlinkGC::HeapPointersOnStack);
-  // ASSERT(m_isPrepared);
-
   if (!m_statement)
     return SQLITE_OK;
 
diff --git a/third_party/WebKit/Source/platform/WaitableEvent.cpp b/third_party/WebKit/Source/platform/WaitableEvent.cpp
index 9bb28431..d06e20b 100644
--- a/third_party/WebKit/Source/platform/WaitableEvent.cpp
+++ b/third_party/WebKit/Source/platform/WaitableEvent.cpp
@@ -30,15 +30,7 @@
 }
 
 void WaitableEvent::wait() {
-  if (ThreadState::current()) {
-    // We only enter a safe point scope if the thread is attached, ex. never
-    // during shutdown.
-    // TODO(esprehn): Why can't SafePointScope do this for us?
-    SafePointScope scope(BlinkGC::HeapPointersOnStack);
-    m_impl->Wait();
-  } else {
-    m_impl->Wait();
-  }
+  m_impl->Wait();
 }
 
 void WaitableEvent::signal() {
diff --git a/third_party/WebKit/Source/platform/WebThreadSupportingGC.cpp b/third_party/WebKit/Source/platform/WebThreadSupportingGC.cpp
index d6b944a3..c333acc 100644
--- a/third_party/WebKit/Source/platform/WebThreadSupportingGC.cpp
+++ b/third_party/WebKit/Source/platform/WebThreadSupportingGC.cpp
@@ -39,11 +39,8 @@
 }
 
 WebThreadSupportingGC::~WebThreadSupportingGC() {
-  if (ThreadState::current() && m_owningThread) {
-    // WebThread's destructor blocks until all the tasks are processed.
-    SafePointScope scope(BlinkGC::HeapPointersOnStack);
-    m_owningThread.reset();
-  }
+  // WebThread's destructor blocks until all the tasks are processed.
+  m_owningThread.reset();
 }
 
 void WebThreadSupportingGC::initialize() {
diff --git a/third_party/WebKit/Source/platform/heap/Heap.cpp b/third_party/WebKit/Source/platform/heap/Heap.cpp
index c3542780..4b952f5 100644
--- a/third_party/WebKit/Source/platform/heap/Heap.cpp
+++ b/third_party/WebKit/Source/platform/heap/Heap.cpp
@@ -568,11 +568,6 @@
     state->visitStack(visitor);
 }
 
-void ThreadHeap::checkAndPark(ThreadState* threadState,
-                              SafePointAwareMutexLocker* locker) {
-  m_safePointBarrier->checkAndPark(threadState, locker);
-}
-
 void ThreadHeap::enterSafePoint(ThreadState* threadState) {
   m_safePointBarrier->enterSafePoint(threadState);
 }
diff --git a/third_party/WebKit/Source/platform/heap/Heap.h b/third_party/WebKit/Source/platform/heap/Heap.h
index 4a18944..fde83bf8 100644
--- a/third_party/WebKit/Source/platform/heap/Heap.h
+++ b/third_party/WebKit/Source/platform/heap/Heap.h
@@ -290,7 +290,6 @@
 
   void visitPersistentRoots(Visitor*);
   void visitStackRoots(Visitor*);
-  void checkAndPark(ThreadState*, SafePointAwareMutexLocker*);
   void enterSafePoint(ThreadState*);
   void leaveSafePoint(ThreadState*, SafePointAwareMutexLocker*);
 
diff --git a/third_party/WebKit/Source/platform/heap/SafePoint.cpp b/third_party/WebKit/Source/platform/heap/SafePoint.cpp
index 451a425..b2e19583 100644
--- a/third_party/WebKit/Source/platform/heap/SafePoint.cpp
+++ b/third_party/WebKit/Source/platform/heap/SafePoint.cpp
@@ -5,8 +5,6 @@
 #include "platform/heap/SafePoint.h"
 
 #include "platform/heap/Heap.h"
-#include "wtf/Atomics.h"
-#include "wtf/CurrentTime.h"
 
 namespace blink {
 
@@ -17,83 +15,10 @@
                                  ThreadState*,
                                  PushAllRegistersCallback);
 
-static double lockingTimeout() {
-  // Wait time for parking all threads is at most 100 ms.
-  return 0.100;
-}
-
-SafePointBarrier::SafePointBarrier()
-    : m_unparkedThreadCount(0), m_parkingRequested(0) {}
+SafePointBarrier::SafePointBarrier() {}
 
 SafePointBarrier::~SafePointBarrier() {}
 
-bool SafePointBarrier::parkOthers() {
-  ASSERT(ThreadState::current()->isAtSafePoint());
-
-  ThreadState* current = ThreadState::current();
-  // Lock threadAttachMutex() to prevent threads from attaching.
-  current->lockThreadAttachMutex();
-  const ThreadStateSet& threads = current->heap().threads();
-
-  MutexLocker locker(m_mutex);
-  atomicAdd(&m_unparkedThreadCount, threads.size());
-  releaseStore(&m_parkingRequested, 1);
-
-  for (ThreadState* state : threads) {
-    if (state == current)
-      continue;
-
-    for (auto& interruptor : state->interruptors())
-      interruptor->requestInterrupt();
-  }
-
-  while (acquireLoad(&m_unparkedThreadCount) > 0) {
-    double expirationTime = currentTime() + lockingTimeout();
-    if (!m_parked.timedWait(m_mutex, expirationTime)) {
-      // One of the other threads did not return to a safepoint within the
-      // maximum time we allow for threads to be parked. Abandon the GC and
-      // resume the currently parked threads.
-      resumeOthers(true);
-      return false;
-    }
-  }
-  return true;
-}
-
-void SafePointBarrier::resumeOthers(bool barrierLocked) {
-  ThreadState* current = ThreadState::current();
-  const ThreadStateSet& threads = current->heap().threads();
-  atomicSubtract(&m_unparkedThreadCount, threads.size());
-  releaseStore(&m_parkingRequested, 0);
-
-  if (UNLIKELY(barrierLocked)) {
-    m_resume.broadcast();
-  } else {
-    // FIXME: Resumed threads will all contend for m_mutex just
-    // to unlock it later which is a waste of resources.
-    MutexLocker locker(m_mutex);
-    m_resume.broadcast();
-  }
-
-  current->unlockThreadAttachMutex();
-  ASSERT(ThreadState::current()->isAtSafePoint());
-}
-
-void SafePointBarrier::checkAndPark(ThreadState* state,
-                                    SafePointAwareMutexLocker* locker) {
-  ASSERT(!state->sweepForbidden());
-  if (acquireLoad(&m_parkingRequested)) {
-    // If we are leaving the safepoint from a SafePointAwareMutexLocker
-    // call out to release the lock before going to sleep. This enables the
-    // lock to be acquired in the sweep phase, e.g. during weak processing
-    // or finalization. The SafePointAwareLocker will reenter the safepoint
-    // and reacquire the lock after leaving this safepoint.
-    if (locker)
-      locker->reset();
-    pushAllRegisters(this, state, parkAfterPushRegisters);
-  }
-}
-
 void SafePointBarrier::enterSafePoint(ThreadState* state) {
   ASSERT(!state->sweepForbidden());
   pushAllRegisters(this, state, enterSafePointAfterPushRegisters);
@@ -101,28 +26,12 @@
 
 void SafePointBarrier::leaveSafePoint(ThreadState* state,
                                       SafePointAwareMutexLocker* locker) {
-  if (atomicIncrement(&m_unparkedThreadCount) > 0)
-    checkAndPark(state, locker);
-}
-
-void SafePointBarrier::doPark(ThreadState* state, intptr_t* stackEnd) {
-  state->recordStackEnd(stackEnd);
-  MutexLocker locker(m_mutex);
-  if (!atomicDecrement(&m_unparkedThreadCount))
-    m_parked.signal();
-  while (acquireLoad(&m_parkingRequested))
-    m_resume.wait(m_mutex);
-  atomicIncrement(&m_unparkedThreadCount);
 }
 
 void SafePointBarrier::doEnterSafePoint(ThreadState* state,
                                         intptr_t* stackEnd) {
   state->recordStackEnd(stackEnd);
   state->copyStackUntilSafePointScope();
-  if (!atomicDecrement(&m_unparkedThreadCount)) {
-    MutexLocker locker(m_mutex);
-    m_parked.signal();  // Safe point reached.
-  }
 }
 
 }  // namespace blink
diff --git a/third_party/WebKit/Source/platform/heap/SafePoint.h b/third_party/WebKit/Source/platform/heap/SafePoint.h
index 727b8cfc..4b1bfcd 100644
--- a/third_party/WebKit/Source/platform/heap/SafePoint.h
+++ b/third_party/WebKit/Source/platform/heap/SafePoint.h
@@ -96,65 +96,18 @@
   SafePointBarrier();
   ~SafePointBarrier();
 
-  // Request other attached threads that are not at safe points to park
-  // themselves on safepoints.
-  bool parkOthers();
-
-  // Resume executions of other attached threads that are parked at
-  // the safe points.
-  void resumeOthers(bool barrierLocked = false);
-
-  // Park this thread if there exists a request to park attached threads.
-  // This method must be called at a safe point.
-  void checkAndPark(ThreadState*, SafePointAwareMutexLocker* = nullptr);
-
   void enterSafePoint(ThreadState*);
   void leaveSafePoint(ThreadState*, SafePointAwareMutexLocker* = nullptr);
 
  private:
   void doPark(ThreadState*, intptr_t* stackEnd);
-  static void parkAfterPushRegisters(SafePointBarrier* barrier,
-                                     ThreadState* state,
-                                     intptr_t* stackEnd) {
-    barrier->doPark(state, stackEnd);
-  }
   void doEnterSafePoint(ThreadState*, intptr_t* stackEnd);
   static void enterSafePointAfterPushRegisters(SafePointBarrier* barrier,
                                                ThreadState* state,
                                                intptr_t* stackEnd) {
     barrier->doEnterSafePoint(state, stackEnd);
   }
-
-  // |m_unparkedThreadCount| tracks amount of unparked threads. It is
-  // positive if and only if a thread has requested the other threads
-  // to park themselves at safe-points in preparation for a GC.
-  //
-  // The last thread to park itself will make the counter hit zero
-  // and should notify GC-requesting thread that it is safe to proceed.
-  //
-  // If no other thread is waiting for other threads to park then
-  // this counter can be negative: if N threads are at safe-points
-  // the counter will be -N.
-  volatile int m_unparkedThreadCount;
-
-  // |m_parkingRequested| is used to control the transition of threads parked
-  // at a safepoint back to running state. In the event a thread requests
-  // another GC, threads that have yet to leave their safepoint (due to lock
-  // contention, scheduling etc), shouldn't be allowed to leave, but continue
-  // being parked when they do end up getting to run.
-  //
-  // |m_parkingRequested| is set when parkOthers() runs, and cleared by
-  // resumeOthers(), when the global GC steps have completed.
-  //
-  // Threads that were parked after they were requested to and then signalled,
-  // check that no other thread has made another parking request when attempting
-  // to resume in doPark().
-  volatile int m_parkingRequested;
-
   Mutex m_mutex;
-
-  ThreadCondition m_parked;
-  ThreadCondition m_resume;
 };
 
 }  // namespace blink
diff --git a/third_party/WebKit/Source/platform/heap/ThreadState.cpp b/third_party/WebKit/Source/platform/heap/ThreadState.cpp
index 769710984..27bb5d5 100644
--- a/third_party/WebKit/Source/platform/heap/ThreadState.cpp
+++ b/third_party/WebKit/Source/platform/heap/ThreadState.cpp
@@ -1172,10 +1172,6 @@
 
   runScheduledGC(stackState);
   ASSERT(!m_atSafePoint);
-  m_stackState = stackState;
-  m_atSafePoint = true;
-  m_heap->checkAndPark(this, nullptr);
-  m_atSafePoint = false;
   m_stackState = BlinkGC::HeapPointersOnStack;
 }
 
diff --git a/third_party/WebKit/Source/web/WebHeap.cpp b/third_party/WebKit/Source/web/WebHeap.cpp
index 151dadc..99925fe 100644
--- a/third_party/WebKit/Source/web/WebHeap.cpp
+++ b/third_party/WebKit/Source/web/WebHeap.cpp
@@ -34,15 +34,6 @@
 
 namespace blink {
 
-WebHeap::SafePointScope::SafePointScope() {
-  CHECK(!ThreadState::current()->isAtSafePoint());
-  ThreadState::current()->enterSafePoint(BlinkGC::HeapPointersOnStack, this);
-}
-
-WebHeap::SafePointScope::~SafePointScope() {
-  ThreadState::current()->leaveSafePoint();
-}
-
 void WebHeap::collectGarbageForTesting() {
   ThreadState::current()->collectGarbage(
       BlinkGC::HeapPointersOnStack, BlinkGC::GCWithSweep, BlinkGC::ForcedGC);
diff --git a/third_party/WebKit/Source/wtf/Vector.h b/third_party/WebKit/Source/wtf/Vector.h
index 9b068f1c..9483a550 100644
--- a/third_party/WebKit/Source/wtf/Vector.h
+++ b/third_party/WebKit/Source/wtf/Vector.h
@@ -57,6 +57,14 @@
 template <typename T, size_t inlineBuffer, typename Allocator>
 class Deque;
 
+//
+// Vector Traits
+//
+
+// Bunch of traits for Vector are defined here, with which you can customize
+// Vector's behavior. In most cases the default traits are appropriate, so you
+// usually don't have to specialize those traits by yourself.
+
 template <bool needsDestruction, typename T>
 struct VectorDestructor;
 
@@ -279,6 +287,9 @@
   }
 };
 
+// A collection of all the traits used by Vector. This is basically an
+// implementation detail of Vector, and you should specialize individual traits
+// defined above, if you want to customize Vector's behavior.
 template <typename T>
 struct VectorTypeOperations {
   STATIC_ONLY(VectorTypeOperations);
@@ -327,6 +338,16 @@
   }
 };
 
+//
+// VectorBuffer
+//
+
+// VectorBuffer is an implementation detail of Vector and Deque. It manages
+// Vector's underlying buffer, and does operations like allocation or
+// expansion.
+//
+// Not meant for general consumption.
+
 template <typename T, bool hasInlineCapacity, typename Allocator>
 class VectorBufferBase {
   WTF_MAKE_NONCOPYABLE(VectorBufferBase);
@@ -795,12 +816,17 @@
   template <typename U, size_t inlineBuffer, typename V>
   friend class Deque;
 };
-// Heap-allocated vectors with no inlineCapacity never need a destructor.
+
+//
+// Vector
+//
+
 template <typename T,
           size_t inlineCapacity = 0,
           typename Allocator = PartitionAllocator>
 class Vector
     : private VectorBuffer<T, INLINE_CAPACITY, Allocator>,
+      // Heap-allocated vectors with no inlineCapacity never need a destructor.
       public ConditionalDestructor<Vector<T, INLINE_CAPACITY, Allocator>,
                                    (INLINE_CAPACITY == 0) &&
                                        Allocator::isGarbageCollected> {
@@ -1040,6 +1066,10 @@
   using Base::allocationSize;
 };
 
+//
+// Vector out-of-line implementation
+//
+
 template <typename T, size_t inlineCapacity, typename Allocator>
 Vector<T, inlineCapacity, Allocator>::Vector(const Vector& other)
     : Base(other.capacity()) {
diff --git a/third_party/WebKit/public/web/WebHeap.h b/third_party/WebKit/public/web/WebHeap.h
index b51617a..748a2d27 100644
--- a/third_party/WebKit/public/web/WebHeap.h
+++ b/third_party/WebKit/public/web/WebHeap.h
@@ -37,17 +37,6 @@
 
 class WebHeap {
  public:
-  // While this object is active on the stack current thread is marked as
-  // being at safepoint. It can't manipulate garbage collector managed objects
-  // until it leaves safepoint, but it can block indefinitely.
-  // When thread is not at safe-point it must not block indefinitely because
-  // garbage collector might want to stop it.
-  class SafePointScope {
-   public:
-    BLINK_EXPORT SafePointScope();
-    BLINK_EXPORT ~SafePointScope();
-  };
-
   // These APIs are only for testing purposes and should not be used
   // outside of tests.
   BLINK_EXPORT static void collectGarbageForTesting();