<!doctype html>
<html>
    <head>
        <title>Span touch-action test</title>
        <meta name="timeout" content="long">
        <meta name="assert" content="TA15.18 - The touch-action CSS property applies to all elements except non-replaced inline elements.">
        <meta name="viewport" content="width=device-width">
        <link rel="stylesheet" type="text/css" href="pointerevent_styles.css">
        <script src="/resources/testharness.js"></script>
        <script src="/resources/testharnessreport.js"></script>
        <script src="/resources/testdriver.js"></script>
        <script src="/resources/testdriver-actions.js"></script>
        <script src="/resources/testdriver-vendor.js"></script>
        <script src="pointerevent_support.js"></script>
        <style>
            #target0 {
            height: 150px;
            width: 200px;
            overflow-y: auto;
            background: black;
            padding: 100px;
            position: relative;
            }
            #testspan {
            touch-action: none;
            font-size: 72pt;
            padding: 0px 0px 180px 0px;
            border: 2px solid red;
            }
        </style>
    </head>
    <body onload="run()">
        <h2>Pointer Events touch-action attribute support</h2>
        <h4 id="desc">Test Description: Try to scroll element DOWN then RIGHT starting your touch inside of the span element. Tap Complete button under the rectangle when done.</h4>
        <p>Note: this test is for touch only</p>
        <div id="target0">
            <span id="testspan">
                Test span
            </span>
        </div>
        <input type="button" id="btnComplete" value="Complete test">

        <script type='text/javascript'>
            var detected_pointertypes = {};
            add_completion_callback(showPointerTypes);

            function run() {
                var target0 = document.getElementById("target0");
                var btnComplete = document.getElementById("btnComplete");
                var actions_promise;

                //TA 15.18
                var test_touchaction = async_test("touch-action attribute test in element");

                on_event(btnComplete, 'click', function(event) {
                    test_touchaction.step(function() {
                        assert_not_equals(target0.scrollLeft, 0, "span scroll x offset should not be 0 in the end of the test");
                        assert_not_equals(target0.scrollTop, 0, "span scroll y offset should not be 0 in the end of the test");
                    });

                    // Make sure the test finishes after all the input actions are completed.
                    actions_promise.then( () => {
                        test_touchaction.done();
                    });
                    updateDescriptionComplete();
                });

                on_event(btnComplete, 'pointerdown', function(event) {
                    detected_pointertypes[event.pointerType] = true;
                });

                // Inject touch inputs.
                actions_promise = touchScrollInTarget(testspan, 'down').then(function() {
                    return touchScrollInTarget(testspan, 'right');
                }).then(function() {
                    return clickInTarget("touch", btnComplete);
                });
            }
        </script>
        <h1>touch-action: none</h1>
        <div id="complete-notice">
            <p>The following pointer types were detected: <span id="pointertype-log"></span>.</p>
        </div>
        <div id="log"></div>
    </body>
</html>