<!DOCTYPE html>
<head>
<script src="../resources/js-test.js"></script>
</head>
<body>

<p id="description"></p>

<div id="container" style="height: 100px; overflow: scroll">
  <button id="upper_target">Upper Target</button>
  <div style="border: 1px solid #000; height: 5000px;">5000-pixel box</div>
  <button id="lower_target">Lower Target</button>
</div>

<div id="console"></div>

<script>
description("Tests that scrolling to make an element visible successfully scrolls an arbitrary HTML element that has CSS overflow set to 'scroll'.");

function runTest() {
    window.container = document.getElementById("container");
    var upperTarget = document.getElementById("upper_target");
    var lowerTarget = document.getElementById("lower_target");

    var lowerTargetAccessibleObject;
    var upperTargetAccessibleObject;
    if (window.accessibilityController) {
        lowerTarget.focus();
        lowerTargetAccessibleObject = accessibilityController.focusedElement;
        upperTarget.focus();
        upperTargetAccessibleObject = accessibilityController.focusedElement;
    }

    // Reset the initial scroll position (since calling focus() can scroll the page too).
    container.scrollTop = 0;
    shouldBeZero("container.scrollTop");

    // Scroll to make lower target visible and check.
    if (window.accessibilityController)
        lowerTargetAccessibleObject.scrollToMakeVisible();
    var top = lowerTarget.offsetTop - container.offsetTop;
    window.minYOffset = top + lowerTarget.offsetHeight - container.offsetHeight;
    window.maxYOffset = top;
    shouldBeTrue("container.scrollTop >= minYOffset");
    shouldBeTrue("container.scrollTop <= maxYOffset");

    // Do it again. It shouldn't scroll.
    if (window.accessibilityController)
        lowerTargetAccessibleObject.scrollToMakeVisible();
    var top = lowerTarget.offsetTop - container.offsetTop;
    window.minYOffset = top + lowerTarget.offsetHeight - container.offsetHeight;
    window.maxYOffset = top;
    shouldBeTrue("container.scrollTop >= minYOffset");
    shouldBeTrue("container.scrollTop <= maxYOffset");

    // Scroll to make upper target visible and check.
    if (window.accessibilityController)
        upperTargetAccessibleObject.scrollToMakeVisible();
    top = upperTarget.offsetTop - container.offsetTop;
    window.minYOffset = top + upperTarget.offsetHeight - container.offsetHeight;
    window.maxYOffset = top;
    shouldBe("container.scrollTop >= minYOffset", "true");
    shouldBe("container.scrollTop <= maxYOffset", "true");

    finishJSTest();
}

runTest();

</script>

</body>
</html>
