|
1 <!DOCTYPE HTML> |
|
2 <html> |
|
3 <!-- |
|
4 https://bugzilla.mozilla.org/show_bug.cgi?id=557726 |
|
5 --> |
|
6 <head> |
|
7 <title>Test for Bug 557726</title> |
|
8 <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script> |
|
9 <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/> |
|
10 <style id="pseudo-style"> |
|
11 #div1 { |
|
12 color: blue; |
|
13 } |
|
14 |
|
15 #div1:first-letter { |
|
16 font-weight: bold; |
|
17 } |
|
18 |
|
19 #div1:before { |
|
20 content: '"'; |
|
21 } |
|
22 |
|
23 #div1:after { |
|
24 content: '"'; |
|
25 } |
|
26 |
|
27 #div1:after, #div1:before { |
|
28 color: red; |
|
29 } |
|
30 </style> |
|
31 </head> |
|
32 <body> |
|
33 |
|
34 <a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=557726">Mozilla Bug 557726</a> |
|
35 |
|
36 <div id="div1"> |
|
37 text with :before, :after, and :first-letter pseudo-elements |
|
38 </div> |
|
39 |
|
40 <script type="application/javascript"> |
|
41 |
|
42 /** Test for Bug 557726 **/ |
|
43 |
|
44 function getSelectors (rules) { |
|
45 var styleElement = document.getElementById("pseudo-style"); |
|
46 var selectors = []; |
|
47 for (var i = 0; i < rules.Count(); i++) { |
|
48 var rule = rules.GetElementAt(i).QueryInterface(SpecialPowers.Ci.nsIDOMCSSStyleRule); |
|
49 if (SpecialPowers.unwrap(rule.parentStyleSheet.ownerNode) == styleElement) // no user agent rules |
|
50 selectors.push(rule.selectorText); |
|
51 } |
|
52 return selectors; |
|
53 } |
|
54 |
|
55 var domUtils = SpecialPowers.Cc["@mozilla.org/inspector/dom-utils;1"] |
|
56 .getService(SpecialPowers.Ci.inIDOMUtils); |
|
57 |
|
58 var div = document.getElementById("div1"); |
|
59 |
|
60 /* empty or missing pseudo-element argument */ |
|
61 var selectors = getSelectors(domUtils.getCSSStyleRules(div)); |
|
62 is(selectors.length, 1, "psuedo-element argument should be optional"); |
|
63 is(selectors[0], "#div1", "should only have the non-pseudo element rule"); |
|
64 |
|
65 selectors = getSelectors(domUtils.getCSSStyleRules(div, null)); |
|
66 is(selectors.length, 1, "pseudo-element argument can be null"); |
|
67 is(selectors[0], "#div1", "should only have the non pseudo-element rule"); |
|
68 |
|
69 selectors = getSelectors(domUtils.getCSSStyleRules(div, "")); |
|
70 is(selectors.length, 1, "pseudo-element argument can be empty string"); |
|
71 is(selectors[0], "#div1", "should only have the non pseudo-element rule"); |
|
72 |
|
73 |
|
74 /* invalid pseudo-element argument */ |
|
75 var rules = domUtils.getCSSStyleRules(div, "not a valid pseudo element"); |
|
76 is(rules, null, "invalid pseudo-element returns no rules list"); |
|
77 |
|
78 |
|
79 /* valid pseudo-element argument */ |
|
80 selectors = getSelectors(domUtils.getCSSStyleRules(div, ":first-letter")); |
|
81 is(selectors.length, 1, "pseudo-element argument can be used"); |
|
82 is(selectors[0], "#div1:first-letter", "should only have the :first-letter rule"); |
|
83 |
|
84 selectors = getSelectors(domUtils.getCSSStyleRules(div, ":before")); |
|
85 is(selectors.length, 2, ":before pseudo-element has two matching rules"); |
|
86 isnot(selectors.indexOf("#div1:after, #div1:before"), -1, "fetched rule for :before") |
|
87 isnot(selectors.indexOf("#div1:before"), -1, "fetched rule for :before") |
|
88 |
|
89 selectors = getSelectors(domUtils.getCSSStyleRules(div, ":first-line")); |
|
90 is(selectors.length, 0, "valid pseudo-element but no matching rules"); |
|
91 |
|
92 </script> |
|
93 </pre> |
|
94 </body> |
|
95 </html> |