summaryrefslogtreecommitdiffstats
path: root/layout/style/test/test_page_parser.html
diff options
context:
space:
mode:
Diffstat (limited to 'layout/style/test/test_page_parser.html')
-rw-r--r--layout/style/test/test_page_parser.html107
1 files changed, 107 insertions, 0 deletions
diff --git a/layout/style/test/test_page_parser.html b/layout/style/test/test_page_parser.html
new file mode 100644
index 000000000..8c94be0bf
--- /dev/null
+++ b/layout/style/test/test_page_parser.html
@@ -0,0 +1,107 @@
+<!DOCTYPE HTML>
+<html>
+<!-- https://bugzilla.mozilla.org/show_bug.cgi?id=115199 -->
+<head>
+ <meta charset="UTF-8">
+ <title>Test of @page parser</title>
+ <script type="text/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
+ <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css">
+</head>
+<body>
+<p>@page parsing (<a
+ target="_blank"
+ href="https://bugzilla.mozilla.org/show_bug.cgi?id=115199"
+>bug 115199</a>)</p>
+<pre id="display"></pre>
+<style type="text/css" id="testbox"></style>
+<script class="testbody" type="text/javascript">
+ function _(b) { return "@page { " + b + " }"; };
+
+ var testset = [
+ // CSS 2.1 only allows margin properties in the page rule.
+
+ // Check a bad property.
+ { rule: "position: absolute;" },
+
+ // Check good properties with invalid units.
+ { rule: _("margin: 2in; margin: 2vw;"), expected: {
+ "margin-top": "2in",
+ "margin-right": "2in",
+ "margin-bottom": "2in",
+ "margin-left": "2in"
+ }},
+ { rule: _("margin-top: 2in; margin-top: 2vw;"), expected: {"margin-top": "2in"}},
+ { rule: _("margin-top: 2in; margin-top: 2vh;"), expected: {"margin-top": "2in"}},
+ { rule: _("margin-top: 2in; margin-top: 2vmax;"), expected: {"margin-top": "2in"}},
+ { rule: _("margin-top: 2in; margin-top: 2vmin;"), expected: {"margin-top": "2in"}},
+
+ // Check good properties.
+ { rule: _("margin: 2in;"), expected: {
+ "margin-top": "2in",
+ "margin-right": "2in",
+ "margin-bottom": "2in",
+ "margin-left": "2in"
+ }},
+ { rule: _("margin-top: 2in;"), expected: {"margin-top": "2in"}},
+ { rule: _("margin-left: 2in;"), expected: {"margin-left": "2in"}},
+ { rule: _("margin-bottom: 2in;"), expected: {"margin-bottom": "2in"}},
+ { rule: _("margin-right: 2in;"), expected: {"margin-right": "2in"}}
+ ];
+
+ var display = document.getElementById("display");
+ var sheet = document.styleSheets[1];
+
+ for (var curTest = 0; curTest < testset.length; curTest++) {
+ try {
+ while(sheet.cssRules.length > 0)
+ sheet.deleteRule(0);
+ sheet.insertRule(testset[curTest].rule, 0);
+ } catch (e) {
+ ok(e.name == "SyntaxError"
+ && e instanceof DOMException
+ && e.code == DOMException.SYNTAX_ERR
+ && !('expected' in testset[curTest]),
+ testset[curTest].rule + " syntax error thrown", e);
+ }
+
+ try {
+ if (testset[curTest].expected) {
+ is(sheet.cssRules.length, 1,
+ testset[curTest].rule + " rule count");
+ is(sheet.cssRules[0].type, CSSRule.PAGE_RULE,
+ testset[curTest].rule + " rule type");
+
+ var expected = testset[curTest].expected;
+ var s = sheet.cssRules[0].style;
+ var n = 0;
+
+ // everything is set that should be
+ for (var name in expected) {
+ is(s.getPropertyValue(name), expected[name],
+ testset[curTest].rule + " (prop " + name + ")");
+ n++;
+ }
+ // nothing else is set
+ is(s.length, n, testset[curTest].rule + "prop count");
+ for (var i = 0; i < s.length; i++) {
+ ok(s[i] in expected, testset[curTest].rule,
+ "Unexpected item #" + i + ": " + s[i]);
+ }
+ } else {
+ if (sheet.cssRules.length == 0) {
+ is(sheet.cssRules.length, 0,
+ testset[curTest].rule + " rule count (0)");
+ } else {
+ is(sheet.cssRules.length, 1,
+ testset[curTest].rule + " rule count (1 non-page)");
+ isnot(sheet.cssRules[0].type, CSSRule.PAGE_RULE,
+ testset[curTest].rule + " rule type (1 non-page)");
+ }
+ }
+ } catch (e) {
+ ok(false, testset[curTest].rule, "During test: " + e);
+ }
+ }
+</script>
+</body>
+</html>