Range-isPointInRange.html (3108B)
1 <!doctype html> 2 <title>Range.isPointInRange() tests</title> 3 <link rel="author" title="Aryeh Gregor" href=ayg@aryeh.name> 4 <meta name=timeout content=long> 5 <div id=log></div> 6 <script src=/resources/testharness.js></script> 7 <script src=/resources/testharnessreport.js></script> 8 <script src=../common.js></script> 9 <script> 10 "use strict"; 11 12 var testRangesCached = []; 13 test(function() { 14 for (var j = 0; j < testRanges.length; j++) { 15 test(function() { 16 testRangesCached[j] = rangeFromEndpoints(eval(testRanges[j])); 17 }, "Set up for range " + j + " " + testRanges[j]); 18 } 19 var detachedRange = document.createRange(); 20 detachedRange.detach(); 21 testRanges.push("detached"); 22 testRangesCached.push(detachedRange); 23 }, "Setup"); 24 25 for (var i = 0; i < testPoints.length; i++) { 26 var node = eval(testPoints[i])[0]; 27 var offset = eval(testPoints[i])[1]; 28 29 // isPointInRange is an unsigned long, so per WebIDL, we need to treat it 30 // as though it wrapped to an unsigned 32-bit integer. 31 var normalizedOffset = offset % Math.pow(2, 32); 32 if (normalizedOffset < 0) { 33 normalizedOffset += Math.pow(2, 32); 34 } 35 36 for (var j = 0; j < testRanges.length; j++) { 37 test(function() { 38 var range = testRangesCached[j].cloneRange(); 39 40 // "If node's root is different from the context object's root, 41 // return false and terminate these steps." 42 if (furthestAncestor(node) !== furthestAncestor(range.startContainer)) { 43 assert_false(range.isPointInRange(node, offset), 44 "Must return false if node has a different root from the context object"); 45 return; 46 } 47 48 // "If node is a doctype, throw an "InvalidNodeTypeError" exception 49 // and terminate these steps." 50 if (node.nodeType == Node.DOCUMENT_TYPE_NODE) { 51 assert_throws_dom("INVALID_NODE_TYPE_ERR", function() { 52 range.isPointInRange(node, offset); 53 }, "Must throw InvalidNodeTypeError if node is a doctype"); 54 return; 55 } 56 57 // "If offset is greater than node's length, throw an 58 // "IndexSizeError" exception and terminate these steps." 59 if (normalizedOffset > nodeLength(node)) { 60 assert_throws_dom("INDEX_SIZE_ERR", function() { 61 range.isPointInRange(node, offset); 62 }, "Must throw IndexSizeError if offset is greater than length"); 63 return; 64 } 65 66 // "If (node, offset) is before start or after end, return false 67 // and terminate these steps." 68 if (getPosition(node, normalizedOffset, range.startContainer, range.startOffset) === "before" 69 || getPosition(node, normalizedOffset, range.endContainer, range.endOffset) === "after") { 70 assert_false(range.isPointInRange(node, offset), 71 "Must return false if point is before start or after end"); 72 return; 73 } 74 75 // "Return true." 76 assert_true(range.isPointInRange(node, offset), 77 "Must return true if point is not before start, after end, or in different tree"); 78 }, "Point " + i + " " + testPoints[i] + ", range " + j + " " + testRanges[j]); 79 } 80 } 81 82 testDiv.style.display = "none"; 83 </script>