| <!doctype html> | |
| <title>Range.collapse() and .collapsed tests</title> | |
| <link rel="author" title="Aryeh Gregor" href=ayg@aryeh.name> | |
| <meta name=timeout content=long> | |
| <div id=log></div> | |
| <script src=/resources/testharness.js></script> | |
| <script src=/resources/testharnessreport.js></script> | |
| <script src=../common.js></script> | |
| <script> | |
| "use strict"; | |
| function testCollapse(rangeEndpoints, toStart) { | |
| var range; | |
| if (rangeEndpoints == "detached") { | |
| range = document.createRange(); | |
| range.detach(); // should be a no-op and therefore the following should not throw | |
| range.collapse(toStart); | |
| assert_equals(true, range.collapsed); | |
| } | |
| // Have to account for Ranges involving Documents! | |
| var ownerDoc = rangeEndpoints[0].nodeType == Node.DOCUMENT_NODE | |
| ? rangeEndpoints[0] | |
| : rangeEndpoints[0].ownerDocument; | |
| range = ownerDoc.createRange(); | |
| range.setStart(rangeEndpoints[0], rangeEndpoints[1]); | |
| range.setEnd(rangeEndpoints[2], rangeEndpoints[3]); | |
| var expectedContainer = toStart ? range.startContainer : range.endContainer; | |
| var expectedOffset = toStart ? range.startOffset : range.endOffset; | |
| assert_equals(range.collapsed, range.startContainer == range.endContainer | |
| && range.startOffset == range.endOffset, | |
| "collapsed must be true if and only if the start and end are equal"); | |
| if (toStart === undefined) { | |
| range.collapse(); | |
| } else { | |
| range.collapse(toStart); | |
| } | |
| assert_equals(range.startContainer, expectedContainer, | |
| "Wrong startContainer"); | |
| assert_equals(range.endContainer, expectedContainer, | |
| "Wrong endContainer"); | |
| assert_equals(range.startOffset, expectedOffset, | |
| "Wrong startOffset"); | |
| assert_equals(range.endOffset, expectedOffset, | |
| "Wrong endOffset"); | |
| assert_true(range.collapsed, | |
| ".collapsed must be set after .collapsed()"); | |
| } | |
| var tests = []; | |
| for (var i = 0; i < testRanges.length; i++) { | |
| tests.push([ | |
| "Range " + i + " " + testRanges[i] + ", toStart true", | |
| eval(testRanges[i]), | |
| true | |
| ]); | |
| tests.push([ | |
| "Range " + i + " " + testRanges[i] + ", toStart false", | |
| eval(testRanges[i]), | |
| false | |
| ]); | |
| tests.push([ | |
| "Range " + i + " " + testRanges[i] + ", toStart omitted", | |
| eval(testRanges[i]), | |
| undefined | |
| ]); | |
| } | |
| generate_tests(testCollapse, tests); | |
| testDiv.style.display = "none"; | |
| </script> |