| <!DOCTYPE html> |
| <link rel="help" href="https://drafts.csswg.org/cssom-view-1/#dom-element-getclientrects"> |
| <link rel="author" title="Koji Ishii" href="mailto:kojii@chromium.org"> |
| <script src="/resources/testharness.js"></script> |
| <script src="/resources/testharnessreport.js"></script> |
| <body> |
| <div> |
| <span>test</span> |
| <span id="vertical-align-sub-as-grand-child" |
| title="sub element in a child inline box should not be included"> |
| <span> |
| <sub class="not-include" style="vertical-align: sub">subscript</sub> |
| </span> |
| </span> |
| <span>test</span> |
| </div> |
| <script> |
| testTargetDoesNotInclude('vertical-align-sub-as-grand-child'); |
| |
| function testTargetDoesNotInclude(target) { |
| target = document.getElementById(target); |
| test(() => { |
| let target_rects = target.getClientRects(); |
| |
| let not_include_rects = []; |
| for (let element of target.querySelectorAll('.not-include')) { |
| for (let rect of element.getClientRects()) |
| not_include_rects.push(rect); |
| } |
| for (let rect of target_rects) { |
| for (let not_include_rect of not_include_rects) { |
| assert_rect_not_equals(rect, not_include_rect); |
| } |
| } |
| }, target.title); |
| } |
| |
| function assert_rect_not_equals(rect1, rect2) { |
| assert_false(rectEquals(rect1, rect2), |
| `${rectToString(rect1)} and ${rectToString(rect2)} are not equal`); |
| } |
| |
| function rectEquals(rect1, rect2) { |
| return rect1.x === rect2.x && rect1.y === rect2.y && |
| rect1.width === rect2.width && rect1.height === rect2.height; |
| } |
| |
| function rectToString(rect) { |
| return `{${rect.x}, ${rect.y} ${rect.width}x${rect.height}}`; |
| } |
| </script> |
| </body> |