mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-11-07 12:15:51 +00:00
664bcb2295
Had patch 3 not been present, this would be needed to prevent a test failure with patch 4 (which removes the ExpectEndProperty check from the CSS_PROPERTY_PARSE_VALUE case in CSSParserImpl::ParseProperty(nsCSSProperty) since its callers handle checking for appropriate endings), since the way this function returns success for empty values leads var() functions alone inside font-variant-alternates to be rejected, since CSSParserImpl::ParseProperty(nsCSSProperty) won't try reparsing with variables.
153 lines
5.3 KiB
HTML
153 lines
5.3 KiB
HTML
<!DOCTYPE HTML>
|
|
<html>
|
|
<!--
|
|
-->
|
|
<head>
|
|
<title>Test that we reject syntax errors listed in property_database.js</title>
|
|
<script type="text/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
|
|
<script type="text/javascript" src="property_database.js"></script>
|
|
<link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" />
|
|
</head>
|
|
<body onload="run()">
|
|
<p id="display"></p>
|
|
<iframe id="quirks" src="data:text/html,<div id='testnode'></div>"></iframe>
|
|
<div id="content" style="display: none">
|
|
|
|
<div id="testnode"></div>
|
|
|
|
</div>
|
|
<pre id="test">
|
|
<script class="testbody" type="text/javascript">
|
|
|
|
SimpleTest.waitForExplicitFinish();
|
|
|
|
function check_not_accepted(decl, property, info, badval)
|
|
{
|
|
decl.setProperty(property, badval, "");
|
|
|
|
is(decl.getPropertyValue(property), "",
|
|
"invalid value '" + badval + "' not accepted for '" + property +
|
|
"' property");
|
|
|
|
if ("subproperties" in info) {
|
|
for (var sidx in info.subproperties) {
|
|
var subprop = info.subproperties[sidx];
|
|
is(decl.getPropertyValue(subprop), "",
|
|
"invalid value '" + badval + "' not accepted for '" + property +
|
|
"' property when testing subproperty '" + subprop + "'");
|
|
}
|
|
}
|
|
|
|
decl.removeProperty(property);
|
|
}
|
|
|
|
function check_value_balanced(decl, property, badval)
|
|
{
|
|
var goodProp =
|
|
(property == "background-color") ? "color" : "background-color";
|
|
decl.cssText = goodProp + ": red; " + property + ": " + badval + "; " +
|
|
goodProp + ": green";
|
|
is(decl.getPropertyValue(goodProp), "green",
|
|
"invalid value '" + property + ": " + badval +
|
|
"' is balanced and does not lead to parsing errors afterwards");
|
|
decl.cssText = "";
|
|
}
|
|
|
|
function check_value_unbalanced(decl, property, badval)
|
|
{
|
|
var goodProp =
|
|
(property == "background-color") ? "color" : "background-color";
|
|
decl.cssText = goodProp + ": green; " + property + ": " + badval + "; " +
|
|
goodProp + ": red";
|
|
is(decl.getPropertyValue(goodProp), "green",
|
|
"invalid value '" + property + ": " + badval +
|
|
"' is unbalanced and absorbs what follows it");
|
|
decl.cssText = "";
|
|
}
|
|
|
|
function check_empty_value_rejected(decl, emptyval, property)
|
|
{
|
|
var goodProp =
|
|
(property == "background-color") ? "color" : "background-color";
|
|
decl.cssText = goodProp + ": red; " + property + ":" + emptyval + "; " +
|
|
goodProp + ": green";
|
|
is(decl.length, 1,
|
|
"empty value '" + property + ":" + emptyval +
|
|
"' is not accepted");
|
|
is(decl.getPropertyValue(goodProp), "green",
|
|
"empty value '" + property + ":" + emptyval +
|
|
"' is balanced and does not lead to parsing errors afterwards");
|
|
decl.cssText = "";
|
|
}
|
|
|
|
function run()
|
|
{
|
|
var gDeclaration = document.getElementById("testnode").style;
|
|
var gQuirksDeclaration = document.getElementById("quirks").contentDocument
|
|
.getElementById("testnode").style;
|
|
|
|
for (var property in gCSSProperties) {
|
|
var info = gCSSProperties[property];
|
|
|
|
check_empty_value_rejected(gDeclaration, "", property);
|
|
check_empty_value_rejected(gDeclaration, " ", property);
|
|
|
|
for (var idx in info.invalid_values) {
|
|
check_not_accepted(gDeclaration, property, info,
|
|
info.invalid_values[idx]);
|
|
check_not_accepted(gQuirksDeclaration, property, info,
|
|
info.invalid_values[idx]);
|
|
check_value_balanced(gDeclaration, property,
|
|
info.invalid_values[idx]);
|
|
}
|
|
|
|
if ("quirks_values" in info) {
|
|
for (var quirkval in info.quirks_values) {
|
|
var standardval = info.quirks_values[quirkval];
|
|
check_not_accepted(gDeclaration, property, info, quirkval);
|
|
check_value_balanced(gDeclaration, property, quirkval);
|
|
|
|
gQuirksDeclaration.setProperty(property, quirkval, "");
|
|
gDeclaration.setProperty(property, standardval, "");
|
|
var quirkret = gQuirksDeclaration.getPropertyValue(property);
|
|
var standardret = gDeclaration.getPropertyValue(property);
|
|
isnot(quirkret, "", property + ": " + quirkval +
|
|
" should be accepted in quirks mode");
|
|
is(quirkret, standardret, property + ": " + quirkval + " result");
|
|
|
|
if ("subproperties" in info) {
|
|
for (var sidx in info.subproperties) {
|
|
var subprop = info.subproperties[sidx];
|
|
var quirksub = gQuirksDeclaration.getPropertyValue(subprop);
|
|
var standardsub = gDeclaration.getPropertyValue(subprop);
|
|
isnot(quirksub, "", property + ": " + quirkval +
|
|
" should be accepted in quirks mode" +
|
|
" when testing subproperty " + subprop);
|
|
is(quirksub, standardsub, property + ": " + quirkval + " result" +
|
|
" when testing subproperty " + subprop);
|
|
}
|
|
}
|
|
|
|
gQuirksDeclaration.removeProperty(property);
|
|
gDeclaration.removeProperty(property);
|
|
}
|
|
}
|
|
|
|
for (var idx in info.unbalanced_values) {
|
|
check_not_accepted(gDeclaration, property, info,
|
|
info.invalid_values[idx]);
|
|
check_not_accepted(gQuirksDeclaration, property, info,
|
|
info.invalid_values[idx]);
|
|
check_value_unbalanced(gDeclaration, property,
|
|
info.unbalanced_values[idx]);
|
|
}
|
|
}
|
|
|
|
SimpleTest.finish();
|
|
}
|
|
|
|
</script>
|
|
</pre>
|
|
</body>
|
|
</html>
|