<!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>