imperative-invokers.html (2314B)
1 <!DOCTYPE html> 2 <link rel=author href="mailto:masonf@chromium.org"> 3 <link rel=help href="https://github.com/whatwg/html/pull/9144#issuecomment-2195095228"> 4 <script src="/resources/testharness.js"></script> 5 <script src="/resources/testharnessreport.js"></script> 6 7 <div id=unrelated></div> 8 <div id=popover popover=auto> 9 <div id=contained></div> 10 popover 1 11 </div> 12 <div id=popover2 popover=auto style="top:50px"> 13 popover 2 14 </div> 15 16 <script> 17 function testOneCase(shouldBeIndependent,popover2Opener,msg) { 18 test((t) => { 19 assert_false(popover.matches(':popover-open'),'starting state'); 20 assert_false(popover2.matches(':popover-open'),'starting state'); 21 t.add_cleanup(() => {popover.hidePopover();popover2.hidePopover()}); 22 popover.showPopover(); 23 assert_true(popover.matches(':popover-open')); 24 popover2Opener(); 25 assert_true(popover2.matches(':popover-open'),'opener should open popover2'); 26 if (shouldBeIndependent) { 27 assert_false(popover.matches(':popover-open'),'popovers should not be related'); 28 } else { 29 assert_true(popover.matches(':popover-open'),'popovers should be related to each other'); 30 } 31 },msg); 32 } 33 34 testOneCase(true,() => popover2.showPopover(),'normal opening'); 35 testOneCase(true,() => popover2.showPopover({source: unrelated}),'showPopover(unrelated)'); 36 testOneCase(false,() => popover2.showPopover({source: popover}),'showPopover(popover)'); 37 testOneCase(false,() => popover2.showPopover({source: contained}),'showPopover(contained)'); 38 39 testOneCase(true,() => popover2.togglePopover(true),'togglePopover(true)'); 40 testOneCase(true,() => popover2.togglePopover({force:true}),'togglePopover({force})'); 41 testOneCase(true,() => popover2.togglePopover({source:unrelated}),'togglePopover(unrelated)'); 42 testOneCase(false,() => popover2.togglePopover({source: popover}),'togglePopover(popover)'); 43 testOneCase(false,() => popover2.togglePopover({force:true, source: popover}),'togglePopover({force, popover})'); 44 45 test(() => { 46 assert_false(popover.matches(':popover-open')); 47 assert_throws_js(TypeError,() => popover2.showPopover({source: null}),'showPopover(null)'); 48 assert_throws_js(TypeError,() => popover2.togglePopover({source:null}),'togglePopover(null)'); 49 assert_false(popover.matches(':popover-open')); 50 },'null isn\'t a valid Element'); 51 </script>