<!doctype html>
<html>
    <head>
<!-- This is a fork of the main to support new additions to touch-action.
     It should be integrated into web-platform-test when they are accepted into the
     specification. -->
        <title>touch-action: basic verification</title>
        <meta name="assert" content="TA15.20 - The touch-action CSS property determines whether touch input MAY trigger default behavior supplied by the user agent.
        auto: The user agent MAY determine any permitted touch behaviors, such as panning and zooming manipulations of the viewport, for touches that begin on the element.
        none: Touches that begin on the element MUST NOT trigger default touch behaviors.
        pan-x: The user agent MAY consider touches that begin on the element only for the purposes of horizontally scrolling the element's nearest ancestor with horizontally scrollable content.
        pan-y: The user agent MAY consider touches that begin on the element only for the purposes of vertically scrolling the element's nearest ancestor with vertically scrollable content.
        manipulation: The user agent MAY consider touches that begin on the element only for the purposes of scrolling and continuous zooming. Any additional behaviors supported by auto are out of scope for this specification.">
        <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>
        <style>
          /*
          Give some rules below something to override in order to test
          that they really are being parsed
          */
          .defnone {
          touch-action: none;
          }
        </style>
    </head>
    <body onload="run()">
        <h2>Pointer Events touch-action attribute support</h2>
        <h4 id="desc">Test Description: Test will automatically check parsing behaviour of various touch-action combinations.</h4>
        <script type='text/javascript'>
            var detected_pointertypes = {};

            setup({ explicit_done: true });

            function run() {
                var tests = document.querySelectorAll('.test');
                //TA 15.20
                for (var i = 0; i < tests.length; i++) {
                    test(function() {
                      var style = window.getComputedStyle(tests[i]);
                      assert_equals(tests[i].attributes.expected.value, style.touchAction);
                    }, tests[i].id);
                }
                done();
            }
        </script>
        <h1>touch-action: basic verification</h1>
        <div id="complete-notice">
            <p>The following pointer types were detected: <span id="pointertype-log"></span>.</p>
        </div>
        <div id="log"></div>
        <div class="test" id="default" expected="auto"></div>
        <div class="test defnone" id="stylesheet-none" expected="none"></div>
        <div class="test defnone" id="explicit-auto" style="touch-action: auto;" expected="auto"></div>
        <div class="test" id="explicit-pan-x" style="touch-action: pan-x;" expected="pan-x"></div>
        <div class="test" id="explicit-pan-left" style="touch-action: pan-left;" expected="pan-left"></div>
        <div class="test" id="explicit-pan-right" style="touch-action: pan-right;" expected="pan-right"></div>
        <div class="test" id="explicit-pan-y" style="touch-action: pan-y;" expected="pan-y"></div>
        <div class="test" id="explicit-pan-up" style="touch-action: pan-up;" expected="pan-up"></div>
        <div class="test" id="explicit-pan-down" style="touch-action: pan-down;" expected="pan-down"></div>
        <div class="test" id="explicit-pinch-zoom" style="touch-action: pinch-zoom;" expected="pinch-zoom"></div>
        <div class="test" id="explicit-pan-x-pan-y" style="touch-action: pan-x pan-y;" expected="pan-x pan-y"></div>
        <div class="test" id="explicit-pan-y-pan-x" style="touch-action: pan-y pan-x;" expected="pan-x pan-y"></div>
        <div class="test" id="explicit-pan-left-pan-up" style="touch-action: pan-left pan-up;" expected="pan-left pan-up"></div>
        <div class="test" id="explicit-pan-left-pan-down" style="touch-action: pan-left pan-down;" expected="pan-left pan-down"></div>
        <div class="test" id="explicit-pan-right-pan-up" style="touch-action: pan-right pan-up;" expected="pan-right pan-up"></div>
        <div class="test" id="explicit-pan-right-pan-down" style="touch-action: pan-right pan-down;" expected="pan-right pan-down"></div>
        <div class="test" id="explicit-pan-up-pan-left" style="touch-action: pan-up pan-left;" expected="pan-left pan-up"></div>
        <div class="test" id="explicit-pan-up-pan-right" style="touch-action: pan-up pan-right;" expected="pan-right pan-up"></div>
        <div class="test" id="explicit-pan-down-pan-left" style="touch-action: pan-down pan-left;" expected="pan-left pan-down"></div>
        <div class="test" id="explicit-pan-down-pan-right" style="touch-action: pan-down pan-right;" expected="pan-right pan-down"></div>
        <div class="test" id="explicit-pinch-zoom-pan-x-pan-up" style="touch-action: pinch-zoom pan-x pan-up;" expected="pan-x pan-up pinch-zoom"></div>
        <div class="test" id="explicit-pinch-zoom-pan-x-pan-y" style="touch-action: pinch-zoom pan-x pan-y;" expected="manipulation"></div>
        <div class="test" id="explicit-manipulation" style="touch-action: manipulation;" expected="manipulation"></div>
        <div class="test" id="explicit-none" style="touch-action: none;" expected="none"></div>
        <div class="test" id="explicit-invalid-1" style="touch-action: bogus;" expected="auto"></div>
        <div class="test defnone" id="explicit-invalid-2" style="touch-action: auto pan-x;" expected="none"></div>
        <div class="test" id="explicit-invalid-3" style="touch-action: pan-y none;" expected="auto"></div>
        <div class="test" id="explicit-invalid-4" style="touch-action: pan-x pan-x;" expected="auto"></div>
        <div class="test" id="explicit-invalid-5" style="touch-action: manipulation pan-x;" expected="auto"></div>
        <div class="test" id="explicit-invalid-6" style="touch-action: pan-x pan-left;" expected="auto"></div>
        <div class="test" id="explicit-invalid-7" style="touch-action: auto pan-left;" expected="auto"></div>
        <div class="test" id="explicit-invalid-8" style="touch-action: none pan-left;" expected="auto"></div>
        <div class="test" id="explicit-invalid-9" style="touch-action: pan-x pan-right;" expected="auto"></div>
        <div class="test" id="explicit-invalid-10" style="touch-action: pan-y pan-up;" expected="auto"></div>
        <div class="test" id="explicit-invalid-11" style="touch-action: pan-y pan-down;" expected="auto"></div>
        <div class="test" id="explicit-invalid-12" style="touch-action: pan-left pan-right;" expected="auto"></div>
        <div class="test" id="explicit-invalid-13" style="touch-action: pan-up pan-down;" expected="auto"></div>
        <div class="test" id="explicit-invalid-14" style="touch-action: pinch-zoom none;" expected="auto"></div>
        <div style="touch-action: none;">
          <div class="test" id="not-inherited" expected="auto"></div>
          <div class="test" id="inherit" style="touch-action: inherit;" expected="none"></div>
        </div>
        <div class="test defnone" id="initial" style="touch-action: initial;" expected="auto"></div>
    </body>
</html>
