tor-browser

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

test_set_range_text.html (9487B)


      1 <!DOCTYPE HTML>
      2 <html>
      3 <!--
      4 https://bugzilla.mozilla.org/show_bug.cgi?id=850364
      5 -->
      6 <head>
      7 <title>Tests for Bug 850364 && Bug 918940</title>
      8 <script src="/tests/SimpleTest/SimpleTest.js"></script>
      9 <script src="/tests/SimpleTest/EventUtils.js"></script>
     10 <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" />
     11 </head>
     12 <body>
     13 <a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=850364">Mozilla Bug 850364</a>
     14 <p id="display"></p>
     15 <div id="content">
     16 
     17 <!-- "SetRangeText() supported types"-->
     18 <input type="text" id="input_text"></input>
     19 <input type="search" id="input_search"></input>
     20 <input type="url" id="input_url"></input>
     21 <input type="tel" id="input_tel"></input>
     22 <input type="password" id="input_password"></input>
     23 <textarea id="input_textarea"></textarea>
     24 
     25 <!-- "SetRangeText() non-supported types" -->
     26 <input type="button" id="input_button"></input>
     27 <input type="submit" id="input_submit"></input>
     28 <input type="image" id="input_image"></input>
     29 <input type="reset" id="input_reset"></input>
     30 <input type="radio" id="input_radio"></input>
     31 <input type="checkbox" id="input_checkbox"></input>
     32 <input type="range" id="input_range"></input>
     33 <input type="file" id="input_file"></input>
     34 <input type="email" id="input_email"></input>
     35 
     36 </div>
     37 <pre id="test">
     38 <script class="testbody" type="text/javascript">
     39 
     40  /** Tests for Bug 850364 && Bug 918940*/
     41 
     42  var SupportedTypes = ["text", "search", "url", "tel", "password", "textarea"];
     43  var NonSupportedTypes = ["button", "submit", "image", "reset", "radio",
     44                           "checkbox", "range", "file", "email"];
     45 
     46  SimpleTest.waitForExplicitFinish();
     47 
     48  function TestInputs() {
     49 
     50    var opThrows, elem, i, msg;
     51 
     52    //Non-supported types should throw
     53    for (i = 0; i < NonSupportedTypes.length; ++i) {
     54      opThrows = false;
     55      msg = "input_" + NonSupportedTypes[i];
     56      elem = document.getElementById(msg);
     57      elem.focus();
     58      try {
     59        elem.setRangeText("abc");
     60      } catch (ex) {
     61       opThrows = true;
     62      }
     63      ok(opThrows, msg + " should throw InvalidStateError");
     64    }
     65 
     66    var numOfSelectCalls = 0, expectedNumOfSelectCalls = 0;
     67    //Supported types should not throw
     68    for (i = 0; i < SupportedTypes.length; ++i) {
     69      opThrows = false;
     70      msg = "input_" + SupportedTypes[i];
     71      elem = document.getElementById(msg);
     72      elem.focus();
     73      try {
     74        elem.setRangeText("abc");
     75      } catch (ex) {
     76        opThrows = true;
     77      }
     78      is(opThrows, false, msg + " should not throw InvalidStateError");
     79 
     80      elem.addEventListener("select", function (aEvent) {
     81        ok(true, "select event should be fired for " + aEvent.target.id);
     82        if (++numOfSelectCalls == expectedNumOfSelectCalls) {
     83          SimpleTest.finish();
     84        } else if (numOfSelectCalls > expectedNumOfSelectCalls) {
     85          ok(false, "Too many select events were fired");
     86        }
     87      });
     88 
     89      elem.addEventListener("input", function (aEvent) {
     90        ok(false, "input event should NOT be fired for " + + aEvent.target.id);
     91      });
     92 
     93      var test = " setRange(replacement), shrink";
     94      elem.value = "0123456789ABCDEF";
     95      elem.setSelectionRange(1, 6);
     96      elem.setRangeText("xyz");
     97      is(elem.value, "0xyz6789ABCDEF", msg + test);
     98      is(elem.selectionStart, 1, msg + test);
     99      is(elem.selectionEnd, 4, msg + test);
    100      elem.setRangeText("mnk");
    101      is(elem.value, "0mnk6789ABCDEF", msg + test);
    102      expectedNumOfSelectCalls += 2;
    103 
    104      test = " setRange(replacement), expand";
    105      elem.value = "0123456789ABCDEF";
    106      elem.setSelectionRange(1, 2);
    107      elem.setRangeText("xyz");
    108      is(elem.value, "0xyz23456789ABCDEF", msg + test);
    109      is(elem.selectionStart, 1, msg + test);
    110      is(elem.selectionEnd, 4, msg + test);
    111      elem.setRangeText("mnk");
    112      is(elem.value, "0mnk23456789ABCDEF", msg + test);
    113      expectedNumOfSelectCalls += 2;
    114 
    115      test = " setRange(replacement) pure insertion at start";
    116      elem.value = "0123456789ABCDEF";
    117      elem.setSelectionRange(0, 0);
    118      elem.setRangeText("xyz");
    119      is(elem.value, "xyz0123456789ABCDEF", msg + test);
    120      is(elem.selectionStart, 0, msg + test);
    121      is(elem.selectionEnd, 0, msg + test);
    122      elem.setRangeText("mnk");
    123      is(elem.value, "mnkxyz0123456789ABCDEF", msg + test);
    124      expectedNumOfSelectCalls += 1;
    125 
    126      test = " setRange(replacement) pure insertion in the middle";
    127      elem.value = "0123456789ABCDEF";
    128      elem.setSelectionRange(4, 4);
    129      elem.setRangeText("xyz");
    130      is(elem.value, "0123xyz456789ABCDEF", msg + test);
    131      is(elem.selectionStart, 4, msg + test);
    132      is(elem.selectionEnd, 4, msg + test);
    133      elem.setRangeText("mnk");
    134      is(elem.value, "0123mnkxyz456789ABCDEF", msg + test);
    135      expectedNumOfSelectCalls += 1;
    136 
    137      test = " setRange(replacement) pure insertion at the end";
    138      elem.value = "0123456789ABCDEF";
    139      elem.setSelectionRange(16, 16);
    140      elem.setRangeText("xyz");
    141      is(elem.value, "0123456789ABCDEFxyz", msg + test);
    142      is(elem.selectionStart, 16, msg + test);
    143      is(elem.selectionEnd, 16, msg + test);
    144      elem.setRangeText("mnk");
    145      is(elem.value, "0123456789ABCDEFmnkxyz", msg + test);
    146 
    147      //test SetRange(replacement, start, end, mode) with start > end
    148      try {
    149        elem.setRangeText("abc", 20, 4);
    150      } catch (ex) {
    151        opThrows = (ex.name == "IndexSizeError" && ex.code == DOMException.INDEX_SIZE_ERR);
    152      }
    153      is(opThrows, true, msg + " should throw IndexSizeError");
    154 
    155      //test SelectionMode 'select'
    156      elem.value = "0123456789ABCDEF";
    157      elem.setRangeText("xyz", 4, 9, "select");
    158      is(elem.value, "0123xyz9ABCDEF", msg + ".value == \"0123xyz9ABCDEF\"");
    159      is(elem.selectionStart, 4, msg + ".selectionStart == 4, with \"select\"");
    160      is(elem.selectionEnd, 7, msg + ".selectionEnd == 7, with \"select\"");
    161      expectedNumOfSelectCalls += 1;
    162 
    163      elem.setRangeText("pqm", 6, 25, "select");
    164      is(elem.value, "0123xypqm", msg + ".value == \"0123xypqm\"");
    165      is(elem.selectionStart, 6, msg + ".selectionStart == 6, with \"select\"");
    166      is(elem.selectionEnd, 9, msg + ".selectionEnd == 9, with \"select\"");
    167      expectedNumOfSelectCalls += 1;
    168 
    169      //test SelectionMode 'start'
    170      elem.value = "0123456789ABCDEF";
    171      elem.setRangeText("xyz", 4, 9, "start");
    172      is(elem.value, "0123xyz9ABCDEF", msg + ".value == \"0123xyz9ABCDEF\"");
    173      is(elem.selectionStart, 4, msg + ".selectionStart == 4, with \"start\"");
    174      is(elem.selectionEnd, 4, msg + ".selectionEnd == 4, with \"start\"");
    175      expectedNumOfSelectCalls += 1;
    176 
    177      elem.setRangeText("pqm", 6, 25, "start");
    178      is(elem.value, "0123xypqm", msg + ".value == \"0123xypqm\"");
    179      is(elem.selectionStart, 6, msg + ".selectionStart == 6, with \"start\"");
    180      is(elem.selectionEnd, 6, msg + ".selectionEnd == 6, with \"start\"");
    181      expectedNumOfSelectCalls += 1;
    182 
    183      //test SelectionMode 'end'
    184      elem.value = "0123456789ABCDEF";
    185      elem.setRangeText("xyz", 4, 9, "end");
    186      is(elem.value, "0123xyz9ABCDEF", msg + ".value == \"0123xyz9ABCDEF\"");
    187      is(elem.selectionStart, 7, msg + ".selectionStart == 7, with \"end\"");
    188      is(elem.selectionEnd, 7, msg + ".selectionEnd == 7, with \"end\"");
    189      expectedNumOfSelectCalls += 1;
    190 
    191      elem.setRangeText("pqm", 6, 25, "end");
    192      is(elem.value, "0123xypqm", msg + ".value == \"0123xypqm\"");
    193      is(elem.selectionStart, 9, msg + ".selectionStart == 9, with \"end\"");
    194      is(elem.selectionEnd, 9, msg + ".selectionEnd == 9, with \"end\"");
    195      expectedNumOfSelectCalls += 1;
    196 
    197      //test SelectionMode 'preserve' (default)
    198 
    199      //subcase: selection{Start|End} > end
    200      elem.value = "0123456789";
    201      elem.setSelectionRange(6, 9);
    202      elem.setRangeText("Z", 1, 2, "preserve");
    203      is(elem.value, "0Z23456789", msg + ".value == \"0Z23456789\"");
    204      is(elem.selectionStart, 6, msg + ".selectionStart == 6, with \"preserve\"");
    205      is(elem.selectionEnd, 9, msg + ".selectionEnd == 9, with \"preserve\"");
    206      expectedNumOfSelectCalls += 1;
    207 
    208      //subcase: selection{Start|End} < end
    209      elem.value = "0123456789";
    210      elem.setSelectionRange(4, 5);
    211      elem.setRangeText("QRST", 2, 9, "preserve");
    212      is(elem.value, "01QRST9", msg + ".value == \"01QRST9\"");
    213      is(elem.selectionStart, 2, msg + ".selectionStart == 2, with \"preserve\"");
    214      is(elem.selectionEnd, 6, msg + ".selectionEnd == 6, with \"preserve\"");
    215      expectedNumOfSelectCalls += 2;
    216 
    217      //subcase: selectionStart > end, selectionEnd < end
    218      elem.value = "0123456789";
    219      elem.setSelectionRange(8, 4);
    220      elem.setRangeText("QRST", 1, 5);
    221      is(elem.value, "0QRST56789", msg + ".value == \"0QRST56789\"");
    222      is(elem.selectionStart, 1, msg + ".selectionStart == 1, with \"default\"");
    223      is(elem.selectionEnd, 5, msg + ".selectionEnd == 5, with \"default\"");
    224      expectedNumOfSelectCalls += 2;
    225 
    226      //subcase: selectionStart < end, selectionEnd > end
    227      elem.value = "0123456789";
    228      elem.setSelectionRange(4, 9);
    229      elem.setRangeText("QRST", 2, 6);
    230      is(elem.value, "01QRST6789", msg + ".value == \"01QRST6789\"");
    231      is(elem.selectionStart, 2, msg + ".selectionStart == 2, with \"default\"");
    232      is(elem.selectionEnd, 9, msg + ".selectionEnd == 9, with \"default\"");
    233      expectedNumOfSelectCalls += 2;
    234    }
    235  }
    236 
    237  addLoadEvent(TestInputs);
    238 
    239 </script>
    240 </pre>
    241 </body>
    242 </html>