<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN"><!-- webkit-test-runner [ enableKeygenElement=true ] -->
<html>
<head>
<script src="../../resources/js-test-pre.js"></script>
</head>
<body>
<p id="description"></p>
<div id="console"></div>
<script>
description('Various tests for .willValidate property');

var parent = document.createElement('div');
document.body.appendChild(parent);

debug('Existence of .willValidate');
parent.innerHTML = '<form>'
    + '<input name="victim"/>'
    + '<textarea name="victim"></textarea>'
    + '<fieldset name="victim">Test</fieldset>'
    + '<button name="victim">'
    + '<select name="victim"></select>'
    + '<output name="victim"></output>'
    + '<object name="victim"></object>'
    + '<keygen name="victim">'
    + '</form>';
var controls = document.getElementsByName('victim');
    for (var i = 0; i < controls.length; i++)
        shouldBe('typeof controls[i].willValidate', '"boolean"');

debug('');
debug('Form association');
parent.innerHTML = '<input name="test">';
var input = document.getElementsByTagName("input")[0];
shouldBeTrue('input.willValidate');
parent.innerHTML = '<form><input name="test"></form>';
input = document.getElementsByTagName("input")[0];
shouldBeTrue('input.willValidate');

debug('');
debug('Control name');
parent.innerHTML = '<form><input></form>';
input = document.getElementsByTagName("input")[0];
shouldBeTrue('input.willValidate');
parent.innerHTML = '<form><input name="test"></form>';
input = document.getElementsByTagName("input")[0];
shouldBeTrue('input.willValidate');

debug('');
debug('Disabled control');
parent.innerHTML = '<form><input name="test" disabled></form>';
input = document.getElementsByTagName("input")[0];
shouldBeFalse('input.willValidate');

debug('');
debug('Read-only control');
parent.innerHTML = '<form><input name="test" readonly></form>';
input = document.getElementsByTagName("input")[0];
shouldBeFalse('input.willValidate');

debug('');
debug('Input types');
parent.innerHTML = '<form><input name="test"></form>';
input = document.getElementsByTagName("input")[0];
shouldBeTrue('input.willValidate');
shouldBeFalse('input.type = "button"; input.willValidate');
shouldBeTrue('input.type = "submit"; input.willValidate');
shouldBeFalse('input.type = "hidden"; input.willValidate');
shouldBeFalse('input.type = "reset"; input.willValidate');

debug('');
debug('Fieldset element');
parent.innerHTML = '<form><fieldset><p>Fieldset test</p></fieldtset></form>';
shouldBeFalse('document.getElementsByTagName("fieldset")[0].willValidate');

debug('');
debug('Textarea element');
parent.innerHTML = '<form><textarea name="text"></textarea></form>';
shouldBeTrue('document.getElementsByTagName("textarea")[0].willValidate');

debug('');
debug('Output element');
parent.innerHTML = '<form><output></output></form>';
shouldBeFalse('document.getElementsByTagName("output")[0].willValidate');

debug('');
debug('Object element');
parent.innerHTML = '<form><object></object></form>';
shouldBeFalse('document.getElementsByTagName("object")[0].willValidate');

debug('');
debug('Keygen element');
parent.innerHTML = '<form><keygen></form>';
shouldBeFalse('document.getElementsByTagName("keygen")[0].willValidate');
</script>
<script src="../../resources/js-test-post.js"></script>
</body>
</html>
