<!DOCTYPE html>
<script src="../../../resources/testharness.js"></script>
<script src="../../../resources/testharnessreport.js"></script>
<style>
body {
    margin: 0;
}

#scroller {
    height: 100px;
    width: 200px;
    overflow-y: scroll;
}

.paddingBefore {
    height: 150px;
}

#sticky {
    height: 50px;
    position: sticky;
    top: 20px;
}

.paddingAfter {
    height: 500px;
}
</style>

<div id="scroller">
  <div class="paddingBefore"></div>
  <div id="writer"></div>
  <div id="sticky"></div>
  <div class="paddingAfter"></div>
</div>

<script>
// These tests currently mimic the behavior of Firefox for the interaction
// between scrollIntoView() and position:sticky, where the offset location of
// the sticky element is used to determine how far to scroll. This means that
// scrollIntoView() may scroll even when the sticky is already 'in view', and
// attempts to scroll so that the offset position of the sticky is at the top
// of the screen.
//
// TODO(smcgruer): Update tests once http://crbug.com/664246 is resolved.

test(function() {
    var scroller = document.getElementById('scroller');
    var sticky = document.getElementById('sticky');
    var writer = document.getElementById('writer');

    // Clean the writer.
    writer.innerHTML = '';

    // With no scroll, the sticky element is outside the scroller viewport.
    scroller.scrollTop = 0;

    // Deliberately dirty layout to make sure that scrollIntoView() still works.
    writer.innerHTML = '<div style="height: 50px;"></div>';

    sticky.scrollIntoView();
    assert_equals(scroller.scrollTop, 200);
}, "scrollIntoView should scroll when sticky is not visible");

test(function() {
    var scroller = document.getElementById('scroller');
    var sticky = document.getElementById('sticky');
    var writer = document.getElementById('writer');

    // Clean the writer.
    writer.innerHTML = '';

    // Scroll so that the sticky element is past the top of the scroller
    // viewport, and is thus sticking.
    scroller.scrollTop = 200;

    // Deliberately dirty layout to make sure that scrollIntoView() still works.
    writer.innerHTML = '<div style="height: 10px;"></div>';

    // See comment above tests for why this shifts by an additional 20 pixels.
    sticky.scrollIntoView();
    assert_equals(scroller.scrollTop, 230);
}, "scrollIntoView should scroll when sticky is already in view");

test(function() {
    var scroller = document.getElementById('scroller');
    var sticky = document.getElementById('sticky');
    var writer = document.getElementById('writer');

    // Clean the writer.
    writer.innerHTML = '';

    // With no scroll, the sticky element is outside the scroller viewport.
    scroller.scrollTop = 0;

    // Deliberately dirty layout to make sure that scrollIntoViewIfNeeded()
    // still works.
    writer.innerHTML = '<div style="height: 70px;"></div>';

    sticky.scrollIntoViewIfNeeded();
    assert_equals(scroller.scrollTop, 195);
}, "scrollIntoViewIfNeeded should scroll when sticky is not visible");

test(function() {
    var scroller = document.getElementById('scroller');
    var sticky = document.getElementById('sticky');
    var writer = document.getElementById('writer');

    // Clean the writer.
    writer.innerHTML = '';

    // Scroll so that the sticky element is at the top of the scroller viewport.
    scroller.scrollTop = 150;

    // Deliberately dirty layout to make sure that scrollIntoViewIfNeeded()
    // still works.
    writer.innerHTML = '<div style="height: 20px;"></div>';

    // The scroll top moves to 170 due to scroll-anchoring, but should then not
    // shift if we call scrollIntoViewIfNeeded.
    assert_equals(scroller.scrollTop, 170);
    sticky.scrollIntoViewIfNeeded();
    assert_equals(scroller.scrollTop, 170);
}, "scrollIntoViewIfNeeded should not scroll when sticky is already in view");
</script>

