summaryrefslogtreecommitdiffstats
path: root/layout/style/test/test_property_syntax_errors.html
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-28 14:29:10 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-28 14:29:10 +0000
commit2aa4a82499d4becd2284cdb482213d541b8804dd (patch)
treeb80bf8bf13c3766139fbacc530efd0dd9d54394c /layout/style/test/test_property_syntax_errors.html
parentInitial commit. (diff)
downloadfirefox-2aa4a82499d4becd2284cdb482213d541b8804dd.tar.xz
firefox-2aa4a82499d4becd2284cdb482213d541b8804dd.zip
Adding upstream version 86.0.1.upstream/86.0.1upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'layout/style/test/test_property_syntax_errors.html')
-rw-r--r--layout/style/test/test_property_syntax_errors.html155
1 files changed, 155 insertions, 0 deletions
diff --git a/layout/style/test/test_property_syntax_errors.html b/layout/style/test/test_property_syntax_errors.html
new file mode 100644
index 0000000000..1e3f382036
--- /dev/null
+++ b/layout/style/test/test_property_syntax_errors.html
@@ -0,0 +1,155 @@
+<!DOCTYPE HTML>
+<html>
+<!--
+-->
+<head>
+ <title>Test that we reject syntax errors listed in property_database.js</title>
+ <script 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();
+SimpleTest.requestLongerTimeout(4);
+
+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 quirksFrame = document.getElementById("quirks");
+ var wrappedFrame = SpecialPowers.wrap(quirksFrame);
+ var gQuirksDeclaration = wrappedFrame.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>