Text::splitText doesn't update Range end points anchored on parent nodes
[WebKit.git] / LayoutTests / fast / dom / Range / update-range-in-split-text.html
1 <!DOCTYPE html>
2 <body>
3 <script src="../../../resources/js-test-pre.js"></script>
4 <div id="container" style="display: none;"></div>
5 <script>
6
7 function createTextWithParent()
8 {
9     var container = document.getElementById('container');
10
11     var element = document.createElement('div');
12     element.textContent = 'hello';
13     container.appendChild(element);
14
15     return element.firstChild;
16 }
17
18 function createTextWithParentAndSiblings()
19 {
20     var container = document.getElementById('container');
21
22     var element = document.createElement('div');
23     element.textContent = 'hello';
24     container.appendChild(element);
25
26     var sibling = document.createElement('b');
27     element.insertBefore(sibling, element.firstChild);
28
29     var sibling = document.createElement('i');
30     element.appendChild(sibling);
31
32     return element.childNodes[1];
33 }
34
35 function createRange(startContainer, startOffset, endContainer, endOffset) {
36     var range = document.createRange();
37     range.setStart(startContainer, startOffset);
38     range.setEnd(endContainer, endOffset);
39     return range;
40 }
41
42 debug('');
43 evalAndLog('text = createTextWithParent(); range = createRange(text.parentNode, 0, text.parentNode, 0); text.splitText(0)');
44 shouldBe('range.startContainer', 'text.parentNode');
45 shouldBe('range.startOffset', '0');
46 shouldBe('range.endContainer', 'text.parentNode');
47 shouldBe('range.endOffset', '0');
48
49 debug('');
50 evalAndLog('text = createTextWithParent(); range = createRange(text.parentNode, 1, text.parentNode, 1); text.splitText(0)');
51 shouldBe('range.startContainer', 'text.parentNode');
52 shouldBe('range.startOffset', '2');
53 shouldBe('range.endContainer', 'text.parentNode');
54 shouldBe('range.endOffset', '2');
55
56 debug('');
57 evalAndLog('text = createTextWithParent(); range = createRange(text.parentNode, 0, text.parentNode, 1); text.splitText(0)');
58 shouldBe('range.startContainer', 'text.parentNode');
59 shouldBe('range.startOffset', '0');
60 shouldBe('range.endContainer', 'text.parentNode');
61 shouldBe('range.endOffset', '2');
62
63 debug('');
64 evalAndLog('text = createTextWithParentAndSiblings(); range = createRange(text.parentNode, 1, text.parentNode, 1); text.splitText(0)');
65 shouldBe('range.startContainer', 'text.parentNode');
66 shouldBe('range.startOffset', '1');
67 shouldBe('range.endContainer', 'text.parentNode');
68 shouldBe('range.endOffset', '1');
69
70 debug('');
71 evalAndLog('text = createTextWithParentAndSiblings(); range = createRange(text.parentNode, 2, text.parentNode, 2); text.splitText(0)');
72 shouldBe('range.startContainer', 'text.parentNode');
73 shouldBe('range.startOffset', '3');
74 shouldBe('range.endContainer', 'text.parentNode');
75 shouldBe('range.endOffset', '3');
76
77 debug('');
78 evalAndLog('text = createTextWithParentAndSiblings(); range = createRange(text.parentNode, 1, text.parentNode, 2); text.splitText(0)');
79 shouldBe('range.startContainer', 'text.parentNode');
80 shouldBe('range.startOffset', '1');
81 shouldBe('range.endContainer', 'text.parentNode');
82 shouldBe('range.endOffset', '3');
83
84 </script>
85 <script src="../../../resources/js-test-post.js"></script>
86 </body>