<!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>

<fieldset name="set" id="fieldset-set"></fieldset>
<button   name="set" id="button-set"></button>
<button   name="set" id="button-button-set" type="button"></button>
<button   name="set" id="button-reset-set" type="reset"></button>
<select   name="set" id="select-set"></select>
<textarea name="set" id="textarea-set"></textarea>
<input    name="set" id="input-set" />
<input    name="set" id="input-submit-set" type="submit" />

<fieldset name="set-and-empty" id="fieldset-set-and-empty"></fieldset>
<button   name="set-and-empty" id="button-set-and-empty"></button>
<button   name="set-and-empty" id="button-button-set-and-empty" type="button"></button>
<button   name="set-and-empty" id="button-reset-set-and-empty" type="reset"></button>
<select   name="set-and-empty" id="select-set-and-empty"></select>
<textarea name="set-and-empty" id="textarea-set-and-empty"></textarea>
<input    name="set-and-empty" id="input-set-and-empty" />
<input    name="set-and-empty" id="input-submit-set-and-empty" type="submit" />

<fieldset name="no-changes" id="fieldset-no-changes"></fieldset>
<button   name="no-changes" id="button-no-changes"></button>
<button   name="no-changes" id="button-button-no-changes" type="button"></button>
<button   name="no-changes" id="button-reset-no-changes" type="reset"></button>
<select   name="no-changes" id="select-no-changes"></select>
<textarea name="no-changes" id="textarea-no-changes"></textarea>
<input    name="no-changes" id="input-no-changes" />
<input    name="no-changes" id="input-submit-no-changes" type="submit" />

<fieldset name="many-changes" id="fieldset-many-changes"></fieldset>
<button   name="many-changes" id="button-many-changes"></button>
<button   name="many-changes" id="button-button-many-changes" type="button"></button>
<button   name="many-changes" id="button-reset-many-changes" type="reset"></button>
<select   name="many-changes" id="select-many-changes"></select>
<textarea name="many-changes" id="textarea-many-changes"></textarea>
<input    name="many-changes" id="input-many-changes" />
<input    name="many-changes" id="input-submit-many-changes" type="submit" />

<script language="JavaScript" type="text/javascript">
function customErrorFor(id) {
    return document.getElementById(id).validity.customError;
}

description("This test checks validity.customError.");

debug('Set some value for customError.');
v = document.getElementsByName("set");
for (i = 0; i < v.length; i++)
    v[i].setCustomValidity("Custom validation message");
shouldBeFalse('customErrorFor("fieldset-set")');
shouldBeTrue('customErrorFor("button-set")');
shouldBeFalse('customErrorFor("button-button-set")');
shouldBeFalse('customErrorFor("button-reset-set")');
shouldBeTrue('customErrorFor("select-set")');
shouldBeTrue('customErrorFor("textarea-set")');
shouldBeTrue('customErrorFor("input-set")');
shouldBeTrue('customErrorFor("input-submit-set")');

debug('');
debug('Set some value for customError, and clear it.');
v = document.getElementsByName("set-and-empty");
for (i = 0; i < v.length; i++)
    v[i].setCustomValidity("Custom validation message");
for (i = 0; i < v.length; i++)
    v[i].setCustomValidity("");
shouldBeFalse('customErrorFor("fieldset-set-and-empty")');
shouldBeFalse('customErrorFor("button-set-and-empty")');
shouldBeFalse('customErrorFor("button-button-set-and-empty")');
shouldBeFalse('customErrorFor("button-reset-set-and-empty")');
shouldBeFalse('customErrorFor("select-set-and-empty")');
shouldBeFalse('customErrorFor("textarea-set-and-empty")');
shouldBeFalse('customErrorFor("input-set-and-empty")');
shouldBeFalse('customErrorFor("input-submit-set-and-empty")');

debug('');
debug('Not any changes for customError.');
shouldBeFalse('customErrorFor("fieldset-no-changes")');
shouldBeFalse('customErrorFor("button-no-changes")');
shouldBeFalse('customErrorFor("button-button-no-changes")');
shouldBeFalse('customErrorFor("button-reset-no-changes")');
shouldBeFalse('customErrorFor("select-no-changes")');
shouldBeFalse('customErrorFor("textarea-no-changes")');
shouldBeFalse('customErrorFor("input-no-changes")');
shouldBeFalse('customErrorFor("input-submit-no-changes")');

debug('');
debug('Many changes for customError:');
debug('Set some value, and set with no arguments.');
v = document.getElementsByName("many-changes");
for (i = 0; i < v.length; i++) {
    v[i].setCustomValidity("Custom string");
    try {
        v[i].setCustomValidity();
        testFailed("setCustomValidity() did not throw");
    } catch(err) {
        testPassed("setCustomValidity() threw " + err.message);
    }
    v[i].setCustomValidity(undefined);
}
shouldBeFalse('customErrorFor("fieldset-many-changes")');
shouldBeTrue('customErrorFor("button-many-changes")');
shouldBeFalse('customErrorFor("button-button-many-changes")');
shouldBeFalse('customErrorFor("button-reset-many-changes")');
shouldBeTrue('customErrorFor("select-many-changes")');
shouldBeTrue('customErrorFor("textarea-many-changes")');
shouldBeTrue('customErrorFor("input-many-changes")');
shouldBeTrue('customErrorFor("input-submit-many-changes")');

debug('Set with three arguments.');
for (i = 0; i < v.length; i++)
    v[i].setCustomValidity("one", "two", "three");
shouldBeFalse('customErrorFor("fieldset-many-changes")');
shouldBeTrue('customErrorFor("button-many-changes")');
shouldBeFalse('customErrorFor("button-button-many-changes")');
shouldBeFalse('customErrorFor("button-reset-many-changes")');
shouldBeTrue('customErrorFor("select-many-changes")');
shouldBeTrue('customErrorFor("textarea-many-changes")');
shouldBeTrue('customErrorFor("input-many-changes")');
shouldBeTrue('customErrorFor("input-submit-many-changes")');

debug('Set null.');
for (i = 0; i < v.length; i++)
    v[i].setCustomValidity(null);
shouldBeFalse('customErrorFor("fieldset-many-changes")');
shouldBeTrue('customErrorFor("button-many-changes")');
shouldBeFalse('customErrorFor("button-button-many-changes")');
shouldBeFalse('customErrorFor("button-reset-many-changes")');
shouldBeTrue('customErrorFor("select-many-changes")');
shouldBeTrue('customErrorFor("textarea-many-changes")');
shouldBeTrue('customErrorFor("input-many-changes")');
shouldBeTrue('customErrorFor("input-submit-many-changes")');

debug('Set some value, and set undefined.');
for (i = 0; i < v.length; i++) {
    v[i].setCustomValidity("Custom string");
    v[i].setCustomValidity(undefined);
}
shouldBeFalse('customErrorFor("fieldset-many-changes")');
shouldBeTrue('customErrorFor("button-many-changes")');
shouldBeFalse('customErrorFor("button-button-many-changes")');
shouldBeFalse('customErrorFor("button-reset-many-changes")');
shouldBeTrue('customErrorFor("select-many-changes")');
shouldBeTrue('customErrorFor("textarea-many-changes")');
shouldBeTrue('customErrorFor("input-many-changes")');
shouldBeTrue('customErrorFor("input-submit-many-changes")');

debug('');
</script>
<script src="../../resources/js-test-post.js"></script>
</body>
</html>
