<!DOCTYPE HTML>
<html>
    <head>
        <style>
            body {
                margin: 0;
                overflow: hidden;
            }

            #container {
                width: 300px;
                height: 300px;
                position: absolute;
                top: 0;
                left: 0;
                overflow-x: auto;
                overflow-y: hidden;
                scroll-snap-type: x proximity;
                direction: rtl;
            }

            .drawer {
                width: 900px;
                height: 100%;
            }

            .area {
                height: 300px;
                width: 300px;
                float: left;
                scroll-snap-align: start;
            }

            .rtl {
                direction: rtl;
            }
            .ltr {
                direction: ltr;
            }
        </style>
        <script src="../../../resources/js-test.js"></script>
        <script src="../../../resources/ui-helper.js"></script>
        <script>
        window.jsTestIsAsync = true;

        async function runTest()
        {
            try {
                await UIHelper.delayFor(0);

                let targetElement = document.getElementById("container");
                expectTrue(0 == targetElement.scrollLeft, "scroll origin is 0");

                targetElement.scrollBy(-100, 0);
                expectTrue(targetElement.scrollLeft == -100, "can escape first snap position");

                targetElement.scrollBy(10, 0);
                expectTrue(targetElement.scrollLeft == 0, "snapped back to first snap position");

                targetElement.scrollBy(-295, 0);
                expectTrue(targetElement.scrollLeft == -300, "snapped to second snap position");

                targetElement.scrollBy(-10, 0);
                targetElement.scrollBy(-10, 0);

                expectTrue(targetElement.scrollLeft == -320, "can escape second snap position to the left");

                targetElement.scrollBy(1, 0);
                expectTrue(targetElement.scrollLeft == -300, "snapped back to second snap position");

                targetElement.scrollBy(10, 0);
                targetElement.scrollBy(10, 0);
                expectTrue(targetElement.scrollLeft == -280, "can escape second snap position to the right");

                targetElement.scrollBy(-1, 0);
                expectTrue(targetElement.scrollLeft == -300, "snapped back to second snap position");
            } catch (e) {
                console.log(e);
            } finally {
                finishJSTest();
            }
        }

        function run() {
            if (!window.eventSender) {
                write("To manually test, verify that scrolling near one of the boundaries between the colored boxes");
                write("snaps to the edge of the nearest colored box, but scrolling somewhere near the middle of two");
                write("boxes does not cause the scroll offset to snap.");
                return;
            }
            runTest();
        }
        </script>
    </head>
    <body onload=run()>
        <div id="container">
            <div class="drawer">
                <div class="area rtl" style="background-color: red;"></div>
                <div class="area ltr" style="background-color: blue;"></div>
                <div class="area rtl" style="background-color: aqua;"></div>
            </div>
        </div>
        <div id="output"></div>
    </body>
</html>
