<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
<html>

<head>
    <script src="../../resources/js-test-pre.js"></script>
    <script>
        var expectedTargetID = "foo";

        function contentEditable()
        {
            return document.querySelector("#foo");
        }

        function plainText()
        {
            return document.querySelector("#bar");
        }

        function beginTest()
        {
            if (!window.eventSender || !window.internals || !window.testRunner)
                return;

            internals.settings.setInputEventsEnabled(true);
            testRunner.dumpAsText();
            contentEditable().focus();
            eventSender.keyDown("a", []);

            expectedTargetID = "bar";
            plainText().focus();
            eventSender.keyDown("b", []);
        }

        function checkInputEvent(event)
        {
            debug("Fired `oninput`!");
            shouldBeDefined("event.__lookupGetter__('inputType')");
            shouldBeDefined("event.__lookupGetter__('data')");
            shouldBeDefined("event.__lookupGetter__('dataTransfer')");
            shouldBeDefined("event.getTargetRanges");
            shouldBe("event.target.id", "expectedTargetID");
            shouldBe("event.bubbles", "true");
            shouldBe("event.cancelable", "false");
            shouldBe("event.composed", "true");
        }

        function checkBeforeInputEvent(event)
        {
            debug("Fired `onbeforeinput`!");
            shouldBeDefined("event.__lookupGetter__('inputType')");
            shouldBeDefined("event.__lookupGetter__('data')");
            shouldBeDefined("event.__lookupGetter__('dataTransfer')");
            shouldBeDefined("event.getTargetRanges");
            shouldBe("event.target.id", "expectedTargetID");
            shouldBe("event.bubbles", "true");
            shouldBe("event.cancelable", "true");
            shouldBe("event.composed", "true");
        }
    </script>
</head>

<body onload=beginTest()>
    <div id="foo" contenteditable oninput=checkInputEvent(event) onbeforeinput=checkBeforeInputEvent(event)></div>
    <input id="bar" oninput=checkInputEvent(event) onbeforeinput=checkBeforeInputEvent(event)></input>
    <script src="../../resources/js-test-post.js"></script>
</body>

</html>
