chromium/third_party/blink/web_tests/fast/dom/Range/range-spanning-elements-bounding-client-rect.html

<!DOCTYPE html>
<html>
    <head>
        <title>Tests getBoundingClientRect for ranges spanning multiple elements</title>
        <script src="../../../resources/testharness.js"></script>
        <script src="../../../resources/testharnessreport.js"></script>
    </head>
    <style>
        p { visibility: hidden; }
        p > span { text-decoration: underline; }
    </style>
    <body>
        <p id="test">Test that getBoundingClientRect <span>returns the correct
            results for ranges spanning multiple</span> elements.</p>
        <p id="reference">Test that getBoundingClientRect <span>returns</span>
            the correct results for ranges spanning multiple elements.</p>
        <script>
            test(function() {
                var element = document.getElementById('test');
                var span = element.getElementsByTagName('span')[0];
                var range = document.createRange();
                range.setStart(element.firstChild, 10);
                range.setEnd(element.firstElementChild.firstChild, 7);
                
                element = document.getElementById('reference');
                var reference = document.createRange();
                reference.setStart(element.firstChild, 10);
                reference.setEnd(element.firstElementChild.firstChild, 7);

                assert_equals(
                    Math.round(range.getBoundingClientRect().width),
                    Math.round(reference.getBoundingClientRect().width),
                    'Width of range should match reference range.');
                assert_less_than(
                    Math.round(range.getBoundingClientRect().width),
                    Math.round(span.getBoundingClientRect().width),
                    'Width of range should be less than inner span.');
            }, 'Check reported width of range.');
        </script>
    </body>
</html>