<!doctype html>
<html>
<head>
<script src="../../http/tests/inspector/resources/inspector-test.js"></script>
<script>
function test()
{
    let suite = InspectorTest.createAsyncSuite("Runtime.evaluate.emulateUserGesture");

    suite.addTestCase({
        name: "EvaluateWithoutEmulatingUserGesture",
        description: "Evalute with the emulateUserGesture option set to false.",
        async test() {
            RuntimeAgent.evaluate.invoke({expression: `document.getElementById("foo").click()`, objectGroup: "test", emulateUserGesture: false}, (error) => {
                InspectorTest.assert(!error, "Should not be a protocol error.");
            });
        }
    });

    suite.addTestCase({
        name: "EvaluateWithEmulatingUserGesture",
        description: "Evalute with the emulateUserGesture option set to true.",
        async test() {
            RuntimeAgent.evaluate.invoke({expression: `document.getElementById("foo").click()`, objectGroup: "test", emulateUserGesture: true}, (error) => {
                InspectorTest.assert(!error, "Should not be a protocol error.");
            });
        }
    });

    suite.runTestCasesAndFinish();
}

function handleClick(event) {
    if (window.internals)
        TestPage.addResult(window.internals.isProcessingUserGesture() ? "In User Gesture" : "Not in User Gesture");
}

window.addEventListener("load", function () {
    document.getElementById("foo").addEventListener("click", handleClick);
    runTest();
}, false);
</script>
</head>
<body>
<a id="foo"></a>
<p>Tests for Runtime emulateUserGesture option.</p>
</body>
</html>
