<!DOCTYPE html>
<meta charset=utf-8>
<title>cssom-view - elementScroll</title>
<script src="../../../../../resources/testharness.js"></script>
<script src="../../../../../resources/testharnessreport.js"></script>
<style>
    #section {
        width: 300px;
        height: 500px;
        /*position: absolute;*/
        top: 16px;
        left: 16px;
        border: inset gray 3px;
        overflow: hidden;
        background: white;
    }

    #scrollable {
        width: 400px;
        height: 700px;
        background: linear-gradient(135deg, red, blue);
    }

</style>

<section id="section">
    <div id="scrollable"></div>
    <div id="unrelated"></div>
</section>

<script>
    setup({explicit_done:true});
    window.onload = function () {
        var section = document.getElementById("section");
        var unrelated = document.getElementById("unrelated");

        test(function () {
            assert_equals(section.scrollTop, 0, "initial scrollTop should be 0");
            assert_equals(section.scrollLeft, 0, "initial scrollLeft should be 0");

            section.scrollTop  = 30;
            section.scrollLeft = 40;

            assert_equals(section.scrollTop, 30, "changed scrollTop should be 40");
            assert_equals(section.scrollLeft, 40, "changed scrollLeft should be 40");
            assert_equals(unrelated.scrollTop, 0, "unrelated element should not scroll");
            assert_equals(unrelated.scrollLeft, 0, "unrelated element should not scroll");
        },  "Element scrollTop/Left getter/setter test");

        test(function () {
            section.scroll(50, 60);

            assert_equals(section.scrollLeft, 50, "changed scrollLeft should be 50");
            assert_equals(section.scrollTop, 60, "changed scrollTop should be 60");
        },  "Element scroll test (two arguments)");

        test(function () {
            section.scroll({left: 55, top: 65});

            assert_equals(section.scrollLeft, 55, "changed scrollLeft should be 55");
            assert_equals(section.scrollTop, 65, "changed scrollTop should be 65");

            section.scroll({left: 85});

            assert_equals(section.scrollLeft, 85, "changed scrollLeft should be 85");
            assert_equals(section.scrollTop, 65, "scrollTop should stay at 65");

            section.scroll({top: 75});

            assert_equals(section.scrollLeft, 85, "scrollLeft should stay at 85");
            assert_equals(section.scrollTop, 75, "changed scrollTop should be 75");

            section.scroll({});

            assert_equals(section.scrollLeft, 85, "scrollLeft should stay at 85");
            assert_equals(section.scrollTop, 75, "scrollTop should stay at 75");

            section.scroll();

            assert_equals(section.scrollLeft, 85, "scrollLeft should stay at 85");
            assert_equals(section.scrollTop, 75, "scrollTop should stay at 75");
        },  "Element scroll test (one argument)");

        test(function () {
            section.scrollTo(80, 70);

            assert_equals(section.scrollLeft, 80, "changed scrollLeft should be 70");
            assert_equals(section.scrollTop, 70, "changed scrollTop should be 80");
        }, "Element scrollTo test (two arguments)");

        test(function () {
            section.scrollTo({left: 75, top: 85});

            assert_equals(section.scrollLeft, 75, "changed scrollLeft should be 75");
            assert_equals(section.scrollTop, 85, "changed scrollTop should be 85");

            section.scrollTo({left: 65});

            assert_equals(section.scrollLeft, 65, "changed scrollLeft should be 65");
            assert_equals(section.scrollTop, 85, "scrollTop should stay at 85");

            section.scrollTo({top: 55});

            assert_equals(section.scrollLeft, 65, "scrollLeft should stay at 65");
            assert_equals(section.scrollTop, 55, "changed scrollTop should be 55");

            section.scrollTo({});

            assert_equals(section.scrollLeft, 65, "scrollLeft should stay at 65");
            assert_equals(section.scrollTop, 55, "scrollTop should stay at 55");

            section.scrollTo();

            assert_equals(section.scrollLeft, 65, "scrollLeft should stay at 55");
            assert_equals(section.scrollTop, 55, "scrollTop should stay at 55");
        },  "Element scrollTo test (one argument)");

        test(function () {
            var left = section.scrollLeft;
            var top = section.scrollTop;

            section.scrollBy(10, 20);

            assert_equals(section.scrollLeft, left + 10, "increment of scrollLeft should be 10")
            assert_equals(section.scrollTop, top + 20, "increment of scrollTop should be 20")
        }, "Element scrollBy test (two arguments)");

        test(function () {
            var left = section.scrollLeft;
            var top = section.scrollTop;

            section.scrollBy({left: 5, top: 15});
            left += 5
            top += 15

            assert_equals(section.scrollLeft, left, "increment of scrollLeft should be 5")
            assert_equals(section.scrollTop, top, "increment of scrollTop should be 15")

            section.scrollBy({left: -15});
            left -= 15

            assert_equals(section.scrollLeft, left, "decrement of scrollLeft should be 15")
            assert_equals(section.scrollTop, top, "scrollTop should not be modified")

            section.scrollBy({top: -5});
            top -= 5;

            assert_equals(section.scrollLeft, left, "scrollLeft should not be modified")
            assert_equals(section.scrollTop, top, "decrement of scrollTop should be 5")

            section.scrollBy({});

            assert_equals(section.scrollLeft, left, "scrollLeft should not be modified")
            assert_equals(section.scrollTop, top, "scrollTop should not be modified")

            section.scrollBy();

            assert_equals(section.scrollLeft, left, "scrollLeft should not be modified")
            assert_equals(section.scrollTop, top, "scrollTop should not be modified")
        }, "Element scrollBy test (one argument)");

        test(function () {
            section.scrollTop  = 1000;
            section.scrollLeft = 1000;

            assert_equals(section.scrollTop, 700 - 500, "changed scrollTop should be 200");
            assert_equals(section.scrollLeft, 400 - 300, "changed scrollLeft should be 100");

        }, "Element scroll maximum test");

        done();
    };
</script>
