browser_rules_add-rule-button-state.js (2410B)
1 /* Any copyright is dedicated to the Public Domain. 2 http://creativecommons.org/publicdomain/zero/1.0/ */ 3 4 "use strict"; 5 6 const nodeConstants = require("resource://devtools/shared/dom-node-constants.js"); 7 8 // Tests if the `Add rule` button disables itself properly for non-element nodes. 9 10 const TEST_URI = ` 11 <style type="text/css"> 12 #pseudo::before { 13 content: "before"; 14 } 15 </style> 16 <div id="pseudo">${ 17 // put a text node big enough so the text node is not inlined 18 "pseudo ".repeat(50) 19 } 20 </div> 21 <-- my comment --> 22 <div id="testid">Test Node</div> 23 `; 24 25 add_task(async function () { 26 await addTab("data:text/html;charset=utf-8," + encodeURIComponent(TEST_URI)); 27 const { inspector, view } = await openRuleView(); 28 await testDisabledButton(inspector, view); 29 }); 30 31 async function testDisabledButton(inspector, view) { 32 const node = "#testid"; 33 34 info("Selecting a real element"); 35 await selectNode(node, inspector); 36 ok( 37 !view.addRuleButton.disabled, 38 "Add rule button should be enabled for regular element" 39 ); 40 41 info("Clear selection"); 42 await view.selectElement(null); 43 ok( 44 view.addRuleButton.disabled, 45 "Add rule button should be disabled when no element is selected" 46 ); 47 48 info("Selecting a real element"); 49 await selectNode(node, inspector); 50 ok( 51 !view.addRuleButton.disabled, 52 "Add rule button should be enabled again when selecting regular element" 53 ); 54 55 info("Selecting a pseudo element"); 56 const pseudo = await getNodeFront("#pseudo", inspector); 57 const children = await inspector.walker.children(pseudo); 58 const [beforeNodeFront, textNodeFront] = children.nodes; 59 await selectNode(beforeNodeFront, inspector); 60 // sanity check 61 is( 62 inspector.selection.nodeFront.displayName, 63 "::before", 64 "We selected the ::before pseudo element" 65 ); 66 ok( 67 !view.addRuleButton.disabled, 68 "Add rule button should be enabled for pseudo element" 69 ); 70 71 await selectNode(textNodeFront, inspector); 72 // sanity check 73 is( 74 inspector.selection.nodeFront.nodeType, 75 nodeConstants.TEXT_NODE, 76 "We selected the text node" 77 ); 78 ok( 79 view.addRuleButton.disabled, 80 "Add rule button should be disabled for text node" 81 ); 82 83 info("Selecting a real element"); 84 await selectNode(node, inspector); 85 ok( 86 !view.addRuleButton.disabled, 87 "Add rule button should be enabled again when selecting regular element" 88 ); 89 }