blob: 4e08a2aa27afbb825fc879da1e4f73fda9df5072 [file] [log] [blame]
<!doctype html>
<html>
<head>
<script src="../../resources/js-test-pre.js"></script>
<style>
input {
background-color: white;
color: black;
}
input:read-only {
background-color: rgb(1, 2, 3);
}
input:read-write {
color: rgb(4, 5, 6);
}
</style>
</head>
<body>
<div style="display:none">
<input id="testcase">
</div>
</body>
<script>
description('Test the basic features of ":read-only", ":read-write" on the &ltinput&gt; element. The definion is that ":read-write" is matches for "input elements to which the readonly attribute applies, and that are mutable (i.e. that do not have the readonly attribute specified and that are not disabled)"');
// List of [input type, supports readonly attribute].
var inputTypes = [
// Input types defined in the HTML Living Standard. http://www.whatwg.org/html/
["hidden", false],
["text", true],
["search", true],
["tel", true],
["url", true],
["email", true],
["password", true],
["datetime", true],
["date", true],
["month", true],
["week", true],
["time", true],
["datetime-local", true],
["number", true],
["range", false],
["color", false],
["checkbox", false],
["radio", false],
["file", false],
["submit", false],
["image", false],
["reset", false],
["button", false],
// Made up ones.
["", true],
["webkit", true],
["foobar", true],
];
function testProperties(isReadOnly) {
shouldBe('document.querySelectorAll("input:read-write").length', isReadOnly ? "0" : "1");
shouldBe('document.querySelector("input:read-write")', isReadOnly ? "null" : "document.getElementById(\"testcase\")");
shouldBe('document.querySelectorAll("input:read-only").length', isReadOnly ? "1" : "0");
shouldBe('document.querySelector("input:read-only")', isReadOnly ? "document.getElementById(\"testcase\")" : "null");
shouldBeEqualToString("getComputedStyle(document.getElementById(\"testcase\")).color", isReadOnly ? "rgb(0, 0, 0)" : "rgb(4, 5, 6)");
shouldBeEqualToString("getComputedStyle(document.getElementById(\"testcase\")).backgroundColor", isReadOnly ? "rgb(1, 2, 3)" : "rgb(255, 255, 255)");
}
function testInputType(inputType, supportsReadonly) {
var testCase = document.getElementById("testcase");
testCase.type = inputType;
// Initial state.
testProperties(!supportsReadonly);
// Setting readonly through API.
testCase.readOnly = true;
testProperties(true);
testCase.readOnly = false;
testProperties(!supportsReadonly);
// Setting readonly through attributes.
testCase.setAttribute("readonly", "");
testProperties(true);
testCase.removeAttribute("readonly");
testProperties(!supportsReadonly);
// Setting disabled through API.
testCase.disabled = true;
testProperties(true);
testCase.disabled = false;
testProperties(!supportsReadonly);
// Setting disabled through attributes.
testCase.setAttribute("disabled", "");
testProperties(true);
testCase.removeAttribute("disabled");
testProperties(!supportsReadonly);
// Setting both.
testCase.readOnly = true;
testCase.disabled = true;
testProperties(true);
// Remove them one by one.
testCase.removeAttribute("disabled");
testProperties(true);
testCase.removeAttribute("readonly");
testProperties(!supportsReadonly);
}
for (var i = 0; i < inputTypes.length; ++i) {
debug("Testing " + inputTypes[i][0]);
testInputType(inputTypes[i][0], inputTypes[i][1]);
}
</script>
<script src="../../resources/js-test-post.js"></script>
</html>