blob: b90b2aba6c3a69b5f4b4fb5b2dea9145004d6098 [file] [log] [blame]
<!DOCTYPE html>
<script src="../../../resources/js-test.js"></script>
<style>
input { background-color: transparent }
#inputValid:valid,
#inputInvalid:invalid,
#formValid:valid,
#formInvalid:invalid,
#maxlengthInvalid:invalid,
#minlengthInvalid:invalid {
background-color: green
}
form + div,
input + div {
color: pink
}
</style>
<input id="inputValid" required></input>
<div>
<div></div>
<div></div>
</div>
<input id="inputInvalid"></input>
<div>
<div></div>
<div></div>
</div>
<form id="formValid">
<input id="inputInFormValid" type="text" required></input>
<input type="text"></input>
<input type="text"></input>
</form>
<div>
<div></div>
<div></div>
</div>
<form id="formInvalid">
<input id="inputInFormInvalid" type="text"></input>
<input type="text"></input>
<input type="text"></input>
</form>
<div>
<div></div>
<div></div>
</div>
<input id="maxlengthInvalid" type="text"></input>
<div>
<div></div>
<div></div>
</div>
<input id="minlengthInvalid" type="text"></input>
<div>
<div></div>
<div></div>
</div>
<script>
description("Use descendant invalidation sets for :valid and :invalid pseudo classes.")
var transparent = "rgba(0, 0, 0, 0)";
var green = "rgb(0, 128, 0)";
shouldBe("getComputedStyle(inputValid, '').backgroundColor", "transparent");
document.body.offsetTop; // Force recalc.
inputValid.removeAttribute("required");
if (window.internals)
shouldBe("internals.updateStyleAndReturnAffectedElementCount()", "1");
shouldBe("getComputedStyle(inputValid, '').backgroundColor", "green");
shouldBe("getComputedStyle(inputInvalid, '').backgroundColor", "transparent");
document.body.offsetTop; // Force recalc.
inputInvalid.setAttribute("required", "");
if (window.internals)
shouldBe("internals.updateStyleAndReturnAffectedElementCount()", "1");
shouldBe("getComputedStyle(inputInvalid, '').backgroundColor", "green");
shouldBe("getComputedStyle(formInvalid, '').backgroundColor", "transparent");
document.body.offsetTop; // Force recalc.
inputInFormValid.removeAttribute("required");
if (window.internals)
shouldBe("internals.updateStyleAndReturnAffectedElementCount()", "2");
shouldBe("getComputedStyle(formValid, '').backgroundColor", "green");
shouldBe("getComputedStyle(formInvalid, '').backgroundColor", "transparent");
document.body.offsetTop; // Force recalc.
inputInFormInvalid.setAttribute("required", "");
if (window.internals)
shouldBe("internals.updateStyleAndReturnAffectedElementCount()", "2");
shouldBe("getComputedStyle(formInvalid, '').backgroundColor", "green");
// Make sure the value is user input, otherwise setting maxlength/minlength
// won't cause a validation.
if (window.eventSender) {
maxlengthInvalid.focus();
eventSender.keyDown("x");
eventSender.keyDown("x");
minlengthInvalid.focus();
eventSender.keyDown("x");
}
shouldBe("getComputedStyle(maxlengthInvalid, '').backgroundColor", "transparent");
document.body.offsetTop; // Force recalc.
maxlengthInvalid.setAttribute("maxlength", "1");
if (window.internals)
shouldBe("internals.updateStyleAndReturnAffectedElementCount()", "1");
shouldBe("getComputedStyle(maxlengthInvalid, '').backgroundColor", "green");
shouldBe("getComputedStyle(minlengthInvalid, '').backgroundColor", "transparent");
document.body.offsetTop; // Force recalc.
minlengthInvalid.setAttribute("minlength", "2");
if (window.internals)
shouldBe("internals.updateStyleAndReturnAffectedElementCount()", "1");
shouldBe("getComputedStyle(minlengthInvalid, '').backgroundColor", "green");
</script>