|
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 } |