mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-11-04 16:15:25 +00:00
110 lines
3.6 KiB
HTML
110 lines
3.6 KiB
HTML
<!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.
|
|
// NOTE: The margin-*-value and margin-*-source properties are not really
|
|
// expected and will need to be removed once bug 241234 is addressed.
|
|
{ rule: _("margin: 2in;"), expected: {
|
|
"margin-top": "2in",
|
|
"margin-right-value": "2in",
|
|
"margin-bottom": "2in",
|
|
"margin-left-value": "2in",
|
|
"margin-left-ltr-source": "physical",
|
|
"margin-left-rtl-source": "physical",
|
|
"margin-right-ltr-source": "physical",
|
|
"margin-right-rtl-source": "physical"
|
|
}},
|
|
{ rule: _("margin-top: 2in;"), expected: {"margin-top": "2in"}},
|
|
{ rule: _("margin-left: 2in;"), expected: {
|
|
"margin-left-value": "2in",
|
|
"margin-left-ltr-source": "physical",
|
|
"margin-left-rtl-source": "physical",
|
|
}},
|
|
{ rule: _("margin-bottom: 2in;"), expected: {"margin-bottom": "2in"}},
|
|
{ rule: _("margin-right: 2in;"), expected: {
|
|
"margin-right-value": "2in",
|
|
"margin-right-ltr-source": "physical",
|
|
"margin-right-rtl-source": "physical",
|
|
}}
|
|
];
|
|
|
|
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>
|