| <!DOCTYPE html> |
| <html> |
| <head> |
| <title>Tests getBoundingClientRect for collapsed ranges</title> |
| <script src="../../../resources/testharness.js"></script> |
| <script src="../../../resources/testharnessreport.js"></script> |
| </head> |
| <style> |
| p {visibility: hidden;} |
| </style> |
| <body> |
| <p> |
| Tests that Range::getBoundingClientRect returns top and left |
| coordinates for collapsed ranges as mandated by the spec. |
| </p> |
| <script> |
| function topLeftPosition(rect) |
| { |
| return rect.top + ', ' + rect.left; |
| } |
| |
| function topRightPosition(rect) |
| { |
| return rect.top + ', ' + rect.right; |
| } |
| |
| var textNode = document.getElementsByTagName('p')[0].firstChild; |
| var stringToMeasure = 'Range::getBoundingClientRect'; |
| var startIndex = textNode.textContent.indexOf(stringToMeasure); |
| var endIndex = startIndex + stringToMeasure.length; |
| |
| test(function() { |
| var range = document.createRange(); |
| range.setStart(textNode, startIndex); |
| range.setEnd(textNode, endIndex); |
| |
| assert_equals( |
| topLeftPosition(range.getBoundingClientRect()), |
| topLeftPosition(range.getClientRects()[0]), |
| 'Position of bounding rect should match first rect.'); |
| }, 'Check position for non-collapsed range.'); |
| |
| test(function() { |
| var range = document.createRange(); |
| range.setStart(textNode, startIndex); |
| range.setEnd(textNode, endIndex); |
| |
| var collapsed = document.createRange(); |
| collapsed.setStart(textNode, startIndex); |
| collapsed.setEnd(textNode, endIndex); |
| collapsed.collapse(); |
| |
| assert_equals( |
| topLeftPosition(collapsed.getBoundingClientRect()), |
| topLeftPosition(collapsed.getClientRects()[0]), |
| 'Position of bounding rect should match first rect.'); |
| |
| assert_equals( |
| topLeftPosition(collapsed.getBoundingClientRect()), |
| topRightPosition(range.getBoundingClientRect()), |
| 'Position of collapsed rect should match right edge of ' + |
| 'non-collapsed range.'); |
| }, 'Check position for collapsed range.'); |
| </script> |
| </body> |
| </html> |