101 lines
3.9 KiB
HTML
101 lines
3.9 KiB
HTML
<!doctype html>
|
|
<html>
|
|
<head>
|
|
<script src="../../resources/js-test-pre.js"></script>
|
|
<style>
|
|
#test-block * {
|
|
background-color: white;
|
|
color: black;
|
|
}
|
|
#test-block :read-only {
|
|
background-color: red;
|
|
}
|
|
#test-block :read-write {
|
|
color: lime;
|
|
}
|
|
* {
|
|
-webkit-user-modify: read-write;
|
|
-moz-user-modify: read-write;
|
|
user-modify: read-write;
|
|
}
|
|
</style>
|
|
</head>
|
|
<body>
|
|
<div style="display:none;" id="test-block">
|
|
<div id="editing-host-1" contenteditable>
|
|
<div id="editable-block-1">Editable</div>
|
|
<div id="non-editable-block-1" contenteditable=false>
|
|
<div id="non-editable-subblock-1">Not editable</div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Per definition, the rules for editing host and editable elements do not apply do <input> elements. -->
|
|
<div id="editing-host-2" contenteditable=true>
|
|
<input type="text" id="read-write-input" value="read-write input">
|
|
<input type="text" disabled id="read-only-input-1" value="read-only input">
|
|
<input type="text" readonly id="read-only-input-2" value="read-only input">
|
|
</div>
|
|
<input type="text" contenteditable=true disabled id="read-only-input-3" value="read-only input">
|
|
<input type="text" contenteditable=true readonly id="read-only-input-4" value="read-only input">
|
|
|
|
<!-- Same story for <textarea>, it has its own definition of :read-write/:read-only. The rules for editing host and editable elements do not apply must be ignored. -->
|
|
<div id="editing-host-3" contenteditable=true>
|
|
<textarea id="read-write-textarea">Editable text area</textarea>
|
|
<textarea disabled id="read-only-textarea-1">Non editable text area</textarea>
|
|
<textarea readonly id="read-only-textarea-2">Non editable text area</textarea>
|
|
</div>
|
|
<textarea contenteditable=true disabled id="read-only-textarea-3">Non editable text area</textarea>
|
|
<textarea contenteditable=true readonly id="read-only-textarea-4">Non editable text area</textarea>
|
|
</div>
|
|
</body>
|
|
<script>
|
|
description('The CSS Property (-webkit-)user-modify must not have any effect on the resolution of ":read-write" and ":read-only". If a selector were to depend on a CSS property, it would create a style-depends-on-style loop and make a giant mess of querySelector.');
|
|
|
|
var editableElements = [
|
|
"editing-host-1",
|
|
"editable-block-1",
|
|
"editing-host-2",
|
|
"read-write-input",
|
|
"editing-host-3",
|
|
"read-write-textarea",
|
|
];
|
|
|
|
var nonEditableElements = [
|
|
"non-editable-block-1",
|
|
"non-editable-subblock-1",
|
|
"read-only-input-1",
|
|
"read-only-input-2",
|
|
"read-only-input-3",
|
|
"read-only-input-4",
|
|
"read-only-textarea-1",
|
|
"read-only-textarea-2",
|
|
"read-only-textarea-3",
|
|
"read-only-textarea-4"
|
|
];
|
|
|
|
function testQuerySelector(selector, expectedResults)
|
|
{
|
|
shouldBe('document.querySelectorAll("' + selector + '").length', "" + expectedResults.length);
|
|
for (var i = 0; i < expectedResults.length; ++i)
|
|
shouldBeEqualToString('document.querySelectorAll("' + selector + '")[' + i + '].id', expectedResults[i]);
|
|
}
|
|
|
|
function testStyling(expectedReadOnlyElements)
|
|
{
|
|
var allTestCases = document.querySelectorAll('#test-block *');
|
|
for (var i = 0; i < allTestCases.length; ++i) {
|
|
var isReadOnly = expectedReadOnlyElements.indexOf(allTestCases[i].id) >= 0;
|
|
shouldBeEqualToString('getComputedStyle(document.querySelectorAll("#test-block *")[' + i + ']).color', isReadOnly ? 'rgb(0, 0, 0)' : 'rgb(0, 255, 0)')
|
|
shouldBeEqualToString('getComputedStyle(document.querySelectorAll("#test-block *")[' + i + ']).backgroundColor', isReadOnly ? 'rgb(255, 0, 0)' : 'rgb(255, 255, 255)')
|
|
}
|
|
}
|
|
|
|
testStyling(nonEditableElements);
|
|
|
|
testQuerySelector("#test-block :read-write", editableElements);
|
|
testQuerySelector("#test-block :read-only", nonEditableElements);
|
|
|
|
</script>
|
|
<script src="../../resources/js-test-post.js"></script>
|
|
</html>
|