<!DOCTYPE html>
<html>
<head>
<style>
    body {
    }
    nav {
        position: absolute;
        top: 100px;
        width: 400px;
        height: 40px;
        border: 1px solid blue;
    }
    nav > ul {
        float: right;
        list-style: inside;
    }
    nav > ul > li {
        float: left;
    }
    nav > ul > li > a {
        text-decoration: none;
    }
</style>
<script src="../../resources/js-test-pre.js"></script>
</head>
<body>
    <nav>
        <ul>
            <li><a href="#">About Us</a></li>
            <li><a href="#">Contact Us</a></li>
        </ul>
    </nav>
    <script>
        if (window.testRunner)
            testRunner.waitUntilDone();

        var list = document.getElementsByTagName('ul')[0];
        var firstLinkTop = list.firstElementChild.getBoundingClientRect().top;
        var lastLinkTop = list.lastElementChild.getBoundingClientRect().top;

        if (firstLinkTop == lastLinkTop)
            testPassed('Links are on the same line.');
        else
            shouldBe('firstLinkTop', 'lastLinkTop');

        window.onload = function() {
            list.style.marginRight = '-10px';
            list.offsetTop;
            list.style.marginRight = 'auto';

            if (firstLinkTop == list.firstElementChild.getBoundingClientRect().top)
                testPassed('First link didn\'t move after layout.');
            else
                shouldBe('list.firstElementChild.getBoundingClientRect().top', 'firstLinkTop');

            if (lastLinkTop == list.lastElementChild.getBoundingClientRect().top)
                testPassed('Last link didn\'t move after layout.');
            else
                shouldBe('list.lastElementChild.getBoundingClientRect().top', 'lastLinkTop');

            if (window.testRunner)
                testRunner.notifyDone();
        };
    </script>
</body>
</html>