1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/layout/inspector/tests/test_bug557726.html Wed Dec 31 06:09:35 2014 +0100 1.3 @@ -0,0 +1,95 @@ 1.4 +<!DOCTYPE HTML> 1.5 +<html> 1.6 +<!-- 1.7 +https://bugzilla.mozilla.org/show_bug.cgi?id=557726 1.8 +--> 1.9 +<head> 1.10 + <title>Test for Bug 557726</title> 1.11 + <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script> 1.12 + <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/> 1.13 + <style id="pseudo-style"> 1.14 + #div1 { 1.15 + color: blue; 1.16 + } 1.17 + 1.18 + #div1:first-letter { 1.19 + font-weight: bold; 1.20 + } 1.21 + 1.22 + #div1:before { 1.23 + content: '"'; 1.24 + } 1.25 + 1.26 + #div1:after { 1.27 + content: '"'; 1.28 + } 1.29 + 1.30 + #div1:after, #div1:before { 1.31 + color: red; 1.32 + } 1.33 + </style> 1.34 +</head> 1.35 +<body> 1.36 + 1.37 +<a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=557726">Mozilla Bug 557726</a> 1.38 + 1.39 +<div id="div1"> 1.40 + text with :before, :after, and :first-letter pseudo-elements 1.41 +</div> 1.42 + 1.43 +<script type="application/javascript"> 1.44 + 1.45 +/** Test for Bug 557726 **/ 1.46 + 1.47 +function getSelectors (rules) { 1.48 + var styleElement = document.getElementById("pseudo-style"); 1.49 + var selectors = []; 1.50 + for (var i = 0; i < rules.Count(); i++) { 1.51 + var rule = rules.GetElementAt(i).QueryInterface(SpecialPowers.Ci.nsIDOMCSSStyleRule); 1.52 + if (SpecialPowers.unwrap(rule.parentStyleSheet.ownerNode) == styleElement) // no user agent rules 1.53 + selectors.push(rule.selectorText); 1.54 + } 1.55 + return selectors; 1.56 +} 1.57 + 1.58 +var domUtils = SpecialPowers.Cc["@mozilla.org/inspector/dom-utils;1"] 1.59 + .getService(SpecialPowers.Ci.inIDOMUtils); 1.60 + 1.61 +var div = document.getElementById("div1"); 1.62 + 1.63 +/* empty or missing pseudo-element argument */ 1.64 +var selectors = getSelectors(domUtils.getCSSStyleRules(div)); 1.65 +is(selectors.length, 1, "psuedo-element argument should be optional"); 1.66 +is(selectors[0], "#div1", "should only have the non-pseudo element rule"); 1.67 + 1.68 +selectors = getSelectors(domUtils.getCSSStyleRules(div, null)); 1.69 +is(selectors.length, 1, "pseudo-element argument can be null"); 1.70 +is(selectors[0], "#div1", "should only have the non pseudo-element rule"); 1.71 + 1.72 +selectors = getSelectors(domUtils.getCSSStyleRules(div, "")); 1.73 +is(selectors.length, 1, "pseudo-element argument can be empty string"); 1.74 +is(selectors[0], "#div1", "should only have the non pseudo-element rule"); 1.75 + 1.76 + 1.77 +/* invalid pseudo-element argument */ 1.78 +var rules = domUtils.getCSSStyleRules(div, "not a valid pseudo element"); 1.79 +is(rules, null, "invalid pseudo-element returns no rules list"); 1.80 + 1.81 + 1.82 +/* valid pseudo-element argument */ 1.83 +selectors = getSelectors(domUtils.getCSSStyleRules(div, ":first-letter")); 1.84 +is(selectors.length, 1, "pseudo-element argument can be used"); 1.85 +is(selectors[0], "#div1:first-letter", "should only have the :first-letter rule"); 1.86 + 1.87 +selectors = getSelectors(domUtils.getCSSStyleRules(div, ":before")); 1.88 +is(selectors.length, 2, ":before pseudo-element has two matching rules"); 1.89 +isnot(selectors.indexOf("#div1:after, #div1:before"), -1, "fetched rule for :before") 1.90 +isnot(selectors.indexOf("#div1:before"), -1, "fetched rule for :before") 1.91 + 1.92 +selectors = getSelectors(domUtils.getCSSStyleRules(div, ":first-line")); 1.93 +is(selectors.length, 0, "valid pseudo-element but no matching rules"); 1.94 + 1.95 +</script> 1.96 +</pre> 1.97 +</body> 1.98 +</html>