Make WPTs for `getTargetRanges` check `innerHTML` in a subtest

The main purpose of the WPTs which are changed in this patch is checking
`getTargetRange` differences, but in some cases, browsers do not reach the
test because of the preceding `innerHTML` value check failure.

Therefore, it should be tested in a sub test and the main test shouldn't
abort with the preceding `innerHTML` value check failure.

Differential Revision: https://phabricator.services.mozilla.com/D96402

bugzilla-url: https://bugzilla.mozilla.org/show_bug.cgi?id=1676072
gecko-commit: 4dd201db88c04fa3f254bc30b085f68567d1d460
gecko-reviewers: smaug
diff --git a/input-events/input-events-get-target-ranges-backspace.tentative.html b/input-events/input-events-get-target-ranges-backspace.tentative.html
index 71db5e7..bd2621d 100644
--- a/input-events/input-events-get-target-ranges-backspace.tentative.html
+++ b/input-events/input-events-get-target-ranges-backspace.tentative.html
@@ -12,11 +12,11 @@
 <script>
 "use strict";
 
-promise_test(async () => {
+promise_test(async (t) => {
   initializeTest("<p>abc</p>");
   gSelection.collapse(gEditor.firstChild.firstChild, 0);
   await sendBackspaceKey();
-  assert_equals(gEditor.innerHTML, "<p>abc</p>");
+  checkEditorContentResultAsSubTest("<p>abc</p>", t.name);
   checkGetTargetRangesOfBeforeinputOnDeleteSomething({
     startContainer: gEditor.firstChild.firstChild,
     startOffset: 0,
@@ -27,11 +27,11 @@
 }, 'Backspace at "<p>[]abc</p>"');
 
 // Simply deletes the previous ASCII character of caret position.
-promise_test(async () => {
+promise_test(async (t) => {
   initializeTest("<p>abc</p>");
   gSelection.collapse(gEditor.firstChild.firstChild, 1);
   await sendBackspaceKey();
-  assert_equals(gEditor.innerHTML, "<p>bc</p>");
+  checkEditorContentResultAsSubTest("<p>bc</p>", t.name);
   checkGetTargetRangesOfBeforeinputOnDeleteSomething({
     startContainer: gEditor.firstChild.firstChild,
     startOffset: 0,
@@ -42,11 +42,11 @@
 }, 'Backspace at "<p>a[]bc</p>"');
 
 // Simply deletes the previous ASCII character of caret position.
-promise_test(async () => {
+promise_test(async (t) => {
   initializeTest("<p>abc</p>");
   gSelection.collapse(gEditor.firstChild.firstChild, 2);
   await sendBackspaceKey();
-  assert_equals(gEditor.innerHTML, "<p>ac</p>");
+  checkEditorContentResultAsSubTest("<p>ac</p>", t.name);
   checkGetTargetRangesOfBeforeinputOnDeleteSomething({
     startContainer: gEditor.firstChild.firstChild,
     startOffset: 1,
@@ -57,11 +57,11 @@
 }, 'Backspace at "<p>ab[]c</p>"');
 
 // Simply deletes the previous ASCII character of caret position.
-promise_test(async () => {
+promise_test(async (t) => {
   initializeTest("<p>abc</p>");
   gSelection.collapse(gEditor.firstChild.firstChild, 3);
   await sendBackspaceKey();
-  assert_equals(gEditor.innerHTML, "<p>ab</p>");
+  checkEditorContentResultAsSubTest("<p>ab</p>", t.name);
   checkGetTargetRangesOfBeforeinputOnDeleteSomething({
     startContainer: gEditor.firstChild.firstChild,
     startOffset: 2,
@@ -75,12 +75,12 @@
 // However, we need discussion whether the `<span>` element should be
 // contained by a range of `getTargetRanges()`.
 // https://github.com/w3c/input-events/issues/112
-promise_test(async () => {
+promise_test(async (t) => {
   initializeTest("<p>a<span>b</span>c</p>");
   let c = gEditor.querySelector("span").nextSibling;
   gSelection.collapse(c, 0);
   await sendBackspaceKey();
-  assert_equals(gEditor.innerHTML, "<p>ac</p>");
+  checkEditorContentResultAsSubTest("<p>ac</p>", t.name);
   checkGetTargetRangesOfBeforeinputOnDeleteSomething({
     startContainer: gEditor.firstChild,
     startOffset: 1,
@@ -94,12 +94,12 @@
 // However, we need discussion whether the `<span>` element should be
 // contained by a range of `getTargetRanges()`.
 // https://github.com/w3c/input-events/issues/112
-promise_test(async () => {
+promise_test(async (t) => {
   initializeTest("<p>a<span>b</span>c</p>");
   let b = gEditor.querySelector("span").firstChild;
   gSelection.collapse(b, 1);
   await sendBackspaceKey();
-  assert_equals(gEditor.innerHTML, "<p>ac</p>");
+  checkEditorContentResultAsSubTest("<p>ac</p>", t.name);
   checkGetTargetRangesOfBeforeinputOnDeleteSomething({
     startContainer: gEditor.firstChild,
     startOffset: 1,
@@ -113,12 +113,17 @@
 // character is deleted.  If it's deleted, it should be contained by
 // the range of `getTargetRanges()`, but needs discussion.
 // https://github.com/w3c/input-events/issues/112
-promise_test(async () => {
+promise_test(async (t) => {
   initializeTest("<p> abc</p>");
   gSelection.collapse(gEditor.firstChild.firstChild, 2);
   await sendBackspaceKey();
-  assert_in_array(gEditor.innerHTML, ["<p>bc</p>",
-                                      "<p> bc</p>"]);
+  checkEditorContentResultAsSubTest(
+    [
+      "<p>bc</p>",
+      "<p> bc</p>",
+    ],
+    t.name
+  );
   checkGetTargetRangesOfBeforeinputOnDeleteSomething({
     startContainer: gEditor.firstChild.firstChild,
     startOffset: gEditor.firstChild.firstChild.length == 2 ? 0 : 1,
@@ -128,7 +133,7 @@
   checkGetTargetRangesOfInputOnDeleteSomething();
 }, 'Backspace at "<p> a[]bc</p>"');
 
-promise_test(async () => {
+promise_test(async (t) => {
   initializeTest("<p>abc</p><p>def</p>");
   let p1 = gEditor.firstChild;
   let abc = p1.firstChild;
@@ -136,7 +141,7 @@
   let def = p2.firstChild;
   gSelection.collapse(def, 0);
   await sendBackspaceKey();
-  assert_equals(gEditor.innerHTML, "<p>abcdef</p>");
+  checkEditorContentResultAsSubTest("<p>abcdef</p>", t.name);
   checkGetTargetRangesOfBeforeinputOnDeleteSomething({
     startContainer: abc,
     startOffset: 3,
@@ -151,7 +156,7 @@
 // becoming visible when the blocks are joined.  Perhaps, they should be
 // contained by the range of `getTargetRanges()`, but needs discussion.
 // https://github.com/w3c/input-events/issues/112
-promise_test(async () => {
+promise_test(async (t) => {
   initializeTest("<p>abc   </p><p>   def</p>");
   let p1 = gEditor.firstChild;
   let abc = p1.firstChild;
@@ -159,7 +164,7 @@
   let def = p2.firstChild;
   gSelection.collapse(def, 3);
   await sendBackspaceKey();
-  assert_equals(gEditor.innerHTML, "<p>abcdef</p>");
+  checkEditorContentResultAsSubTest("<p>abcdef</p>", t.name);
   checkGetTargetRangesOfBeforeinputOnDeleteSomething({
     startContainer: abc,
     startOffset: 3,
@@ -174,7 +179,7 @@
 // becoming visible when the blocks are joined.  Perhaps, they should be
 // contained by the range of `getTargetRanges()`, but needs discussion.
 // https://github.com/w3c/input-events/issues/112
-promise_test(async () => {
+promise_test(async (t) => {
   initializeTest("<p>abc   </p><p>   def</p>");
   let p1 = gEditor.firstChild;
   let abc = p1.firstChild;
@@ -182,7 +187,7 @@
   let def = p2.firstChild;
   gSelection.collapse(def, 2);
   await sendBackspaceKey();
-  assert_equals(gEditor.innerHTML, "<p>abcdef</p>");
+  checkEditorContentResultAsSubTest("<p>abcdef</p>", t.name);
   checkGetTargetRangesOfBeforeinputOnDeleteSomething({
     startContainer: abc,
     startOffset: 3,
@@ -197,7 +202,7 @@
 // becoming visible when the blocks are joined.  Perhaps, they should be
 // contained by the range of `getTargetRanges()`, but needs discussion.
 // https://github.com/w3c/input-events/issues/112
-promise_test(async () => {
+promise_test(async (t) => {
   initializeTest("<p>abc   </p><p>   def</p>");
   let p1 = gEditor.firstChild;
   let abc = p1.firstChild;
@@ -205,7 +210,7 @@
   let def = p2.firstChild;
   gSelection.collapse(def, 1);
   await sendBackspaceKey();
-  assert_equals(gEditor.innerHTML, "<p>abcdef</p>");
+  checkEditorContentResultAsSubTest("<p>abcdef</p>", t.name);
   checkGetTargetRangesOfBeforeinputOnDeleteSomething({
     startContainer: abc,
     startOffset: 3,
@@ -220,7 +225,7 @@
 // becoming visible when the blocks are joined.  Perhaps, they should be
 // contained by the range of `getTargetRanges()`, but needs discussion.
 // https://github.com/w3c/input-events/issues/112
-promise_test(async () => {
+promise_test(async (t) => {
   initializeTest("<p>abc   </p><p>   def</p>");
   let p1 = gEditor.firstChild;
   let abc = p1.firstChild;
@@ -228,7 +233,7 @@
   let def = p2.firstChild;
   gSelection.collapse(def, 0);
   await sendBackspaceKey();
-  assert_equals(gEditor.innerHTML, "<p>abcdef</p>");
+  checkEditorContentResultAsSubTest("<p>abcdef</p>", t.name);
   checkGetTargetRangesOfBeforeinputOnDeleteSomething({
     startContainer: abc,
     startOffset: 3,
@@ -238,13 +243,13 @@
   checkGetTargetRangesOfInputOnDeleteSomething();
 }, 'Backspace at "<p>abc   </p><p>[]   def</p>"');
 
-promise_test(async () => {
+promise_test(async (t) => {
   initializeTest("<p>abc</p><p><b>def</b></p>");
   let abc = gEditor.querySelector("p").firstChild;
   let def = gEditor.querySelector("b").firstChild;
   gSelection.collapse(def, 0);
   await sendBackspaceKey();
-  assert_equals(gEditor.innerHTML, "<p>abc<b>def</b></p>");
+  checkEditorContentResultAsSubTest("<p>abc<b>def</b></p>", t.name);
   checkGetTargetRangesOfBeforeinputOnDeleteSomething({
     startContainer: abc,
     startOffset: 3,
@@ -254,14 +259,19 @@
   checkGetTargetRangesOfInputOnDeleteSomething();
 }, 'Backspace at "<p>abc</p><p><b>[]def</b></p>"');
 
-promise_test(async () => {
+promise_test(async (t) => {
   initializeTest("<p><b>abc</b></p><p><b>def</b></p>");
   let abc = gEditor.querySelector("p > b").firstChild;
   let def = gEditor.querySelector("P + p > b").firstChild;
   gSelection.collapse(def, 0);
   await sendBackspaceKey();
-  assert_in_array(gEditor.innerHTML, ["<p><b>abc</b><b>def</b></p>",
-                                      "<p><b>abcdef</b></p>"]);
+  checkEditorContentResultAsSubTest(
+    [
+      "<p><b>abc</b><b>def</b></p>",
+      "<p><b>abcdef</b></p>",
+    ],
+    t.name
+  );
   checkGetTargetRangesOfBeforeinputOnDeleteSomething({
     startContainer: abc,
     startOffset: 3,
@@ -271,13 +281,13 @@
   checkGetTargetRangesOfInputOnDeleteSomething();
 }, 'Backspace at "<p><b>abc</b></p><p><b>[]def</b></p>"');
 
-promise_test(async () => {
+promise_test(async (t) => {
   initializeTest("<p><i>abc</i></p><p><b>def</b></p>");
   let abc = gEditor.querySelector("i").firstChild;
   let def = gEditor.querySelector("b").firstChild;
   gSelection.collapse(def, 0);
   await sendBackspaceKey();
-  assert_equals(gEditor.innerHTML, "<p><i>abc</i><b>def</b></p>");
+  checkEditorContentResultAsSubTest("<p><i>abc</i><b>def</b></p>", t.name);
   checkGetTargetRangesOfBeforeinputOnDeleteSomething({
     startContainer: abc,
     startOffset: 3,
@@ -293,7 +303,7 @@
 // deleted.  Perhaps, the invisible white-spaces should be contained by
 // the range of `getTargetRanges()`, but needs discussion.
 // https://github.com/w3c/input-events/issues/112
-promise_test(async () => {
+promise_test(async (t) => {
   initializeTest("<pre>abc   </pre><p>   def</p>");
   let pre = gEditor.firstChild;
   let abc = pre.firstChild;
@@ -303,7 +313,7 @@
   await sendBackspaceKey();
   // https://github.com/w3c/input-events/issues/112
   // Shouldn't make the invisible white-spaces visible.
-  assert_equals(gEditor.innerHTML, "<pre>abc   def</pre>");
+  checkEditorContentResultAsSubTest("<pre>abc   def</pre>", t.name);
   checkGetTargetRangesOfBeforeinputOnDeleteSomething({
     startContainer: abc,
     startOffset: 6,
@@ -322,7 +332,7 @@
 // by additional range of `getTargetRanges()` or not because of the
 // implementation cost and runtime cost.  Needs discuss.
 // https://github.com/w3c/input-events/issues/112
-promise_test(async () => {
+promise_test(async (t) => {
   initializeTest("<pre>abc   </pre><p>   def   </p>");
   let pre = gEditor.firstChild;
   let abc = pre.firstChild;
@@ -330,7 +340,7 @@
   let def = p.firstChild;
   gSelection.collapse(def, 3);
   await sendBackspaceKey();
-  assert_equals(gEditor.innerHTML, "<pre>abc   def   </pre>");
+  checkEditorContentResultAsSubTest("<pre>abc   def   </pre>", t.name);
   checkGetTargetRangesOfBeforeinputOnDeleteSomething({
     startContainer: abc,
     startOffset: 6,
@@ -347,7 +357,7 @@
 // be in the range of `getTargetRanges()`, but not so for the preformatted
 // visible leading white-spaces.  But needs discussion.
 // https://github.com/w3c/input-events/issues/112
-promise_test(async () => {
+promise_test(async (t) => {
   initializeTest("<p>abc   </p><pre>   def</pre>");
   let p = gEditor.firstChild;
   let abc = p.firstChild;
@@ -355,10 +365,15 @@
   let def = pre.firstChild;
   gSelection.collapse(def, 0);
   await sendBackspaceKey();
-  assert_in_array(gEditor.innerHTML, ["<p>abc &nbsp; def</p>",
-                                      "<p>abc&nbsp;&nbsp; def</p>",
-                                      "<p>abc&nbsp; &nbsp;def</p>",
-                                      "<p>abc &nbsp;&nbsp;def</p>"]);
+  checkEditorContentResultAsSubTest(
+    [
+      "<p>abc &nbsp; def</p>",
+      "<p>abc&nbsp;&nbsp; def</p>",
+      "<p>abc&nbsp; &nbsp;def</p>",
+      "<p>abc &nbsp;&nbsp;def</p>",
+    ],
+    t.name
+  );
   checkGetTargetRangesOfBeforeinputOnDeleteSomething({
     startContainer: abc,
     startOffset: 6,
@@ -373,7 +388,7 @@
 // deleted and join the blocks.  Therefore, the target range should contain
 // the `<br>` element and block boundaries. But maybe needs discussion.
 // https://github.com/w3c/input-events/issues/112
-promise_test(async () => {
+promise_test(async (t) => {
   initializeTest("<p>abc<br></p><p>def</p>");
   let p1 = gEditor.firstChild;
   let abc = p1.firstChild;
@@ -381,7 +396,7 @@
   let def = p2.firstChild;
   gSelection.collapse(def, 0);
   await sendBackspaceKey();
-  assert_equals(gEditor.innerHTML, "<p>abcdef</p>");
+  checkEditorContentResultAsSubTest("<p>abcdef</p>", t.name);
   checkGetTargetRangesOfBeforeinputOnDeleteSomething({
     startContainer: p1,
     startOffset: 1,
@@ -396,7 +411,7 @@
 // should be deleted and join the blocks.  Therefore, the target range should
 // contain the `<br>` element and block boundaries. But maybe needs discussion.
 // https://github.com/w3c/input-events/issues/112
-promise_test(async () => {
+promise_test(async (t) => {
   initializeTest("<p>abc<br><br></p><p>def</p>");
   let p1 = gEditor.firstChild;
   let abc = p1.firstChild;
@@ -404,7 +419,7 @@
   let def = p2.firstChild;
   gSelection.collapse(def, 0);
   await sendBackspaceKey();
-  assert_equals(gEditor.innerHTML, "<p>abc<br>def</p>");
+  checkEditorContentResultAsSubTest("<p>abc<br>def</p>", t.name);
   checkGetTargetRangesOfBeforeinputOnDeleteSomething({
     startContainer: p1,
     startOffset: 2,
@@ -416,13 +431,13 @@
 
 // Deleting visible `<br>` element should be contained by a range of
 // `getTargetRanges()`.
-promise_test(async () => {
+promise_test(async (t) => {
   initializeTest("<p>abc<br>def</p>");
   let p = document.querySelector("p");
   let def = gEditor.querySelector("br").nextSibling;
   gSelection.collapse(def, 0);
   await sendBackspaceKey();
-  assert_equals(gEditor.innerHTML, "<p>abcdef</p>");
+  checkEditorContentResultAsSubTest("<p>abcdef</p>", t.name);
   checkGetTargetRangesOfBeforeinputOnDeleteSomething({
     startContainer: p,
     startOffset: 1,
@@ -434,13 +449,13 @@
 
 // Deleting visible `<br>` element following white-space should not include
 // the preceding white-space in the range.
-promise_test(async () => {
+promise_test(async (t) => {
   initializeTest("<p>abc <br>def</p>");
   let p = gEditor.querySelector("p");
   let def = gEditor.querySelector("br").nextSibling;
   gSelection.collapse(def, 0);
   await sendBackspaceKey();
-  assert_equals(gEditor.innerHTML, "<p>abc def</p>");
+  checkEditorContentResultAsSubTest("<p>abc def</p>", t.name);
   checkGetTargetRangesOfBeforeinputOnDeleteSomething({
     startContainer: p,
     startOffset: 1,
@@ -450,13 +465,13 @@
   checkGetTargetRangesOfInputOnDeleteSomething();
 }, 'Backspace at "<p>abc <br>[]def</p>"');
 
-promise_test(async () => {
+promise_test(async (t) => {
   initializeTest(`<p>abc<img src="${kImgSrc}">def</p>`);
   let p = gEditor.querySelector("p");
   let def = p.lastChild;
   gSelection.collapse(def, 0);
   await sendBackspaceKey();
-  assert_equals(gEditor.innerHTML, "<p>abcdef</p>");
+  checkEditorContentResultAsSubTest("<p>abcdef</p>", t.name);
   checkGetTargetRangesOfBeforeinputOnDeleteSomething({
     startContainer: p,
     startOffset: 1,
@@ -468,13 +483,13 @@
 
 // White-spaces around `<img>` element are visible so that they shouldn't
 // be included into the target ranges.
-promise_test(async () => {
+promise_test(async (t) => {
   initializeTest(`<p>abc <img src="${kImgSrc}">def</p>`);
   let p = gEditor.querySelector("p");
   let def = p.lastChild;
   gSelection.collapse(def, 0);
   await sendBackspaceKey();
-  assert_equals(gEditor.innerHTML, "<p>abc def</p>");
+  checkEditorContentResultAsSubTest("<p>abc def</p>", t.name);
   checkGetTargetRangesOfBeforeinputOnDeleteSomething({
     startContainer: p,
     startOffset: 1,
@@ -486,13 +501,13 @@
 
 // White-spaces around `<img>` element are visible so that they shouldn't
 // be included into the target ranges.
-promise_test(async () => {
+promise_test(async (t) => {
   initializeTest(`<p>abc<img src="${kImgSrc}"> def</p>`);
   let p = gEditor.querySelector("p");
   let def = p.lastChild;
   gSelection.collapse(def, 0);
   await sendBackspaceKey();
-  assert_equals(gEditor.innerHTML, "<p>abc def</p>");
+  checkEditorContentResultAsSubTest("<p>abc def</p>", t.name);
   checkGetTargetRangesOfBeforeinputOnDeleteSomething({
     startContainer: p,
     startOffset: 1,
@@ -502,13 +517,16 @@
   checkGetTargetRangesOfInputOnDeleteSomething();
 }, 'Backspace at "<p>abc<img>[] def</p>"');
 
-promise_test(async () => {
+promise_test(async (t) => {
   initializeTest(`<p>abc<img src="${kImgSrc}"><img src="${kImgSrc}">def</p>`);
   let p = gEditor.querySelector("p");
   let abc = p.firstChild;
   gSelection.collapse(p, 2);
   await sendBackspaceKey();
-  assert_equals(gEditor.innerHTML, `<p>abc<img src="${kImgSrc}">def</p>`);
+  checkEditorContentResultAsSubTest(
+    `<p>abc<img src="${kImgSrc}">def</p>`,
+    t.name
+  );
   checkGetTargetRangesOfBeforeinputOnDeleteSomething({
     startContainer: p,
     startOffset: 1,
@@ -518,13 +536,16 @@
   checkGetTargetRangesOfInputOnDeleteSomething();
 }, 'Backspace at "<p>abc<img>{}<img>def</p>"');
 
-promise_test(async () => {
+promise_test(async (t) => {
   initializeTest(`<p>abc<img src="${kImgSrc}"><img src="${kImgSrc}">def</p>`);
   let p = gEditor.querySelector("p");
   let def = p.lastChild;
   gSelection.collapse(def, 0);
   await sendBackspaceKey();
-  assert_equals(gEditor.innerHTML, `<p>abc<img src="${kImgSrc}">def</p>`);
+  checkEditorContentResultAsSubTest(
+    `<p>abc<img src="${kImgSrc}">def</p>`,
+    t.name
+  );
   checkGetTargetRangesOfBeforeinputOnDeleteSomething({
     startContainer: p,
     startOffset: 2,
@@ -534,14 +555,14 @@
   checkGetTargetRangesOfInputOnDeleteSomething();
 }, 'Backspace at "<p>abc<img><img>[]def</p>"');
 
-promise_test(async () => {
+promise_test(async (t) => {
   initializeTest(`<div>abc<hr>def</div>`);
   let div = gEditor.querySelector("div");
   let hr = gEditor.querySelector("hr");
   let def = hr.nextSibling;
   gSelection.collapse(def, 0);
   await sendBackspaceKey();
-  assert_equals(gEditor.innerHTML, "<div>abcdef</div>");
+  checkEditorContentResultAsSubTest("<div>abcdef</div>", t.name);
   checkGetTargetRangesOfBeforeinputOnDeleteSomething({
     startContainer: div,
     startOffset: 1,
@@ -555,7 +576,7 @@
 // they should be included into the target ranges to avoid they bcome
 // visible.
 // https://github.com/w3c/input-events/issues/112
-promise_test(async () => {
+promise_test(async (t) => {
   initializeTest(`<div>abc <hr>def</div>`);
   let div = gEditor.querySelector("div");
   let abc = div.firstChild;
@@ -563,7 +584,7 @@
   let def = hr.nextSibling;
   gSelection.collapse(def, 0);
   await sendBackspaceKey();
-  assert_equals(gEditor.innerHTML, "<div>abcdef</div>");
+  checkEditorContentResultAsSubTest("<div>abcdef</div>", t.name);
   checkGetTargetRangesOfBeforeinputOnDeleteSomething({
     startContainer: abc,
     startOffset: 3,
@@ -577,14 +598,14 @@
 // they should be included into the target ranges to avoid they bcome
 // visible.
 // https://github.com/w3c/input-events/issues/112
-promise_test(async () => {
+promise_test(async (t) => {
   initializeTest(`<div>abc<hr> def</div>`);
   let div = gEditor.querySelector("div");
   let hr = gEditor.querySelector("hr");
   let def = hr.nextSibling;
   gSelection.collapse(def, 1);
   await sendBackspaceKey();
-  assert_equals(gEditor.innerHTML, "<div>abcdef</div>");
+  checkEditorContentResultAsSubTest("<div>abcdef</div>", t.name);
   checkGetTargetRangesOfBeforeinputOnDeleteSomething({
     startContainer: div,
     startOffset: 1,
@@ -596,13 +617,13 @@
 
 // Invisible `<br>` element immediately before `<hr>` element should be
 // deleted once, and both of them should be included in the target range.
-promise_test(async () => {
+promise_test(async (t) => {
   initializeTest(`<div>abc<br><hr>def</div>`);
   let div = gEditor.querySelector("div");
   let def = div.lastChild;
   gSelection.collapse(def, 0);
   await sendBackspaceKey();
-  assert_equals(gEditor.innerHTML, "<div>abcdef</div>");
+  checkEditorContentResultAsSubTest("<div>abcdef</div>", t.name);
   checkGetTargetRangesOfBeforeinputOnDeleteSomething({
     startContainer: div,
     startOffset: 1,
@@ -616,13 +637,13 @@
 // the following white-space in the range because it shouldn't become
 // visible and should be deleted for avoiding it.
 // https://github.com/w3c/input-events/issues/112
-promise_test(async () => {
+promise_test(async (t) => {
   initializeTest("<p>abc<br> def</p>");
   let p = gEditor.querySelector("p");
   let def = gEditor.querySelector("br").nextSibling;
   gSelection.collapse(def, 0);
   await sendBackspaceKey();
-  assert_equals(gEditor.innerHTML, "<p>abcdef</p>");
+  checkEditorContentResultAsSubTest("<p>abcdef</p>", t.name);
   checkGetTargetRangesOfBeforeinputOnDeleteSomething({
     startContainer: p,
     startOffset: 1,
@@ -631,13 +652,13 @@
   });
   checkGetTargetRangesOfInputOnDeleteSomething();
 }, 'Backspace at "<p>abc<br>[] def</p>"');
-promise_test(async () => {
+promise_test(async (t) => {
   initializeTest("<p>abc<br> def</p>");
   let p = gEditor.querySelector("p");
   let def = gEditor.querySelector("br").nextSibling;
   gSelection.collapse(def, 1);
   await sendBackspaceKey();
-  assert_equals(gEditor.innerHTML, "<p>abcdef</p>");
+  checkEditorContentResultAsSubTest("<p>abcdef</p>", t.name);
   checkGetTargetRangesOfBeforeinputOnDeleteSomething({
     startContainer: p,
     startOffset: 1,
@@ -647,15 +668,20 @@
   checkGetTargetRangesOfInputOnDeleteSomething();
 }, 'Backspace at "<p>abc<br> []def</p>"');
 
-promise_test(async () => {
+promise_test(async (t) => {
   initializeTest("<div>abc<p>def<br>ghi</p></div>");
   let p = gEditor.querySelector("p");
   let def = p.firstChild;
   let abc = gEditor.firstChild.firstChild;
   gSelection.collapse(def, 0);
   await sendBackspaceKey();
-  assert_in_array(gEditor.innerHTML, ["<div>abcdef<p>ghi</p></div>",
-                                      "<div>abcdef<br><p>ghi</p></div>"]);
+  checkEditorContentResultAsSubTest(
+    [
+      "<div>abcdef<p>ghi</p></div>",
+      "<div>abcdef<br><p>ghi</p></div>",
+    ],
+    t.name
+  );
   checkGetTargetRangesOfBeforeinputOnDeleteSomething({
     startContainer: abc,
     startOffset: 3,
@@ -670,15 +696,20 @@
 // the child block, and they should be contained in a range of
 // `getTargetRanges()`, but maybe needs discussion.
 // https://github.com/w3c/input-events/issues/112
-promise_test(async () => {
+promise_test(async (t) => {
   initializeTest("<div>abc   <p>   def<br>ghi</p></div>");
   let p = gEditor.querySelector("p");
   let def = p.firstChild;
   let abc = gEditor.firstChild.firstChild;
   gSelection.collapse(def, 3);
   await sendBackspaceKey();
-  assert_in_array(gEditor.innerHTML, ["<div>abcdef<p>ghi</p></div>",
-                                      "<div>abcdef<br><p>ghi</p></div>"]);
+  checkEditorContentResultAsSubTest(
+    [
+      "<div>abcdef<p>ghi</p></div>",
+      "<div>abcdef<br><p>ghi</p></div>",
+    ],
+    t.name
+  );
   checkGetTargetRangesOfBeforeinputOnDeleteSomething({
     startContainer: abc,
     startOffset: 3,
@@ -688,13 +719,13 @@
   checkGetTargetRangesOfInputOnDeleteSomething();
 }, 'Backspace at "<div>abc   <p>   []def<br>ghi</p></div>"');
 
-promise_test(async () => {
+promise_test(async (t) => {
   initializeTest("<div>abc<p><b>def</b></p></div>");
   let abc = gEditor.querySelector("div").firstChild;
   let def = gEditor.querySelector("b").firstChild;
   gSelection.collapse(def, 0);
   await sendBackspaceKey();
-  assert_equals(gEditor.innerHTML, "<div>abc<b>def</b></div>");
+  checkEditorContentResultAsSubTest("<div>abc<b>def</b></div>", t.name);
   checkGetTargetRangesOfBeforeinputOnDeleteSomething({
     startContainer: abc,
     startOffset: 3,
@@ -704,14 +735,19 @@
   checkGetTargetRangesOfInputOnDeleteSomething();
 }, 'Backspace at "<div>abc<p><b>[]def</b></p></div>"');
 
-promise_test(async () => {
+promise_test(async (t) => {
   initializeTest("<div><b>abc</b><p><b>def</b></p></div>");
   let abc = gEditor.querySelector("b").firstChild;
   let def = gEditor.querySelector("p > b").firstChild;
   gSelection.collapse(def, 0);
   await sendBackspaceKey();
-  assert_in_array(gEditor.innerHTML, ["<div><b>abc</b><b>def</b></div>",
-                                      "<div><b>abcdef</b></div>"]);
+  checkEditorContentResultAsSubTest(
+    [
+      "<div><b>abc</b><b>def</b></div>",
+      "<div><b>abcdef</b></div>",
+    ],
+    t.name
+  );
   checkGetTargetRangesOfBeforeinputOnDeleteSomething({
     startContainer: abc,
     startOffset: 3,
@@ -721,13 +757,13 @@
   checkGetTargetRangesOfInputOnDeleteSomething();
 }, 'Backspace at "<div><b>abc</b><p><b>[]def</b></p></div>"');
 
-promise_test(async () => {
+promise_test(async (t) => {
   initializeTest("<div><i>abc</i><p><b>def</b></p></div>");
   let abc = gEditor.querySelector("i").firstChild;
   let def = gEditor.querySelector("b").firstChild;
   gSelection.collapse(def, 0);
   await sendBackspaceKey();
-  assert_equals(gEditor.innerHTML, "<div><i>abc</i><b>def</b></div>");
+  checkEditorContentResultAsSubTest("<div><i>abc</i><b>def</b></div>", t.name);
   checkGetTargetRangesOfBeforeinputOnDeleteSomething({
     startContainer: abc,
     startOffset: 3,
@@ -737,14 +773,19 @@
   checkGetTargetRangesOfInputOnDeleteSomething();
 }, 'Backspace at "<div><i>abc</i><p><b>[]def</b></p></div>"');
 
-promise_test(async () => {
+promise_test(async (t) => {
   initializeTest("<div><p>abc</p>def</div>");
   let abc = gEditor.querySelector("p").firstChild;
   let def = gEditor.querySelector("p").nextSibling;
   gSelection.collapse(def, 0);
   await sendBackspaceKey();
-  assert_in_array(gEditor.innerHTML, ["<div><p>abcdef</p></div>",
-                                      "<div><p>abcdef<br></p></div>"]);
+  checkEditorContentResultAsSubTest(
+    [
+      "<div><p>abcdef</p></div>",
+      "<div><p>abcdef<br></p></div>",
+    ],
+    t.name
+  );
   checkGetTargetRangesOfBeforeinputOnDeleteSomething({
     startContainer: abc,
     startOffset: 3,
@@ -759,14 +800,19 @@
 // in the parent block, and they should be contained by a range of
 // `getTargetRanges()`, but maybe needs discussion.
 // https://github.com/w3c/input-events/issues/112
-promise_test(async () => {
+promise_test(async (t) => {
   initializeTest("<div><p>abc   </p>   def</div>");
   let abc = gEditor.querySelector("p").firstChild;
   let def = gEditor.querySelector("p").nextSibling;
   gSelection.collapse(def, 3);
   await sendBackspaceKey();
-  assert_in_array(gEditor.innerHTML, ["<div><p>abcdef</p></div>",
-                                      "<div><p>abcdef<br></p></div>"]);
+  checkEditorContentResultAsSubTest(
+    [
+      "<div><p>abcdef</p></div>",
+      "<div><p>abcdef<br></p></div>",
+    ],
+    t.name
+  );
   checkGetTargetRangesOfBeforeinputOnDeleteSomething({
     startContainer: abc,
     startOffset: 3,
@@ -776,13 +822,13 @@
   checkGetTargetRangesOfInputOnDeleteSomething();
 }, 'Backspace at "<div><p>abc   </p>   []def</div>"');
 
-promise_test(async () => {
+promise_test(async (t) => {
   initializeTest("<div><p><b>abc</b></p>def</div>");
   let abc = gEditor.querySelector("b").firstChild;
   let def = gEditor.querySelector("p").nextSibling;
   gSelection.collapse(def, 0);
   await sendBackspaceKey();
-  assert_equals(gEditor.innerHTML, "<div><p><b>abc</b>def</p></div>");
+  checkEditorContentResultAsSubTest("<div><p><b>abc</b>def</p></div>", t.name);
   checkGetTargetRangesOfBeforeinputOnDeleteSomething({
     startContainer: abc,
     startOffset: 3,
@@ -792,14 +838,19 @@
   checkGetTargetRangesOfInputOnDeleteSomething();
 }, 'Backspace at "<div><p><b>abc</b></p>[]def</div>"');
 
-promise_test(async () => {
+promise_test(async (t) => {
   initializeTest("<div><p><b>abc</b></p><b>def</b></div>");
   let abc = gEditor.querySelector("b").firstChild;
   let def = gEditor.querySelector("div > b").firstChild;
   gSelection.collapse(def, 0);
   await sendBackspaceKey();
-  assert_in_array(gEditor.innerHTML, ["<div><p><b>abc</b><b>def</b></p></div>",
-                                      "<div><p><b>abcdef</b></p></div>"]);
+  checkEditorContentResultAsSubTest(
+    [
+      "<div><p><b>abc</b><b>def</b></p></div>",
+      "<div><p><b>abcdef</b></p></div>",
+    ],
+    t.name
+  );
   checkGetTargetRangesOfBeforeinputOnDeleteSomething({
     startContainer: abc,
     startOffset: 3,
@@ -809,13 +860,16 @@
   checkGetTargetRangesOfInputOnDeleteSomething();
 }, 'Backspace at "<div><p><b>abc</b></p><b>[]def</b></div>"');
 
-promise_test(async () => {
+promise_test(async (t) => {
   initializeTest("<div><p><b>abc</b></p><i>def</i></div>");
   let abc = gEditor.querySelector("b").firstChild;
   let def = gEditor.querySelector("i").firstChild;
   gSelection.collapse(def, 0);
   await sendBackspaceKey();
-  assert_equals(gEditor.innerHTML, "<div><p><b>abc</b><i>def</i></p></div>");
+  checkEditorContentResultAsSubTest(
+    "<div><p><b>abc</b><i>def</i></p></div>",
+    t.name
+  );
   checkGetTargetRangesOfBeforeinputOnDeleteSomething({
     startContainer: abc,
     startOffset: 3,
@@ -825,13 +879,13 @@
   checkGetTargetRangesOfInputOnDeleteSomething();
 }, 'Backspace at "<div><p><b>abc</b></p><i>[]def</i></div>"');
 
-promise_test(async () => {
+promise_test(async (t) => {
   initializeTest("<div>abc<ul><li>def</li></ul>ghi</div>");
   let abc = gEditor.querySelector("div").firstChild;
   let def = gEditor.querySelector("li").firstChild;
   gSelection.collapse(def, 0);
   await sendBackspaceKey();
-  assert_equals(gEditor.innerHTML, "<div>abcdefghi</div>");
+  checkEditorContentResultAsSubTest("<div>abcdefghi</div>", t.name);
   checkGetTargetRangesOfBeforeinputOnDeleteSomething({
     startContainer: abc,
     startOffset: 3,
@@ -841,13 +895,13 @@
   checkGetTargetRangesOfInputOnDeleteSomething();
 }, 'Backspace at "<div>abc<ul><li>[]def</li></ul>ghi</div>"');
 
-promise_test(async () => {
+promise_test(async (t) => {
   initializeTest("<div>abc  <ul><li> def </li></ul>  ghi</div>");
   let abc = gEditor.querySelector("div").firstChild;
   let def = gEditor.querySelector("li").firstChild;
   gSelection.collapse(def, 1);
   await sendBackspaceKey();
-  assert_equals(gEditor.innerHTML, "<div>abcdefghi</div>");
+  checkEditorContentResultAsSubTest("<div>abcdefghi</div>", t.name);
   checkGetTargetRangesOfBeforeinputOnDeleteSomething({
     startContainer: abc,
     startOffset: 3,
@@ -857,13 +911,13 @@
   checkGetTargetRangesOfInputOnDeleteSomething();
 }, 'Backspace at "<div>abc  <ul><li> []def </li></ul>  ghi</div>"');
 
-promise_test(async () => {
+promise_test(async (t) => {
   initializeTest("<div>abc  <ul><li> def </li></ul>  ghi</div>");
   let abc = gEditor.querySelector("div").firstChild;
   let def = gEditor.querySelector("li").firstChild;
   gSelection.collapse(def, 0);
   await sendBackspaceKey();
-  assert_equals(gEditor.innerHTML, "<div>abcdefghi</div>");
+  checkEditorContentResultAsSubTest("<div>abcdefghi</div>", t.name);
   checkGetTargetRangesOfBeforeinputOnDeleteSomething({
     startContainer: abc,
     startOffset: 3,
@@ -873,13 +927,16 @@
   checkGetTargetRangesOfInputOnDeleteSomething();
 }, 'Backspace at "<div>abc  <ul><li>[] def </li></ul>  ghi</div>"');
 
-promise_test(async () => {
+promise_test(async (t) => {
   initializeTest("<div>abc<ul><li>def</li></ul>ghi</div>");
   let def = gEditor.querySelector("li").firstChild;
   let ghi = gEditor.querySelector("ul").nextSibling;
   gSelection.collapse(ghi, 0);
   await sendBackspaceKey();
-  assert_equals(gEditor.innerHTML, "<div>abc<ul><li>defghi</li></ul></div>");
+  checkEditorContentResultAsSubTest(
+    "<div>abc<ul><li>defghi</li></ul></div>",
+    t.name
+  );
   checkGetTargetRangesOfBeforeinputOnDeleteSomething({
     startContainer: def,
     startOffset: 3,
@@ -889,15 +946,20 @@
   checkGetTargetRangesOfInputOnDeleteSomething();
 }, 'Backspace at "<div>abc<ul><li>def</li></ul>[]ghi</div>"');
 
-promise_test(async () => {
+promise_test(async (t) => {
   initializeTest("<div>abc <ul><li>  def  </li></ul> ghi</div>");
   let def = gEditor.querySelector("li").firstChild;
   let ghi = gEditor.querySelector("ul").nextSibling;
   gSelection.collapse(ghi, 1);
   await sendBackspaceKey();
-  assert_in_array(gEditor.innerHTML, ["<div>abc <ul><li>  defghi</li></ul></div>",
-                                      "<div>abc <ul><li>defghi</li></ul></div>",
-                                      "<div>abc<ul><li>defghi</li></ul></div>"]);
+  checkEditorContentResultAsSubTest(
+    [
+      "<div>abc <ul><li>  defghi</li></ul></div>",
+      "<div>abc <ul><li>defghi</li></ul></div>",
+      "<div>abc<ul><li>defghi</li></ul></div>",
+    ],
+    t.name
+  );
   checkGetTargetRangesOfBeforeinputOnDeleteSomething({
     startContainer: def,
     startOffset: 5,
@@ -907,15 +969,20 @@
   checkGetTargetRangesOfInputOnDeleteSomething();
 }, 'Backspace at "<div>abc <ul><li>  def  </li></ul> []ghi</div>"');
 
-promise_test(async () => {
+promise_test(async (t) => {
   initializeTest("<div>abc <ul><li>  def  </li></ul> ghi</div>");
   let def = gEditor.querySelector("li").firstChild;
   let ghi = gEditor.querySelector("ul").nextSibling;
   gSelection.collapse(ghi, 0);
   await sendBackspaceKey();
-  assert_in_array(gEditor.innerHTML, ["<div>abc <ul><li>  defghi</li></ul></div>",
-                                      "<div>abc <ul><li>defghi</li></ul></div>",
-                                      "<div>abc<ul><li>defghi</li></ul></div>"]);
+  checkEditorContentResultAsSubTest(
+    [
+      "<div>abc <ul><li>  defghi</li></ul></div>",
+      "<div>abc <ul><li>defghi</li></ul></div>",
+      "<div>abc<ul><li>defghi</li></ul></div>",
+    ],
+    t.name
+  );
   checkGetTargetRangesOfBeforeinputOnDeleteSomething({
     startContainer: def,
     startOffset: 5,
@@ -925,13 +992,16 @@
   checkGetTargetRangesOfInputOnDeleteSomething();
 }, 'Backspace at "<div>abc <ul><li>  def  </li></ul>[] ghi</div>"');
 
-promise_test(async () => {
+promise_test(async (t) => {
   initializeTest("<div>abc<ul><li>def</li><li>ghi</li></ul>jkl</div>");
   let abc = gEditor.querySelector("div").firstChild;
   let def = gEditor.querySelector("li").firstChild;
   gSelection.collapse(def, 0);
   await sendBackspaceKey();
-  assert_equals(gEditor.innerHTML, "<div>abcdef<ul><li>ghi</li></ul>jkl</div>");
+  checkEditorContentResultAsSubTest(
+    "<div>abcdef<ul><li>ghi</li></ul>jkl</div>",
+    t.name
+  );
   checkGetTargetRangesOfBeforeinputOnDeleteSomething({
     startContainer: abc,
     startOffset: 3,
@@ -941,13 +1011,16 @@
   checkGetTargetRangesOfInputOnDeleteSomething();
 }, 'Backspace at "<div>abc<ul><li>[]def</li><li>ghi</li></ul>jkl</div>"');
 
-promise_test(async () => {
+promise_test(async (t) => {
   initializeTest("<div>abc<ul><li>def</li><li>ghi</li></ul>jkl</div>");
   let def = gEditor.querySelector("li").firstChild;
   let ghi = gEditor.querySelector("li + li").firstChild;
   gSelection.collapse(ghi, 0);
   await sendBackspaceKey();
-  assert_equals(gEditor.innerHTML, "<div>abc<ul><li>defghi</li></ul>jkl</div>");
+  checkEditorContentResultAsSubTest(
+    "<div>abc<ul><li>defghi</li></ul>jkl</div>",
+    t.name
+  );
   checkGetTargetRangesOfBeforeinputOnDeleteSomething({
     startContainer: def,
     startOffset: 3,
@@ -957,13 +1030,16 @@
   checkGetTargetRangesOfInputOnDeleteSomething();
 }, 'Backspace at "<div>abc<ul><li>def</li><li>[]ghi</li></ul>jkl</div>"');
 
-promise_test(async () => {
+promise_test(async (t) => {
   initializeTest("<div>abc<ul><li>def</li><li>ghi</li></ul>jkl</div>");
   let ghi = gEditor.querySelector("li + li").firstChild;
   let jkl = gEditor.querySelector("ul").nextSibling;
   gSelection.collapse(jkl, 0);
   await sendBackspaceKey();
-  assert_equals(gEditor.innerHTML, "<div>abc<ul><li>def</li><li>ghijkl</li></ul></div>");
+  assert_equals(gEditor.innerHTML,
+    "<div>abc<ul><li>def</li><li>ghijkl</li></ul></div>",
+    t.name
+  );
   checkGetTargetRangesOfBeforeinputOnDeleteSomething({
     startContainer: ghi,
     startOffset: 3,
@@ -977,14 +1053,14 @@
 // case, it should be treated as joining with the previous paragraph.
 // The target range should include the invisible <br> element in the empty
 // paragraph.
-promise_test(async () => {
+promise_test(async (t) => {
   initializeTest("<p>abc</p><p><br></p>");
   let p1 = gEditor.querySelector("p");
   let abc = p1.firstChild;
   let p2 = p1.nextSibling;
   gSelection.collapse(p2, 0);
   await sendBackspaceKey();
-  assert_equals(gEditor.innerHTML, "<p>abc</p>");
+  checkEditorContentResultAsSubTest("<p>abc</p>", t.name);
   checkGetTargetRangesOfBeforeinputOnDeleteSomething({
     startContainer: abc,
     startOffset: 3,
@@ -996,7 +1072,7 @@
 
 // Delete ignore the empty span and the other things must be same as the
 // previous test.
-promise_test(async () => {
+promise_test(async (t) => {
   initializeTest("<p>abc</p><p><span></span><br></p>");
   let p1 = gEditor.querySelector("p");
   let abc = p1.firstChild;
@@ -1004,7 +1080,7 @@
   let span = p2.firstChild;
   gSelection.collapse(span, 0);
   await sendBackspaceKey();
-  assert_equals(gEditor.innerHTML, "<p>abc</p>");
+  checkEditorContentResultAsSubTest("<p>abc</p>", t.name);
   checkGetTargetRangesOfBeforeinputOnDeleteSomething({
     startContainer: abc,
     startOffset: 3,
@@ -1016,15 +1092,20 @@
 
 // If invisible white-spaces are removed with same action as above tests,
 // the range should be included in the target ranges.
-promise_test(async () => {
+promise_test(async (t) => {
   initializeTest("<p>abc  </p><p><br></p>");
   let p1 = gEditor.querySelector("p");
   let abc = p1.firstChild;
   let p2 = p1.nextSibling;
   gSelection.collapse(p2, 0);
   await sendBackspaceKey();
-  assert_in_array(gEditor.innerHTML, ["<p>abc  </p>",
-                                      "<p>abc</p>"]);
+  checkEditorContentResultAsSubTest(
+    [
+      "<p>abc  </p>",
+      "<p>abc</p>",
+    ],
+    t.name
+  );
   checkGetTargetRangesOfBeforeinputOnDeleteSomething({
     startContainer: abc,
     startOffset: abc.length,
@@ -1036,14 +1117,17 @@
 
 // If the previous block ends with non-editable content, target range
 // should be after the non-editable content node.
-promise_test(async () => {
+promise_test(async (t) => {
   initializeTest("<p>abc<span contenteditable=\"false\">def</span></p><p><br></p>");
   let p1 = gEditor.querySelector("p");
   let span = gEditor.querySelector("span");
   let p2 = p1.nextSibling;
   gSelection.collapse(p2, 0);
   await sendBackspaceKey();
-  assert_equals(gEditor.innerHTML, "<p>abc<span contenteditable=\"false\">def</span></p>");
+  checkEditorContentResultAsSubTest(
+    "<p>abc<span contenteditable=\"false\">def</span></p>",
+    t.name
+  );
   checkGetTargetRangesOfBeforeinputOnDeleteSomething({
     startContainer: p1,
     startOffset: 2,
@@ -1056,7 +1140,7 @@
 // If previous non-editable paragraph is deleted, target range should begin
 // with end of the text node in the first paragraph.  Otherwise, start from
 // after the non-editable paragraph.
-promise_test(async () => {
+promise_test(async (t) => {
   initializeTest("<p>abc</p><p contenteditable=\"false\">def</p><p><br></p>");
   let p1 = gEditor.querySelector("p");
   let abc = p1.firstChild;
@@ -1064,8 +1148,13 @@
   let p3 = p2.nextSibling;
   gSelection.collapse(p3, 0);
   await sendBackspaceKey();
-  assert_in_array(gEditor.innerHTML, ["<p>abc</p>",
-                                      "<p>abc</p><p contenteditable=\"false\">def</p>"]);
+  checkEditorContentResultAsSubTest(
+    [
+      "<p>abc</p>",
+      "<p>abc</p><p contenteditable=\"false\">def</p>",
+    ],
+    t.name
+  );
   checkGetTargetRangesOfBeforeinputOnDeleteSomething({
     startContainer: p2.isConnected ? gEditor : abc,
     startOffset: p2.isConnected ? 2 : abc.length,
@@ -1075,15 +1164,20 @@
   checkGetTargetRangesOfInputOnDeleteSomething();
 }, 'Backspace at "<p>abc</p><p contenteditable=\"false\">def</p><p>{}<br></p>"');
 
-promise_test(async () => {
+promise_test(async (t) => {
   initializeTest("<p>abc<span contenteditable=\"false\">def</span>ghi</p>");
   let p = gEditor.querySelector("p");
   let ghi = p.lastChild;
   gSelection.collapse(ghi, 0);
   await sendBackspaceKey();
-  assert_in_array(gEditor.innerHTML, ["<p>abc<span contenteditable=\"false\">def</span>ghi</p>",
-                                      "<p>abcghi</p>",
-                                      "<p>abcghi<br></p>"]);
+  checkEditorContentResultAsSubTest(
+    [
+      "<p>abc<span contenteditable=\"false\">def</span>ghi</p>",
+      "<p>abcghi</p>",
+      "<p>abcghi<br></p>",
+    ],
+    t.name
+  );
   if (gEditor.innerHTML === "<p>abc<span contenteditable=\"false\">def</span>ghi</p>") {
     checkGetTargetRangesOfBeforeinputOnDeleteSomething({
       startContainer: ghi,
@@ -1107,14 +1201,19 @@
 
 // If just removes the paragraph, target range should start from after the
 // table element.
-promise_test(async () => {
+promise_test(async (t) => {
   initializeTest("<table><tr><td>cell</td></tr></table><p><br></p>");
   let table = gEditor.querySelector("table");
   let p = table.nextSibling;
   gSelection.collapse(p, 0);
   await sendBackspaceKey();
-  assert_in_array(gEditor.innerHTML, ["<table><tbody><tr><td>cell</td></tr></tbody></table>",
-                                      "<table><tbody><tr><td>cell</td></tr></tbody></table><p><br></p>"]);
+  checkEditorContentResultAsSubTest(
+    [
+      "<table><tbody><tr><td>cell</td></tr></tbody></table>",
+      "<table><tbody><tr><td>cell</td></tr></tbody></table><p><br></p>",
+    ],
+    t.name
+  );
   if (p.isConnected) {
     checkGetTargetRangesOfBeforeinputOnDeleteSomething({
       startContainer: p,
@@ -1136,13 +1235,16 @@
 
 // If table cell won't be joined, target range should be collapsed in the
 // cell.
-promise_test(async () => {
+promise_test(async (t) => {
   initializeTest("<table><tr><td>cell1</td><td><br></td></tr></table>");
   let cell1 = gEditor.querySelector("td");
   let cell2 = cell1.nextSibling;
   gSelection.collapse(cell2, 0);
   await sendBackspaceKey();
-  assert_equals(gEditor.innerHTML, "<table><tbody><tr><td>cell1</td><td><br></td></tr></tbody></table>");
+  assert_equals(gEditor.innerHTML,
+    "<table><tbody><tr><td>cell1</td><td><br></td></tr></tbody></table>",
+    t.name
+  );
   checkGetTargetRangesOfBeforeinputOnDeleteSomething({
     startContainer: cell2,
     startOffset: 0,
@@ -1154,12 +1256,15 @@
 
 // If table caption won't be deleted, target range should be collapsed in the
 // caption element.
-promise_test(async () => {
+promise_test(async (t) => {
   initializeTest("<p>abc</p><table><caption><br></caption><tr><td>cell</td></tr></table>");
   let caption = gEditor.querySelector("caption");
   gSelection.collapse(caption, 0);
   await sendBackspaceKey();
-  assert_equals(gEditor.innerHTML, "<p>abc</p><table><caption><br></caption><tbody><tr><td>cell</td></tr></tbody></table>");
+  assert_equals(gEditor.innerHTML,
+    "<p>abc</p><table><caption><br></caption><tbody><tr><td>cell</td></tr></tbody></table>",
+    t.name
+  );
   checkGetTargetRangesOfBeforeinputOnDeleteSomething({
     startContainer: caption,
     startOffset: 0,
@@ -1170,14 +1275,19 @@
 }, 'Backspace at "<p>abc</p><table><caption>{}<br></caption><tr><td>cell</td></tr></table>"');
 
 // If a table cell element is selected, only its content should be deleted.
-promise_test(async () => {
+promise_test(async (t) => {
   initializeTest("<table><tr><td>cell1</td><td>cell2</td></tr></table>");
   let cell1 = gEditor.querySelector("td");
   let tr = cell1.parentNode;
   gSelection.setBaseAndExtent(tr, 0, tr, 1);
   await sendBackspaceKey();
-  assert_in_array(gEditor.innerHTML, ["<table><tbody><tr><td></td><td>cell2</td></tr></tbody></table>",
-                                      "<table><tbody><tr><td><br></td><td>cell2</td></tr></tbody></table>"]);
+  checkEditorContentResultAsSubTest(
+    [
+      "<table><tbody><tr><td></td><td>cell2</td></tr></tbody></table>",
+      "<table><tbody><tr><td><br></td><td>cell2</td></tr></tbody></table>",
+    ],
+    t.name
+  );
   // XXX Perhaps, target range should be selecting only all children of
   //     cell1 instead.
   checkGetTargetRangesOfBeforeinputOnDeleteSomething({
@@ -1189,14 +1299,19 @@
   checkGetTargetRangesOfInputOnDeleteSomething();
 }, 'Backspace at "<table><tr>{<td>cell1</td>}<td>cell2</td></tr></table>"');
 
-promise_test(async () => {
+promise_test(async (t) => {
   initializeTest("<table><tr><td>cell1</td><td>cell2</td></tr></table>");
   let cell2 = gEditor.querySelector("td + td");
   let tr = cell2.parentNode;
   gSelection.setBaseAndExtent(tr, 1, tr, 2);
   await sendBackspaceKey();
-  assert_in_array(gEditor.innerHTML, ["<table><tbody><tr><td>cell1</td><td></td></tr></tbody></table>",
-                                      "<table><tbody><tr><td>cell1</td><td><br></td></tr></tbody></table>"]);
+  checkEditorContentResultAsSubTest(
+    [
+      "<table><tbody><tr><td>cell1</td><td></td></tr></tbody></table>",
+      "<table><tbody><tr><td>cell1</td><td><br></td></tr></tbody></table>",
+    ],
+    t.name
+  );
   // XXX Perhaps, target range should be selecting only all children of
   //     cell1 instead.
   checkGetTargetRangesOfBeforeinputOnDeleteSomething({
@@ -1209,16 +1324,21 @@
 }, 'Backspace at "<table><tr><td>cell1</td>{<td>cell2</td>}</tr></table>"');
 
 // If the last table cell element is selected, what browsers should do?
-promise_test(async () => {
+promise_test(async (t) => {
   initializeTest("<table><tr><td>cell</td></tr></table>");
   let cell = gEditor.querySelector("td");
   let tr = cell.parentNode;
   let table = gEditor.querySelector("table");
   gSelection.setBaseAndExtent(tr, 0, tr, 1);
   await sendBackspaceKey();
-  assert_in_array(gEditor.innerHTML, ["<table><tbody><tr><td></td></tr></tbody></table>",
-                                      "<table><tbody><tr><td><br></td></tr></tbody></table>",
-                                      "<br>"]);
+  checkEditorContentResultAsSubTest(
+    [
+      "<table><tbody><tr><td></td></tr></tbody></table>",
+      "<table><tbody><tr><td><br></td></tr></tbody></table>",
+      "<br>",
+    ],
+    t.name
+  );
   if (gEditor.querySelector("table")) {
     // XXX Perhaps, target range should be selecting only all children of
     //     cell1 instead.
@@ -1242,7 +1362,7 @@
 }, 'Backspace at "<table><tr>{<td>cell</td>}</tr></table>"');
 
 // Testing multiple cell selection mode.
-promise_test(async () => {
+promise_test(async (t) => {
   initializeTest("<table><tr><td>cell1</td><td>cell2</td></tr><tr><td>cell3</td><td>cell4</td></tr></table>");
   let cell1 = gEditor.querySelector("td");
   let cell4 = gEditor.querySelector("tr + tr > td + td");
@@ -1257,8 +1377,13 @@
   gSelection.addRange(range);
   assert_equals(gSelection.rangeCount, 2, "Should support multiple cell selection");
   await sendBackspaceKey();
-  assert_in_array(gEditor.innerHTML, ["<table><tbody><tr><td></td><td>cell2</td></tr><tr><td>cell3</td><td></td></tr></tbody></table>",
-                                      "<table><tbody><tr><td><br></td><td>cell2</td></tr><tr><td>cell3</td><td><br></td></tr></tbody></table>"]);
+  checkEditorContentResultAsSubTest(
+    [
+      "<table><tbody><tr><td></td><td>cell2</td></tr><tr><td>cell3</td><td></td></tr></tbody></table>",
+      "<table><tbody><tr><td><br></td><td>cell2</td></tr><tr><td>cell3</td><td><br></td></tr></tbody></table>",
+    ],
+    t.name
+  );
   // XXX Perhaps, target range should be selecting only all children of
   //     cell1 and cell4 instead.
   checkGetTargetRangesOfBeforeinputOnDeleteSomething([
@@ -1278,7 +1403,7 @@
   checkGetTargetRangesOfInputOnDeleteSomething();
 }, 'Backspace at "<table><tr>{<td>cell1</td>}<td>cell2</td></tr><tr><td>cell3</td>{<td>cell4</td>}</tr></table>"');
 
-promise_test(async () => {
+promise_test(async (t) => {
   initializeTest("<table><tr><td>cell1</td><td>cell2</td></tr><tr><td>cell3</td><td>cell4</td></tr></table>");
   let cell1 = gEditor.querySelector("td");
   let cell3 = gEditor.querySelector("tr + tr > td");
@@ -1293,9 +1418,14 @@
   gSelection.addRange(range);
   assert_equals(gSelection.rangeCount, 2, "Should support multiple cell selection");
   await sendBackspaceKey();
-  assert_in_array(gEditor.innerHTML, ["<table><tbody><tr><td></td><td>cell2</td></tr><tr><td></td><td>cell4</td></tr></tbody></table>",
-                                      "<table><tbody><tr><td><br></td><td>cell2</td></tr><tr><td><br></td><td>cell4</td></tr></tbody></table>",
-                                      "<table><tbody><tr><td>cell2</td></tr><tr><td>cell4</td></tr></tbody></table>"]);
+  checkEditorContentResultAsSubTest(
+    [
+      "<table><tbody><tr><td></td><td>cell2</td></tr><tr><td></td><td>cell4</td></tr></tbody></table>",
+      "<table><tbody><tr><td><br></td><td>cell2</td></tr><tr><td><br></td><td>cell4</td></tr></tbody></table>",
+      "<table><tbody><tr><td>cell2</td></tr><tr><td>cell4</td></tr></tbody></table>",
+    ],
+    t.name
+  );
   // XXX Perhaps, target range should be selecting only all children of
   //     cell1 and cell3 instead.
   checkGetTargetRangesOfBeforeinputOnDeleteSomething([
@@ -1315,7 +1445,7 @@
   checkGetTargetRangesOfInputOnDeleteSomething();
 }, 'Backspace at "<table><tr>{<td>cell1</td>}<td>cell2</td></tr><tr>{<td>cell3</td>}<td>cell4</td></tr></table>"');
 
-promise_test(async () => {
+promise_test(async (t) => {
   initializeTest("<table><tr><td>cell1</td><td>cell2</td></tr><tr><td>cell3</td><td>cell4</td></tr></table>");
   let cell1 = gEditor.querySelector("td");
   let cell2 = gEditor.querySelector("td + td");
@@ -1330,9 +1460,14 @@
   gSelection.addRange(range);
   assert_equals(gSelection.rangeCount, 2, "Should support multiple cell selection");
   await sendBackspaceKey();
-  assert_in_array(gEditor.innerHTML, ["<table><tbody><tr><td></td><td></td></tr><tr><td>cell3</td><td>cell4</td></tr></tbody></table>",
-                                      "<table><tbody><tr><td><br></td><td><br></td></tr><tr><td>cell3</td><td>cell4</td></tr></tbody></table>",
-                                      "<table><tbody><tr><td>cell3</td><td>cell4</td></tr></tbody></table>"]);
+  checkEditorContentResultAsSubTest(
+    [
+      "<table><tbody><tr><td></td><td></td></tr><tr><td>cell3</td><td>cell4</td></tr></tbody></table>",
+      "<table><tbody><tr><td><br></td><td><br></td></tr><tr><td>cell3</td><td>cell4</td></tr></tbody></table>",
+      "<table><tbody><tr><td>cell3</td><td>cell4</td></tr></tbody></table>",
+    ],
+    t.name
+  );
   if (gEditor.querySelector("tr + tr")) {
     // XXX Perhaps, target range should be selecting only all children of
     //     cell1 and cell2 instead.
@@ -1361,7 +1496,7 @@
   checkGetTargetRangesOfInputOnDeleteSomething();
 }, 'Backspace at "<table><tr>{<td>cell1</td>}{<td>cell2</td>}</tr><tr><td>cell3</td><td>cell4</td></tr></table>"');
 
-promise_test(async () => {
+promise_test(async (t) => {
   initializeTest("<table><tr><td>cell1</td><td>cell2</td></tr><tr><td>cell3</td><td>cell4</td></tr></table>");
   let cell3 = gEditor.querySelector("tr + tr > td");
   let cell4 = gEditor.querySelector("tr + tr > td + td");
@@ -1375,9 +1510,14 @@
   gSelection.addRange(range);
   assert_equals(gSelection.rangeCount, 2, "Should support multiple cell selection");
   await sendBackspaceKey();
-  assert_in_array(gEditor.innerHTML, ["<table><tbody><tr><td>cell1</td><td>cell2</td></tr><tr><td></td><td></td></tr></tbody></table>",
-                                      "<table><tbody><tr><td>cell1</td><td>cell2</td></tr><tr><td><br></td><td><br></td></tr></tbody></table>",
-                                      "<table><tbody><tr><td>cell1</td><td>cell2</td></tr></tbody></table>"]);
+  checkEditorContentResultAsSubTest(
+    [
+      "<table><tbody><tr><td>cell1</td><td>cell2</td></tr><tr><td></td><td></td></tr></tbody></table>",
+      "<table><tbody><tr><td>cell1</td><td>cell2</td></tr><tr><td><br></td><td><br></td></tr></tbody></table>",
+      "<table><tbody><tr><td>cell1</td><td>cell2</td></tr></tbody></table>",
+    ],
+    t.name
+  );
   if (gEditor.querySelector("tr + tr")) {
     // XXX Perhaps, target range should be selecting only all children of
     //     cell3 and cell4 instead.
@@ -1406,7 +1546,7 @@
   checkGetTargetRangesOfInputOnDeleteSomething();
 }, 'Backspace at "<table><tr><td>cell1</td><td>cell2</td></tr><tr>{<td>cell3</td>}{<td>cell4</td>}</tr></table>"');
 
-promise_test(async () => {
+promise_test(async (t) => {
   initializeTest("<table><tr><td>cell1</td><td>cell2</td></tr><tr><td>cell3</td><td>cell4</td></tr></table>");
   let cell1 = gEditor.querySelector("td");
   let cell2 = gEditor.querySelector("td + td");
@@ -1429,9 +1569,14 @@
   gSelection.addRange(range);
   assert_equals(gSelection.rangeCount, 4, "Should support multiple cell selection");
   await sendBackspaceKey();
-  assert_in_array(gEditor.innerHTML, ["<table><tbody><tr><td></td><td></td></tr><tr><td></td><td></td></tr></tbody></table>",
-                                      "<table><tbody><tr><td><br></td><td><br></td></tr><tr><td><br></td><td><br></td></tr></tbody></table>",
-                                      "<br>"]);
+  checkEditorContentResultAsSubTest(
+    [
+      "<table><tbody><tr><td></td><td></td></tr><tr><td></td><td></td></tr></tbody></table>",
+      "<table><tbody><tr><td><br></td><td><br></td></tr><tr><td><br></td><td><br></td></tr></tbody></table>",
+      "<br>",
+    ],
+    t.name
+  );
   if (gEditor.querySelector("table")) {
     // XXX Perhaps, target range should be selecting only all children of
     //     cell1, cell2, cell3 and cell4 instead.
@@ -1472,7 +1617,7 @@
   checkGetTargetRangesOfInputOnDeleteSomething();
 }, 'Backspace at "<table><tr>{<td>cell1</td>}{<td>cell2</td>}</tr><tr>{<td>cell3</td>}{<td>cell4</td>}</tr></table>"');
 
-promise_test(async () => {
+promise_test(async (t) => {
   initializeTest("<table><tr><td>cell1</td><td>cell2</td></tr><tr><td>cell3</td><td>cell4</td></tr></table>");
   let cell1 = gEditor.querySelector("td");
   let cell2 = gEditor.querySelector("td + td");
@@ -1492,10 +1637,15 @@
   gSelection.addRange(range);
   assert_equals(gSelection.rangeCount, 3, "Should support multiple cell selection");
   await sendBackspaceKey();
-  assert_in_array(gEditor.innerHTML, ["<table><tbody><tr><td></td><td>cell2</td></tr><tr><td>cell3</td><td></td></tr></tbody></table>",
-                                      "<table><tbody><tr><td><br></td><td>cell2</td></tr><tr><td>cell3</td><td><br></td></tr></tbody></table>",
-                                      "<table><tbody><tr><td></td><td>c2</td></tr><tr><td>cell3</td><td></td></tr></tbody></table>",
-                                      "<table><tbody><tr><td><br></td><td>c2</td></tr><tr><td>cell3</td><td><br></td></tr></tbody></table>"]);
+  checkEditorContentResultAsSubTest(
+    [
+      "<table><tbody><tr><td></td><td>cell2</td></tr><tr><td>cell3</td><td></td></tr></tbody></table>",
+      "<table><tbody><tr><td><br></td><td>cell2</td></tr><tr><td>cell3</td><td><br></td></tr></tbody></table>",
+      "<table><tbody><tr><td></td><td>c2</td></tr><tr><td>cell3</td><td></td></tr></tbody></table>",
+      "<table><tbody><tr><td><br></td><td>c2</td></tr><tr><td>cell3</td><td><br></td></tr></tbody></table>",
+    ],
+    t.name
+  );
   if (cell2.firstChild.length == "cell2".length) {
     // XXX Perhaps, target range should be selecting only all children of
     //     cell1 and cell4 instead.
@@ -1540,16 +1690,21 @@
 
 // If caret is not adjacent of deleting character, browser may not delete the
 // character, but update the caret position for next deletion.
-promise_test(async () => {
+promise_test(async (t) => {
   initializeTest("<p>&#x5E9;&#x5DC;&#x5D5;&#x5DD;hello</p>");
   let text1 = gEditor.querySelector("p").firstChild;
   let text2 = text1.nextSibling;
   gSelection.collapse(text2 ? text2 : text1, text2 ? 1 : 5);
   await sendArrowLeftKey();
   await sendBackspaceKey();
-  assert_in_array(gEditor.innerHTML, ["<p>\u05E9\u05DC\u05D5\u05DDhello</p>",
-                                      "<p>\u05DC\u05D5\u05DDhello</p>",
-                                      "<p>\u05E9\u05DC\u05D5hello</p>"]);
+  checkEditorContentResultAsSubTest(
+    [
+      "<p>\u05E9\u05DC\u05D5\u05DDhello</p>",
+      "<p>\u05DC\u05D5\u05DDhello</p>",
+      "<p>\u05E9\u05DC\u05D5hello</p>",
+    ],
+    t.name
+  );
   if (gEditor.innerHTML === "<p>\u05E9\u05DC\u05D5\u05DDhello</p>") {
     checkGetTargetRangesOfBeforeinputOnDeleteSomething({
       startContainer: text2 ? text2 : text1,
@@ -1593,7 +1748,7 @@
   return currentString.length;
 }
 
-promise_test(async () => {
+promise_test(async (t) => {
   const kText = "abc def ghi";
   initializeTest(`<p>${kText}</p>`);
   let p = gEditor.querySelector("p");
@@ -1601,8 +1756,11 @@
   await sendBackspaceKey(kShift);
   let startOffset = getFirstDifferentOffset(p.firstChild.data, kText);
   let length = kText.length - p.firstChild.data.length;
-  assert_equals(gEditor.innerHTML.replace(/&nbsp;/g, " "),
-      `<p>${kText.substr(0, startOffset) + kText.substr(startOffset + length)}</p>`);
+  checkEditorContentResultAsSubTest(
+    `<p>${kText.substr(0, startOffset) + kText.substr(startOffset + length)}</p>`,
+    t.name,
+    { ignoreWhiteSpaceDifference: true }
+  );
   if (startOffset === kText.length) {
     checkBeforeinputAndInputEventsOnNOOP();
     return;
@@ -1616,7 +1774,7 @@
   checkGetTargetRangesOfInputOnDeleteSomething();
 }, 'Shift + Backspace at "<p>abc def[] ghi</p>"');
 
-promise_test(async () => {
+promise_test(async (t) => {
   const kText = "abc def ghi";
   initializeTest(`<p>${kText}</p>`);
   let p = gEditor.querySelector("p");
@@ -1624,8 +1782,11 @@
   await sendBackspaceKey(kControl);
   let startOffset = getFirstDifferentOffset(p.firstChild.data, kText);
   let length = kText.length - p.firstChild.data.length;
-  assert_equals(gEditor.innerHTML.replace(/&nbsp;/g, " "),
-      `<p>${kText.substr(0, startOffset) + kText.substr(startOffset + length)}</p>`);
+  checkEditorContentResultAsSubTest(
+    `<p>${kText.substr(0, startOffset) + kText.substr(startOffset + length)}</p>`,
+    t.name,
+    { ignoreWhiteSpaceDifference: true }
+  );
   if (startOffset === kText.length) {
     checkBeforeinputAndInputEventsOnNOOP();
     return;
@@ -1639,7 +1800,7 @@
   checkGetTargetRangesOfInputOnDeleteSomething();
 }, 'Control + Backspace at "<p>abc def[] ghi</p>"');
 
-promise_test(async () => {
+promise_test(async (t) => {
   const kText = "abc def ghi";
   initializeTest(`<p>${kText}</p>`);
   let p = gEditor.querySelector("p");
@@ -1647,8 +1808,11 @@
   await sendBackspaceKey(kAlt);
   let startOffset = getFirstDifferentOffset(p.firstChild.data, kText);
   let length = kText.length - p.firstChild.data.length;
-  assert_equals(gEditor.innerHTML.replace(/&nbsp;/g, " "),
-      `<p>${kText.substr(0, startOffset) + kText.substr(startOffset + length)}</p>`);
+  checkEditorContentResultAsSubTest(
+    `<p>${kText.substr(0, startOffset) + kText.substr(startOffset + length)}</p>`,
+    t.name,
+    { ignoreWhiteSpaceDifference: true }
+  );
   if (startOffset === kText.length) {
     checkBeforeinputAndInputEventsOnNOOP();
     return;
@@ -1662,7 +1826,7 @@
   checkGetTargetRangesOfInputOnDeleteSomething();
 }, 'Alt + Backspace at "<p>abc def[] ghi</p>"');
 
-promise_test(async () => {
+promise_test(async (t) => {
   const kText = "abc def ghi";
   initializeTest(`<p>${kText}</p>`);
   let p = gEditor.querySelector("p");
@@ -1670,8 +1834,11 @@
   await sendBackspaceKey(kMeta);
   let startOffset = getFirstDifferentOffset(p.firstChild.data, kText);
   let length = kText.length - p.firstChild.data.length;
-  assert_equals(gEditor.innerHTML.replace(/&nbsp;/g, " "),
-      `<p>${kText.substr(0, startOffset) + kText.substr(startOffset + length)}</p>`);
+  checkEditorContentResultAsSubTest(
+    `<p>${kText.substr(0, startOffset) + kText.substr(startOffset + length)}</p>`,
+    t.name,
+    { ignoreWhiteSpaceDifference: true }
+  );
   if (startOffset === kText.length) {
     checkBeforeinputAndInputEventsOnNOOP();
     return;
@@ -1685,7 +1852,7 @@
   checkGetTargetRangesOfInputOnDeleteSomething();
 }, 'Meta + Backspace at "<p>abc def[] ghi</p>"');
 
-promise_test(async () => {
+promise_test(async (t) => {
   const kText = "abc def";
   initializeTest(`<p>   ${kText}</p>`);
   let p = gEditor.querySelector("p");
@@ -1696,8 +1863,11 @@
   let startOffset = invisibleWhiteSpaces.length + getFirstDifferentOffset(visibleText, kText);
   let length = kText.length + 3 - p.firstChild.data.length;
   // If invisible white-spaces are deleted, they should be contained in the target range.
-  assert_equals(gEditor.innerHTML.replace(/&nbsp;/g, " "),
-      `<p>${invisibleWhiteSpaces + kText.substr(0, startOffset) + kText.substr(startOffset + length)}</p>`);
+  checkEditorContentResultAsSubTest(
+    `<p>${invisibleWhiteSpaces + kText.substr(0, startOffset) + kText.substr(startOffset + length)}</p>`,
+    t.name,
+    { ignoreWhiteSpaceDifference: true }
+  );
   if (startOffset === kText.length) {
     checkBeforeinputAndInputEventsOnNOOP();
     return;
@@ -1711,7 +1881,7 @@
   checkGetTargetRangesOfInputOnDeleteSomething();
 }, 'Shift + Backspace at "<p>   abc[] def</p>"');
 
-promise_test(async () => {
+promise_test(async (t) => {
   const kText = "abc def";
   initializeTest(`<p>   ${kText}</p>`);
   let p = gEditor.querySelector("p");
@@ -1722,8 +1892,11 @@
   let startOffset = invisibleWhiteSpaces.length + getFirstDifferentOffset(visibleText, kText);
   let length = kText.length + 3 - p.firstChild.data.length;
   // If invisible white-spaces are deleted, they should be contained in the target range.
-  assert_equals(gEditor.innerHTML.replace(/&nbsp;/g, " "),
-      `<p>${invisibleWhiteSpaces + kText.substr(0, startOffset) + kText.substr(startOffset + length)}</p>`);
+  checkEditorContentResultAsSubTest(
+    `<p>${invisibleWhiteSpaces + kText.substr(0, startOffset) + kText.substr(startOffset + length)}</p>`,
+    t.name,
+    { ignoreWhiteSpaceDifference: true }
+  );
   if (startOffset === kText.length) {
     checkBeforeinputAndInputEventsOnNOOP();
     return;
@@ -1737,7 +1910,7 @@
   checkGetTargetRangesOfInputOnDeleteSomething();
 }, 'Control + Backspace at "<p>   abc[] def</p>"');
 
-promise_test(async () => {
+promise_test(async (t) => {
   const kText = "abc def";
   initializeTest(`<p>   ${kText}</p>`);
   let p = gEditor.querySelector("p");
@@ -1748,8 +1921,11 @@
   let startOffset = invisibleWhiteSpaces.length + getFirstDifferentOffset(visibleText, kText);
   let length = kText.length + 3 - p.firstChild.data.length;
   // If invisible white-spaces are deleted, they should be contained in the target range.
-  assert_equals(gEditor.innerHTML.replace(/&nbsp;/g, " "),
-      `<p>${invisibleWhiteSpaces + kText.substr(0, startOffset) + kText.substr(startOffset + length)}</p>`);
+  checkEditorContentResultAsSubTest(
+    `<p>${invisibleWhiteSpaces + kText.substr(0, startOffset) + kText.substr(startOffset + length)}</p>`,
+    t.name,
+    { ignoreWhiteSpaceDifference: true }
+  );
   if (startOffset === kText.length) {
     checkBeforeinputAndInputEventsOnNOOP();
     return;
@@ -1763,7 +1939,7 @@
   checkGetTargetRangesOfInputOnDeleteSomething();
 }, 'Alt + Backspace at "<p>   abc[] def</p>"');
 
-promise_test(async () => {
+promise_test(async (t) => {
   const kText = "abc def";
   initializeTest(`<p>   ${kText}</p>`);
   let p = gEditor.querySelector("p");
@@ -1774,8 +1950,10 @@
   let startOffset = invisibleWhiteSpaces.length + getFirstDifferentOffset(visibleText, kText);
   let length = kText.length + 3 - p.firstChild.data.length;
   // If invisible white-spaces are deleted, they should be contained in the target range.
-  assert_equals(gEditor.innerHTML.replace(/&nbsp;/g, " "),
-      `<p>${invisibleWhiteSpaces + kText.substr(0, startOffset) + kText.substr(startOffset + length)}</p>`);
+  checkEditorContentResultAsSubTest(
+    `<p>${invisibleWhiteSpaces + kText.substr(0, startOffset) + kText.substr(startOffset + length)}</p>`,
+    t.name
+  );
   if (startOffset === kText.length) {
     checkBeforeinputAndInputEventsOnNOOP();
     return;
diff --git a/input-events/input-events-get-target-ranges-forwarddelete.tentative.html b/input-events/input-events-get-target-ranges-forwarddelete.tentative.html
index bbc76f4..440e37d 100644
--- a/input-events/input-events-get-target-ranges-forwarddelete.tentative.html
+++ b/input-events/input-events-get-target-ranges-forwarddelete.tentative.html
@@ -13,11 +13,11 @@
 "use strict";
 
 // Simply deletes the next ASCII character of caret position.
-promise_test(async () => {
+promise_test(async (t) => {
   initializeTest("<p>abc</p>");
   gSelection.collapse(gEditor.firstChild.firstChild, 2);
   await sendDeleteKey();
-  assert_equals(gEditor.innerHTML, "<p>ab</p>");
+  checkEditorContentResultAsSubTest("<p>ab</p>", t.name);
   checkGetTargetRangesOfBeforeinputOnDeleteSomething({
     startContainer: gEditor.firstChild.firstChild,
     startOffset: 2,
@@ -28,11 +28,11 @@
 }, 'Delete at "<p>ab[]c</p>"');
 
 // Simply deletes the next ASCII character of caret position.
-promise_test(async () => {
+promise_test(async (t) => {
   initializeTest("<p>abc</p>");
   gSelection.collapse(gEditor.firstChild.firstChild, 1);
   await sendDeleteKey();
-  assert_equals(gEditor.innerHTML, "<p>ac</p>");
+  checkEditorContentResultAsSubTest("<p>ac</p>", t.name);
   checkGetTargetRangesOfBeforeinputOnDeleteSomething({
     startContainer: gEditor.firstChild.firstChild,
     startOffset: 1,
@@ -43,11 +43,11 @@
 }, 'Delete at "<p>a[]bc</p>"');
 
 // Simply deletes the next ASCII character of caret position.
-promise_test(async () => {
+promise_test(async (t) => {
   initializeTest("<p>abc</p>");
   gSelection.collapse(gEditor.firstChild.firstChild, 0);
   await sendDeleteKey();
-  assert_equals(gEditor.innerHTML, "<p>bc</p>");
+  checkEditorContentResultAsSubTest("<p>bc</p>", t.name);
   checkGetTargetRangesOfBeforeinputOnDeleteSomething({
     startContainer: gEditor.firstChild.firstChild,
     startOffset: 0,
@@ -57,12 +57,12 @@
   checkGetTargetRangesOfInputOnDeleteSomething();
 }, 'Delete at "<p>[]abc</p>"');
 
-promise_test(async () => {
+promise_test(async (t) => {
   initializeTest("<p>abc</p>");
   let abc = gEditor.querySelector("p").firstChild;
   gSelection.collapse(abc, 3);
   await sendDeleteKey();
-  assert_equals(gEditor.innerHTML, "<p>abc</p>");
+  checkEditorContentResultAsSubTest("<p>abc</p>", t.name);
   checkGetTargetRangesOfBeforeinputOnDeleteSomething({
     startContainer: abc,
     startOffset: 3,
@@ -72,12 +72,12 @@
   checkGetTargetRangesOfInputOnDoNothing();
 }, 'Delete at "<p>abc[]</p>"');
 
-promise_test(async () => {
+promise_test(async (t) => {
   initializeTest("<p>abc<br></p>");
   let abc = gEditor.querySelector("p").firstChild;
   gSelection.collapse(abc, 3);
   await sendDeleteKey();
-  assert_equals(gEditor.innerHTML, "<p>abc<br></p>");
+  checkEditorContentResultAsSubTest("<p>abc<br></p>", t.name);
   checkGetTargetRangesOfBeforeinputOnDeleteSomething({
     startContainer: abc,
     startOffset: 3,
@@ -87,12 +87,15 @@
   checkGetTargetRangesOfInputOnDoNothing();
 }, 'Delete at "<p>abc[]<br></p>"');
 
-promise_test(async () => {
+promise_test(async (t) => {
   initializeTest(`<p><img src="${kImgSrc}"><br></p>`);
   let p = gEditor.querySelector("p");
   gSelection.collapse(p, 1);
   await sendDeleteKey();
-  assert_equals(gEditor.innerHTML, `<p><img src="${kImgSrc}"><br></p>`);
+  checkEditorContentResultAsSubTest(
+    `<p><img src="${kImgSrc}"><br></p>`,
+    t.name
+  );
   checkGetTargetRangesOfBeforeinputOnDeleteSomething({
     startContainer: p,
     startOffset: 1,
@@ -106,12 +109,12 @@
 // However, we need discussion whether the `<span>` element should be
 // contained by a range of `getTargetRanges()`.
 // https://github.com/w3c/input-events/issues/112
-promise_test(async () => {
+promise_test(async (t) => {
   initializeTest("<p>a<span>b</span>c</p>");
   let a = gEditor.querySelector("span").previousSibling;
   gSelection.collapse(a, 1);
   await sendDeleteKey();
-  assert_equals(gEditor.innerHTML, "<p>ac</p>");
+  checkEditorContentResultAsSubTest("<p>ac</p>", t.name);
   checkGetTargetRangesOfBeforeinputOnDeleteSomething({
     startContainer: a,
     startOffset: 1,
@@ -125,12 +128,12 @@
 // However, we need discussion whether the `<span>` element should be
 // contained by a range of `getTargetRanges()`.
 // https://github.com/w3c/input-events/issues/112
-promise_test(async () => {
+promise_test(async (t) => {
   initializeTest("<p>a<span>b</span>c</p>");
   let b = gEditor.querySelector("span").firstChild;
   gSelection.collapse(b, 0);
   await sendDeleteKey();
-  assert_equals(gEditor.innerHTML, "<p>ac</p>");
+  checkEditorContentResultAsSubTest("<p>ac</p>", t.name);
   checkGetTargetRangesOfBeforeinputOnDeleteSomething({
     startContainer: gEditor.firstChild,
     startOffset: 1,
@@ -144,12 +147,17 @@
 // character is deleted.  If it's deleted, it should be contained by
 // the range of `getTargetRanges()`, but needs discussion.
 // https://github.com/w3c/input-events/issues/112
-promise_test(async () => {
+promise_test(async (t) => {
   initializeTest("<p>abc </p>");
   gSelection.collapse(gEditor.firstChild.firstChild, 2);
   await sendDeleteKey();
-  assert_in_array(gEditor.innerHTML, ["<p>ab</p>",
-                                      "<p>ab </p>"]);
+  checkEditorContentResultAsSubTest(
+    [
+      "<p>ab</p>",
+      "<p>ab </p>",
+    ],
+    t.name
+  );
   checkGetTargetRangesOfBeforeinputOnDeleteSomething({
     startContainer: gEditor.firstChild.firstChild,
     startOffset: 2,
@@ -159,7 +167,7 @@
   checkGetTargetRangesOfInputOnDeleteSomething();
 }, 'Delete at "<p>ab[]c </p>"');
 
-promise_test(async () => {
+promise_test(async (t) => {
   initializeTest("<p>abc</p><p>def</p>");
   let p1 = gEditor.firstChild;
   let abc = p1.firstChild;
@@ -167,7 +175,7 @@
   let def = p2.firstChild;
   gSelection.collapse(abc, 3);
   await sendDeleteKey();
-  assert_equals(gEditor.innerHTML, "<p>abcdef</p>");
+  checkEditorContentResultAsSubTest("<p>abcdef</p>", t.name);
   checkGetTargetRangesOfBeforeinputOnDeleteSomething({
     startContainer: abc,
     startOffset: 3,
@@ -182,7 +190,7 @@
 // becoming visible when the blocks are joined.  Perhaps, they should be
 // contained by the range of `getTargetRanges()`, but needs discussion.
 // https://github.com/w3c/input-events/issues/112
-promise_test(async () => {
+promise_test(async (t) => {
   initializeTest("<p>abc   </p><p>   def</p>");
   let p1 = gEditor.firstChild;
   let abc = p1.firstChild;
@@ -190,7 +198,7 @@
   let def = p2.firstChild;
   gSelection.collapse(abc, 3);
   await sendDeleteKey();
-  assert_equals(gEditor.innerHTML, "<p>abcdef</p>");
+  checkEditorContentResultAsSubTest("<p>abcdef</p>", t.name);
   checkGetTargetRangesOfBeforeinputOnDeleteSomething({
     startContainer: abc,
     startOffset: 3,
@@ -205,7 +213,7 @@
 // becoming visible when the blocks are joined.  Perhaps, they should be
 // contained by the range of `getTargetRanges()`, but needs discussion.
 // https://github.com/w3c/input-events/issues/112
-promise_test(async () => {
+promise_test(async (t) => {
   initializeTest("<p>abc   </p><p>   def</p>");
   let p1 = gEditor.firstChild;
   let abc = p1.firstChild;
@@ -213,7 +221,7 @@
   let def = p2.firstChild;
   gSelection.collapse(abc, 4);
   await sendDeleteKey();
-  assert_equals(gEditor.innerHTML, "<p>abcdef</p>");
+  checkEditorContentResultAsSubTest("<p>abcdef</p>", t.name);
   checkGetTargetRangesOfBeforeinputOnDeleteSomething({
     startContainer: abc,
     startOffset: 3,
@@ -228,7 +236,7 @@
 // becoming visible when the blocks are joined.  Perhaps, they should be
 // contained by the range of `getTargetRanges()`, but needs discussion.
 // https://github.com/w3c/input-events/issues/112
-promise_test(async () => {
+promise_test(async (t) => {
   initializeTest("<p>abc   </p><p>   def</p>");
   let p1 = gEditor.firstChild;
   let abc = p1.firstChild;
@@ -236,7 +244,7 @@
   let def = p2.firstChild;
   gSelection.collapse(abc, 5);
   await sendDeleteKey();
-  assert_equals(gEditor.innerHTML, "<p>abcdef</p>");
+  checkEditorContentResultAsSubTest("<p>abcdef</p>", t.name);
   checkGetTargetRangesOfBeforeinputOnDeleteSomething({
     startContainer: abc,
     startOffset: 3,
@@ -251,7 +259,7 @@
 // becoming visible when the blocks are joined.  Perhaps, they should be
 // contained by the range of `getTargetRanges()`, but needs discussion.
 // https://github.com/w3c/input-events/issues/112
-promise_test(async () => {
+promise_test(async (t) => {
   initializeTest("<p>abc   </p><p>   def</p>");
   let p1 = gEditor.firstChild;
   let abc = p1.firstChild;
@@ -259,7 +267,7 @@
   let def = p2.firstChild;
   gSelection.collapse(abc, 6);
   await sendDeleteKey();
-  assert_equals(gEditor.innerHTML, "<p>abcdef</p>");
+  checkEditorContentResultAsSubTest("<p>abcdef</p>", t.name);
   checkGetTargetRangesOfBeforeinputOnDeleteSomething({
     startContainer: abc,
     startOffset: 3,
@@ -269,13 +277,13 @@
   checkGetTargetRangesOfInputOnDeleteSomething();
 }, 'Delete at "<p>abc   []</p><p>   def</p>"');
 
-promise_test(async () => {
+promise_test(async (t) => {
   initializeTest("<p>abc</p><p><b>def</b></p>");
   let abc = gEditor.querySelector("p").firstChild;
   let def = gEditor.querySelector("b").firstChild;
   gSelection.collapse(abc, 3);
   await sendDeleteKey();
-  assert_equals(gEditor.innerHTML, "<p>abc<b>def</b></p>");
+  checkEditorContentResultAsSubTest("<p>abc<b>def</b></p>", t.name);
   checkGetTargetRangesOfBeforeinputOnDeleteSomething({
     startContainer: abc,
     startOffset: 3,
@@ -285,14 +293,19 @@
   checkGetTargetRangesOfInputOnDeleteSomething();
 }, 'Delete at "<p>abc[]</p><p><b>def</b></p>"');
 
-promise_test(async () => {
+promise_test(async (t) => {
   initializeTest("<p><b>abc</b></p><p><b>def</b></p>");
   let abc = gEditor.querySelector("p > b").firstChild;
   let def = gEditor.querySelector("P + p > b").firstChild;
   gSelection.collapse(abc, 3);
   await sendDeleteKey();
-  assert_in_array(gEditor.innerHTML, ["<p><b>abc</b><b>def</b></p>",
-                                      "<p><b>abcdef</b></p>"]);
+  checkEditorContentResultAsSubTest(
+    [
+      "<p><b>abc</b><b>def</b></p>",
+      "<p><b>abcdef</b></p>",
+    ],
+    t.name
+  );
   checkGetTargetRangesOfBeforeinputOnDeleteSomething({
     startContainer: abc,
     startOffset: 3,
@@ -302,13 +315,13 @@
   checkGetTargetRangesOfInputOnDeleteSomething();
 }, 'Delete at "<p><b>abc[]</b></p><p><b>def</b></p>"');
 
-promise_test(async () => {
+promise_test(async (t) => {
   initializeTest("<p><i>abc</i></p><p><b>def</b></p>");
   let abc = gEditor.querySelector("i").firstChild;
   let def = gEditor.querySelector("b").firstChild;
   gSelection.collapse(abc, 3);
   await sendDeleteKey();
-  assert_equals(gEditor.innerHTML, "<p><i>abc</i><b>def</b></p>");
+  checkEditorContentResultAsSubTest("<p><i>abc</i><b>def</b></p>", t.name);
   checkGetTargetRangesOfBeforeinputOnDeleteSomething({
     startContainer: abc,
     startOffset: 3,
@@ -324,7 +337,7 @@
 // deleted.  Perhaps, the invisible white-spaces should be contained by
 // the range of `getTargetRanges()`, but needs discussion.
 // https://github.com/w3c/input-events/issues/112
-promise_test(async () => {
+promise_test(async (t) => {
   initializeTest("<pre>abc   </pre><p>   def</p>");
   let pre = gEditor.firstChild;
   let abc = pre.firstChild;
@@ -332,7 +345,7 @@
   let def = p.firstChild;
   gSelection.collapse(abc, 6);
   await sendDeleteKey();
-  assert_equals(gEditor.innerHTML, "<pre>abc   def</pre>");
+  checkEditorContentResultAsSubTest("<pre>abc   def</pre>", t.name);
   checkGetTargetRangesOfBeforeinputOnDeleteSomething({
     startContainer: abc,
     startOffset: 6,
@@ -351,7 +364,7 @@
 // by additional range of `getTargetRanges()` or not because of the
 // implementation cost and runtime cost.  Needs discuss.
 // https://github.com/w3c/input-events/issues/112
-promise_test(async () => {
+promise_test(async (t) => {
   initializeTest("<pre>abc   </pre><p>   def</p>");
   let pre = gEditor.firstChild;
   let abc = pre.firstChild;
@@ -359,7 +372,7 @@
   let def = p.firstChild;
   gSelection.collapse(abc, 6);
   await sendDeleteKey();
-  assert_equals(gEditor.innerHTML, "<pre>abc   def</pre>");
+  checkEditorContentResultAsSubTest("<pre>abc   def</pre>", t.name);
   checkGetTargetRangesOfBeforeinputOnDeleteSomething({
     startContainer: abc,
     startOffset: 6,
@@ -376,7 +389,7 @@
 // be in the range of `getTargetRanges()`, but not so for the preformatted
 // visible leading white-spaces.  But needs discussion.
 // https://github.com/w3c/input-events/issues/112
-promise_test(async () => {
+promise_test(async (t) => {
   initializeTest("<p>abc   </p><pre>   def</pre>");
   let p = gEditor.firstChild;
   let abc = p.firstChild;
@@ -384,10 +397,15 @@
   let def = pre.firstChild;
   gSelection.collapse(abc, 3);
   await sendDeleteKey();
-  assert_in_array(gEditor.innerHTML, ["<p>abc &nbsp; def</p>",
-                                      "<p>abc&nbsp;&nbsp; def</p>",
-                                      "<p>abc&nbsp; &nbsp;def</p>",
-                                      "<p>abc &nbsp;&nbsp;def</p>"]);
+  checkEditorContentResultAsSubTest(
+    [
+      "<p>abc &nbsp; def</p>",
+      "<p>abc&nbsp;&nbsp; def</p>",
+      "<p>abc&nbsp; &nbsp;def</p>",
+      "<p>abc &nbsp;&nbsp;def</p>",
+    ],
+    t.name
+  );
   checkGetTargetRangesOfBeforeinputOnDeleteSomething({
     startContainer: abc,
     startOffset: 3,
@@ -402,7 +420,7 @@
 // the target range should contain the `<br>` element and block boundaries.
 // But maybe needs discussion.
 // https://github.com/w3c/input-events/issues/112
-promise_test(async () => {
+promise_test(async (t) => {
   initializeTest("<p>abc<br></p><p>def</p>");
   let p1 = gEditor.firstChild;
   let abc = p1.firstChild;
@@ -410,7 +428,7 @@
   let def = p2.firstChild;
   gSelection.collapse(abc, 3);
   await sendDeleteKey();
-  assert_equals(gEditor.innerHTML, "<p>abcdef</p>");
+  checkEditorContentResultAsSubTest("<p>abcdef</p>", t.name);
   checkGetTargetRangesOfBeforeinputOnDeleteSomething({
     startContainer: abc,
     startOffset: 3,
@@ -420,7 +438,7 @@
   checkGetTargetRangesOfInputOnDeleteSomething();
 }, 'Delete at "<p>abc[]<br></p><p>def</p>"');
 
-promise_test(async () => {
+promise_test(async (t) => {
   initializeTest(`<p><img src="${kImgSrc}"><br></p><p>def</p>`);
   let p1 = gEditor.firstChild;
   let img = p1.firstChild;
@@ -428,7 +446,7 @@
   let def = p2.firstChild;
   gSelection.collapse(p1, 1);
   await sendDeleteKey();
-  assert_equals(gEditor.innerHTML, `<p><img src="${kImgSrc}">def</p>`);
+  checkEditorContentResultAsSubTest(`<p><img src="${kImgSrc}">def</p>`, t.name);
   checkGetTargetRangesOfBeforeinputOnDeleteSomething({
     startContainer: p1,
     startOffset: 1,
@@ -443,7 +461,7 @@
 // In this case, the invisible `<br>` element should be contained in the
 // range of `getTargetRanges()`, but needs discussion.
 // https://github.com/w3c/input-events/issues/112
-promise_test(async () => {
+promise_test(async (t) => {
   initializeTest("<p>abc<br><br></p><p>def</p>");
   let p1 = gEditor.firstChild;
   let abc = p1.firstChild;
@@ -451,7 +469,7 @@
   let def = p2.firstChild;
   gSelection.collapse(p1, 2);
   await sendDeleteKey();
-  assert_equals(gEditor.innerHTML, "<p>abc<br>def</p>");
+  checkEditorContentResultAsSubTest("<p>abc<br>def</p>", t.name);
   checkGetTargetRangesOfBeforeinputOnDeleteSomething({
     startContainer: p1,
     startOffset: 2,
@@ -463,13 +481,13 @@
 
 // Deleting visible `<br>` element should be contained by a range of
 // `getTargetRanges()`.
-promise_test(async () => {
+promise_test(async (t) => {
   initializeTest("<p>abc<br>def</p>");
   let p = gEditor.querySelector("p");
   let abc = p.firstChild;
   gSelection.collapse(abc, 3);
   await sendDeleteKey();
-  assert_equals(gEditor.innerHTML, "<p>abcdef</p>");
+  checkEditorContentResultAsSubTest("<p>abcdef</p>", t.name);
   checkGetTargetRangesOfBeforeinputOnDeleteSomething({
     startContainer: p,
     startOffset: 1,
@@ -481,13 +499,13 @@
 
 // Deleting visible `<br>` element following white-space should not include
 // the preceding white-space in the range.
-promise_test(async () => {
+promise_test(async (t) => {
   initializeTest("<p>abc <br>def</p>");
   let p = gEditor.querySelector("p");
   let abc = p.firstChild;
   gSelection.collapse(abc, 4);
   await sendDeleteKey();
-  assert_equals(gEditor.innerHTML, "<p>abc def</p>");
+  checkEditorContentResultAsSubTest("<p>abc def</p>", t.name);
   checkGetTargetRangesOfBeforeinputOnDeleteSomething({
     startContainer: p,
     startOffset: 1,
@@ -501,14 +519,14 @@
 // the following white-space in the range because it shouldn't become
 // visible and should be deleted for avoiding it.
 // https://github.com/w3c/input-events/issues/112
-promise_test(async () => {
+promise_test(async (t) => {
   initializeTest("<p>abc<br> def</p>");
   let p = gEditor.querySelector("p");
   let abc = p.firstChild;
   let def = gEditor.querySelector("br").nextSibling;
   gSelection.collapse(abc, 3);
   await sendDeleteKey();
-  assert_equals(gEditor.innerHTML, "<p>abcdef</p>");
+  checkEditorContentResultAsSubTest("<p>abcdef</p>", t.name);
   checkGetTargetRangesOfBeforeinputOnDeleteSomething({
     startContainer: p,
     startOffset: 1,
@@ -518,13 +536,13 @@
   checkGetTargetRangesOfInputOnDeleteSomething();
 }, 'Delete at "<p>abc[]<br> def</p>"');
 
-promise_test(async () => {
+promise_test(async (t) => {
   initializeTest(`<p>abc<img src="${kImgSrc}">def</p>`);
   let p = gEditor.querySelector("p");
   let abc = p.firstChild;
   gSelection.collapse(abc, 3);
   await sendDeleteKey();
-  assert_equals(gEditor.innerHTML, "<p>abcdef</p>");
+  checkEditorContentResultAsSubTest("<p>abcdef</p>", t.name);
   checkGetTargetRangesOfBeforeinputOnDeleteSomething({
     startContainer: p,
     startOffset: 1,
@@ -536,13 +554,13 @@
 
 // White-spaces around `<img>` element are visible so that they shouldn't
 // be included into the target ranges.
-promise_test(async () => {
+promise_test(async (t) => {
   initializeTest(`<p>abc <img src="${kImgSrc}">def</p>`);
   let p = gEditor.querySelector("p");
   let abc = p.firstChild;
   gSelection.collapse(abc, 4);
   await sendDeleteKey();
-  assert_equals(gEditor.innerHTML, "<p>abc def</p>");
+  checkEditorContentResultAsSubTest("<p>abc def</p>", t.name);
   checkGetTargetRangesOfBeforeinputOnDeleteSomething({
     startContainer: p,
     startOffset: 1,
@@ -554,13 +572,13 @@
 
 // White-spaces around `<img>` element are visible so that they shouldn't
 // be included into the target ranges.
-promise_test(async () => {
+promise_test(async (t) => {
   initializeTest(`<p>abc<img src="${kImgSrc}"> def</p>`);
   let p = gEditor.querySelector("p");
   let abc = p.firstChild;
   gSelection.collapse(abc, 3);
   await sendDeleteKey();
-  assert_equals(gEditor.innerHTML, "<p>abc def</p>");
+  checkEditorContentResultAsSubTest("<p>abc def</p>", t.name);
   checkGetTargetRangesOfBeforeinputOnDeleteSomething({
     startContainer: p,
     startOffset: 1,
@@ -570,13 +588,16 @@
   checkGetTargetRangesOfInputOnDeleteSomething();
 }, 'Delete at "<p>abc[]<img> def</p>"');
 
-promise_test(async () => {
+promise_test(async (t) => {
   initializeTest(`<p>abc<img src="${kImgSrc}"><img src="${kImgSrc}">def</p>`);
   let p = gEditor.querySelector("p");
   let abc = p.firstChild;
   gSelection.collapse(abc, 3);
   await sendDeleteKey();
-  assert_equals(gEditor.innerHTML, `<p>abc<img src="${kImgSrc}">def</p>`);
+  checkEditorContentResultAsSubTest(
+    `<p>abc<img src="${kImgSrc}">def</p>`,
+    t.name
+  );
   checkGetTargetRangesOfBeforeinputOnDeleteSomething({
     startContainer: p,
     startOffset: 1,
@@ -586,12 +607,15 @@
   checkGetTargetRangesOfInputOnDeleteSomething();
 }, 'Delete at "<p>abc[]<img><img>def</p>"');
 
-promise_test(async () => {
+promise_test(async (t) => {
   initializeTest(`<p>abc<img src="${kImgSrc}"><img src="${kImgSrc}">def</p>`);
   let p = gEditor.querySelector("p");
   gSelection.collapse(p, 2);
   await sendDeleteKey();
-  assert_equals(gEditor.innerHTML, `<p>abc<img src="${kImgSrc}">def</p>`);
+  checkEditorContentResultAsSubTest(
+    `<p>abc<img src="${kImgSrc}">def</p>`,
+    t.name
+  );
   checkGetTargetRangesOfBeforeinputOnDeleteSomething({
     startContainer: p,
     startOffset: 2,
@@ -601,13 +625,13 @@
   checkGetTargetRangesOfInputOnDeleteSomething();
 }, 'Delete at "<p>abc<img>{}<img>def</p>"');
 
-promise_test(async () => {
+promise_test(async (t) => {
   initializeTest(`<div>abc<hr>def</div>`);
   let div = gEditor.querySelector("div");
   let abc = div.firstChild;
   gSelection.collapse(abc, 3);
   await sendDeleteKey();
-  assert_equals(gEditor.innerHTML, "<div>abcdef</div>");
+  checkEditorContentResultAsSubTest("<div>abcdef</div>", t.name);
   checkGetTargetRangesOfBeforeinputOnDeleteSomething({
     startContainer: div,
     startOffset: 1,
@@ -621,13 +645,13 @@
 // they should be included into the target ranges to avoid they become
 // visible.
 // https://github.com/w3c/input-events/issues/112
-promise_test(async () => {
+promise_test(async (t) => {
   initializeTest(`<div>abc <hr>def</div>`);
   let div = gEditor.querySelector("div");
   let abc = div.firstChild;
   gSelection.collapse(abc, 3);
   await sendDeleteKey();
-  assert_equals(gEditor.innerHTML, "<div>abcdef</div>");
+  checkEditorContentResultAsSubTest("<div>abcdef</div>", t.name);
   checkGetTargetRangesOfBeforeinputOnDeleteSomething({
     startContainer: div,
     startOffset: 1,
@@ -641,13 +665,13 @@
 // they should be included into the target ranges to avoid they become
 // visible.
 // https://github.com/w3c/input-events/issues/112
-promise_test(async () => {
+promise_test(async (t) => {
   initializeTest(`<div>abc<hr> def</div>`);
   let div = gEditor.querySelector("div");
   let abc = div.firstChild;
   gSelection.collapse(abc, 3);
   await sendDeleteKey();
-  assert_equals(gEditor.innerHTML, "<div>abcdef</div>");
+  checkEditorContentResultAsSubTest("<div>abcdef</div>", t.name);
   checkGetTargetRangesOfBeforeinputOnDeleteSomething({
     startContainer: div,
     startOffset: 1,
@@ -659,13 +683,13 @@
 
 // Invisible `<br>` element immediately before `<hr>` element should be
 // delete once, and both of them should be included in the target range.
-promise_test(async () => {
+promise_test(async (t) => {
   initializeTest(`<div>abc<br><hr>def</div>`);
   let div = gEditor.querySelector("div");
   let abc = div.firstChild;
   gSelection.collapse(abc, 3);
   await sendDeleteKey();
-  assert_equals(gEditor.innerHTML, "<div>abcdef</div>");
+  checkEditorContentResultAsSubTest("<div>abcdef</div>", t.name);
   checkGetTargetRangesOfBeforeinputOnDeleteSomething({
     startContainer: div,
     startOffset: 1,
@@ -675,13 +699,16 @@
   checkGetTargetRangesOfInputOnDeleteSomething();
 }, 'Delete at "<div>abc[]<br><hr>def</div>"');
 
-promise_test(async () => {
+promise_test(async (t) => {
   initializeTest(`<div><img src="${kImgSrc}"><br><hr>def</div>`);
   let div = gEditor.querySelector("div");
   let img = div.firstChild;
   gSelection.collapse(div, 1);
   await sendDeleteKey();
-  assert_equals(gEditor.innerHTML, `<div><img src="${kImgSrc}">def</div>`);
+  checkEditorContentResultAsSubTest(
+    `<div><img src="${kImgSrc}">def</div>`,
+    t.name
+  );
   checkGetTargetRangesOfBeforeinputOnDeleteSomething({
     startContainer: div,
     startOffset: 1,
@@ -691,15 +718,20 @@
   checkGetTargetRangesOfInputOnDeleteSomething();
 }, 'Delete at "<div><img>{}<br><hr>def</div>"');
 
-promise_test(async () => {
+promise_test(async (t) => {
   initializeTest("<div>abc<p>def<br>ghi</p></div>");
   let p = gEditor.querySelector("p");
   let def = p.firstChild;
   let abc = gEditor.firstChild.firstChild;
   gSelection.collapse(abc, 3);
   await sendDeleteKey();
-  assert_in_array(gEditor.innerHTML, ["<div>abcdef<p>ghi</p></div>",
-                                      "<div>abcdef<br><p>ghi</p></div>"]);
+  checkEditorContentResultAsSubTest(
+    [
+      "<div>abcdef<p>ghi</p></div>",
+      "<div>abcdef<br><p>ghi</p></div>",
+    ],
+    t.name
+  );
   checkGetTargetRangesOfBeforeinputOnDeleteSomething({
     startContainer: abc,
     startOffset: 3,
@@ -709,7 +741,7 @@
   checkGetTargetRangesOfInputOnDeleteSomething();
 }, 'Delete at "<div>abc[]<p>def<br>ghi</p></div>"');
 
-promise_test(async () => {
+promise_test(async (t) => {
   initializeTest("<div>abc<br><p>def<br>ghi</p></div>");
   let div = gEditor.firstChild;
   let p = gEditor.querySelector("p");
@@ -717,8 +749,13 @@
   let abc = div.firstChild;
   gSelection.collapse(abc, 3);
   await sendDeleteKey();
-  assert_in_array(gEditor.innerHTML, ["<div>abcdef<p>ghi</p></div>",
-                                      "<div>abcdef<br><p>ghi</p></div>"]);
+  checkEditorContentResultAsSubTest(
+    [
+      "<div>abcdef<p>ghi</p></div>",
+      "<div>abcdef<br><p>ghi</p></div>",
+    ],
+    t.name
+  );
   checkGetTargetRangesOfBeforeinputOnDeleteSomething({
     startContainer: div,
     startOffset: 1,
@@ -728,7 +765,7 @@
   checkGetTargetRangesOfInputOnDeleteSomething();
 }, 'Delete at "<div>abc[]<br><p>def<br>ghi</p></div>"');
 
-promise_test(async () => {
+promise_test(async (t) => {
   initializeTest(`<div><img src="${kImgSrc}"><br><p>def<br>ghi</p></div>`);
   let div = gEditor.firstChild;
   let p = gEditor.querySelector("p");
@@ -736,8 +773,13 @@
   let abc = div.firstChild;
   gSelection.collapse(div, 1);
   await sendDeleteKey();
-  assert_in_array(gEditor.innerHTML, [`<div><img src="${kImgSrc}">def<p>ghi</p></div>`,
-                                      `<div><img src="${kImgSrc}">def<br><p>ghi</p></div>`]);
+  checkEditorContentResultAsSubTest(
+    [
+      `<div><img src="${kImgSrc}">def<p>ghi</p></div>`,
+      `<div><img src="${kImgSrc}">def<br><p>ghi</p></div>`,
+    ],
+    t.name
+  );
   checkGetTargetRangesOfBeforeinputOnDeleteSomething({
     startContainer: div,
     startOffset: 1,
@@ -752,15 +794,20 @@
 // the child block, and they should be contained in a range of
 // `getTargetRanges()`, but maybe needs discussion.
 // https://github.com/w3c/input-events/issues/112
-promise_test(async () => {
+promise_test(async (t) => {
   initializeTest("<div>abc   <p>   def<br>ghi</p></div>");
   let p = gEditor.querySelector("p");
   let def = p.firstChild;
   let abc = gEditor.firstChild.firstChild;
   gSelection.collapse(abc, 3);
   await sendDeleteKey();
-  assert_in_array(gEditor.innerHTML, ["<div>abcdef<p>ghi</p></div>",
-                                      "<div>abcdef<br><p>ghi</p></div>"]);
+  checkEditorContentResultAsSubTest(
+    [
+      "<div>abcdef<p>ghi</p></div>",
+      "<div>abcdef<br><p>ghi</p></div>",
+    ],
+    t.name
+  );
   checkGetTargetRangesOfBeforeinputOnDeleteSomething({
     startContainer: abc,
     startOffset: 3,
@@ -770,13 +817,13 @@
   checkGetTargetRangesOfInputOnDeleteSomething();
 }, 'Delete at "<div>abc[]   <p>   def<br>ghi</p></div>"');
 
-promise_test(async () => {
+promise_test(async (t) => {
   initializeTest("<div>abc<p><b>def</b></p></div>");
   let abc = gEditor.querySelector("div").firstChild;
   let def = gEditor.querySelector("b").firstChild;
   gSelection.collapse(abc, 3);
   await sendDeleteKey();
-  assert_equals(gEditor.innerHTML, "<div>abc<b>def</b></div>");
+  checkEditorContentResultAsSubTest("<div>abc<b>def</b></div>", t.name);
   checkGetTargetRangesOfBeforeinputOnDeleteSomething({
     startContainer: abc,
     startOffset: 3,
@@ -786,14 +833,19 @@
   checkGetTargetRangesOfInputOnDeleteSomething();
 }, 'Delete at "<div>abc[]<p><b>def</b></p></div>"');
 
-promise_test(async () => {
+promise_test(async (t) => {
   initializeTest("<div><b>abc</b><p><b>def</b></p></div>");
   let abc = gEditor.querySelector("b").firstChild;
   let def = gEditor.querySelector("p > b").firstChild;
   gSelection.collapse(abc, 3);
   await sendDeleteKey();
-  assert_in_array(gEditor.innerHTML, ["<div><b>abc</b><b>def</b></div>",
-                                      "<div><b>abcdef</b></div>"]);
+  checkEditorContentResultAsSubTest(
+    [
+      "<div><b>abc</b><b>def</b></div>",
+      "<div><b>abcdef</b></div>",
+    ],
+    t.name
+  );
   checkGetTargetRangesOfBeforeinputOnDeleteSomething({
     startContainer: abc,
     startOffset: 3,
@@ -803,13 +855,13 @@
   checkGetTargetRangesOfInputOnDeleteSomething();
 }, 'Delete at "<div><b>abc[]</b><p><b>def</b></p></div>"');
 
-promise_test(async () => {
+promise_test(async (t) => {
   initializeTest("<div><i>abc</i><p><b>def</b></p></div>");
   let abc = gEditor.querySelector("i").firstChild;
   let def = gEditor.querySelector("b").firstChild;
   gSelection.collapse(abc, 3);
   await sendDeleteKey();
-  assert_equals(gEditor.innerHTML, "<div><i>abc</i><b>def</b></div>");
+  checkEditorContentResultAsSubTest("<div><i>abc</i><b>def</b></div>", t.name);
   checkGetTargetRangesOfBeforeinputOnDeleteSomething({
     startContainer: abc,
     startOffset: 3,
@@ -819,14 +871,19 @@
   checkGetTargetRangesOfInputOnDeleteSomething();
 }, 'Delete at "<div><i>abc[]</i><p><b>def</b></p></div>"');
 
-promise_test(async () => {
+promise_test(async (t) => {
   initializeTest("<div><p>abc</p>def</div>");
   let abc = gEditor.querySelector("p").firstChild;
   let def = gEditor.querySelector("p").nextSibling;
   gSelection.collapse(abc, 3);
   await sendDeleteKey();
-  assert_in_array(gEditor.innerHTML, ["<div><p>abcdef</p></div>",
-                                      "<div><p>abcdef<br></p></div>"]);
+  checkEditorContentResultAsSubTest(
+    [
+      "<div><p>abcdef</p></div>",
+      "<div><p>abcdef<br></p></div>",
+    ],
+    t.name
+  );
   checkGetTargetRangesOfBeforeinputOnDeleteSomething({
     startContainer: abc,
     startOffset: 3,
@@ -836,15 +893,20 @@
   checkGetTargetRangesOfInputOnDeleteSomething();
 }, 'Delete at "<div><p>abc[]</p>def</div>"');
 
-promise_test(async () => {
+promise_test(async (t) => {
   initializeTest("<div><p>abc<br></p>def</div>");
   let p = gEditor.querySelector("p");
   let abc = p.firstChild;
   let def = p.nextSibling;
   gSelection.collapse(abc, 3);
   await sendDeleteKey();
-  assert_in_array(gEditor.innerHTML, ["<div><p>abcdef</p></div>",
-                                      "<div><p>abcdef<br></p></div>"]);
+  checkEditorContentResultAsSubTest(
+    [
+      "<div><p>abcdef</p></div>",
+      "<div><p>abcdef<br></p></div>",
+    ],
+    t.name
+  );
   checkGetTargetRangesOfBeforeinputOnDeleteSomething({
     startContainer: p,
     startOffset: 1,
@@ -854,15 +916,20 @@
   checkGetTargetRangesOfInputOnDeleteSomething();
 }, 'Delete at "<div><p>abc[]<br></p>def</div>"');
 
-promise_test(async () => {
+promise_test(async (t) => {
   initializeTest(`<div><p><img src="${kImgSrc}"><br></p>def</div>`);
   let p = gEditor.querySelector("p");
   let abc = p.firstChild;
   let def = p.nextSibling;
   gSelection.collapse(p, 1);
   await sendDeleteKey();
-  assert_in_array(gEditor.innerHTML, [`<div><p><img src="${kImgSrc}">def</p></div>`,
-                                      `<div><p><img src="${kImgSrc}">def<br></p></div>`]);
+  checkEditorContentResultAsSubTest(
+    [
+      `<div><p><img src="${kImgSrc}">def</p></div>`,
+      `<div><p><img src="${kImgSrc}">def<br></p></div>`,
+    ],
+    t.name
+  );
   checkGetTargetRangesOfBeforeinputOnDeleteSomething({
     startContainer: p,
     startOffset: 1,
@@ -877,14 +944,19 @@
 // in the parent block, and they should be contained by a range of
 // `getTargetRanges()`, but maybe needs discussion.
 // https://github.com/w3c/input-events/issues/112
-promise_test(async () => {
+promise_test(async (t) => {
   initializeTest("<div><p>abc   </p>   def</div>");
   let abc = gEditor.querySelector("p").firstChild;
   let def = gEditor.querySelector("p").nextSibling;
   gSelection.collapse(abc, 3);
   await sendDeleteKey();
-  assert_in_array(gEditor.innerHTML, ["<div><p>abcdef</p></div>",
-                                      "<div><p>abcdef<br></p></div>"]);
+  checkEditorContentResultAsSubTest(
+    [
+      "<div><p>abcdef</p></div>",
+      "<div><p>abcdef<br></p></div>",
+    ],
+    t.name
+  );
   checkGetTargetRangesOfBeforeinputOnDeleteSomething({
     startContainer: abc,
     startOffset: 3,
@@ -894,13 +966,13 @@
   checkGetTargetRangesOfInputOnDeleteSomething();
 }, 'Delete at "<div><p>abc[]   </p>   def</div>"');
 
-promise_test(async () => {
+promise_test(async (t) => {
   initializeTest("<div><p><b>abc</b></p>def</div>");
   let abc = gEditor.querySelector("b").firstChild;
   let def = gEditor.querySelector("p").nextSibling;
   gSelection.collapse(abc, 3);
   await sendDeleteKey();
-  assert_equals(gEditor.innerHTML, "<div><p><b>abc</b>def</p></div>");
+  checkEditorContentResultAsSubTest("<div><p><b>abc</b>def</p></div>", t.name);
   checkGetTargetRangesOfBeforeinputOnDeleteSomething({
     startContainer: abc,
     startOffset: 3,
@@ -910,14 +982,19 @@
   checkGetTargetRangesOfInputOnDeleteSomething();
 }, 'Delete at "<div><p><b>abc[]</b></p>def</div>"');
 
-promise_test(async () => {
+promise_test(async (t) => {
   initializeTest("<div><p><b>abc</b></p><b>def</b></div>");
   let abc = gEditor.querySelector("b").firstChild;
   let def = gEditor.querySelector("div > b").firstChild;
   gSelection.collapse(abc, 3);
   await sendDeleteKey();
-  assert_in_array(gEditor.innerHTML, ["<div><p><b>abc</b><b>def</b></p></div>",
-                                      "<div><p><b>abcdef</b></p></div>"]);
+  checkEditorContentResultAsSubTest(
+    [
+      "<div><p><b>abc</b><b>def</b></p></div>",
+      "<div><p><b>abcdef</b></p></div>",
+    ],
+    t.name
+  );
   checkGetTargetRangesOfBeforeinputOnDeleteSomething({
     startContainer: abc,
     startOffset: 3,
@@ -927,13 +1004,16 @@
   checkGetTargetRangesOfInputOnDeleteSomething();
 }, 'Delete at "<div><p><b>abc[]</b></p><b>def</b></div>"');
 
-promise_test(async () => {
+promise_test(async (t) => {
   initializeTest("<div><p><b>abc</b></p><i>def</i></div>");
   let abc = gEditor.querySelector("b").firstChild;
   let def = gEditor.querySelector("i").firstChild;
   gSelection.collapse(abc, 3);
   await sendDeleteKey();
-  assert_equals(gEditor.innerHTML, "<div><p><b>abc</b><i>def</i></p></div>");
+  checkEditorContentResultAsSubTest(
+    "<div><p><b>abc</b><i>def</i></p></div>",
+    t.name
+  );
   checkGetTargetRangesOfBeforeinputOnDeleteSomething({
     startContainer: abc,
     startOffset: 3,
@@ -943,13 +1023,13 @@
   checkGetTargetRangesOfInputOnDeleteSomething();
 }, 'Delete at "<div><p><b>abc[]</b></p><i>def</i></div>"');
 
-promise_test(async () => {
+promise_test(async (t) => {
   initializeTest("<div>abc<ul><li>def</li></ul>ghi</div>");
   let abc = gEditor.querySelector("div").firstChild;
   let def = gEditor.querySelector("li").firstChild;
   gSelection.collapse(abc, 3);
   await sendDeleteKey();
-  assert_equals(gEditor.innerHTML, "<div>abcdefghi</div>");
+  checkEditorContentResultAsSubTest("<div>abcdefghi</div>", t.name);
   checkGetTargetRangesOfBeforeinputOnDeleteSomething({
     startContainer: abc,
     startOffset: 3,
@@ -959,13 +1039,13 @@
   checkGetTargetRangesOfInputOnDeleteSomething();
 }, 'Delete at "<div>abc[]<ul><li>def</li></ul>ghi</div>"');
 
-promise_test(async () => {
+promise_test(async (t) => {
   initializeTest("<div>abc  <ul><li> def </li></ul>  ghi</div>");
   let abc = gEditor.querySelector("div").firstChild;
   let def = gEditor.querySelector("li").firstChild;
   gSelection.collapse(abc, 3);
   await sendDeleteKey();
-  assert_equals(gEditor.innerHTML, "<div>abcdefghi</div>");
+  checkEditorContentResultAsSubTest("<div>abcdefghi</div>", t.name);
   checkGetTargetRangesOfBeforeinputOnDeleteSomething({
     startContainer: abc,
     startOffset: 3,
@@ -975,13 +1055,13 @@
   checkGetTargetRangesOfInputOnDeleteSomething();
 }, 'Delete at "<div>abc[]  <ul><li> def </li></ul>  ghi</div>"');
 
-promise_test(async () => {
+promise_test(async (t) => {
   initializeTest("<div>abc  <ul><li> def </li></ul>  ghi</div>");
   let abc = gEditor.querySelector("div").firstChild;
   let def = gEditor.querySelector("li").firstChild;
   gSelection.collapse(abc, abc.length);
   await sendDeleteKey();
-  assert_equals(gEditor.innerHTML, "<div>abcdefghi</div>");
+  checkEditorContentResultAsSubTest("<div>abcdefghi</div>", t.name);
   checkGetTargetRangesOfBeforeinputOnDeleteSomething({
     startContainer: abc,
     startOffset: 3,
@@ -991,13 +1071,16 @@
   checkGetTargetRangesOfInputOnDeleteSomething();
 }, 'Delete at "<div>abc  []<ul><li> def </li></ul>  ghi</div>"');
 
-promise_test(async () => {
+promise_test(async (t) => {
   initializeTest("<div>abc<ul><li>def</li></ul>ghi</div>");
   let def = gEditor.querySelector("li").firstChild;
   let ghi = gEditor.querySelector("ul").nextSibling;
   gSelection.collapse(def, 3);
   await sendDeleteKey();
-  assert_equals(gEditor.innerHTML, "<div>abc<ul><li>defghi</li></ul></div>");
+  checkEditorContentResultAsSubTest(
+    "<div>abc<ul><li>defghi</li></ul></div>",
+    t.name
+  );
   checkGetTargetRangesOfBeforeinputOnDeleteSomething({
     startContainer: def,
     startOffset: 3,
@@ -1007,15 +1090,20 @@
   checkGetTargetRangesOfInputOnDeleteSomething();
 }, 'Delete at "<div>abc<ul><li>def[]</li></ul>ghi</div>"');
 
-promise_test(async () => {
+promise_test(async (t) => {
   initializeTest("<div>abc <ul><li>  def  </li></ul> ghi</div>");
   let def = gEditor.querySelector("li").firstChild;
   let ghi = gEditor.querySelector("ul").nextSibling;
   gSelection.collapse(def, 5);
   await sendDeleteKey();
-  assert_in_array(gEditor.innerHTML, ["<div>abc <ul><li>  defghi</li></ul></div>",
-                                      "<div>abc <ul><li>defghi</li></ul></div>",
-                                      "<div>abc<ul><li>defghi</li></ul></div>"]);
+  checkEditorContentResultAsSubTest(
+    [
+      "<div>abc <ul><li>  defghi</li></ul></div>",
+      "<div>abc <ul><li>defghi</li></ul></div>",
+      "<div>abc<ul><li>defghi</li></ul></div>",
+    ],
+    t.name
+  );
   checkGetTargetRangesOfBeforeinputOnDeleteSomething({
     startContainer: def,
     startOffset: 5,
@@ -1025,15 +1113,20 @@
   checkGetTargetRangesOfInputOnDeleteSomething();
 }, 'Delete at "<div>abc <ul><li>  def[]  </li></ul> ghi</div>"');
 
-promise_test(async () => {
+promise_test(async (t) => {
   initializeTest("<div>abc <ul><li>  def  </li></ul> ghi</div>");
   let def = gEditor.querySelector("li").firstChild;
   let ghi = gEditor.querySelector("ul").nextSibling;
   gSelection.collapse(def, def.length);
   await sendDeleteKey();
-  assert_in_array(gEditor.innerHTML, ["<div>abc <ul><li>  defghi</li></ul></div>",
-                                      "<div>abc <ul><li>defghi</li></ul></div>",
-                                      "<div>abc<ul><li>defghi</li></ul></div>"]);
+  checkEditorContentResultAsSubTest(
+    [
+      "<div>abc <ul><li>  defghi</li></ul></div>",
+      "<div>abc <ul><li>defghi</li></ul></div>",
+      "<div>abc<ul><li>defghi</li></ul></div>",
+    ],
+    t.name
+  );
   checkGetTargetRangesOfBeforeinputOnDeleteSomething({
     startContainer: def,
     startOffset: 5,
@@ -1043,13 +1136,16 @@
   checkGetTargetRangesOfInputOnDeleteSomething();
 }, 'Delete at "<div>abc <ul><li>  def  []</li></ul> ghi</div>"');
 
-promise_test(async () => {
+promise_test(async (t) => {
   initializeTest("<div>abc<ul><li>def</li><li>ghi</li></ul>jkl</div>");
   let abc = gEditor.querySelector("div").firstChild;
   let def = gEditor.querySelector("li").firstChild;
   gSelection.collapse(abc, 3);
   await sendDeleteKey();
-  assert_equals(gEditor.innerHTML, "<div>abcdef<ul><li>ghi</li></ul>jkl</div>");
+  checkEditorContentResultAsSubTest(
+    "<div>abcdef<ul><li>ghi</li></ul>jkl</div>",
+    t.name
+  );
   checkGetTargetRangesOfBeforeinputOnDeleteSomething({
     startContainer: abc,
     startOffset: 3,
@@ -1059,13 +1155,16 @@
   checkGetTargetRangesOfInputOnDeleteSomething();
 }, 'Delete at "<div>abc[]<ul><li>def</li><li>ghi</li></ul>jkl</div>"');
 
-promise_test(async () => {
+promise_test(async (t) => {
   initializeTest("<div>abc<ul><li>def</li><li>ghi</li></ul>jkl</div>");
   let def = gEditor.querySelector("li").firstChild;
   let ghi = gEditor.querySelector("li + li").firstChild;
   gSelection.collapse(def, 3);
   await sendDeleteKey();
-  assert_equals(gEditor.innerHTML, "<div>abc<ul><li>defghi</li></ul>jkl</div>");
+  checkEditorContentResultAsSubTest(
+    "<div>abc<ul><li>defghi</li></ul>jkl</div>",
+    t.name
+  );
   checkGetTargetRangesOfBeforeinputOnDeleteSomething({
     startContainer: def,
     startOffset: 3,
@@ -1075,13 +1174,16 @@
   checkGetTargetRangesOfInputOnDeleteSomething();
 }, 'Delete at "<div>abc<ul><li>def[]</li><li>ghi</li></ul>jkl</div>"');
 
-promise_test(async () => {
+promise_test(async (t) => {
   initializeTest("<div>abc<ul><li>def</li><li>ghi</li></ul>jkl</div>");
   let ghi = gEditor.querySelector("li + li").firstChild;
   let jkl = gEditor.querySelector("ul").nextSibling;
   gSelection.collapse(ghi, 3);
   await sendDeleteKey();
-  assert_equals(gEditor.innerHTML, "<div>abc<ul><li>def</li><li>ghijkl</li></ul></div>");
+  checkEditorContentResultAsSubTest(
+    "<div>abc<ul><li>def</li><li>ghijkl</li></ul></div>",
+    t.name
+  );
   checkGetTargetRangesOfBeforeinputOnDeleteSomething({
     startContainer: ghi,
     startOffset: 3,
@@ -1095,14 +1197,14 @@
 // case, it should be treated as joining with the previous paragraph.
 // The target range should include the invisible <br> element in the empty
 // paragraph.
-promise_test(async () => {
+promise_test(async (t) => {
   initializeTest("<p><br></p><p>abc</p>");
   let p1 = gEditor.querySelector("p");
   let p2 = p1.nextSibling;
   let abc = p2.firstChild;
   gSelection.collapse(p1, 0);
   await sendDeleteKey();
-  assert_equals(gEditor.innerHTML, "<p>abc</p>");
+  checkEditorContentResultAsSubTest("<p>abc</p>", t.name);
   checkGetTargetRangesOfBeforeinputOnDeleteSomething({
     startContainer: p1,
     startOffset: 0,
@@ -1114,7 +1216,7 @@
 
 // Delete ignore the empty span and the other things must be same as the
 // previous test.
-promise_test(async () => {
+promise_test(async (t) => {
   initializeTest("<p><span></span><br></p><p>abc</p>");
   let p1 = gEditor.querySelector("p");
   let span = p1.firstChild;
@@ -1122,7 +1224,7 @@
   let abc = p2.firstChild;
   gSelection.collapse(span, 0);
   await sendDeleteKey();
-  assert_equals(gEditor.innerHTML, "<p>abc</p>");
+  checkEditorContentResultAsSubTest("<p>abc</p>", t.name);
   checkGetTargetRangesOfBeforeinputOnDeleteSomething({
     startContainer: p1,
     startOffset: 0,
@@ -1134,15 +1236,20 @@
 
 // If invisible white-spaces are removed with same action as above tests,
 // the range should be included in the target ranges.
-promise_test(async () => {
+promise_test(async (t) => {
   initializeTest("<p><br></p><p>  abc</p>");
   let p1 = gEditor.querySelector("p");
   let p2 = p1.nextSibling;
   let abc = p2.firstChild;
   gSelection.collapse(p1, 0);
   await sendDeleteKey();
-  assert_in_array(gEditor.innerHTML, ["<p>  abc</p>",
-                                      "<p>abc</p>"]);
+  checkEditorContentResultAsSubTest(
+    [
+      "<p>  abc</p>",
+      "<p>abc</p>",
+    ],
+    t.name
+  );
   checkGetTargetRangesOfBeforeinputOnDeleteSomething({
     startContainer: p1,
     startOffset: 0,
@@ -1154,14 +1261,17 @@
 
 // If the next block begins with non-editable content, target range
 // should be at the non-editable content node.
-promise_test(async () => {
+promise_test(async (t) => {
   initializeTest("<p><br></p><p><span contenteditable=\"false\">abc</span>def</p>");
   let p1 = gEditor.querySelector("p");
   let p2 = p1.nextSibling;
   let span = gEditor.querySelector("span");
   gSelection.collapse(p1, 0);
   await sendDeleteKey();
-  assert_equals(gEditor.innerHTML, "<p><span contenteditable=\"false\">abc</span>def</p>");
+  checkEditorContentResultAsSubTest(
+    "<p><span contenteditable=\"false\">abc</span>def</p>",
+    t.name
+  );
   checkGetTargetRangesOfBeforeinputOnDeleteSomething({
     startContainer: p1,
     startOffset: 0,
@@ -1174,7 +1284,7 @@
 // If next non-editable paragraph is deleted, target range should end
 // with start of the text node in the last paragraph.  Otherwise, ends at
 // the non-editable paragraph.
-promise_test(async () => {
+promise_test(async (t) => {
   initializeTest("<p><br></p><p contenteditable=\"false\">abc</p><p>def</p>");
   let p1 = gEditor.querySelector("p");
   let p2 = p1.nextSibling;
@@ -1182,8 +1292,13 @@
   let def = p3.firstChild;
   gSelection.collapse(p3, 0);
   await sendDeleteKey();
-  assert_in_array(gEditor.innerHTML, ["<p>def</p>",
-                                      "<p contenteditable=\"false\">abc</p><p>def</p>"]);
+  checkEditorContentResultAsSubTest(
+    [
+      "<p>def</p>",
+      "<p contenteditable=\"false\">abc</p><p>def</p>",
+    ],
+    t.name
+  );
   checkGetTargetRangesOfBeforeinputOnDeleteSomething({
     startContainer: p1,
     startOffset: 0,
@@ -1193,15 +1308,20 @@
   checkGetTargetRangesOfInputOnDeleteSomething();
 }, 'Delete at "<p>{}<br></p><p contenteditable=\"false\">abc</p><p>def</p>"');
 
-promise_test(async () => {
+promise_test(async (t) => {
   initializeTest("<p>abc<span contenteditable=\"false\">def</span>ghi</p>");
   let p = gEditor.querySelector("p");
   let abc = p.firstChild;
   gSelection.collapse(abc, 3);
   await sendDeleteKey();
-  assert_in_array(gEditor.innerHTML, ["<p>abc<span contenteditable=\"false\">def</span>ghi</p>",
-                                      "<p>abcghi</p>",
-                                      "<p>abcghi<br></p>"]);
+  checkEditorContentResultAsSubTest(
+    [
+      "<p>abc<span contenteditable=\"false\">def</span>ghi</p>",
+      "<p>abcghi</p>",
+      "<p>abcghi<br></p>",
+    ],
+    t.name
+  );
   if (gEditor.innerHTML === "<p>abc<span contenteditable=\"false\">def</span>ghi</p>") {
     checkGetTargetRangesOfBeforeinputOnDeleteSomething({
       startContainer: abc,
@@ -1224,14 +1344,19 @@
 }, 'Delete at "<p>abc[]<span contenteditable=\"false\">def</span>ghi</p>"');
 
 // If just removes the paragraph, target range should end at the table element.
-promise_test(async () => {
+promise_test(async (t) => {
   initializeTest("<p><br></p><table><tr><td>cell</td></tr></table>");
   let cell = gEditor.querySelector("td");
   let p = gEditor.querySelector("p");
   gSelection.collapse(p, 0);
   await sendDeleteKey();
-  assert_in_array(gEditor.innerHTML, ["<table><tbody><tr><td>cell</td></tr></tbody></table>",
-                                      "<p><br></p><table><tbody><tr><td>cell</td></tr></tbody></table>"]);
+  checkEditorContentResultAsSubTest(
+    [
+      "<table><tbody><tr><td>cell</td></tr></tbody></table>",
+      "<p><br></p><table><tbody><tr><td>cell</td></tr></tbody></table>",
+    ],
+    t.name
+  );
   if (p.isConnected) {
     checkGetTargetRangesOfBeforeinputOnDeleteSomething({
       startContainer: p,
@@ -1253,13 +1378,16 @@
 
 // If table cell won't be joined, target range should be collapsed in the
 // cell.
-promise_test(async () => {
+promise_test(async (t) => {
   initializeTest("<table><tr><td><br></td><td>cell2</td></tr></table>");
   let cell1 = gEditor.querySelector("td");
   let cell2 = cell1.nextSibling;
   gSelection.collapse(cell1, 0);
   await sendDeleteKey();
-  assert_equals(gEditor.innerHTML, "<table><tbody><tr><td><br></td><td>cell2</td></tr></tbody></table>");
+  checkEditorContentResultAsSubTest(
+    "<table><tbody><tr><td><br></td><td>cell2</td></tr></tbody></table>",
+    t.name
+  );
   checkGetTargetRangesOfBeforeinputOnDeleteSomething({
     startContainer: cell1,
     startOffset: 0,
@@ -1271,12 +1399,15 @@
 
 // If table caption won't be deleted, target range should be collapsed in the
 // caption element.
-promise_test(async () => {
+promise_test(async (t) => {
   initializeTest("<table><caption><br></caption><tr><td>cell</td></tr></table>");
   let caption = gEditor.querySelector("caption");
   gSelection.collapse(caption, 0);
   await sendDeleteKey();
-  assert_equals(gEditor.innerHTML, "<table><caption><br></caption><tbody><tr><td>cell</td></tr></tbody></table>");
+  checkEditorContentResultAsSubTest(
+    "<table><caption><br></caption><tbody><tr><td>cell</td></tr></tbody></table>",
+    t.name
+  );
   checkGetTargetRangesOfBeforeinputOnDeleteSomething({
     startContainer: caption,
     startOffset: 0,
@@ -1287,14 +1418,19 @@
 }, 'Delete at "<table><caption>{}<br></caption><tr><td>cell</td></tr></table>"');
 
 // If a table cell element is selected, only its content should be deleted.
-promise_test(async () => {
+promise_test(async (t) => {
   initializeTest("<table><tr><td>cell1</td><td>cell2</td></tr></table>");
   let cell1 = gEditor.querySelector("td");
   let tr = cell1.parentNode;
   gSelection.setBaseAndExtent(tr, 0, tr, 1);
   await sendDeleteKey();
-  assert_in_array(gEditor.innerHTML, ["<table><tbody><tr><td></td><td>cell2</td></tr></tbody></table>",
-                                      "<table><tbody><tr><td><br></td><td>cell2</td></tr></tbody></table>"]);
+  checkEditorContentResultAsSubTest(
+    [
+      "<table><tbody><tr><td></td><td>cell2</td></tr></tbody></table>",
+      "<table><tbody><tr><td><br></td><td>cell2</td></tr></tbody></table>",
+    ],
+    t.name
+  );
   // XXX Perhaps, target range should be selecting only all children of
   //     cell1 instead.
   checkGetTargetRangesOfBeforeinputOnDeleteSomething({
@@ -1306,14 +1442,19 @@
   checkGetTargetRangesOfInputOnDeleteSomething();
 }, 'Delete at "<table><tr>{<td>cell1</td>}<td>cell2</td></tr></table>"');
 
-promise_test(async () => {
+promise_test(async (t) => {
   initializeTest("<table><tr><td>cell1</td><td>cell2</td></tr></table>");
   let cell2 = gEditor.querySelector("td + td");
   let tr = cell2.parentNode;
   gSelection.setBaseAndExtent(tr, 1, tr, 2);
   await sendDeleteKey();
-  assert_in_array(gEditor.innerHTML, ["<table><tbody><tr><td>cell1</td><td></td></tr></tbody></table>",
-                                      "<table><tbody><tr><td>cell1</td><td><br></td></tr></tbody></table>"]);
+  checkEditorContentResultAsSubTest(
+    [
+      "<table><tbody><tr><td>cell1</td><td></td></tr></tbody></table>",
+      "<table><tbody><tr><td>cell1</td><td><br></td></tr></tbody></table>",
+    ],
+    t.name
+  );
   // XXX Perhaps, target range should be selecting only all children of
   //     cell1 instead.
   checkGetTargetRangesOfBeforeinputOnDeleteSomething({
@@ -1326,16 +1467,21 @@
 }, 'Delete at "<table><tr><td>cell1</td>{<td>cell2</td>}</tr></table>"');
 
 // If the last table cell element is selected, what browsers should do?
-promise_test(async () => {
+promise_test(async (t) => {
   initializeTest("<table><tr><td>cell</td></tr></table>");
   let cell = gEditor.querySelector("td");
   let tr = cell.parentNode;
   let table = gEditor.querySelector("table");
   gSelection.setBaseAndExtent(tr, 0, tr, 1);
   await sendDeleteKey();
-  assert_in_array(gEditor.innerHTML, ["<table><tbody><tr><td></td></tr></tbody></table>",
-                                      "<table><tbody><tr><td><br></td></tr></tbody></table>",
-                                      "<br>"]);
+  checkEditorContentResultAsSubTest(
+    [
+      "<table><tbody><tr><td></td></tr></tbody></table>",
+      "<table><tbody><tr><td><br></td></tr></tbody></table>",
+      "<br>",
+    ],
+    t.name
+  );
   if (gEditor.querySelector("table")) {
     // XXX Perhaps, target range should be selecting only all children of
     //     cell1 instead.
@@ -1359,7 +1505,7 @@
 }, 'Delete at "<table><tr>{<td>cell</td>}</tr></table>"');
 
 // Testing multiple cell selection mode.
-promise_test(async () => {
+promise_test(async (t) => {
   initializeTest("<table><tr><td>cell1</td><td>cell2</td></tr><tr><td>cell3</td><td>cell4</td></tr></table>");
   let cell1 = gEditor.querySelector("td");
   let cell4 = gEditor.querySelector("tr + tr > td + td");
@@ -1374,8 +1520,13 @@
   gSelection.addRange(range);
   assert_equals(gSelection.rangeCount, 2, "Should support multiple cell selection");
   await sendDeleteKey();
-  assert_in_array(gEditor.innerHTML, ["<table><tbody><tr><td></td><td>cell2</td></tr><tr><td>cell3</td><td></td></tr></tbody></table>",
-                                      "<table><tbody><tr><td><br></td><td>cell2</td></tr><tr><td>cell3</td><td><br></td></tr></tbody></table>"]);
+  checkEditorContentResultAsSubTest(
+    [
+      "<table><tbody><tr><td></td><td>cell2</td></tr><tr><td>cell3</td><td></td></tr></tbody></table>",
+      "<table><tbody><tr><td><br></td><td>cell2</td></tr><tr><td>cell3</td><td><br></td></tr></tbody></table>",
+    ],
+    t.name
+  );
   // XXX Perhaps, target range should be selecting only all children of
   //     cell1 and cell4 instead.
   checkGetTargetRangesOfBeforeinputOnDeleteSomething([
@@ -1395,7 +1546,7 @@
   checkGetTargetRangesOfInputOnDeleteSomething();
 }, 'Delete at "<table><tr>{<td>cell1</td>}<td>cell2</td></tr><tr><td>cell3</td>{<td>cell4</td>}</tr></table>"');
 
-promise_test(async () => {
+promise_test(async (t) => {
   initializeTest("<table><tr><td>cell1</td><td>cell2</td></tr><tr><td>cell3</td><td>cell4</td></tr></table>");
   let cell1 = gEditor.querySelector("td");
   let cell3 = gEditor.querySelector("tr + tr > td");
@@ -1410,9 +1561,14 @@
   gSelection.addRange(range);
   assert_equals(gSelection.rangeCount, 2, "Should support multiple cell selection");
   await sendDeleteKey();
-  assert_in_array(gEditor.innerHTML, ["<table><tbody><tr><td></td><td>cell2</td></tr><tr><td></td><td>cell4</td></tr></tbody></table>",
-                                      "<table><tbody><tr><td><br></td><td>cell2</td></tr><tr><td><br></td><td>cell4</td></tr></tbody></table>",
-                                      "<table><tbody><tr><td>cell2</td></tr><tr><td>cell4</td></tr></tbody></table>"]);
+  checkEditorContentResultAsSubTest(
+    [
+      "<table><tbody><tr><td></td><td>cell2</td></tr><tr><td></td><td>cell4</td></tr></tbody></table>",
+      "<table><tbody><tr><td><br></td><td>cell2</td></tr><tr><td><br></td><td>cell4</td></tr></tbody></table>",
+      "<table><tbody><tr><td>cell2</td></tr><tr><td>cell4</td></tr></tbody></table>",
+    ],
+    t.name
+  );
   // XXX Perhaps, target range should be selecting only all children of
   //     cell1 and cell3 instead.
   checkGetTargetRangesOfBeforeinputOnDeleteSomething([
@@ -1432,7 +1588,7 @@
   checkGetTargetRangesOfInputOnDeleteSomething();
 }, 'Delete at "<table><tr>{<td>cell1</td>}<td>cell2</td></tr><tr>{<td>cell3</td>}<td>cell4</td></tr></table>"');
 
-promise_test(async () => {
+promise_test(async (t) => {
   initializeTest("<table><tr><td>cell1</td><td>cell2</td></tr><tr><td>cell3</td><td>cell4</td></tr></table>");
   let cell1 = gEditor.querySelector("td");
   let cell2 = gEditor.querySelector("td + td");
@@ -1447,9 +1603,14 @@
   gSelection.addRange(range);
   assert_equals(gSelection.rangeCount, 2, "Should support multiple cell selection");
   await sendDeleteKey();
-  assert_in_array(gEditor.innerHTML, ["<table><tbody><tr><td></td><td></td></tr><tr><td>cell3</td><td>cell4</td></tr></tbody></table>",
-                                      "<table><tbody><tr><td><br></td><td><br></td></tr><tr><td>cell3</td><td>cell4</td></tr></tbody></table>",
-                                      "<table><tbody><tr><td>cell3</td><td>cell4</td></tr></tbody></table>"]);
+  checkEditorContentResultAsSubTest(
+    [
+      "<table><tbody><tr><td></td><td></td></tr><tr><td>cell3</td><td>cell4</td></tr></tbody></table>",
+      "<table><tbody><tr><td><br></td><td><br></td></tr><tr><td>cell3</td><td>cell4</td></tr></tbody></table>",
+      "<table><tbody><tr><td>cell3</td><td>cell4</td></tr></tbody></table>",
+    ],
+    t.name
+  );
   if (gEditor.querySelector("tr + tr")) {
     // XXX Perhaps, target range should be selecting only all children of
     //     cell1 and cell2 instead.
@@ -1478,7 +1639,7 @@
   checkGetTargetRangesOfInputOnDeleteSomething();
 }, 'Delete at "<table><tr>{<td>cell1</td>}{<td>cell2</td>}</tr><tr><td>cell3</td><td>cell4</td></tr></table>"');
 
-promise_test(async () => {
+promise_test(async (t) => {
   initializeTest("<table><tr><td>cell1</td><td>cell2</td></tr><tr><td>cell3</td><td>cell4</td></tr></table>");
   let cell3 = gEditor.querySelector("tr + tr > td");
   let cell4 = gEditor.querySelector("tr + tr > td + td");
@@ -1492,9 +1653,14 @@
   gSelection.addRange(range);
   assert_equals(gSelection.rangeCount, 2, "Should support multiple cell selection");
   await sendDeleteKey();
-  assert_in_array(gEditor.innerHTML, ["<table><tbody><tr><td>cell1</td><td>cell2</td></tr><tr><td></td><td></td></tr></tbody></table>",
-                                      "<table><tbody><tr><td>cell1</td><td>cell2</td></tr><tr><td><br></td><td><br></td></tr></tbody></table>",
-                                      "<table><tbody><tr><td>cell1</td><td>cell2</td></tr></tbody></table>"]);
+  checkEditorContentResultAsSubTest(
+    [
+      "<table><tbody><tr><td>cell1</td><td>cell2</td></tr><tr><td></td><td></td></tr></tbody></table>",
+      "<table><tbody><tr><td>cell1</td><td>cell2</td></tr><tr><td><br></td><td><br></td></tr></tbody></table>",
+      "<table><tbody><tr><td>cell1</td><td>cell2</td></tr></tbody></table>",
+    ],
+    t.name
+  );
   if (gEditor.querySelector("tr + tr")) {
     // XXX Perhaps, target range should be selecting only all children of
     //     cell3 and cell4 instead.
@@ -1523,7 +1689,7 @@
   checkGetTargetRangesOfInputOnDeleteSomething();
 }, 'Delete at "<table><tr><td>cell1</td><td>cell2</td></tr><tr>{<td>cell3</td>}{<td>cell4</td>}</tr></table>"');
 
-promise_test(async () => {
+promise_test(async (t) => {
   initializeTest("<table><tr><td>cell1</td><td>cell2</td></tr><tr><td>cell3</td><td>cell4</td></tr></table>");
   let cell1 = gEditor.querySelector("td");
   let cell2 = gEditor.querySelector("td + td");
@@ -1546,9 +1712,14 @@
   gSelection.addRange(range);
   assert_equals(gSelection.rangeCount, 4, "Should support multiple cell selection");
   await sendDeleteKey();
-  assert_in_array(gEditor.innerHTML, ["<table><tbody><tr><td></td><td></td></tr><tr><td></td><td></td></tr></tbody></table>",
-                                      "<table><tbody><tr><td><br></td><td><br></td></tr><tr><td><br></td><td><br></td></tr></tbody></table>",
-                                      "<br>"]);
+  checkEditorContentResultAsSubTest(
+    [
+      "<table><tbody><tr><td></td><td></td></tr><tr><td></td><td></td></tr></tbody></table>",
+      "<table><tbody><tr><td><br></td><td><br></td></tr><tr><td><br></td><td><br></td></tr></tbody></table>",
+      "<br>",
+    ],
+    t.name
+  );
   if (gEditor.querySelector("table")) {
     // XXX Perhaps, target range should be selecting only all children of
     //     cell1, cell2, cell3 and cell4 instead.
@@ -1589,7 +1760,7 @@
   checkGetTargetRangesOfInputOnDeleteSomething();
 }, 'Delete at "<table><tr>{<td>cell1</td>}{<td>cell2</td>}</tr><tr>{<td>cell3</td>}{<td>cell4</td>}</tr></table>"');
 
-promise_test(async () => {
+promise_test(async (t) => {
   initializeTest("<table><tr><td>cell1</td><td>cell2</td></tr><tr><td>cell3</td><td>cell4</td></tr></table>");
   let cell1 = gEditor.querySelector("td");
   let cell2 = gEditor.querySelector("td + td");
@@ -1609,10 +1780,15 @@
   gSelection.addRange(range);
   assert_equals(gSelection.rangeCount, 3, "Should support multiple cell selection");
   await sendDeleteKey();
-  assert_in_array(gEditor.innerHTML, ["<table><tbody><tr><td></td><td>cell2</td></tr><tr><td>cell3</td><td></td></tr></tbody></table>",
-                                      "<table><tbody><tr><td><br></td><td>cell2</td></tr><tr><td>cell3</td><td><br></td></tr></tbody></table>",
-                                      "<table><tbody><tr><td></td><td>c2</td></tr><tr><td>cell3</td><td></td></tr></tbody></table>",
-                                      "<table><tbody><tr><td><br></td><td>c2</td></tr><tr><td>cell3</td><td><br></td></tr></tbody></table>"]);
+  checkEditorContentResultAsSubTest(
+    [
+      "<table><tbody><tr><td></td><td>cell2</td></tr><tr><td>cell3</td><td></td></tr></tbody></table>",
+      "<table><tbody><tr><td><br></td><td>cell2</td></tr><tr><td>cell3</td><td><br></td></tr></tbody></table>",
+      "<table><tbody><tr><td></td><td>c2</td></tr><tr><td>cell3</td><td></td></tr></tbody></table>",
+      "<table><tbody><tr><td><br></td><td>c2</td></tr><tr><td>cell3</td><td><br></td></tr></tbody></table>",
+    ],
+    t.name
+  );
   if (cell2.firstChild.length == "cell2".length) {
     // XXX Perhaps, target range should be selecting only all children of
     //     cell1 and cell4 instead.
@@ -1657,16 +1833,21 @@
 
 // If caret is not adjacent of deleting character, browser may not delete the
 // character, but update the caret position for next deletion.
-promise_test(async () => {
+promise_test(async (t) => {
   initializeTest("<p>hello&#x5E9;&#x5DC;&#x5D5;&#x5DD;</p>");
   let text1 = gEditor.querySelector("p").firstChild;
   let text2 = text1.nextSibling;
   gSelection.collapse(text1, 4);
   await sendArrowRightKey();
   await sendDeleteKey();
-  assert_in_array(gEditor.innerHTML, ["<p>hello\u05E9\u05DC\u05D5\u05DD</p>",
-                                      "<p>hello\u05DC\u05D5\u05DD</p>",
-                                      "<p>hello\u05E9\u05DC\u05D5</p>"]);
+  checkEditorContentResultAsSubTest(
+    [
+      "<p>hello\u05E9\u05DC\u05D5\u05DD</p>",
+      "<p>hello\u05DC\u05D5\u05DD</p>",
+      "<p>hello\u05E9\u05DC\u05D5</p>",
+    ],
+    t.name
+  );
   if (gEditor.innerHTML === "<p>hello\u05E9\u05DC\u05D5\u05DD</p>") {
     checkGetTargetRangesOfBeforeinputOnDeleteSomething({
       startContainer: text2 ? text2 : text1,
@@ -1710,7 +1891,7 @@
   return currentString.length;
 }
 
-promise_test(async () => {
+promise_test(async (t) => {
   const kText = "abc def ghi";
   initializeTest(`<p>${kText}</p>`);
   let p = gEditor.querySelector("p");
@@ -1718,8 +1899,11 @@
   await sendDeleteKey(kShift);
   let startOffset = getFirstDifferentOffset(p.firstChild.data, kText);
   let length = kText.length - p.firstChild.data.length;
-  assert_equals(gEditor.innerHTML.replace(/&nbsp;/g, " "),
-      `<p>${kText.substr(0, startOffset) + kText.substr(startOffset + length)}</p>`);
+  checkEditorContentResultAsSubTest(
+    `<p>${kText.substr(0, startOffset) + kText.substr(startOffset + length)}</p>`,
+    t.name,
+    { ignoreWhiteSpaceDifference: true }
+  );
   if (startOffset === kText.length) {
     checkBeforeinputAndInputEventsOnNOOP();
     return;
@@ -1733,7 +1917,7 @@
   checkGetTargetRangesOfInputOnDeleteSomething();
 }, 'Shift + Delete at "<p>abc []def ghi</p>"');
 
-promise_test(async () => {
+promise_test(async (t) => {
   const kText = "abc def ghi";
   initializeTest(`<p>${kText}</p>`);
   let p = gEditor.querySelector("p");
@@ -1741,8 +1925,11 @@
   await sendDeleteKey(kControl);
   let startOffset = getFirstDifferentOffset(p.firstChild.data, kText);
   let length = kText.length - p.firstChild.data.length;
-  assert_equals(gEditor.innerHTML.replace(/&nbsp;/g, " "),
-      `<p>${kText.substr(0, startOffset) + kText.substr(startOffset + length)}</p>`);
+  checkEditorContentResultAsSubTest(
+    `<p>${kText.substr(0, startOffset) + kText.substr(startOffset + length)}</p>`,
+    t.name,
+    { ignoreWhiteSpaceDifference: true }
+  );
   if (startOffset === kText.length) {
     checkBeforeinputAndInputEventsOnNOOP();
     return;
@@ -1756,7 +1943,7 @@
   checkGetTargetRangesOfInputOnDeleteSomething();
 }, 'Control + Delete at "<p>abc []def ghi</p>"');
 
-promise_test(async () => {
+promise_test(async (t) => {
   const kText = "abc def ghi";
   initializeTest(`<p>${kText}</p>`);
   let p = gEditor.querySelector("p");
@@ -1764,8 +1951,11 @@
   await sendDeleteKey(kAlt);
   let startOffset = getFirstDifferentOffset(p.firstChild.data, kText);
   let length = kText.length - p.firstChild.data.length;
-  assert_equals(gEditor.innerHTML.replace(/&nbsp;/g, " "),
-      `<p>${kText.substr(0, startOffset) + kText.substr(startOffset + length)}</p>`);
+  checkEditorContentResultAsSubTest(
+    `<p>${kText.substr(0, startOffset) + kText.substr(startOffset + length)}</p>`,
+    t.name,
+    { ignoreWhiteSpaceDifference: true }
+  );
   if (startOffset === kText.length) {
     checkBeforeinputAndInputEventsOnNOOP();
     return;
@@ -1779,7 +1969,7 @@
   checkGetTargetRangesOfInputOnDeleteSomething();
 }, 'Alt + Delete at "<p>abc []def ghi</p>"');
 
-promise_test(async () => {
+promise_test(async (t) => {
   const kText = "abc def ghi";
   initializeTest(`<p>${kText}</p>`);
   let p = gEditor.querySelector("p");
@@ -1787,8 +1977,11 @@
   await sendDeleteKey(kMeta);
   let startOffset = getFirstDifferentOffset(p.firstChild.data, kText);
   let length = kText.length - p.firstChild.data.length;
-  assert_equals(gEditor.innerHTML.replace(/&nbsp;/g, " "),
-      `<p>${kText.substr(0, startOffset) + kText.substr(startOffset + length)}</p>`);
+  checkEditorContentResultAsSubTest(
+    `<p>${kText.substr(0, startOffset) + kText.substr(startOffset + length)}</p>`,
+    t.name,
+    { ignoreWhiteSpaceDifference: true }
+  );
   if (startOffset === kText.length) {
     checkBeforeinputAndInputEventsOnNOOP();
     return;
@@ -1802,7 +1995,7 @@
   checkGetTargetRangesOfInputOnDeleteSomething();
 }, 'Meta + Delete at "<p>abc []def ghi</p>"');
 
-promise_test(async () => {
+promise_test(async (t) => {
   const kText = "abc def";
   initializeTest(`<p>${kText}   </p>`);
   let p = gEditor.querySelector("p");
@@ -1813,8 +2006,11 @@
   let startOffset = invisibleWhiteSpaces.length + getFirstDifferentOffset(visibleText, kText);
   let length = kText.length + 3 - p.firstChild.data.length;
   // If invisible white-spaces are deleted, they should be contained in the target range.
-  assert_equals(gEditor.innerHTML.replace(/&nbsp;/g, " "),
-      `<p>${kText.substr(0, startOffset) + kText.substr(startOffset + length) + invisibleWhiteSpaces}</p>`);
+  checkEditorContentResultAsSubTest(
+    `<p>${kText.substr(0, startOffset) + kText.substr(startOffset + length) + invisibleWhiteSpaces}</p>`,
+    t.name,
+    { ignoreWhiteSpaceDifference: true }
+  );
   if (startOffset === kText.length) {
     checkBeforeinputAndInputEventsOnNOOP();
     return;
@@ -1828,7 +2024,7 @@
   checkGetTargetRangesOfInputOnDeleteSomething();
 }, 'Shift + Delete at "<p>abc []def   </p>"');
 
-promise_test(async () => {
+promise_test(async (t) => {
   const kText = "abc def";
   initializeTest(`<p>${kText}   </p>`);
   let p = gEditor.querySelector("p");
@@ -1839,8 +2035,11 @@
   let startOffset = invisibleWhiteSpaces.length + getFirstDifferentOffset(visibleText, kText);
   let length = kText.length + 3 - p.firstChild.data.length;
   // If invisible white-spaces are deleted, they should be contained in the target range.
-  assert_equals(gEditor.innerHTML.replace(/&nbsp;/g, " "),
-      `<p>${kText.substr(0, startOffset) + kText.substr(startOffset + length) + invisibleWhiteSpaces}</p>`);
+  checkEditorContentResultAsSubTest(
+    `<p>${kText.substr(0, startOffset) + kText.substr(startOffset + length) + invisibleWhiteSpaces}</p>`,
+    t.name,
+    { ignoreWhiteSpaceDifference: true }
+  );
   if (startOffset === kText.length) {
     checkBeforeinputAndInputEventsOnNOOP();
     return;
@@ -1854,7 +2053,7 @@
   checkGetTargetRangesOfInputOnDeleteSomething();
 }, 'Control + Delete at "<p>abc []def   </p>"');
 
-promise_test(async () => {
+promise_test(async (t) => {
   const kText = "abc def";
   initializeTest(`<p>${kText}   </p>`);
   let p = gEditor.querySelector("p");
@@ -1865,8 +2064,11 @@
   let startOffset = invisibleWhiteSpaces.length + getFirstDifferentOffset(visibleText, kText);
   let length = kText.length + 3 - p.firstChild.data.length;
   // If invisible white-spaces are deleted, they should be contained in the target range.
-  assert_equals(gEditor.innerHTML.replace(/&nbsp;/g, " "),
-      `<p>${kText.substr(0, startOffset) + kText.substr(startOffset + length) + invisibleWhiteSpaces}</p>`);
+  checkEditorContentResultAsSubTest(
+    `<p>${kText.substr(0, startOffset) + kText.substr(startOffset + length) + invisibleWhiteSpaces}</p>`,
+    t.name,
+    { ignoreWhiteSpaceDifference: true }
+  );
   if (startOffset === kText.length) {
     checkBeforeinputAndInputEventsOnNOOP();
     return;
@@ -1880,7 +2082,7 @@
   checkGetTargetRangesOfInputOnDeleteSomething();
 }, 'Alt + Delete at "<p>abc []def   </p>"');
 
-promise_test(async () => {
+promise_test(async (t) => {
   const kText = "abc def";
   initializeTest(`<p>${kText}   s</p>`);
   let p = gEditor.querySelector("p");
@@ -1891,8 +2093,11 @@
   let startOffset = invisibleWhiteSpaces.length + getFirstDifferentOffset(visibleText, kText);
   let length = kText.length + 3 - p.firstChild.data.length;
   // If invisible white-spaces are deleted, they should be contained in the target range.
-  assert_equals(gEditor.innerHTML.replace(/&nbsp;/g, " "),
-      `<p>${kText.substr(0, startOffset) + kText.substr(startOffset + length) + invisibleWhiteSpaces}</p>`);
+  checkEditorContentResultAsSubTest(
+      `<p>${kText.substr(0, startOffset) + kText.substr(startOffset + length) + invisibleWhiteSpaces}</p>`,
+      t.name,
+      { ignoreWhiteSpaceDifference: true }
+  );
   if (startOffset === kText.length) {
     checkBeforeinputAndInputEventsOnNOOP();
     return;
diff --git a/input-events/input-events-get-target-ranges-non-collapsed-selection.tentative.html b/input-events/input-events-get-target-ranges-non-collapsed-selection.tentative.html
index 2e16d2a..b873232 100644
--- a/input-events/input-events-get-target-ranges-non-collapsed-selection.tentative.html
+++ b/input-events/input-events-get-target-ranges-non-collapsed-selection.tentative.html
@@ -33,13 +33,16 @@
 
 // If text node is selected, target range should be shrunken to the edge of
 // text node.
-promise_test(async () => {
+promise_test(async (t) => {
   initializeTest("<p>abc</p>");
   let p = gEditor.firstChild;
   let abc = p.firstChild;
   gSelection.setBaseAndExtent(p, 0, p, 1);
   await run();
-  assert_equals(gEditor.innerHTML, `<p>${insertedHTML !== "" ? insertedHTML : "<br>"}</p>`);
+  checkEditorContentResultAsSubTest(
+    `<p>${insertedHTML !== "" ? insertedHTML : "<br>"}</p>`,
+    t.name
+  );
   checkGetTargetRangesOfBeforeinputOnDeleteSomething({
     startContainer: abc,
     startOffset: 0,
@@ -49,14 +52,19 @@
   checkGetTargetRangesOfInputOnDeleteSomething();
 }, `${action} at "<p>{abc}</p>"`);
 
-promise_test(async () => {
+promise_test(async (t) => {
   initializeTest("<p>abc<br></p>");
   let p = gEditor.firstChild;
   let abc = p.firstChild;
   gSelection.setBaseAndExtent(p, 0, p, 1);
   await run();
-  assert_in_array(gEditor.innerHTML, [`<p>${insertedHTML !== "" ? insertedHTML : "<br>"}</p>`,
-                                      `<p>${insertedHTML}<br></p>`]);
+  checkEditorContentResultAsSubTest(
+    [
+      `<p>${insertedHTML !== "" ? insertedHTML : "<br>"}</p>`,
+      `<p>${insertedHTML}<br></p>`,
+    ],
+    t.name
+  );
   checkGetTargetRangesOfBeforeinputOnDeleteSomething({
     startContainer: abc,
     startOffset: 0,
@@ -66,12 +74,15 @@
   checkGetTargetRangesOfInputOnDeleteSomething();
 }, `${action} at "<p>{abc}<br></p>"`);
 
-promise_test(async () => {
+promise_test(async (t) => {
   initializeTest(`<p><img src="${kImgSrc}"></p>`);
   let p = gEditor.firstChild;
   gSelection.setBaseAndExtent(p, 0, p, 1);
   await run();
-  assert_equals(gEditor.innerHTML, `<p>${insertedHTML !== "" ? insertedHTML : "<br>"}</p>`);
+  checkEditorContentResultAsSubTest(
+    `<p>${insertedHTML !== "" ? insertedHTML : "<br>"}</p>`,
+    t.name
+  );
   checkGetTargetRangesOfBeforeinputOnDeleteSomething({
     startContainer: p,
     startOffset: 0,
@@ -81,13 +92,18 @@
   checkGetTargetRangesOfInputOnDeleteSomething();
 }, `${action} at "<p>{<img>}</p>"`);
 
-promise_test(async () => {
+promise_test(async (t) => {
   initializeTest(`<p><img src="${kImgSrc}"><br></p>`);
   let p = gEditor.firstChild;
   gSelection.setBaseAndExtent(p, 0, p, 1);
   await run();
-  assert_in_array(gEditor.innerHTML, [`<p>${insertedHTML !== "" ? insertedHTML : "<br>"}</p>`,
-                                      `<p>${insertedHTML}<br></p>`]);
+  checkEditorContentResultAsSubTest(
+    [
+      `<p>${insertedHTML !== "" ? insertedHTML : "<br>"}</p>`,
+      `<p>${insertedHTML}<br></p>`,
+    ],
+    t.name
+  );
   checkGetTargetRangesOfBeforeinputOnDeleteSomething({
     startContainer: p,
     startOffset: 0,
@@ -97,13 +113,16 @@
   checkGetTargetRangesOfInputOnDeleteSomething();
 }, `${action} at "<p>{<img>}<br></p>"`);
 
-promise_test(async () => {
+promise_test(async (t) => {
   initializeTest("<p> abc </p>");
   let p = gEditor.firstChild;
   let abc = p.firstChild;
   gSelection.setBaseAndExtent(p, 0, p, 1);
   await run();
-  assert_equals(gEditor.innerHTML, `<p>${insertedHTML !== "" ? insertedHTML : "<br>"}</p>`);
+  checkEditorContentResultAsSubTest(
+    `<p>${insertedHTML !== "" ? insertedHTML : "<br>"}</p>`,
+    t.name,
+  );
   checkGetTargetRangesOfBeforeinputOnDeleteSomething({
     startContainer: abc,
     startOffset: 0,
@@ -118,7 +137,7 @@
 // becoming visible when the blocks are joined.  Perhaps, they should be
 // contained by the range of `getTargetRanges()`, but needs discussion.
 // https://github.com/w3c/input-events/issues/112
-promise_test(async () => {
+promise_test(async (t) => {
   initializeTest("<p>abc   </p><p>   def</p>");
   let p1 = gEditor.firstChild;
   let abc = p1.firstChild;
@@ -126,7 +145,7 @@
   let def = p2.firstChild;
   gSelection.setBaseAndExtent(abc, 6, def, 0);
   await run();
-  assert_equals(gEditor.innerHTML, `<p>abc${insertedHTML}def</p>`);
+  checkEditorContentResultAsSubTest(`<p>abc${insertedHTML}def</p>`, t.name);
   checkGetTargetRangesOfBeforeinputOnDeleteSomething({
     startContainer: abc,
     startOffset: 3,
@@ -136,13 +155,13 @@
   checkGetTargetRangesOfInputOnDeleteSomething();
 }, `${action} at "<p>abc   [</p><p>]   def</p>"`);
 
-promise_test(async () => {
+promise_test(async (t) => {
   initializeTest("<p>abc</p><p>def</p>");
   let abc = gEditor.querySelector("p").firstChild;
   let def = gEditor.querySelector("p + p").firstChild;
   gSelection.setBaseAndExtent(abc, 2, def, 1);
   await run();
-  assert_equals(gEditor.innerHTML, `<p>ab${insertedHTML}ef</p>`);
+  checkEditorContentResultAsSubTest(`<p>ab${insertedHTML}ef</p>`, t.name);
   checkGetTargetRangesOfBeforeinputOnDeleteSomething({
     startContainer: abc,
     startOffset: 2,
@@ -152,13 +171,13 @@
   checkGetTargetRangesOfInputOnDeleteSomething();
 }, `${action} at "<p>ab[c</p><p>d]ef</p>"`);
 
-promise_test(async () => {
+promise_test(async (t) => {
   initializeTest("<p>abc </p><p> def</p>");
   let abc = gEditor.querySelector("p").firstChild;
   let def = gEditor.querySelector("p + p").firstChild;
   gSelection.setBaseAndExtent(abc, 2, def, 2);
   await run();
-  assert_equals(gEditor.innerHTML, `<p>ab${insertedHTML}ef</p>`);
+  checkEditorContentResultAsSubTest(`<p>ab${insertedHTML}ef</p>`, t.name);
   checkGetTargetRangesOfBeforeinputOnDeleteSomething({
     startContainer: abc,
     startOffset: 2,
@@ -168,13 +187,13 @@
   checkGetTargetRangesOfInputOnDeleteSomething();
 }, `${action} at "<p>ab[c </p><p> d]ef</p>"`);
 
-promise_test(async () => {
+promise_test(async (t) => {
   initializeTest("<p>abc </p><p> def</p>");
   let abc = gEditor.querySelector("p").firstChild;
   let def = gEditor.querySelector("p + p").firstChild;
   gSelection.setBaseAndExtent(abc, 2, def, 0);
   await run();
-  assert_equals(gEditor.innerHTML, `<p>ab${insertedHTML}def</p>`);
+  checkEditorContentResultAsSubTest(`<p>ab${insertedHTML}def</p>`, t.name);
   checkGetTargetRangesOfBeforeinputOnDeleteSomething({
     startContainer: abc,
     startOffset: 2,
@@ -184,13 +203,13 @@
   checkGetTargetRangesOfInputOnDeleteSomething();
 }, `${action} at "<p>ab[c </p><p>] def</p>"`);
 
-promise_test(async () => {
+promise_test(async (t) => {
   initializeTest("<p>abc </p><p> def</p>");
   let abc = gEditor.querySelector("p").firstChild;
   let def = gEditor.querySelector("p + p").firstChild;
   gSelection.setBaseAndExtent(abc, 4, def, 0);
   await run();
-  assert_equals(gEditor.innerHTML, `<p>abc${insertedHTML}def</p>`);
+  checkEditorContentResultAsSubTest(`<p>abc${insertedHTML}def</p>`, t.name);
   checkGetTargetRangesOfBeforeinputOnDeleteSomething({
     startContainer: abc,
     startOffset: 3,
@@ -200,13 +219,13 @@
   checkGetTargetRangesOfInputOnDeleteSomething();
 }, `${action} at "<p>abc [</p><p>] def</p>"`);
 
-promise_test(async () => {
+promise_test(async (t) => {
   initializeTest("<p>abc </p><p> def</p>");
   let abc = gEditor.querySelector("p").firstChild;
   let def = gEditor.querySelector("p + p").firstChild;
   gSelection.setBaseAndExtent(abc, 4, def, 1);
   await run();
-  assert_equals(gEditor.innerHTML, `<p>abc${insertedHTML}def</p>`);
+  checkEditorContentResultAsSubTest(`<p>abc${insertedHTML}def</p>`, t.name);
   checkGetTargetRangesOfBeforeinputOnDeleteSomething({
     startContainer: abc,
     startOffset: 3,
@@ -219,14 +238,14 @@
 // Different from collapsed range around an atomic content, non-collapsed
 // range may not be shrunken to select only the atomic content for avoid
 // to waste runtime cost.
-promise_test(async () => {
+promise_test(async (t) => {
   initializeTest(`<p>abc<img src="${kImgSrc}">def</p>`);
   let p = gEditor.querySelector("p");
   let abc = p.firstChild;
   let def = p.lastChild;
   gSelection.setBaseAndExtent(abc, 3, def, 0);
   await run();
-  assert_equals(gEditor.innerHTML, `<p>abc${insertedHTML}def</p>`);
+  checkEditorContentResultAsSubTest(`<p>abc${insertedHTML}def</p>`, t.name);
   checkGetTargetRangesOfBeforeinputOnDeleteSomething({
     startContainer: abc,
     startOffset: 3,
@@ -236,14 +255,14 @@
   checkGetTargetRangesOfInputOnDeleteSomething();
 }, `${action} at "<p>abc[<img>]def</p>"`);
 
-promise_test(async () => {
+promise_test(async (t) => {
   initializeTest(`<div>abc<hr>def</div>`);
   let div = gEditor.querySelector("div");
   let abc = div.firstChild;
   let def = div.lastChild;
   gSelection.setBaseAndExtent(abc, 3, def, 0);
   await run();
-  assert_equals(gEditor.innerHTML, `<div>abc${insertedHTML}def</div>`);
+  checkEditorContentResultAsSubTest(`<div>abc${insertedHTML}def</div>`, t.name);
   checkGetTargetRangesOfBeforeinputOnDeleteSomething({
     startContainer: abc,
     startOffset: 3,
@@ -253,14 +272,14 @@
   checkGetTargetRangesOfInputOnDeleteSomething();
 }, `${action} at "<div>abc[<hr>]def</div>"`);
 
-promise_test(async () => {
+promise_test(async (t) => {
   initializeTest(`<div>abc <hr>def</div>`);
   let div = gEditor.querySelector("div");
   let abc = div.firstChild;
   let def = div.lastChild;
   gSelection.setBaseAndExtent(abc, 4, def, 0);
   await run();
-  assert_equals(gEditor.innerHTML, `<div>abc${insertedHTML}def</div>`);
+  checkEditorContentResultAsSubTest(`<div>abc${insertedHTML}def</div>`, t.name);
   checkGetTargetRangesOfBeforeinputOnDeleteSomething({
     startContainer: abc,
     startOffset: 3,
@@ -270,14 +289,14 @@
   checkGetTargetRangesOfInputOnDeleteSomething();
 }, `${action} at "<div>abc [<hr>]def</div>"`);
 
-promise_test(async () => {
+promise_test(async (t) => {
   initializeTest(`<div>abc <hr> def</div>`);
   let div = gEditor.querySelector("div");
   let abc = div.firstChild;
   let def = div.lastChild;
   gSelection.setBaseAndExtent(abc, 4, def, 0);
   await run();
-  assert_equals(gEditor.innerHTML, `<div>abc${insertedHTML}def</div>`);
+  checkEditorContentResultAsSubTest(`<div>abc${insertedHTML}def</div>`, t.name);
   checkGetTargetRangesOfBeforeinputOnDeleteSomething({
     startContainer: abc,
     startOffset: 3,
@@ -287,14 +306,14 @@
   checkGetTargetRangesOfInputOnDeleteSomething();
 }, `${action} at "<div>abc [<hr>] def</div>"`);
 
-promise_test(async () => {
+promise_test(async (t) => {
   initializeTest(`<div>abc <hr> def</div>`);
   let div = gEditor.querySelector("div");
   let abc = div.firstChild;
   let def = div.lastChild;
   gSelection.setBaseAndExtent(div, 1, div, 2);
   await run();
-  assert_equals(gEditor.innerHTML, `<div>abc${insertedHTML}def</div>`);
+  checkEditorContentResultAsSubTest(`<div>abc${insertedHTML}def</div>`, t.name);
   checkGetTargetRangesOfBeforeinputOnDeleteSomething({
     startContainer: abc,
     startOffset: 3,
@@ -308,11 +327,11 @@
 // `getTargetRanges()`.  However, when only the `<br>` element is selected,
 // the range shouldn't start from nor end by surrounding text nodes?
 // https://github.com/w3c/input-events/issues/112
-promise_test(async () => {
+promise_test(async (t) => {
   initializeTest("<p>abc<br>def</p>");
   gSelection.setBaseAndExtent(gEditor.firstChild, 1, gEditor.firstChild, 2);
   await run();
-  assert_equals(gEditor.innerHTML, `<p>abc${insertedHTML}def</p>`);
+  checkEditorContentResultAsSubTest(`<p>abc${insertedHTML}def</p>`, t.name);
   checkGetTargetRangesOfBeforeinputOnDeleteSomething({
     startContainer: gEditor.firstChild,
     startOffset: 1,
@@ -322,15 +341,20 @@
   checkGetTargetRangesOfInputOnDeleteSomething();
 }, `${action} at "<p>abc{<br>}def</p>"`);
 
-promise_test(async () => {
+promise_test(async (t) => {
   initializeTest("<div>abc<p>def<br>ghi</p></div>");
   let p = gEditor.querySelector("p");
   let def = p.firstChild;
   let abc = gEditor.firstChild.firstChild;
   gSelection.setBaseAndExtent(abc, 3, def, 0);
   await run();
-  assert_in_array(gEditor.innerHTML, [`<div>abc${insertedHTML}def<p>ghi</p></div>`,
-                                      `<div>abc${insertedHTML}def<br><p>ghi</p></div>`]);
+  checkEditorContentResultAsSubTest(
+    [
+      `<div>abc${insertedHTML}def<p>ghi</p></div>`,
+      `<div>abc${insertedHTML}def<br><p>ghi</p></div>`,
+    ],
+    t.name
+  );
   checkGetTargetRangesOfBeforeinputOnDeleteSomething({
     startContainer: abc,
     startOffset: 3,
@@ -340,15 +364,20 @@
   checkGetTargetRangesOfInputOnDeleteSomething();
 }, `${action} at "<div>abc[<p>]def<br>ghi</p></div>"`);
 
-promise_test(async () => {
+promise_test(async (t) => {
   initializeTest("<div>abc   <p>   def<br>ghi</p></div>");
   let p = gEditor.querySelector("p");
   let def = p.firstChild;
   let abc = gEditor.firstChild.firstChild;
   gSelection.setBaseAndExtent(abc, abc.length, def, 0);
   await run();
-  assert_in_array(gEditor.innerHTML, [`<div>abc${insertedHTML}def<p>ghi</p></div>`,
-                                      `<div>abc${insertedHTML}def<br><p>ghi</p></div>`]);
+  checkEditorContentResultAsSubTest(
+    [
+      `<div>abc${insertedHTML}def<p>ghi</p></div>`,
+      `<div>abc${insertedHTML}def<br><p>ghi</p></div>`,
+    ],
+    t.name
+  );
   checkGetTargetRangesOfBeforeinputOnDeleteSomething({
     startContainer: abc,
     startOffset: 3,
@@ -358,14 +387,19 @@
   checkGetTargetRangesOfInputOnDeleteSomething();
 }, `${action} at "<div>abc   [<p>]   def<br>ghi</p></div>"`);
 
-promise_test(async () => {
+promise_test(async (t) => {
   initializeTest("<div><p>abc</p>def</div>");
   let abc = gEditor.querySelector("p").firstChild;
   let def = gEditor.querySelector("p").nextSibling;
   gSelection.setBaseAndExtent(abc, 3, def, 0);
   await run();
-  assert_in_array(gEditor.innerHTML, [`<div><p>abc${insertedHTML}def</p></div>`,
-                                      `<div><p>abc${insertedHTML}def<br></p></div>`]);
+  checkEditorContentResultAsSubTest(
+    [
+      `<div><p>abc${insertedHTML}def</p></div>`,
+      `<div><p>abc${insertedHTML}def<br></p></div>`,
+    ],
+    t.name
+  );
   checkGetTargetRangesOfBeforeinputOnDeleteSomething({
     startContainer: abc,
     startOffset: 3,
@@ -375,14 +409,19 @@
   checkGetTargetRangesOfInputOnDeleteSomething();
 }, `${action} at "<div><p>abc[</p>]def</div>"`);
 
-promise_test(async () => {
+promise_test(async (t) => {
   initializeTest("<div><p>abc   </p>   def</div>");
   let abc = gEditor.querySelector("p").firstChild;
   let def = gEditor.querySelector("p").nextSibling;
   gSelection.setBaseAndExtent(abc, abc.length, def, 0);
   await run();
-  assert_in_array(gEditor.innerHTML, [`<div><p>abc${insertedHTML}def</p></div>`,
-                                      `<div><p>abc${insertedHTML}def<br></p></div>`]);
+  checkEditorContentResultAsSubTest(
+    [
+      `<div><p>abc${insertedHTML}def</p></div>`,
+      `<div><p>abc${insertedHTML}def<br></p></div>`,
+    ],
+    t.name
+  );
   checkGetTargetRangesOfBeforeinputOnDeleteSomething({
     startContainer: abc,
     startOffset: 3,
@@ -392,13 +431,16 @@
   checkGetTargetRangesOfInputOnDeleteSomething();
 }, `${action} at "<div><p>abc   [</p>]   def</div>"`);
 
-promise_test(async () => {
+promise_test(async (t) => {
   initializeTest("<div>abc<ul><li>def</li></ul>ghi</div>");
   let abc = gEditor.querySelector("div").firstChild;
   let def = gEditor.querySelector("li").firstChild;
   gSelection.setBaseAndExtent(abc, 3, def, 0);
   await run();
-  assert_equals(gEditor.innerHTML, `<div>abc${insertedHTML}defghi</div>`);
+  checkEditorContentResultAsSubTest(
+    `<div>abc${insertedHTML}defghi</div>`,
+    t.name
+  );
   checkGetTargetRangesOfBeforeinputOnDeleteSomething({
     startContainer: abc,
     startOffset: 3,
@@ -408,13 +450,16 @@
   checkGetTargetRangesOfInputOnDeleteSomething();
 }, `${action} at "<div>abc[<ul><li>]def</li></ul>ghi</div>"`);
 
-promise_test(async () => {
+promise_test(async (t) => {
   initializeTest("<div>abc  <ul><li> def </li></ul>  ghi</div>");
   let abc = gEditor.querySelector("div").firstChild;
   let def = gEditor.querySelector("li").firstChild;
   gSelection.setBaseAndExtent(abc, abc.length, def, 0);
   await run();
-  assert_equals(gEditor.innerHTML, `<div>abc${insertedHTML}defghi</div>`);
+  checkEditorContentResultAsSubTest(
+    `<div>abc${insertedHTML}defghi</div>`,
+    t.name
+  );
   checkGetTargetRangesOfBeforeinputOnDeleteSomething({
     startContainer: abc,
     startOffset: 3,
@@ -424,13 +469,16 @@
   checkGetTargetRangesOfInputOnDeleteSomething();
 }, `${action} at "<div>abc  [<ul><li>] def </li></ul>  ghi</div>"`);
 
-promise_test(async () => {
+promise_test(async (t) => {
   initializeTest("<div>abc<ul><li>def</li></ul>ghi</div>");
   let def = gEditor.querySelector("li").firstChild;
   let ghi = gEditor.querySelector("ul").nextSibling;
   gSelection.setBaseAndExtent(def, 3, ghi, 0);
   await run();
-  assert_equals(gEditor.innerHTML, `<div>abc<ul><li>def${insertedHTML}ghi</li></ul></div>`);
+  checkEditorContentResultAsSubTest(
+    `<div>abc<ul><li>def${insertedHTML}ghi</li></ul></div>`,
+    t.name
+  );
   checkGetTargetRangesOfBeforeinputOnDeleteSomething({
     startContainer: def,
     startOffset: 3,
@@ -440,15 +488,20 @@
   checkGetTargetRangesOfInputOnDeleteSomething();
 }, `${action} at "<div>abc<ul><li>def[</li></ul>]ghi</div>"`);
 
-promise_test(async () => {
+promise_test(async (t) => {
   initializeTest("<div>abc <ul><li>  def  </li></ul> ghi</div>");
   let def = gEditor.querySelector("li").firstChild;
   let ghi = gEditor.querySelector("ul").nextSibling;
   gSelection.setBaseAndExtent(def, def.length, ghi, 0);
   await run();
-  assert_in_array(gEditor.innerHTML, [`<div>abc <ul><li>  def${insertedHTML}ghi</li></ul></div>`,
-                                      `<div>abc <ul><li>def${insertedHTML}ghi</li></ul></div>`,
-                                      `<div>abc<ul><li>def${insertedHTML}ghi</li></ul></div>`]);
+  checkEditorContentResultAsSubTest(
+    [
+      `<div>abc <ul><li>  def${insertedHTML}ghi</li></ul></div>`,
+      `<div>abc <ul><li>def${insertedHTML}ghi</li></ul></div>`,
+      `<div>abc<ul><li>def${insertedHTML}ghi</li></ul></div>`,
+    ],
+    t.name
+  );
   checkGetTargetRangesOfBeforeinputOnDeleteSomething({
     startContainer: def,
     startOffset: 5,
@@ -458,13 +511,16 @@
   checkGetTargetRangesOfInputOnDeleteSomething();
 }, `${action} at "<div>abc <ul><li>  def  [</li></ul>] ghi</div>"`);
 
-promise_test(async () => {
+promise_test(async (t) => {
   initializeTest("<div>abc<ul><li>def</li><li>ghi</li></ul>jkl</div>");
   let abc = gEditor.querySelector("div").firstChild;
   let def = gEditor.querySelector("li").firstChild;
   gSelection.setBaseAndExtent(abc, 3, def, 0);
   await run();
-  assert_equals(gEditor.innerHTML, `<div>abc${insertedHTML}def<ul><li>ghi</li></ul>jkl</div>`);
+  checkEditorContentResultAsSubTest(
+    `<div>abc${insertedHTML}def<ul><li>ghi</li></ul>jkl</div>`,
+    t.name
+  );
   checkGetTargetRangesOfBeforeinputOnDeleteSomething({
     startContainer: abc,
     startOffset: 3,
@@ -474,15 +530,20 @@
   checkGetTargetRangesOfInputOnDeleteSomething();
 }, `${action} at "<div>abc[<ul><li>]def</li><li>ghi</li></ul>jkl</div>"`);
 
-promise_test(async () => {
+promise_test(async (t) => {
   initializeTest("<div>abc<ul><li>def</li><li>ghi</li></ul>jkl</div>");
   let abc = gEditor.querySelector("div").firstChild;
   let def = gEditor.querySelector("li").firstChild;
   let ghi = gEditor.querySelector("li + li").firstChild;
   gSelection.setBaseAndExtent(abc, 3, ghi, 0);
   await run();
-  assert_in_array(gEditor.innerHTML, [`<div>abc${insertedHTML}ghijkl</div>`,
-                                      `<div>abc${insertedHTML}ghijkl<br></div>`]);
+  checkEditorContentResultAsSubTest(
+    [
+      `<div>abc${insertedHTML}ghijkl</div>`,
+      `<div>abc${insertedHTML}ghijkl<br></div>`,
+    ],
+    t.name
+  );
   checkGetTargetRangesOfBeforeinputOnDeleteSomething({
     startContainer: abc,
     startOffset: 3,
@@ -492,13 +553,16 @@
   checkGetTargetRangesOfInputOnDeleteSomething();
 }, `${action} at "<div>abc[<ul><li>def</li><li>]ghi</li></ul>jkl</div>"`);
 
-promise_test(async () => {
+promise_test(async (t) => {
   initializeTest("<div>abc<ul><li>def</li><li>ghi</li></ul>jkl</div>");
   let def = gEditor.querySelector("li").firstChild;
   let ghi = gEditor.querySelector("li + li").firstChild;
   gSelection.setBaseAndExtent(def, 3, ghi, 0);
   await run();
-  assert_equals(gEditor.innerHTML, `<div>abc<ul><li>def${insertedHTML}ghi</li></ul>jkl</div>`);
+  checkEditorContentResultAsSubTest(
+    `<div>abc<ul><li>def${insertedHTML}ghi</li></ul>jkl</div>`,
+    t.name
+  );
   checkGetTargetRangesOfBeforeinputOnDeleteSomething({
     startContainer: def,
     startOffset: 3,
@@ -508,13 +572,16 @@
   checkGetTargetRangesOfInputOnDeleteSomething();
 }, `${action} at "<div>abc<ul><li>def[</li><li>]ghi</li></ul>jkl</div>"`);
 
-promise_test(async () => {
+promise_test(async (t) => {
   initializeTest("<div>abc<ul><li>def</li><li>ghi</li></ul>jkl</div>");
   let ghi = gEditor.querySelector("li + li").firstChild;
   let jkl = gEditor.querySelector("ul").nextSibling;
   gSelection.setBaseAndExtent(ghi, 3, jkl, 0);
   await run();
-  assert_equals(gEditor.innerHTML, `<div>abc<ul><li>def</li><li>ghi${insertedHTML}jkl</li></ul></div>`);
+  checkEditorContentResultAsSubTest(
+    `<div>abc<ul><li>def</li><li>ghi${insertedHTML}jkl</li></ul></div>`,
+    t.name
+  );
   checkGetTargetRangesOfBeforeinputOnDeleteSomething({
     startContainer: ghi,
     startOffset: 3,
@@ -524,13 +591,16 @@
   checkGetTargetRangesOfInputOnDeleteSomething();
 }, `${action} at "<div>abc<ul><li>def</li><li>ghi[</li></ul>]jkl</div>"`);
 
-promise_test(async () => {
+promise_test(async (t) => {
   initializeTest("<div>abc<ul><li>def</li><li>ghi</li></ul>jkl</div>");
   let def = gEditor.querySelector("li").firstChild;
   let jkl = gEditor.querySelector("ul").nextSibling;
   gSelection.setBaseAndExtent(def, 3, jkl, 0);
   await run();
-  assert_equals(gEditor.innerHTML, `<div>abc<ul><li>def${insertedHTML}jkl</li></ul></div>`);
+  checkEditorContentResultAsSubTest(
+    `<div>abc<ul><li>def${insertedHTML}jkl</li></ul></div>`,
+    t.name
+  );
   checkGetTargetRangesOfBeforeinputOnDeleteSomething({
     startContainer: def,
     startOffset: 3,
@@ -540,15 +610,20 @@
   checkGetTargetRangesOfInputOnDeleteSomething();
 }, `${action} at "<div>abc<ul><li>def[</li><li>ghi</li></ul>]jkl</div>"`);
 
-promise_test(async () => {
+promise_test(async (t) => {
   initializeTest("<p>abc</p><p><br></p>");
   let p1 = gEditor.querySelector("p");
   let abc = p1.firstChild;
   let p2 = p1.nextSibling;
   gSelection.setBaseAndExtent(abc, 3, p2, 0);
   await run();
-  assert_in_array(gEditor.innerHTML, [`<p>abc${insertedHTML}</p>`,
-                                      `<p>abc${insertedHTML}<br></p>`]);
+  checkEditorContentResultAsSubTest(
+    [
+      `<p>abc${insertedHTML}</p>`,
+      `<p>abc${insertedHTML}<br></p>`,
+    ],
+    t.name
+  );
   if (gEditor.innerHTML === "<p>abc</p>") {
     // Include the invisible `<br>` element if it's deleted.
     checkGetTargetRangesOfBeforeinputOnDeleteSomething({
@@ -568,16 +643,21 @@
   checkGetTargetRangesOfInputOnDeleteSomething();
 }, `${action} at "<p>abc[</p><p>}<br></p>"`);
 
-promise_test(async () => {
+promise_test(async (t) => {
   initializeTest("<p>abc<span contenteditable=\"false\">def</span>ghi</p>");
   let p = gEditor.querySelector("p");
   let abc = p.firstChild;
   let ghi = p.lastChild;
   gSelection.setBaseAndExtent(abc, 3, ghi, 0);
   await run();
-  assert_in_array(gEditor.innerHTML, ["<p>abc<span contenteditable=\"false\">def</span>ghi</p>",
-                                      `<p>abc${insertedHTML}ghi</p>`,
-                                      `<p>abc${insertedHTML}ghi<br></p>`]);
+  checkEditorContentResultAsSubTest(
+    [
+      "<p>abc<span contenteditable=\"false\">def</span>ghi</p>",
+      `<p>abc${insertedHTML}ghi</p>`,
+      `<p>abc${insertedHTML}ghi<br></p>`,
+    ],
+    t.name
+  );
   // Don't need to shrink the range for avoiding to waste runtime cost.
   checkGetTargetRangesOfBeforeinputOnDeleteSomething({
     startContainer: abc,
@@ -595,13 +675,16 @@
 // The table structure shouldn't be modified when deleting cell contents,
 // in this case, getTargetRanges() should return multiple ranges in each
 // cell?
-promise_test(async () => {
+promise_test(async (t) => {
   initializeTest("<table><tr><td>abc</td><td>def</td></tr></table>");
   let abc = gEditor.querySelector("td").firstChild;
   let def = gEditor.querySelector("td + td").firstChild;
   gSelection.setBaseAndExtent(abc, 2, def, 1);
   await run();
-  assert_equals(gEditor.innerHTML, `<table><tbody><tr><td>ab${insertedHTML}</td><td>ef</td></tr></tbody></table>`);
+  checkEditorContentResultAsSubTest(
+    `<table><tbody><tr><td>ab${insertedHTML}</td><td>ef</td></tr></tbody></table>`,
+    t.name
+  );
   checkGetTargetRangesOfBeforeinputOnDeleteSomething({
     startContainer: abc,
     startOffset: 2,
@@ -611,14 +694,19 @@
   checkGetTargetRangesOfInputOnDeleteSomething();
 }, `${action} at "<table><tr><td>ab[c</td><td>d]ef</td></tr></table>"`);
 
-promise_test(async () => {
+promise_test(async (t) => {
   initializeTest("<table><tr><td>abc</td><td>def</td></tr><tr><td>ghi</td><td>jkl</td></tr></table>");
   let abc = gEditor.querySelector("td").firstChild;
   let jkl = gEditor.querySelector("tr + tr > td + td").firstChild;
   gSelection.setBaseAndExtent(abc, 2, jkl, 1);
   await run();
-  assert_in_array(gEditor.innerHTML, [`<table><tbody><tr><td>ab${insertedHTML}</td><td></td></tr><tr><td></td><td>kl</td></tr></tbody></table>`,
-                                      `<table><tbody><tr><td>ab${insertedHTML}</td><td><br></td></tr><tr><td><br></td><td>kl</td></tr></tbody></table>`]);
+  checkEditorContentResultAsSubTest(
+    [
+      `<table><tbody><tr><td>ab${insertedHTML}</td><td></td></tr><tr><td></td><td>kl</td></tr></tbody></table>`,
+      `<table><tbody><tr><td>ab${insertedHTML}</td><td><br></td></tr><tr><td><br></td><td>kl</td></tr></tbody></table>`,
+    ],
+    t.name
+  );
   checkGetTargetRangesOfBeforeinputOnDeleteSomething({
     startContainer: abc,
     startOffset: 2,
@@ -628,14 +716,19 @@
   checkGetTargetRangesOfInputOnDeleteSomething();
 }, `${action} at "<table><tr><td>ab[c</td><td>def</td></tr><tr><td>ghi</td><td>j]kl</td></tr></table>"`);
 
-promise_test(async () => {
+promise_test(async (t) => {
   initializeTest("<table><tr><td>abc</td><td>def</td></tr></table><table><tr><td>ghi</td><td>jkl</td></tr></table>");
   let abc = gEditor.querySelector("td").firstChild;
   let jkl = gEditor.querySelector("table + table td + td").firstChild;
   gSelection.setBaseAndExtent(abc, 2, jkl, 1);
   await run();
-  assert_in_array(gEditor.innerHTML, [`<table><tbody><tr><td>ab${insertedHTML}</td><td></td></tr></tbody></table><table><tbody><tr><td></td><td>kl</td></tr></tbody></table>`,
-                                      `<table><tbody><tr><td>ab${insertedHTML}</td><td><br></td></tr></tbody></table><table><tbody><tr><td><br></td><td>kl</td></tr></tbody></table>`]);
+  checkEditorContentResultAsSubTest(
+    [
+      `<table><tbody><tr><td>ab${insertedHTML}</td><td></td></tr></tbody></table><table><tbody><tr><td></td><td>kl</td></tr></tbody></table>`,
+      `<table><tbody><tr><td>ab${insertedHTML}</td><td><br></td></tr></tbody></table><table><tbody><tr><td><br></td><td>kl</td></tr></tbody></table>`,
+    ],
+    t.name
+  );
   checkGetTargetRangesOfBeforeinputOnDeleteSomething({
     startContainer: abc,
     startOffset: 2,
diff --git a/input-events/input-events-get-target-ranges.js b/input-events/input-events-get-target-ranges.js
index a957678..6b922cd 100644
--- a/input-events/input-events-get-target-ranges.js
+++ b/input-events/input-events-get-target-ranges.js
@@ -227,3 +227,27 @@
     "input event shouldn't be fired when the key operation does not cause modifying the DOM tree"
   );
 }
+
+function checkEditorContentResultAsSubTest(
+  expectedResult,
+  description,
+  options = {}
+) {
+  test(() => {
+    if (Array.isArray(expectedResult)) {
+      assert_in_array(
+        options.ignoreWhiteSpaceDifference
+          ? gEditor.innerHTML.replace(/&nbsp;/g, " ")
+          : gEditor.innerHTML,
+        expectedResult
+      );
+    } else {
+      assert_equals(
+        options.ignoreWhiteSpaceDifference
+          ? gEditor.innerHTML.replace(/&nbsp;/g, " ")
+          : gEditor.innerHTML,
+        expectedResult
+      );
+    }
+  }, `${description} - comparing innerHTML`);
+}