tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

test_bug772796.html (19103B)


      1 <!DOCTYPE HTML>
      2 <html>
      3 <!--
      4 https://bugzilla.mozilla.org/show_bug.cgi?id=772796
      5 -->
      6 <head>
      7  <meta charset="utf-8">
      8  <title>Test for Bug 772796</title>
      9  <script src="/tests/SimpleTest/SimpleTest.js"></script>
     10  <script src="/tests/SimpleTest/EventUtils.js"></script>
     11  <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/>
     12  <style> .pre { white-space: pre } </style>
     13 </head>
     14 <body>
     15 <a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=772796">Mozilla Bug 772796</a>
     16 <p id="display"></p>
     17 <div id="content" style="display: none">
     18 </div>
     19 
     20 <div id="editable" contenteditable></div>
     21 
     22 <pre id="test">
     23 
     24 <script type="application/javascript">
     25  var tests = [
     26 // FYI: Those tests were ported to join-pre-and-other-block.html
     27 /* 00*/[
     28  "<div>test</div><pre>foobar\nbaz</pre>",
     29  "<div>testfoobar</div><pre>baz</pre>", // expected
     30 ],
     31 /* 01*/[
     32  "<div>test</div><pre><b>foobar\nbaz</b></pre>",
     33  "<div>test<b>foobar</b></div><pre><b>baz</b></pre>", // expected
     34 ],
     35 /* 02*/[
     36  "<div>test</div><pre><b>foo</b>bar\nbaz</pre>",
     37  "<div>test<b>foo</b>bar</div><pre>baz</pre>", // expected
     38 ],
     39 /* 03*/[
     40  "<div>test</div><pre><b>foo</b>\nbar</pre>",
     41  "<div>test<b>foo</b></div><pre>bar</pre>", // expected
     42 ],
     43 /* 04*/[
     44  "<div>test</div><pre><b>foo\n</b>bar\nbaz</pre>",
     45  "<div>test<b>foo</b></div><pre>bar\nbaz</pre>", // expected
     46 ],
     47 
     48 // The <br> after the foobar is unfortunate but is behaviour that hasn't changed in bug 772796.
     49 // FYI: Those tests were ported to join-pre-and-other-block.html
     50 /* 05*/[
     51  "<div>test</div><pre>foobar<br>baz</pre>",
     52  "<div>testfoobar</div><pre>baz</pre>", // expected
     53 ],
     54 /* 06*/[
     55  "<div>test</div><pre><b>foobar<br>baz</b></pre>",
     56  "<div>test<b>foobar</b></div><pre><b>baz</b></pre>", // expected
     57 ],
     58 
     59 // Some tests with block elements.
     60 // FYI: Those tests were ported to join-pre-and-other-block.html
     61 /* 07*/[
     62  "<div>test</div><pre><div>foobar</div>baz</pre>",
     63  "<div>testfoobar</div><pre>baz</pre>", // expected
     64 ],
     65 /* 08*/[
     66  "<div>test</div><pre>foobar<div>baz</div></pre>",
     67  "<div>testfoobar</div><pre><div>baz</div></pre>", // expected
     68 ],
     69 /* 09*/[
     70  "<div>test</div><pre><div>foobar</div>baz\nfred</pre>",
     71  "<div>testfoobar</div><pre>baz\nfred</pre>", // expected
     72 ],
     73 /* 10*/[
     74  "<div>test</div><pre>foobar<div>baz</div>\nfred</pre>",
     75  "<div>testfoobar</div><pre><div>baz</div>\nfred</pre>", // expected
     76 ],
     77 /* 11*/[
     78  "<div>test</div><pre><div>foo\nbar</div>baz\nfred</pre>",
     79  "<div>testfoo</div><pre><div>bar</div>baz\nfred</pre>", // expected
     80 ],
     81 /* 12*/[
     82  "<div>test</div><pre>foo<div>bar</div>baz\nfred</pre>",
     83  "<div>testfoo</div><pre><div>bar</div>baz\nfred</pre>", // expected
     84 ],
     85 
     86 // Repeating all tests above with the <pre> on a new line.
     87 // We know that backspace doesn't work (bug 1190161). Third argument shows the current outcome.
     88 /* 13-00*/[
     89  "<div>test</div>\n<pre>foobar\nbaz</pre>",
     90  "<div>testfoobar</div><pre>baz</pre>", // expected
     91 ],
     92 /* 14-01*/[
     93  "<div>test</div>\n<pre><b>foobar\nbaz</b></pre>",
     94  "<div>test<b>foobar</b></div><pre><b>baz</b></pre>", // expected
     95 ],
     96 /* 15-02*/[
     97  "<div>test</div>\n<pre><b>foo</b>bar\nbaz</pre>",
     98  "<div>test<b>foo</b>bar</div><pre>baz</pre>", // expected
     99 ],
    100 /* 16-03*/[
    101  "<div>test</div>\n<pre><b>foo</b>\nbar</pre>",
    102  "<div>test<b>foo</b></div><pre>bar</pre>", // expected
    103 ],
    104 /* 17-04*/[
    105  "<div>test</div>\n<pre><b>foo\n</b>bar\nbaz</pre>",
    106  "<div>test<b>foo</b></div><pre>bar\nbaz</pre>", // expected
    107 ],
    108 /* 18-05*/[
    109  "<div>test</div>\n<pre>foobar<br>baz</pre>",
    110  "<div>testfoobar</div><pre>baz</pre>", // expected
    111 ],
    112 /* 19-06*/[
    113  "<div>test</div>\n<pre><b>foobar<br>baz</b></pre>",
    114  "<div>test<b>foobar</b></div><pre><b>baz</b></pre>", // expected
    115 ],
    116 /* 20-07*/[
    117  "<div>test</div>\n<pre><div>foobar</div>baz</pre>",
    118  "<div>testfoobar</div><pre>baz</pre>", // expected
    119 ],
    120 /* 21-08*/[
    121  "<div>test</div>\n<pre>foobar<div>baz</div></pre>",
    122  "<div>testfoobar</div><pre><div>baz</div></pre>", // expected
    123 ],
    124 /* 22-09*/[
    125  "<div>test</div>\n<pre><div>foobar</div>baz\nfred</pre>",
    126  "<div>testfoobar</div><pre>baz\nfred</pre>", // expected
    127 ],
    128 /* 23-10*/[
    129  "<div>test</div>\n<pre>foobar<div>baz</div>\nfred</pre>",
    130  "<div>testfoobar</div><pre><div>baz</div>\nfred</pre>", // expected
    131 ],
    132 /* 24-11*/[
    133  "<div>test</div>\n<pre><div>foo\nbar</div>baz\nfred</pre>",
    134  "<div>testfoo</div><pre><div>bar</div>baz\nfred</pre>", // expected
    135 ],
    136 /* 25-12*/[
    137  "<div>test</div>\n<pre>foo<div>bar</div>baz\nfred</pre>",
    138  "<div>testfoo</div><pre><div>bar</div>baz\nfred</pre>", // expected
    139 ],
    140 
    141 // Some tests without <div>. These exercise the MoveBlock "right in left"
    142 /* 26-00*/[
    143  "test<pre>foobar\nbaz</pre>",
    144  "testfoobar<pre>baz</pre>", // expected
    145 ],
    146 /* 27-01*/[
    147  "test<pre><b>foobar\nbaz</b></pre>",
    148  "test<b>foobar</b><pre><b>baz</b></pre>", // expected
    149 ],
    150 /* 28-02*/[
    151  "test<pre><b>foo</b>bar\nbaz</pre>",
    152  "test<b>foo</b>bar<pre>baz</pre>", // expected
    153 ],
    154 /* 29-03*/[
    155  "test<pre><b>foo</b>\nbar</pre>",
    156  "test<b>foo</b><pre>bar</pre>", // expected
    157 ],
    158 /* 30-04*/[
    159  "test<pre><b>foo\n</b>bar\nbaz</pre>",
    160  "test<b>foo</b><pre>bar\nbaz</pre>", // expected
    161 ],
    162 /* 31-05*/[
    163  "test<pre>foobar<br>baz</pre>",
    164  "testfoobar<pre>baz</pre>", // expected
    165 ],
    166 /* 32-06*/[
    167  "test<pre><b>foobar<br>baz</b></pre>",
    168  "test<b>foobar</b><pre><b>baz</b></pre>", // expected
    169 ],
    170 /* 33-07*/[
    171  "test<pre><div>foobar</div>baz</pre>",
    172  "testfoobar<pre>baz</pre>", // expected
    173 ],
    174 /* 34-08*/[
    175  "test<pre>foobar<div>baz</div></pre>",
    176  "testfoobar<pre><div>baz</div></pre>", // expected
    177 ],
    178 /* 35-09*/[
    179  "test<pre><div>foobar</div>baz\nfred</pre>",
    180  "testfoobar<pre>baz\nfred</pre>", // expected
    181 ],
    182 /* 36-10*/[
    183  "test<pre>foobar<div>baz</div>\nfred</pre>",
    184  "testfoobar<pre><div>baz</div>\nfred</pre>", // expected
    185 ],
    186 /* 37-11*/[
    187  "test<pre><div>foo\nbar</div>baz\nfred</pre>",
    188  "testfoo<pre><div>bar</div>baz\nfred</pre>", // expected
    189 ],
    190 /* 38-12*/[
    191  "test<pre>foo<div>bar</div>baz\nfred</pre>",
    192  "testfoo<pre><div>bar</div>baz\nfred</pre>", // expected
    193 ],
    194 
    195 // Some tests with <span class="pre">
    196 // All these exercise MoveBlock "left in right". The "right" is the surrounding "contenteditable" div.
    197 // FYI: Those tests except the cases <span> having <div> were ported to
    198 //      join-different-white-space-style-left-paragraph-and-right-line.html
    199 /* 39-00*/[
    200  "<div>test</div><span class=\"pre\">foobar\nbaz</span>",
    201  "<div>test<span class=\"pre\" style=\"white-space: pre;\">foobar</span></div><span class=\"pre\">baz</span>", // expected
    202 ],
    203 /* 40-01*/[
    204  "<div>test</div><span class=\"pre\"><b>foobar\nbaz</b></span>",
    205  "<div>test<span class=\"pre\" style=\"white-space: pre;\"><b>foobar</b></span></div><span class=\"pre\"><b>baz</b></span>", // expected
    206 ],
    207 /* 41-02*/[
    208  "<div>test</div><span class=\"pre\"><b>foo</b>bar\nbaz</span>",
    209  "<div>test<span class=\"pre\" style=\"white-space: pre;\"><b>foo</b>bar</span></div><span class=\"pre\">baz</span>", // expected
    210 ],
    211 /* 42-03*/[
    212  "<div>test</div><span class=\"pre\"><b>foo</b>\nbar</span>",
    213  "<div>test<span class=\"pre\" style=\"white-space: pre;\"><b>foo</b></span></div><span class=\"pre\">bar</span>", // expected
    214 ],
    215 /* 43-04*/[
    216  "<div>test</div><span class=\"pre\"><b>foo\n</b>bar\nbaz</span>",
    217  "<div>test<span class=\"pre\" style=\"white-space: pre;\"><b>foo</b></span></div><span class=\"pre\">bar\nbaz</span>", // expected
    218 ],
    219 /* 44-05*/[
    220  "<div>test</div><span class=\"pre\">foobar<br>baz</span>",
    221  "<div>test<span class=\"pre\" style=\"white-space: pre;\">foobar</span></div><span class=\"pre\">baz</span>", // expected
    222 ],
    223 /* 45-06*/[
    224  "<div>test</div><span class=\"pre\"><b>foobar<br>baz</b></span>",
    225  "<div>test<span class=\"pre\" style=\"white-space: pre;\"><b>foobar</b></span></div><span class=\"pre\"><b>baz</b></span>", // expected
    226 ],
    227 /* 46-07*/[
    228  "<div>test</div><span class=\"pre\"><div>foobar</div>baz</span>",
    229  "<div>test<span class=\"pre\" style=\"white-space: pre;\"><div>foobar</div></span></div><span class=\"pre\">baz</span>", // expected
    230 ],
    231 /* 47-08*/[
    232  "<div>test</div><span class=\"pre\">foobar<div>baz</div></span>",
    233  "<div>test<span class=\"pre\" style=\"white-space: pre;\">foobar</span></div><span class=\"pre\"><div>baz</div></span>", // expected
    234 ],
    235 /* 48-09*/[
    236  "<div>test</div><span class=\"pre\"><div>foobar</div>baz\nfred</span>",
    237  "<div>test<span class=\"pre\" style=\"white-space: pre;\"><div>foobar</div></span></div><span class=\"pre\">baz\nfred</span>", // expected
    238 ],
    239 /* 49-10*/[
    240  "<div>test</div><span class=\"pre\">foobar<div>baz</div>\nfred</span>",
    241  "<div>test<span class=\"pre\" style=\"white-space: pre;\">foobar</span></div><span class=\"pre\"><div>baz</div>\nfred</span>", // expected
    242 ],
    243 /* 50-11*/[
    244  "<div>test</div><span class=\"pre\"><div>foo\nbar</div>baz\nfred</span>",
    245  "<div>test<span style=\"white-space: pre;\">foo</span></div><span class=\"pre\"><div>bar</div>baz\nfred</span>", // expected
    246 ],
    247 /* 51-12*/[
    248  "<div>test</div><span class=\"pre\">foo<div>bar</div>baz\nfred</span>",
    249  "<div>test<span class=\"pre\" style=\"white-space: pre;\">foo</span></div><span class=\"pre\"><div>bar</div>baz\nfred</span>", // expected
    250 ],
    251 
    252 // Some tests with <div class="pre">.
    253 // FYI: Those tests were ported to join-different-white-space-style-paragraphs.html
    254 /* 52-00*/[
    255  "<div>test</div><div class=\"pre\">foobar\nbaz</div>",
    256  "<div>test<span style=\"white-space: pre;\">foobar</span></div><div class=\"pre\">baz</div>", // expected
    257 ],
    258 /* 53-01*/[
    259  "<div>test</div><div class=\"pre\"><b>foobar\nbaz</b></div>",
    260  "<div>test<b style=\"white-space: pre;\">foobar</b></div><div class=\"pre\"><b>baz</b></div>", // expected
    261 ],
    262 /* 54-02*/[
    263  "<div>test</div><div class=\"pre\"><b>foo</b>bar\nbaz</div>",
    264  "<div>test<b style=\"white-space: pre;\">foo</b><span style=\"white-space: pre;\">bar</span></div><div class=\"pre\">baz</div>", // expected
    265 ],
    266 /* 55-03*/[
    267  "<div>test</div><div class=\"pre\"><b>foo</b>\nbar</div>",
    268  "<div>test<b style=\"white-space: pre;\">foo</b></div><div class=\"pre\">bar</div>", // expected
    269 ],
    270 /* 56-04*/[
    271  "<div>test</div><div class=\"pre\"><b>foo\n</b>bar\nbaz</div>",
    272  "<div>test<b style=\"white-space: pre;\">foo</b></div><div class=\"pre\">bar\nbaz</div>", // expected
    273 ],
    274 /* 57-05*/[
    275  "<div>test</div><div class=\"pre\">foobar<br>baz</div>",
    276  "<div>test<span style=\"white-space: pre;\">foobar</span></div><div class=\"pre\">baz</div>", // expected
    277 ],
    278 /* 58-06*/[
    279  "<div>test</div><div class=\"pre\"><b>foobar<br>baz</b></div>",
    280  "<div>test<b style=\"white-space: pre;\">foobar</b></div><div class=\"pre\"><b>baz</b></div>", // expected
    281 ],
    282 /* 59-07*/[
    283  "<div>test</div><div class=\"pre\"><div>foobar</div>baz</div>",
    284  "<div>test<span style=\"white-space: pre;\">foobar</span></div><div class=\"pre\">baz</div>", // expected
    285 ],
    286 /* 60-08*/[
    287  "<div>test</div><div class=\"pre\">foobar<div>baz</div></div>",
    288  "<div>test<span style=\"white-space: pre;\">foobar</span></div><div class=\"pre\"><div>baz</div></div>", // expected
    289 ],
    290 /* 61-09*/[
    291  "<div>test</div><div class=\"pre\"><div>foobar</div>baz\nfred</div>",
    292  "<div>test<span style=\"white-space: pre;\">foobar</span></div><div class=\"pre\">baz\nfred</div>", // expected
    293 ],
    294 /* 62-10*/[
    295  "<div>test</div><div class=\"pre\">foobar<div>baz</div>\nfred</div>",
    296  "<div>test<span style=\"white-space: pre;\">foobar</span></div><div class=\"pre\"><div>baz</div>\nfred</div>", // expected
    297 ],
    298 /* 63-11*/[
    299  "<div>test</div><div class=\"pre\"><div>foo\nbar</div>baz\nfred</div>",
    300  "<div>test<span style=\"white-space: pre;\">foo</span></div><div class=\"pre\"><div>bar</div>baz\nfred</div>", // expected
    301 ],
    302 /* 64-12*/[
    303  "<div>test</div><div class=\"pre\">foo<div>bar</div>baz\nfred</div>",
    304  "<div>test<span style=\"white-space: pre;\">foo</span></div><div class=\"pre\"><div>bar</div>baz\nfred</div>", // expected
    305 ],
    306 
    307 // Some tests with lists. These exercise the MoveBlock "left in right".
    308 /* 65*/[
    309  "<ul><pre><li>test</li>foobar\nbaz</pre></ul>",
    310  "<ul><pre><li>testfoobar</li>baz</pre></ul>", // expected
    311 ],
    312 /* 66*/[
    313  "<ul><pre><li>test</li><b>foobar\nbaz</b></pre></ul>",
    314  "<ul><pre><li>test<b>foobar</b></li><b>baz</b></pre></ul>", // expected
    315 ],
    316 /* 67*/[
    317  "<ul><pre><li>test</li><b>foo</b>bar\nbaz</pre></ul>",
    318  "<ul><pre><li>test<b>foo</b>bar</li>baz</pre></ul>", // expected
    319 ],
    320 /* 68*/[
    321  "<ul><pre><li>test</li><b>foo</b>\nbar</pre></ul>",
    322  "<ul><pre><li>test<b>foo</b></li>bar</pre></ul>", // expected
    323 ],
    324 /* 69*/[
    325  "<ul><pre><li>test</li><b>foo\n</b>bar\nbaz</pre></ul>",
    326  "<ul><pre><li>test<b>foo</b></li>bar\nbaz</pre></ul>", // expected
    327 ],
    328 
    329 // Last not least, some simple edge case tests.
    330 // FYI: Those tests were ported to join-pre-and-other-block.html
    331 /* 70*/[
    332  "<div>test</div><pre>foobar\n</pre>baz",
    333  "<div>testfoobar</div>baz", // expected
    334 ],
    335 /* 71*/[
    336  "<div>test</div><pre>\nfoo\nbar</pre>",
    337  "<div>testfoo</div><pre>bar</pre>", // expected
    338 ],
    339 /* 72*/[
    340  "<div>test</div><pre>\n\nfoo\nbar</pre>",
    341  "<div>test</div><pre>foo\nbar</pre>", // expected
    342 ],
    343 ];
    344 
    345    /** Test for Bug 772796 */
    346 
    347    SimpleTest.waitForExplicitFinish();
    348    SimpleTest.waitForFocus(function() {
    349      var sel = window.getSelection();
    350      var theEdit = document.getElementById("editable");
    351      var testName;
    352      var theDiv;
    353 
    354      for (let i = 0; i < tests.length; i++) {
    355        testName = "test" + i.toString();
    356 
    357        /* Set up the selection. */
    358        theEdit.innerHTML = "<div id=\"" + testName + "\">" + tests[i][0] + "</div>";
    359        theDiv = document.getElementById(testName);
    360        theDiv.focus();
    361        sel.collapse(theDiv, 0);
    362        synthesizeMouse(theDiv, 100, 2, {}); /* click behind and down */
    363 
    364        function normalizeStyeAttributeValues(aElement) {
    365          for (const element of Array.from(
    366            aElement.querySelectorAll("[style]")
    367          )) {
    368            element.setAttribute(
    369              "style",
    370              element
    371                .getAttribute("style")
    372                // Random spacing differences
    373                .replace(/$/, ";")
    374                .replace(/;;$/, ";")
    375                // Gecko likes "transparent"
    376                .replace(/transparent/g, "rgba(0, 0, 0, 0)")
    377                // WebKit likes to look overly precise
    378                .replace(/, 0.496094\)/g, ", 0.5)")
    379                // Gecko converts anything with full alpha to "transparent" which
    380                // then becomes "rgba(0, 0, 0, 0)", so we have to make other
    381                // browsers match
    382                .replace(/rgba\([0-9]+, [0-9]+, [0-9]+, 0\)/g, "rgba(0, 0, 0, 0)")
    383            );
    384          }
    385        }
    386 
    387        let todoCount = 0;
    388        /** First round: Forward delete. */
    389        synthesizeKey("KEY_Delete");
    390        normalizeStyeAttributeValues(theDiv);
    391        if (tests[i].length == 2 || theDiv.innerHTML == tests[i][1]) {
    392          is(theDiv.innerHTML, tests[i][1], "delete(collapsed): inner HTML for " + testName);
    393        } else {
    394          todoCount++;
    395          todo_is(theDiv.innerHTML, tests[i][1], "delete(should be): inner HTML for " + testName);
    396          is(theDiv.innerHTML, tests[i][2], "delete(currently is): inner HTML for " + testName);
    397        }
    398 
    399        /* Set up the selection. */
    400        theEdit.innerHTML = "<div id=\"" + testName + "\">" + tests[i][0] + "</div>";
    401        theDiv = document.getElementById(testName);
    402        theDiv.focus();
    403        sel.collapse(theDiv, 0);
    404        synthesizeMouse(theDiv, 100, 2, {}); /* click behind and down */
    405 
    406        /** Second round: Backspace. */
    407        synthesizeKey("KEY_ArrowRight");
    408        synthesizeKey("KEY_Backspace");
    409        normalizeStyeAttributeValues(theDiv);
    410        if (tests[i].length == 2 || theDiv.innerHTML == tests[i][1]) {
    411          is(theDiv.innerHTML, tests[i][1], "backspace: inner HTML for " + testName);
    412        } else {
    413          todoCount++;
    414          todo_is(theDiv.innerHTML, tests[i][1], "backspace(should be): inner HTML for " + testName);
    415          is(theDiv.innerHTML, tests[i][2], "backspace(currently is): inner HTML for " + testName);
    416        }
    417 
    418        /* Set up the selection. */
    419        theEdit.innerHTML = "<div id=\"" + testName + "\">" + tests[i][0] + "</div>";
    420        theDiv = document.getElementById(testName);
    421        theDiv.focus();
    422        sel.collapse(theDiv, 0);
    423        synthesizeMouse(theDiv, 100, 2, {}); /* click behind and down */
    424 
    425        /** Third round: Delete with non-collapsed selection. */
    426        if (i == 72) {
    427          if (tests[i].length == 3) {
    428            ok(!!todoCount, `All tests unexpectedly passed in ${testName}`);
    429          }
    430          // This test doesn't work, since we can't select only one newline using the right arrow key.
    431          continue;
    432        }
    433        synthesizeKey("KEY_ArrowLeft");
    434        /* Strangely enough we need to hit "right arrow" three times to select two characters. */
    435        synthesizeKey("KEY_ArrowRight", {shiftKey: true});
    436        synthesizeKey("KEY_ArrowRight", {shiftKey: true});
    437        synthesizeKey("KEY_ArrowRight", {shiftKey: true});
    438        synthesizeKey("KEY_Delete");
    439        normalizeStyeAttributeValues(theDiv);
    440 
    441        /* We always expect to the delete the "tf" in "testfoo". */
    442        function makeNonCollapsedExpectation(aExpected) {
    443          return aExpected
    444            .replace("testfoo",
    445                     "tesoo")
    446            .replace("test<b>foo",
    447                     "tes<b>oo")
    448            .replace("test<b style=\"white-space: pre;\">foo",
    449                     "tes<b style=\"white-space: pre;\">oo")
    450            .replace("test<span style=\"white-space: pre;\">foo",
    451                     "tes<span style=\"white-space: pre;\">oo")
    452            .replace("test<span style=\"white-space: pre;\"><b>foo",
    453                     "tes<span style=\"white-space: pre;\"><b>oo")
    454            .replace("test<span style=\"white-space: pre;\"><div>foo",
    455                     "tes<span style=\"white-space: pre;\"><div>oo")
    456            .replace("test<span class=\"pre\" style=\"white-space: pre;\">foo",
    457                     "tes<span class=\"pre\" style=\"white-space: pre;\">oo")
    458            .replace("test<span class=\"pre\" style=\"white-space: pre;\"><b>foo",
    459                     "tes<span class=\"pre\" style=\"white-space: pre;\"><b>oo")
    460            .replace("test<span class=\"pre\" style=\"white-space: pre;\"><div>foo",
    461                     "tes<span class=\"pre\" style=\"white-space: pre;\"><div>oo");
    462        }
    463        const expected = makeNonCollapsedExpectation(tests[i][1]);
    464        if (tests[i].length == 2 || theDiv.innerHTML == expected) {
    465          is(theDiv.innerHTML, expected, "delete(non-collapsed): inner HTML for " + testName);
    466        } else {
    467          todoCount++;
    468          todo_is(theDiv.innerHTML, expected, "delete(non-collapsed, should be): inner HTML for " + testName);
    469          is(
    470            theDiv.innerHTML,
    471            makeNonCollapsedExpectation(tests[i][2]),
    472            "delete(non-collapsed, currently is): inner HTML for " + testName
    473          );
    474        }
    475        if (tests[i].length == 3) {
    476            ok(!!todoCount, `All tests unexpectedly passed in ${testName}`);
    477        }
    478      }
    479 
    480      SimpleTest.finish();
    481    });
    482 
    483  </script>
    484 
    485 </pre>
    486 </body>
    487 </html>