tor-browser

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

splitText-normalize.js (2705B)


      1 /** Test for Bug 191864 **/
      2 var tests_done = 0;
      3 var tests = [
      4 [ {}, [0,4], "012345678" ],
      5 [ {}, [0,0], "012345678" ],
      6 [ {}, [0,9], "012345678" ],
      7 [ {startOffset:4}, [0,4], "012345678" ],
      8 [ {startOffset:5}, [0,4], "012345678" ],
      9 [ {startOffset:5,endOffset:6}, [0,4], "012345678" ],
     10 [ {endOffset:5}, [0,4], "012345678" ],
     11 [ {endOffset:4}, [0,4], "012345678" ],
     12 [ {endOffset:3}, [0,4], "012345678" ],
     13 [ {startOffset:1,endOffset:3}, [0,4], "012345678" ],
     14 [ {startOffset:7,endOffset:7}, [0,4], "012345678" ],
     15 [ {startOffset:4,endOffset:4}, [0,4], "012345678" ],
     16 [ {endNode:1}, [0,4], "012345678", "" ],
     17 [ {endNode:1}, [0,4], "01234567", "8" ],
     18 [ {endNode:1}, [1,4], "0", "12345678" ],
     19 [ {startOffset:1,endNode:1}, [0,0], "0", "12345678" ],
     20 [ {endNode:2}, [1,4], "0", "12345", "678" ],
     21 ]
     22 
     23 function runtest(f,t,nosplit) {
     24  // create content
     25  let doc = f.contentDocument;
     26  for (let i = 2; i < t.length; ++i) {
     27    c = doc.createTextNode(t[i]);
     28    doc.body.appendChild(c);
     29  }
     30 
     31  // setup selection
     32  let sel = t[0]
     33  let startNode = sel.startNode === undefined ? doc.body.firstChild : doc.body.childNodes[sel.startNode];
     34  let startOffset = sel.startOffset === undefined ? 0 : sel.startOffset;
     35  let endNode = sel.endNode === undefined ? startNode : doc.body.childNodes[sel.endNode];
     36  let endOffset = sel.endOffset === undefined ? endNode.length : sel.endOffset;
     37  let selection = f.contentWindow.getSelection();
     38  let r = doc.createRange();
     39  r.setStart(startNode, startOffset);
     40  r.setEnd(endNode, endOffset);
     41  selection.addRange(r);
     42 
     43  // splitText
     44  let split = t[1]
     45  if (!nosplit)
     46    doc.body.childNodes[split[0]].splitText(split[1])
     47 }
     48 function test_ref(f,t,nosplit) {
     49  runtest(f,t,true);
     50 }
     51 function test_split(f,t) {
     52  runtest(f,t);
     53 }
     54 function test_split_insert(f,t) {
     55  runtest(f,t);
     56  let doc = f.contentDocument;
     57  doc.body.firstChild;
     58  let split = t[1]
     59  let text1 = doc.body.childNodes[split[0]]
     60  let text2 = doc.body.childNodes[split[0]+1]
     61  if (text2.textContent.length==0) return;
     62  let c = doc.createTextNode(text2.textContent[0]);
     63  doc.body.insertBefore(c,text2);
     64  let r = doc.createRange();
     65  r.setStart(text2, 0);
     66  r.setEnd(text2, 1);
     67  r.deleteContents();
     68 }
     69 function test_split_merge(f,t) {
     70  runtest(f,t);
     71  f.contentDocument.body.normalize();
     72 }
     73 function test_merge(f,t) {
     74  runtest(f,t,true);
     75  f.contentDocument.body.normalize();
     76 }
     77 
     78 function createFrame(run,t) {
     79  let f = document.createElement('iframe');
     80  f.setAttribute('height','22');
     81  f.setAttribute('frameborder','0');
     82  f.setAttribute('width','200');
     83  f.src = 'data:text/html,<body style="margin:0;padding:0">';
     84  f.onload = function () { try { run(f, t); } finally { ++tests_done; } }
     85  return f;
     86 }