browser_rules_layer.js (4042B)
1 /* Any copyright is dedicated to the Public Domain. 2 http://creativecommons.org/publicdomain/zero/1.0/ */ 3 4 "use strict"; 5 6 // Test that the rule-view content is correct when the page defines layers. 7 8 const TEST_URI = ` 9 <style type="text/css"> 10 @import url(${URL_ROOT_COM_SSL}doc_imported_anonymous_layer.css) layer; 11 @import url(${URL_ROOT_COM_SSL}doc_imported_named_layer.css) layer(importedLayer); 12 @import url(${URL_ROOT_COM_SSL}doc_imported_no_layer.css); 13 14 @layer myLayer { 15 h1, [test-hint=named-layer] { 16 background-color: tomato; 17 color: lightgreen; 18 } 19 } 20 21 @layer { 22 h1, [test-hint=anonymous-layer] { 23 color: green; 24 font-variant: small-caps 25 } 26 } 27 28 h1, [test-hint=no-rule-layer] { 29 color: pink; 30 } 31 </style> 32 <h1>Hello @layer!</h1> 33 `; 34 35 add_task(async function () { 36 await addTab( 37 "https://example.com/document-builder.sjs?html=" + 38 encodeURIComponent(TEST_URI) 39 ); 40 const { inspector, view } = await openRuleView(); 41 42 await selectNode("h1", inspector); 43 44 const expectedRules = [ 45 { selector: "element", ancestorRulesData: null }, 46 { selector: `h1, [test-hint="no-rule-layer"]`, ancestorRulesData: null }, 47 { 48 selector: `h1, [test-hint="imported-no-layer--no-rule-layer"]`, 49 ancestorRulesData: null, 50 }, 51 { 52 selector: `h1, [test-hint="anonymous-layer"]`, 53 ancestorRulesData: ["@layer {"], 54 }, 55 { 56 selector: `h1, [test-hint="named-layer"]`, 57 ancestorRulesData: ["@layer myLayer {"], 58 }, 59 { 60 selector: `h1, [test-hint="imported-named-layer--no-rule-layer"]`, 61 ancestorRulesData: ["@layer importedLayer {", " @media screen {"], 62 }, 63 { 64 selector: `h1, [test-hint="imported-named-layer--named-layer"]`, 65 ancestorRulesData: [ 66 "@layer importedLayer {", 67 " @media screen {", 68 " @layer in-imported-stylesheet {", 69 ], 70 }, 71 { 72 selector: `h1, [test-hint="imported-nested-named-layer--named-layer"]`, 73 ancestorRulesData: [ 74 "@layer importedLayer {", 75 " @layer importedNestedLayer {", 76 " @layer in-imported-nested-stylesheet {", 77 ], 78 }, 79 { 80 selector: `h1, [test-hint="imported-anonymous-layer--no-rule-layer"]`, 81 ancestorRulesData: ["@layer {"], 82 }, 83 ]; 84 85 const rulesInView = Array.from(view.element.children); 86 is( 87 rulesInView.length, 88 expectedRules.length, 89 "All expected rules are displayed" 90 ); 91 92 for (let i = 0; i < expectedRules.length; i++) { 93 const expectedRule = expectedRules[i]; 94 info(`Checking rule #${i}: ${expectedRule.selector}`); 95 96 const selector = rulesInView[i].querySelector( 97 ".ruleview-selectors-container" 98 ).innerText; 99 is(selector, expectedRule.selector, `Expected selector for ${selector}`); 100 101 if (expectedRule.ancestorRulesData == null) { 102 is( 103 getRuleViewAncestorRulesDataElementByIndex(view, i), 104 null, 105 `No ancestor rules data displayed for ${selector}` 106 ); 107 } else { 108 is( 109 getRuleViewAncestorRulesDataTextByIndex(view, i), 110 expectedRule.ancestorRulesData.join("\n"), 111 `Expected ancestor rules data displayed for ${selector}` 112 ); 113 } 114 } 115 }); 116 117 add_task(async function editStylesheetLayerRule() { 118 await addTab( 119 "https://example.com/document-builder.sjs?html=" + 120 encodeURIComponent(` 121 <link rel="stylesheet" href="${URL_ROOT_COM_SSL}doc_layer_edit.css"> 122 <h1>Editing @layer stylesheet</h1> 123 `) 124 ); 125 126 const { inspector, view } = await openRuleView(); 127 128 info("Select h1 node"); 129 await selectNode("h1", inspector); 130 131 is( 132 await getComputedStyleProperty("h1", null, "font-size"), 133 "20px", 134 "original font-size value for h1 is 20px" 135 ); 136 137 const prop = getTextProperty(view, 1, { "font-size": "20px" }); 138 139 info("Change font-size"); 140 await setProperty(view, prop, "42px"); 141 142 is( 143 await getComputedStyleProperty("h1", null, "font-size"), 144 "42px", 145 "h1 font-size was properly set" 146 ); 147 });