browser_jsterm_helper_dollar_dollar_dollar.js (3348B)
1 /* Any copyright is dedicated to the Public Domain. 2 * http://creativecommons.org/publicdomain/zero/1.0/ */ 3 4 "use strict"; 5 6 const TEST_URI = `data:text/html,<!DOCTYPE html> 7 <main> 8 <div id="1" class="x">1</div> 9 <div id="2" class="x"> 10 <template shadowrootmode="open"> 11 2 12 <div id="2-1" class="x">2-1</div> 13 <div id="2-2" class="x">2-2</div> 14 <section> 15 <div id="2-3" class="x">2-3</div> 16 </section> 17 <div id="2-4" class="x"> 18 <template shadowrootmode="open"> 19 2-4 20 <div id="2-4-1" class="x y">2-4-1</div> 21 </template> 22 </div> 23 </template> 24 </div> 25 <div id="3">3</div> 26 <details><summary>spoil</summary>peekaboo</details> 27 </main>`; 28 29 add_task(async function () { 30 const hud = await openNewTabAndConsole(TEST_URI); 31 32 // Place the mouse on the top left corner to avoid triggering an highlighter request 33 // to the server. See Bug 1535082. 34 EventUtils.synthesizeMouse( 35 hud.ui.outputNode, 36 0, 37 0, 38 { type: "mousemove" }, 39 hud.iframeWindow 40 ); 41 42 let message = await executeAndWaitForResultMessage( 43 hud, 44 "$$$('.x')", 45 "Array(7) [ div#1.x, div#2.x, div#2-1.x, div#2-2.x, div#2-3.x, div#2-4.x, div#2-4-1.x.y ]" 46 ); 47 ok(message, "`$$$('.x')` worked"); 48 49 message = await executeAndWaitForResultMessage( 50 hud, 51 "$$$('.y').at(0).id", 52 "2-4-1" 53 ); 54 ok(message, "`$$$` result can be used right away"); 55 56 message = await executeAndWaitForResultMessage( 57 hud, 58 "$$$('main .x')", 59 "Array [ div#1.x, div#2.x ]" 60 ); 61 ok( 62 message, 63 "`$$$` doesn't handle descendant selectors across the shadow dom boundaries" 64 ); 65 66 message = await executeAndWaitForResultMessage( 67 hud, 68 "$$$('header')", 69 "Array []" 70 ); 71 ok(message, "`$$$('header')` returns an empty array"); 72 73 message = await executeAndWaitForErrorMessage( 74 hud, 75 "$$$(':foo')", 76 "':foo' is not a valid selector" 77 ); 78 ok(message, "`$$$(':foo')` returns an error message"); 79 80 message = await executeAndWaitForResultMessage( 81 hud, 82 "$$$('.x', document.getElementById('2'))", 83 "Array(5) [ div#2-1.x, div#2-2.x, div#2-3.x, div#2-4.x, div#2-4-1.x.y ]" 84 ); 85 ok(message, "`$$$('.x', document.getElementById('2'))` worked"); 86 87 message = await executeAndWaitForErrorMessage( 88 hud, 89 "$$$('li', $(':foo'))", 90 "':foo' is not a valid selector" 91 ); 92 ok(message, "`$$$('li', $(':foo'))` returns an error message"); 93 94 message = await executeAndWaitForResultMessage( 95 hud, 96 `$$$('.x', $('[id="2"]'))`, 97 "Array(5) [ div#2-1.x, div#2-2.x, div#2-3.x, div#2-4.x, div#2-4-1.x.y ]" 98 ); 99 ok(message, "`$$$('.x', $('[id=\"2\"]'))` worked"); 100 101 message = await executeAndWaitForResultMessage( 102 hud, 103 `$$$('.x', document.getElementById("2").shadowRoot.querySelector("section"))`, 104 "Array [ div#2-3.x ]" 105 ); 106 ok(message, "works when passed a scope inside the shadow DOM"); 107 108 message = await executeAndWaitForResultMessage( 109 hud, 110 // The <details> element uses a <slot> element to control its layout. It shouldn't 111 // be returned, but shouldn't make the helper throw (See Bug 2002814) 112 `$$$("slot, details, summary")`, 113 "Array [ details, summary ]" 114 ); 115 ok( 116 message, 117 "works when the selector matches native anonymous node (but don't return them)" 118 ); 119 });