<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
<html>
<head>
<title>required and basic valueMissing 2</title>
<script src="../../resources/js-test-pre.js"></script>
</head>
<body>
<p id="description"></p>
<div id="console"></div>
<div id=parent>
<input id="input" name="victim" value="something" required/>
<textarea id="textarea" name="victim" required>something</textarea>
<select id="select-with-placeholder" name="victim" required>
  <option value="" />
  <option value="X" selected>X</option>
</select>
<select id="select-without-placeholder" name="victim" required>
  <option value="X" selected>X</option>
  <option value="" />
</select>
<select id="select-with-fake-placeholder-size2" name="victim" size="2" required>
  <option value="" />
  <option value="X" selected>X</option>
</select>
<select id="select-without-fake-placeholder-size2" name="victim" size="2" required>
  <option value="X" selected>X</option>
  <option value="" />
</select>
<select id="select-with-fake-placeholder-multiple" name="victim" multiple required>
  <option value="" />
  <option value="X" selected>X</option>
</select>
<select id="select-without-fake-placeholder-multiple" name="victim" multiple required>
  <option value="X" selected>X</option>
  <option value="" />
</select>
<select id="select-with-fake-placeholder-size2-multiple" name="victim" multiple size="2" required>
  <option value="" />
  <option value="X" selected>X</option>
</select>
<select id="select-without-fake-placeholder-size2-multiple" name="victim" multiple size="2" required>
  <option value="X" selected>X</option>
  <option value="" />
</select>
<select id=select-selecting-by-key required>
  <option value="" selected/>
  <option>a</option>
</select>
<select id=select-selecting-by-key-2 required>
  <option value="" selected/>
  <option accesskey="1">a</option>
</select>
</div>
<script language="JavaScript" type="text/javascript">
    function valueMissingFor(id) {
        return document.getElementById(id).validity.valueMissing;
    }

    description("This test checks validity.valueMissing with some values or options with some values selected.");

    shouldBeFalse('valueMissingFor("input")');
    shouldBeFalse('valueMissingFor("textarea")');
    shouldBeFalse('valueMissingFor("select-with-placeholder")');
    shouldBeFalse('valueMissingFor("select-without-placeholder")');
    shouldBeFalse('valueMissingFor("select-with-fake-placeholder-size2")');
    shouldBeFalse('valueMissingFor("select-without-fake-placeholder-size2")');
    shouldBeFalse('valueMissingFor("select-with-fake-placeholder-multiple")');
    shouldBeFalse('valueMissingFor("select-without-fake-placeholder-multiple")');
    shouldBeFalse('valueMissingFor("select-with-fake-placeholder-size2-multiple")');
    shouldBeFalse('valueMissingFor("select-without-fake-placeholder-size2-multiple")');

    // Need to use eventSender instead of initKeyboardEvent() because we can't
    // make an event which returns a correct value for keyCode by initKeyboardEvent().
    if (window.eventSender) {
        debug("Updating valueMissing state by a key input:")
        // Select by type-ahead.
        var select = document.getElementById("select-selecting-by-key");
        shouldBeTrue('valueMissingFor("select-selecting-by-key")');
        select.focus();
        eventSender.keyDown("a");
        shouldBe('select.value', '"a"');
        shouldBeFalse('valueMissingFor("select-selecting-by-key")');

        // Select by accesskey.
        select = document.getElementById("select-selecting-by-key-2");
        shouldBeTrue('valueMissingFor("select-selecting-by-key-2")');
        select.focus();
        var modifiers;
        if (navigator.userAgent.search(/\bMac OS X\b/) != -1)
            modifiers = ['ctrlKey', 'altKey'];
        else
            modifiers = ['altKey'];
        eventSender.keyDown("1", modifiers);
        shouldBe('select.value', '"a"');
        shouldBeFalse('valueMissingFor("select-selecting-by-key-2")');
    } else {
        debug('There are tests using eventSender.');
    }

    document.body.removeChild(document.getElementById('parent'));
</script>
<script src="../../resources/js-test-post.js"></script>
</body>
</html>
