browser_rules_add-rule-pseudo-class.js (1654B)
1 /* Any copyright is dedicated to the Public Domain. 2 http://creativecommons.org/publicdomain/zero/1.0/ */ 3 4 "use strict"; 5 6 // Tests adding a rule with pseudo class locks on. 7 8 const TEST_URI = "<p id='element'>Test element</p>"; 9 10 const EXPECTED_SELECTOR = "#element"; 11 const TEST_DATA = [ 12 [], 13 [":hover"], 14 [":hover", ":active"], 15 [":hover", ":active", ":focus"], 16 [":active"], 17 [":active", ":focus"], 18 [":focus"], 19 [":focus-within"], 20 [":hover", ":focus-within"], 21 [":hover", ":active", ":focus-within"], 22 ]; 23 24 add_task(async function () { 25 await addTab("data:text/html;charset=utf-8," + encodeURIComponent(TEST_URI)); 26 const { inspector, view } = await openRuleView(); 27 await selectNode("#element", inspector); 28 29 for (const data of TEST_DATA) { 30 await runTestData(inspector, view, data); 31 } 32 }); 33 34 async function runTestData(inspector, view, pseudoClasses) { 35 await setPseudoLocks(inspector, view, pseudoClasses); 36 37 const expected = EXPECTED_SELECTOR + pseudoClasses.join(""); 38 await addNewRuleAndDismissEditor(inspector, view, expected, 1); 39 40 await resetPseudoLocks(inspector, view); 41 } 42 43 async function setPseudoLocks(inspector, view, pseudoClasses) { 44 if (!pseudoClasses.length) { 45 return; 46 } 47 48 for (const pseudoClass of pseudoClasses) { 49 const checkbox = getPseudoClassCheckbox(view, pseudoClass); 50 if (checkbox) { 51 checkbox.click(); 52 } 53 await inspector.once("rule-view-refreshed"); 54 } 55 } 56 57 async function resetPseudoLocks(inspector, view) { 58 for (const checkbox of view.pseudoClassCheckboxes) { 59 if (checkbox.checked) { 60 checkbox.click(); 61 await inspector.once("rule-view-refreshed"); 62 } 63 } 64 }