blob: c2bba3af18958d75a04dba116d2830d35ef803a8 [file] [log] [blame]
Aryeh Gregor8fe7c022011-10-11 21:30:301<!doctype html>
2<title>Selection.collapseTo(Start|End)() tests</title>
3<div id=log></div>
Aryeh Gregor33fcf012015-08-09 12:21:104<script src=/resources/testharness.js></script>
5<script src=/resources/testharnessreport.js></script>
Aryeh Gregor8fe7c022011-10-11 21:30:306<script src=common.js></script>
7<script>
8"use strict";
9
tkent69ff91c2017-02-21 20:10:1510test(function() {
11 selection.removeAllRanges();
Stephen McGruer3696f222020-01-23 19:11:5812 assert_throws_dom("INVALID_STATE_ERR", function() {
tkent69ff91c2017-02-21 20:10:1513 selection.collapseToStart();
14 });
15}, "Must throw InvalidStateErr if the selection's range is null");
Aryeh Gregor8fe7c022011-10-11 21:30:3016
17for (var i = 0; i < testRanges.length; i++) {
tkent69ff91c2017-02-21 20:10:1518 var endpoints = eval(testRanges[i]);
19 if (!isSelectableNode(endpoints[0]) || !isSelectableNode(endpoints[2]))
20 continue;
Aryeh Gregor01a11722015-08-09 13:04:2521 test(function() {
22 selection.removeAllRanges();
Aryeh Gregor8fe7c022011-10-11 21:30:3023
Aryeh Gregor01a11722015-08-09 13:04:2524 var addedRange = ownerDocument(endpoints[0]).createRange();
25 addedRange.setStart(endpoints[0], endpoints[1]);
26 addedRange.setEnd(endpoints[2], endpoints[3]);
27 selection.addRange(addedRange);
Aryeh Gregor8fe7c022011-10-11 21:30:3028
Aryeh Gregor01a11722015-08-09 13:04:2529 // We don't penalize browsers here for mishandling addRange() and
30 // adding a different range than we specified. They fail addRange()
31 // tests for that, and don't have to fail collapseToStart/End() tests
32 // too. They do fail if they throw unexpectedly, though. I also fail
33 // them if there's no range at all, because otherwise they could pass
34 // all tests if addRange() always does nothing and collapseToStart()
35 // always throws.
36 assert_equals(selection.rangeCount, 1,
37 "Sanity check: rangeCount must equal 1 after addRange()");
Aryeh Gregor8fe7c022011-10-11 21:30:3038
Aryeh Gregor01a11722015-08-09 13:04:2539 var expectedEndpoint = [
40 selection.getRangeAt(0).startContainer,
41 selection.getRangeAt(0).startOffset
42 ];
Aryeh Gregor8fe7c022011-10-11 21:30:3043
Aryeh Gregor01a11722015-08-09 13:04:2544 selection.collapseToStart();
Aryeh Gregor8fe7c022011-10-11 21:30:3045
Aryeh Gregor01a11722015-08-09 13:04:2546 assert_equals(selection.rangeCount, 1,
47 "selection.rangeCount must equal 1");
48 assert_equals(selection.focusNode, expectedEndpoint[0],
49 "focusNode must equal the original start node");
50 assert_equals(selection.focusOffset, expectedEndpoint[1],
51 "focusOffset must equal the original start offset");
52 assert_equals(selection.anchorNode, expectedEndpoint[0],
53 "anchorNode must equal the original start node");
54 assert_equals(selection.anchorOffset, expectedEndpoint[1],
55 "anchorOffset must equal the original start offset");
56 assert_equals(addedRange.startContainer, endpoints[0],
57 "collapseToStart() must not change the startContainer of the selection's original range");
58 assert_equals(addedRange.startOffset, endpoints[1],
59 "collapseToStart() must not change the startOffset of the selection's original range");
60 assert_equals(addedRange.endContainer, endpoints[2],
61 "collapseToStart() must not change the endContainer of the selection's original range");
62 assert_equals(addedRange.endOffset, endpoints[3],
63 "collapseToStart() must not change the endOffset of the selection's original range");
64 }, "Range " + i + " " + testRanges[i] + " collapseToStart()");
Aryeh Gregor8fe7c022011-10-11 21:30:3065
Aryeh Gregor01a11722015-08-09 13:04:2566 // Copy-paste of above
67 test(function() {
68 selection.removeAllRanges();
Aryeh Gregor8fe7c022011-10-11 21:30:3069
Aryeh Gregor01a11722015-08-09 13:04:2570 var addedRange = ownerDocument(endpoints[0]).createRange();
71 addedRange.setStart(endpoints[0], endpoints[1]);
72 addedRange.setEnd(endpoints[2], endpoints[3]);
73 selection.addRange(addedRange);
Aryeh Gregor8fe7c022011-10-11 21:30:3074
Aryeh Gregor01a11722015-08-09 13:04:2575 // We don't penalize browsers here for mishandling addRange() and
76 // adding a different range than we specified. They fail addRange()
77 // tests for that, and don't have to fail collapseToStart/End() tests
78 // too. They do fail if they throw unexpectedly, though. I also fail
79 // them if there's no range at all, because otherwise they could pass
80 // all tests if addRange() always does nothing and collapseToStart()
81 // always throws.
82 assert_equals(selection.rangeCount, 1,
83 "Sanity check: rangeCount must equal 1 after addRange()");
Aryeh Gregor8fe7c022011-10-11 21:30:3084
Aryeh Gregor01a11722015-08-09 13:04:2585 var expectedEndpoint = [
86 selection.getRangeAt(0).endContainer,
87 selection.getRangeAt(0).endOffset
88 ];
Aryeh Gregor8fe7c022011-10-11 21:30:3089
Aryeh Gregor01a11722015-08-09 13:04:2590 selection.collapseToEnd();
Aryeh Gregor8fe7c022011-10-11 21:30:3091
Aryeh Gregor01a11722015-08-09 13:04:2592 assert_equals(selection.rangeCount, 1,
93 "selection.rangeCount must equal 1");
94 assert_equals(selection.focusNode, expectedEndpoint[0],
95 "focusNode must equal the original end node");
96 assert_equals(selection.focusOffset, expectedEndpoint[1],
97 "focusOffset must equal the original end offset");
98 assert_equals(selection.anchorNode, expectedEndpoint[0],
99 "anchorNode must equal the original end node");
100 assert_equals(selection.anchorOffset, expectedEndpoint[1],
101 "anchorOffset must equal the original end offset");
102 assert_equals(addedRange.startContainer, endpoints[0],
103 "collapseToEnd() must not change the startContainer of the selection's original range");
104 assert_equals(addedRange.startOffset, endpoints[1],
105 "collapseToEnd() must not change the startOffset of the selection's original range");
106 assert_equals(addedRange.endContainer, endpoints[2],
107 "collapseToEnd() must not change the endContainer of the selection's original range");
108 assert_equals(addedRange.endOffset, endpoints[3],
109 "collapseToEnd() must not change the endOffset of the selection's original range");
110 }, "Range " + i + " " + testRanges[i] + " collapseToEnd()");
Aryeh Gregor8fe7c022011-10-11 21:30:30111}
112
113testDiv.style.display = "none";
114</script>