tor-browser

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

test_nsITableEditor_getSelectedCells.html (13973B)


      1 <!DOCTYPE>
      2 <html>
      3 <head>
      4  <title>Test for nsITableEditor.getSelectedCells()</title>
      5  <script src="/tests/SimpleTest/SimpleTest.js"></script>
      6  <link rel="stylesheet" href="/tests/SimpleTest/test.css">
      7 </head>
      8 <body>
      9 <div id="display">
     10 </div>
     11 <div id="content" contenteditable></div>
     12 <pre id="test">
     13 </pre>
     14 
     15 <script class="testbody" type="application/javascript">
     16 "use strict";
     17 
     18 SimpleTest.waitForExplicitFinish();
     19 SimpleTest.waitForFocus(() => {
     20  let editor = document.getElementById("content");
     21  let selection = document.getSelection();
     22 
     23  (function test_with_collapsed_selection() {
     24    selection.collapse(editor, 0);
     25    let cells = getTableEditor().getSelectedCells();
     26    is(cells.length, 0,
     27      "nsITableEditor.getSelectedCells() should return empty array if Selection does not select cells");
     28  })();
     29 
     30  editor.innerHTML =
     31    '<table id="table">' +
     32      '<tr id="r1"><td id="c1-1">cell1-1</td><td id="c1-2">cell1-2</td><td id="c1-3">cell1-3</td><td id="c1-4" colspan="2" rowspan="2">cell1-4</td></tr>' +
     33      '<tr id="r2"><th id="c2-1" rowspan="2">cell2-1</th><td id="c2-2">cell2-2</td><td id="c2-3">cell2-3</td></tr>' +
     34      '<tr id="r3"><td id="c3-2">cell3-2</td><td id="c3-3">cell3-3</td><td id="c3-4" colspan="2">cell3-4</td></tr>' +
     35      '<tr id="r4"><td id="c4-1" rowspan="4">cell4-1</td><td id="c4-2">cell4-2</td><td id="c4-3">cell4-3</td><th id="c4-4">cell4-4</th><td id="c4-5">cell4-5</td></tr>' +
     36      '<tr id="r5"><th id="c5-2">cell5-2</th><th id="c5-3" colspan="2">' +
     37        '<table><tr id="r2-1"><td id="c2-1-1">cell2-1-1</td></tr></table>' +
     38        '</th><td id="c5-5">cell5-5</td></tr>' +
     39      '<tr id="r6"><td id="c6-2">cell6-2</td><td id="c6-3">cell6-3</td><td id="c6-4"><p>cell6-4</p></td><td id="c6-5">cell6-5</td></tr>' +
     40      '<tr id="r7"><td id="c7-2" colspan="4">cell7-2</td></tr>' +
     41    "</table>";
     42 
     43  (function test_with_selecting_1_1() {
     44    let tr = document.getElementById("r1");
     45    selection.setBaseAndExtent(tr, 0, tr, 1);
     46    let cells = getTableEditor().getSelectedCells();
     47    is(cells.length, 1,
     48      "#1-1 nsITableEditor.getSelectedCells() should return an array whose length is 1");
     49    is(SpecialPowers.unwrap(cells[0]), document.getElementById("c1-1"),
     50      "#1-1 nsITableEditor.getSelectedCells() should set the first item of the result to the first cell element in the first row");
     51  })();
     52 
     53  (function test_with_selecting_1_4() {
     54    let tr = document.getElementById("r1");
     55    selection.setBaseAndExtent(tr, 3, tr, 4);
     56    let cells = getTableEditor().getSelectedCells();
     57    is(cells.length, 1,
     58      "#1-4 nsITableEditor.getSelectedCells() should return an array whose length is 1");
     59    is(SpecialPowers.unwrap(cells[0]), document.getElementById("c1-4"),
     60      "#1-4 nsITableEditor.getSelectedCells() should set the first item of the result to the last cell element whose colspan and rowspan are 2 in the first row");
     61  })();
     62 
     63  (function test_with_selecting_2_1() {
     64    let tr = document.getElementById("r2");
     65    selection.setBaseAndExtent(tr, 0, tr, 1);
     66    let cells = getTableEditor().getSelectedCells();
     67    is(cells.length, 1,
     68      "#2-1 nsITableEditor.getSelectedCells() should return an array whose length is 1");
     69    is(SpecialPowers.unwrap(cells[0]), document.getElementById("c2-1"),
     70      "#2-1 nsITableEditor.getSelectedCells() should set the first item of the result to the first cell element in the second row");
     71  })();
     72 
     73  (function test_with_selecting_7_2() {
     74    let tr = document.getElementById("r7");
     75    selection.setBaseAndExtent(tr, 0, tr, 1);
     76    let cells = getTableEditor().getSelectedCells();
     77    is(cells.length, 1,
     78      "#7-2 nsITableEditor.getSelectedCells() should return an array whose length is 1");
     79    is(SpecialPowers.unwrap(cells[0]), document.getElementById("c7-2"),
     80      "#7-2 nsITableEditor.getSelectedCells() should set the first item of the result to the second cell element in the last row");
     81  })();
     82 
     83  (function test_with_selecting_2_2_and_2_3() {
     84    let tr = document.getElementById("r2");
     85    selection.removeAllRanges();
     86    let range = document.createRange();
     87    range.setStart(tr, 1);
     88    range.setEnd(tr, 2);
     89    selection.addRange(range);
     90    range = document.createRange();
     91    range.setStart(tr, 2);
     92    range.setEnd(tr, 3);
     93    selection.addRange(range);
     94    let cells = getTableEditor().getSelectedCells();
     95    is(cells.length, 2,
     96      "#2-2 nsITableEditor.getSelectedCells() should return an array whose length is 2");
     97    is(SpecialPowers.unwrap(cells[0]), document.getElementById("c2-2"),
     98      "#2-2 nsITableEditor.getSelectedCells() should set the first item of the result to the second cell element in the second row");
     99  })();
    100 
    101  (function test_with_selecting_3_4_and_5_2() {
    102    let tr = document.getElementById("r3");
    103    selection.removeAllRanges();
    104    let range = document.createRange();
    105    range.setStart(tr, 2);
    106    range.setEnd(tr, 3);
    107    selection.addRange(range);
    108    range = document.createRange();
    109    range.setStart(document.getElementById("r5"), 0);
    110    range.setEnd(document.getElementById("r5"), 1);
    111    selection.addRange(range);
    112    let cells = getTableEditor().getSelectedCells();
    113    is(cells.length, 2,
    114        "#3-4, #5-2 nsITableEditor.getSelectedCells() should return an array whose length is 2");
    115    is(SpecialPowers.unwrap(cells[0]), document.getElementById("c3-4"),
    116        "#3-4, #5-2 nsITableEditor.getSelectedCells() should set the first item of the result to the last cell element in the third row");
    117    is(SpecialPowers.unwrap(cells[1]), document.getElementById("c5-2"),
    118        "#3-4, #5-2 nsITableEditor.getSelectedCells() should set the second item of the result to the first cell element in the fifth row");
    119  })();
    120 
    121  (function test_with_selecting_1_2_and_1_3_and_1_4_and_2_1_and_2_2() {
    122    selection.removeAllRanges();
    123    let tr = document.getElementById("r1");
    124    let range = document.createRange();
    125    range.setStart(tr, 1);
    126    range.setEnd(tr, 2);
    127    selection.addRange(range);
    128    range = document.createRange();
    129    range.setStart(tr, 2);
    130    range.setEnd(tr, 3);
    131    selection.addRange(range);
    132    range = document.createRange();
    133    range.setStart(tr, 3);
    134    range.setEnd(tr, 4);
    135    selection.addRange(range);
    136    tr = document.getElementById("r2");
    137    range = document.createRange();
    138    range.setStart(tr, 0);
    139    range.setEnd(tr, 1);
    140    selection.addRange(range);
    141    range = document.createRange();
    142    range.setStart(tr, 1);
    143    range.setEnd(tr, 2);
    144    selection.addRange(range);
    145 
    146    let cells = getTableEditor().getSelectedCells();
    147    is(cells.length, 5,
    148        "#1-2, #1-3, #1-4, #2-1, #2-2 nsITableEditor.getSelectedCells() should return an array whose length is 5");
    149    is(SpecialPowers.unwrap(cells[0]), document.getElementById("c1-2"),
    150      "#1-2, #1-3, #1-4, #2-1, #2-2 nsITableEditor.getSelectedCells() should set the first item of the result to the second cell element in the first row");
    151    is(SpecialPowers.unwrap(cells[1]), document.getElementById("c1-3"),
    152      "#1-2, #1-3, #1-4, #2-1, #2-2 nsITableEditor.getSelectedCells() should set the second item of the result to the third cell element in the first row");
    153    is(SpecialPowers.unwrap(cells[2]), document.getElementById("c1-4"),
    154      "#1-2, #1-3, #1-4, #2-1, #2-2 nsITableEditor.getSelectedCells() should set the third item of the result to the forth cell element in the first row");
    155    is(SpecialPowers.unwrap(cells[3]), document.getElementById("c2-1"),
    156      "#1-2, #1-3, #1-4, #2-1, #2-2 nsITableEditor.getSelectedCells() should set the forth item of the result to the first cell element in the second row");
    157    is(SpecialPowers.unwrap(cells[4]), document.getElementById("c2-2"),
    158      "#1-2, #1-3, #1-4, #2-1, #2-2 nsITableEditor.getSelectedCells() should set the forth item of the result to the second cell element in the second row");
    159  })();
    160 
    161  (function test_with_selecting_6_3_and_paragraph_in_6_4_and_6_5() {
    162    selection.removeAllRanges();
    163    let tr = document.getElementById("r6");
    164    let range = document.createRange();
    165    range.setStart(tr, 1);
    166    range.setEnd(tr, 2);
    167    selection.addRange(range);
    168    range = document.createRange();
    169    range.setStart(document.getElementById("c6-4").firstChild, 0);
    170    range.setEnd(document.getElementById("c6-4").firstChild, 1);
    171    selection.addRange(range);
    172    range = document.createRange();
    173    range.setStart(tr, 3);
    174    range.setEnd(tr, 4);
    175    selection.addRange(range);
    176 
    177    let cells = getTableEditor().getSelectedCells();
    178    is(cells.length, 2,
    179        "#6-3, #6-5 nsITableEditor.getSelectedCells() should return an array whose length is 2");
    180    is(SpecialPowers.unwrap(cells[0]), document.getElementById("c6-3"),
    181        "#6-3, #6-5 nsITableEditor.getSelectedCells() should set the first item of the result to the second cell element in the sixth row");
    182    // The <p> element in c6-4 is selected, this does not select the cell
    183    // element so that it should be ignored.
    184    is(SpecialPowers.unwrap(cells[1]), document.getElementById("c6-5"),
    185        "#6-3, #6-5 nsITableEditor.getSelectedCells() should set the first item of the result to the forth cell element in the sixth row");
    186  })();
    187 
    188  (function test_with_selecting_2_3_and_text_in_4_1_and_7_2() {
    189    selection.removeAllRanges();
    190    let tr = document.getElementById("r2");
    191    let range = document.createRange();
    192    range.setStart(tr, 2);
    193    range.setEnd(tr, 3);
    194    selection.addRange(range);
    195    range = document.createRange();
    196    range.setStart(document.getElementById("c4-1").firstChild, 0);
    197    range.setEnd(document.getElementById("c4-1").firstChild, 7);
    198    selection.addRange(range);
    199    tr = document.getElementById("r7");
    200    range = document.createRange();
    201    range.setStart(tr, 0);
    202    range.setEnd(tr, 1);
    203    selection.addRange(range);
    204 
    205    let cells = getTableEditor().getSelectedCells();
    206    is(cells.length, 2,
    207        "#2-3, #7-2 nsITableEditor.getSelectedCells() should return an array whose length is 2");
    208    is(SpecialPowers.unwrap(cells[0]), document.getElementById("c2-3"),
    209        "#2-3, #7-2 nsITableEditor.getSelectedCells() should set the first item of the result to the third cell element in the second row");
    210    // Text in c4-1 is selected, this does not select the cell element so that
    211    // it should be ignored.  Note that we've ignored the following selected
    212    // cell elements in old API, but it causes inconsistent behavior with the
    213    // previous test case.  Therefore, we take this behavior.
    214    is(SpecialPowers.unwrap(cells[1]), document.getElementById("c7-2"),
    215        "#2-3, #7-2 nsITableEditor.getSelectedCells() should set the second item of the result to the cell element in the seventh row");
    216  })();
    217 
    218  (function test_with_selecting_3_2_and_2_1_1_and_7_2() {
    219    selection.removeAllRanges();
    220    let tr = document.getElementById("r3");
    221    let range = document.createRange();
    222    range.setStart(tr, 0);
    223    range.setEnd(tr, 1);
    224    selection.addRange(range);
    225    tr = document.getElementById("r2-1");
    226    range = document.createRange();
    227    range.setStart(tr, 0);
    228    range.setEnd(tr, 1);
    229    selection.addRange(range);
    230    tr = document.getElementById("r7");
    231    range = document.createRange();
    232    range.setStart(tr, 0);
    233    range.setEnd(tr, 1);
    234    selection.addRange(range);
    235 
    236    let cells = getTableEditor().getSelectedCells();
    237    is(cells.length, 3,
    238      "#3-2, #2-1-1, #7-2 nsITableEditor.getSelectedCells() should return an array whose length is 3");
    239    is(SpecialPowers.unwrap(cells[0]), document.getElementById("c3-2"),
    240      "#3-2, #2-1-1, #7-2 nsITableEditor.getSelectedCells() should set the first item of the result to the first cell element in the third row");
    241    // c2-1-1 is in another <table>, however, getSelectedCells() returns it
    242    // since it works only with ranges of Selection.
    243    is(SpecialPowers.unwrap(cells[1]), document.getElementById("c2-1-1"),
    244      "#3-2, #2-1-1, #7-2 nsITableEditor.getSelectedCells() should set the second item of the result to the cell element in the child <table> element");
    245    is(SpecialPowers.unwrap(cells[2]), document.getElementById("c7-2"),
    246      "#3-2, #2-1-1, #7-2 nsITableEditor.getSelectedCells() should set the third item of the result to the cell element in the seventh row");
    247  })();
    248 
    249  (function test_with_selecting_all_children_of_cell() {
    250    selection.selectAllChildren(document.getElementById("c6-4"));
    251    let cells = getTableEditor().getSelectedCells();
    252    is(cells.length, 0,
    253      "nsITableEditor.getSelectedCells() should return an empty array when no cell element is selected");
    254  })();
    255 
    256  (function test_with_selecting_text_in_cell() {
    257    let cell = document.getElementById("c6-5");
    258    selection.collapse(cell.firstChild, 0);
    259    let cells = getTableEditor().getSelectedCells();
    260    is(cells.length, 0,
    261      "nsITableEditor.getSelectedCells() should return an empty array when selecting text in a cell element");
    262  })();
    263 
    264  (function test_with_selecting_text_in_1_1_and_1_2() {
    265    let cell = document.getElementById("c1-1");
    266    selection.setBaseAndExtent(cell.firstChild, 0, cell.firstChild, 3);
    267    let range = document.createRange();
    268    range.setStart(cell.parentNode, 1);
    269    range.setEnd(cell.parentNode, 2);
    270    selection.addRange(range);
    271    let cells = getTableEditor().getSelectedCells();
    272    is(cells.length, 0,
    273      "nsITableEditor.getSelectedCells() should return an empty array when the first range does not select a cell element");
    274  })();
    275 
    276  (function test_without_selection_ranges() {
    277    selection.removeAllRanges();
    278    let cells = getTableEditor().getSelectedCells();
    279    is(cells.length, 0,
    280      "nsITableEditor.getSelectedCells() should return an empty array even when there is no selection range");
    281  })();
    282 
    283  SimpleTest.finish();
    284 });
    285 
    286 function getTableEditor() {
    287  var Ci = SpecialPowers.Ci;
    288  var editingSession = SpecialPowers.wrap(window).docShell.editingSession;
    289  return editingSession.getEditorForWindow(window).QueryInterface(Ci.nsITableEditor);
    290 }
    291 
    292 </script>
    293 </body>
    294 
    295 </html>