<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
<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++) {
    if (controls[i].localName != 'keygen')
        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>';
shouldBeUndefined('document.getElementsByTagName("keygen")[0].willValidate');
</script>
<script src="../../resources/js-test-post.js"></script>
</body>
</html>
