<!DOCTYPE html>
<html>
<head>
<script src="../../resources/js-test-pre.js"></script>
<script src="resources/common.js"></script>
</head>
<body>
<input id="search" type="search" onsearch="searchEventDispatched()" />
<p id="description">

</p>

<script>
var searchEventObserved;

description("This tests if the value in a search input form is cleared and a 'search' event is triggered, when we press the Escape key. " +
            "To run (a part of) this test manually, type some text in the search form and then press the Escape key. " +
            "If the text is cleared, then the test passes.");

if (window.testRunner && window.eventSender) {
    var input = $("search");
    var enabled = false;
    var disabled = true;
    var readonly = true;

    searchEventObserved = false;
    input.focus();
    setInputAttributes(input, "foo", enabled);
    eventSender.keyDown("\x1B");
    shouldBeEqualToString('input.value', "");
    shouldBe('searchEventObserved', 'true');
    input.blur();

    searchEventObserved = false;
    input.focus();
    setInputAttributes(input, "", enabled);
    eventSender.keyDown("\x1B");
    shouldBeEqualToString('input.value', "");
    shouldBe('searchEventObserved', 'true');
    input.blur();

    searchEventObserved = false;
    input.focus();
    setInputAttributes(input, "foo", enabled, readonly);
    eventSender.keyDown("\x1B");
    shouldBeEqualToString('input.value', "foo");
    shouldBe('searchEventObserved', 'false');
    input.blur();

    searchEventObserved = false;
    input.focus();
    setInputAttributes(input, "foo", disabled);
    eventSender.keyDown("\x1B");
    shouldBeEqualToString('input.value', "foo");
    shouldBe('searchEventObserved', 'false');
    input.blur();

    searchEventObserved = false;
    input.focus();
    setInputAttributes(input, "foo", disabled, readonly);
    eventSender.keyDown("\x1B");
    shouldBeEqualToString('input.value', "foo");
    shouldBe('searchEventObserved', 'false');
    input.blur();
}

function setInputAttributes(input, text, disabled, readonly) {
    input.value = text;
    input.disabled = disabled;
    input.readOnly = !!readonly;
}

function searchEventDispatched() {
    searchEventObserved = true;
}
</script>
<script src="../../resources/js-test-post.js"></script>
</body>
</html>
