layout/generic/test/test_selection_splitText-normalize.html

Wed, 31 Dec 2014 06:09:35 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Wed, 31 Dec 2014 06:09:35 +0100
changeset 0
6474c204b198
permissions
-rw-r--r--

Cloned upstream origin tor-browser at tor-browser-31.3.0esr-4.5-1-build1
revision ID fc1c9ff7c1b2defdbc039f12214767608f46423f for hacking purpose.

     1 <!DOCTYPE HTML>
     2 <html>
     3 <!--
     4 https://bugzilla.mozilla.org/show_bug.cgi?id=191864
     5 -->
     6 <head>
     7   <title>Test for Bug 191864</title>
     8   <script type="application/javascript" src="/MochiKit/packed.js"></script>
     9   <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.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=191864">Mozilla Bug 191864</a>
    14 <p id="display">
    15 <span id="col1" style="float:left; height:800px; width:180px;"></span>
    16 <span id="col2" style="float:left; height:800px; width:180px;"></span>
    17 </p>
    18 <div id="content" style="display: none">
    20 </div>
    21 <pre id="test">
    22 <script type="application/javascript;version=1.7">
    23 var tests = [
    24  [ {}, [0,4], "012345678" ],
    25  [ {}, [0,0], "012345678" ],
    26  [ {}, [0,9], "012345678" ],
    27  [ {startOffset:4}, [0,4], "012345678" ],
    28  [ {startOffset:5}, [0,4], "012345678" ],
    29  [ {startOffset:5,endOffset:6}, [0,4], "012345678" ],
    30  [ {endOffset:5}, [0,4], "012345678" ],
    31  [ {endOffset:4}, [0,4], "012345678" ],
    32  [ {endOffset:3}, [0,4], "012345678" ],
    33  [ {startOffset:1,endOffset:3}, [0,4], "012345678" ],
    34  [ {startOffset:7,endOffset:7}, [0,4], "012345678" ],
    35  [ {startOffset:4,endOffset:4}, [0,4], "012345678" ],
    36  [ {endNode:1}, [0,4], "012345678", "" ],
    37  [ {endNode:1}, [0,4], "01234567", "8" ],
    38  [ {endNode:1}, [1,4], "0", "12345678" ],
    39  [ {endNode:2}, [1,4], "0", "12345", "678" ],
    40 ]
    42 function runtest(r,p,t) {
    43   // create content
    44   document.original_nodes = [];
    45   for (let i = 2; i < t.length; ++i) {
    46     c = document.createTextNode(t[i]);
    47     p.appendChild(c);
    48     document.original_nodes.push(c);
    49   }
    51   // setup the range
    52   let sel = t[0]
    53   let startNode = p.firstChild;
    54   let startOffset = sel.startOffset === undefined ? 0 : sel.startOffset;
    55   let endNode = sel.endNode === undefined ? startNode : p.childNodes[sel.endNode];
    56   let endOffset = sel.endOffset === undefined ? endNode.length : sel.endOffset;
    57   r.setStart(startNode, startOffset);
    58   r.setEnd(endNode, endOffset);
    60   // splitText
    61   let split = t[1]
    62   p.childNodes[split[0]].splitText(split[1])
    63 }
    64 function test_split(r,p,t) {
    65     runtest(r,p,t);
    66 }
    67 function test_split_merge(r,p,t) {
    68     runtest(r,p,t);
    69     p.normalize();
    70 }
    71 </script>
    73 <script type="application/javascript;version=1.7">
    75 /** Test for Bug 191864 **/
    77 var results = [
    78 /* test_split */
    79  [ {},                                        [ [0, "0123"], "45678" ]],
    80  [ {},                                        [ [0, ""], "012345678" ]],
    81  [ {endNode:0, endOffset:9},                  [ [0, "012345678"], "" ]],
    82  [ {startOffset:4},                           [ [0, "0123"], "45678" ]],
    83  [ {startNode:1, startOffset:1},              [ [0, "0123"], "45678" ]],
    84  [ {startNode:1, startOffset:1, endOffset:2}, [ [0, "0123"], "45678" ]],
    85  [ {endOffset:1},                             [ [0, "0123"], "45678" ]],
    86  [ {endNode:0},                               [ [0, "0123"], "45678" ]],
    87  [ {endNode:0, endOffset:3},                  [ [0, "0123"], "45678" ]],
    88  [ {startOffset:1, endNode:0, endOffset:3},   [ [0, "0123"], "45678" ]],
    89  [ {startNode:1, startOffset:3, endOffset:3}, [ [0, "0123"], "45678" ]],
    90  [ {startOffset:4, endNode:0},                [ [0, "0123"], "45678" ]],
    91  [ {endNode:2, endOffset:0},                  [ [0, "0123"], "45678", [1, ""] ]],
    92  [ {endNode:2},                               [ [0, "0123"], "4567", [1, "8"] ]],
    93  [ {endNode:2},                               [ [0, "0"], [1, "1234"], "5678" ]],
    94  [ {endNode:3},                               [ [0, "0"], [1, "1234"], "5", [2, "678"] ]],
    95 /* test_split_merge */
    96  [ {},                                        [ [0, "012345678" ] ]],
    97  [ {startParent:true},                        [ "012345678" ]],     /* splitText() creates an empty first child which is removed by normalize() */
    98  [ {},                                        [ [0, "012345678" ] ]],
    99  [ {startOffset:4},                           [ [0, "012345678" ] ]],
   100  [ {startOffset:5},                           [ [0, "012345678" ] ]],
   101  [ {startOffset:5,endOffset:6},               [ [0, "012345678" ] ]],
   102  [ {endOffset:5},                             [ [0, "012345678" ] ]],
   103  [ {endOffset:4},                             [ [0, "012345678" ] ]],
   104  [ {endOffset:3},                             [ [0, "012345678" ] ]],
   105  [ {startOffset:1,endOffset:3},               [ [0, "012345678" ] ]],
   106  [ {startOffset:7,endOffset:7},               [ [0, "012345678" ] ]],
   107  [ {startOffset:4,endOffset:4},               [ [0, "012345678" ] ]],
   108  [ {endParent:true},                          [ [0, "012345678" ] ]],
   109  [ {},                                        [ [0, "012345678" ] ]],
   110  [ {},                                        [ [0, "012345678" ] ]],
   111  [ {},                                        [ [0, "012345678" ] ]],
   112 ]
   114 function verifyResults(r,p,i) {
   115   let nodes = results[i][1];
   116   is(p.childNodes.length, nodes.length, "same number of DOM nodes" + " (test " + i + ")");
   117   for (let j = 0; j < nodes.length; ++j) {
   118     let a = nodes[j];
   119     let b = p.childNodes[j];
   120     if (a instanceof Array) {
   121       is(b, document.original_nodes[a[0]], "same node" + " (test " + i + " child " + j + ")");
   122       is(b.textContent, a[1], "contents2" + " (test " + i + " child " + j + ")");
   123     } else {
   124       is(b.nodeType, Node.TEXT_NODE, "text node" + " (test " + i + " child " + j + ")");
   125       is(b.textContent, a, "contents1" + " (test " + i + " child " + j + ")");
   126     }
   127   }
   128   let sel = results[i][0];
   129   if (sel.todo) {
   130     alert(r.startContainer + '\n' + r.startOffset + '\n' + r.endContainer + '\n' + r.endOffset + '\n')
   131     return;
   132   }
   133   let startNode = sel.startNode === undefined ? p.firstChild : p.childNodes[sel.startNode];
   134   let startOffset = sel.startOffset === undefined ? 0 : sel.startOffset;
   135   if (sel.startParent) { startNode = p; startOffset = 0; }
   136   let endNode = sel.endNode === undefined ? p.childNodes[p.childNodes.length>1 ? 1 : 0] : p.childNodes[sel.endNode];
   137   let endOffset = sel.endOffset === undefined ? endNode.length : sel.endOffset;
   138   if (sel.endParent) { endNode = p; endOffset = 1; }
   139   is(r.startContainer, startNode, "range start node" + " (test " + i + ")");
   140   is(r.startOffset, startOffset, "range start offset" + " (test " + i + ")");
   141   is(r.endContainer, endNode, "range end node" + " (test " + i + ")");
   142   is(r.endOffset, endOffset, "range end offset" + " (test " + i + ")");
   143 }
   145 function runTest() {
   146   let col1 = document.getElementById('col1');
   147   let col2 = document.getElementById('col2');
   148   for (let i=0; i < tests.length; ++i) {
   149     let t = tests[i];
   150     let p = document.createElement('p')
   151     col1.appendChild(p);
   152     let r = document.createRange();
   153     test_split(r,p,t);
   154     verifyResults(r,p,i);
   155   }
   156   for (let i=0; i < tests.length; ++i) {
   157     let t = tests[i];
   158     let p = document.createElement('p')
   159     col2.appendChild(p);
   160     let r = document.createRange();
   161     test_split_merge(r,p,t);
   162     verifyResults(r,p,i+tests.length);
   163   }
   164   SimpleTest.finish();
   165 }
   167 window.onload = function() { setTimeout(runTest, 0); };
   168 SimpleTest.waitForExplicitFinish();
   170 </script>
   171 </pre>
   172 </body>
   173 </html>

mercurial