browser_inspector_highlighter-cssshape_05.js (5043B)
1 /* Any copyright is dedicated to the Public Domain. 2 http://creativecommons.org/publicdomain/zero/1.0/ */ 3 4 "use strict"; 5 6 // Test hovering over shape points in the rule-view and shapes highlighter. 7 8 const TEST_URL = URL_ROOT + "doc_inspector_highlighter_cssshapes.html"; 9 const { TYPES } = ChromeUtils.importESModule( 10 "resource://devtools/shared/highlighters.mjs" 11 ); 12 const HIGHLIGHTER_TYPE = TYPES.SHAPES; 13 14 add_task(async function () { 15 const env = await openInspectorForURL(TEST_URL); 16 const helper = await getHighlighterHelperFor(HIGHLIGHTER_TYPE)(env); 17 const { highlighterTestFront, inspector } = env; 18 const view = selectRuleView(inspector); 19 const highlighters = view.highlighters; 20 const config = { 21 inspector, 22 view, 23 highlighters, 24 highlighterTestFront, 25 helper, 26 }; 27 28 await highlightFromRuleView(config); 29 await highlightFromHighlighter(config); 30 }); 31 32 async function setup(config) { 33 const { view, selector, property, inspector } = config; 34 info(`Turn on shapes highlighter for ${selector}`); 35 await selectNode(selector, inspector); 36 await toggleShapesHighlighter(view, selector, property, true); 37 } 38 39 async function teardown(config) { 40 const { view, selector, property } = config; 41 info(`Turn off shapes highlighter for ${selector}`); 42 await toggleShapesHighlighter(view, selector, property, false); 43 } 44 /* 45 * Test that points hovered in the rule view will highlight corresponding points 46 * in the shapes highlighter on the page. 47 */ 48 async function highlightFromRuleView(config) { 49 const { view, highlighters, highlighterTestFront, inspector } = config; 50 const selector = "#polygon"; 51 const property = "clip-path"; 52 53 await setup({ selector, property, ...config }); 54 55 const container = getRuleViewProperty(view, selector, property).valueSpan; 56 const shapesToggle = container.querySelector(".inspector-shapeswatch"); 57 58 const highlighterFront = 59 inspector.inspectorFront.getKnownHighlighter(HIGHLIGHTER_TYPE); 60 61 let markerHidden = await highlighterTestFront.getHighlighterNodeAttribute( 62 "shapes-marker-hover", 63 "hidden", 64 highlighterFront 65 ); 66 ok(markerHidden, "Hover marker on highlighter is not visible"); 67 68 info("Hover over point 0 in rule view"); 69 const pointSpan = container.querySelector( 70 ".inspector-shape-point[data-point='0']" 71 ); 72 let onHighlighterShown = highlighters.once("shapes-highlighter-shown"); 73 EventUtils.synthesizeMouseAtCenter( 74 pointSpan, 75 { type: "mousemove" }, 76 view.styleWindow 77 ); 78 await onHighlighterShown; 79 80 info( 81 "Point in shapes highlighter is marked when same point in rule view is hovered" 82 ); 83 markerHidden = await highlighterTestFront.getHighlighterNodeAttribute( 84 "shapes-marker-hover", 85 "hidden", 86 highlighterFront 87 ); 88 ok(!markerHidden, "Marker on highlighter is visible"); 89 90 info("Move mouse off point"); 91 onHighlighterShown = highlighters.once("shapes-highlighter-shown"); 92 EventUtils.synthesizeMouseAtCenter( 93 shapesToggle, 94 { type: "mousemove" }, 95 view.styleWindow 96 ); 97 await onHighlighterShown; 98 99 markerHidden = await highlighterTestFront.getHighlighterNodeAttribute( 100 "shapes-marker-hover", 101 "hidden", 102 highlighterFront 103 ); 104 ok(markerHidden, "Marker on highlighter is not visible"); 105 106 await teardown({ selector, property, ...config }); 107 } 108 109 /* 110 * Test that points hovered in the shapes highlighter on the page will highlight 111 * corresponding points in the rule view. 112 */ 113 async function highlightFromHighlighter(config) { 114 const { view, highlighters, highlighterTestFront, helper, inspector } = 115 config; 116 const selector = "#polygon"; 117 const property = "clip-path"; 118 119 await setup({ selector, property, ...config }); 120 121 const highlighterFront = 122 inspector.inspectorFront.getKnownHighlighter(HIGHLIGHTER_TYPE); 123 const { mouse } = helper; 124 const container = getRuleViewProperty(view, selector, property).valueSpan; 125 126 info("Hover over first point in highlighter"); 127 let onEventHandled = highlighters.once("highlighter-event-handled"); 128 await mouse.move(0, 0); 129 await onEventHandled; 130 let markerHidden = await highlighterTestFront.getHighlighterNodeAttribute( 131 "shapes-marker-hover", 132 "hidden", 133 highlighterFront 134 ); 135 ok(!markerHidden, "Marker on highlighter is visible"); 136 137 info( 138 "Point in rule view is marked when same point in shapes highlighter is hovered" 139 ); 140 const pointSpan = container.querySelector( 141 ".inspector-shape-point[data-point='0']" 142 ); 143 ok(pointSpan.classList.contains("active"), "Span for point 0 is active"); 144 145 info("Move mouse off point"); 146 onEventHandled = highlighters.once("highlighter-event-handled"); 147 await mouse.move(100, 100); 148 await onEventHandled; 149 markerHidden = await highlighterTestFront.getHighlighterNodeAttribute( 150 "shapes-marker-hover", 151 "hidden", 152 highlighterFront 153 ); 154 ok(markerHidden, "Marker on highlighter is no longer visible"); 155 ok( 156 !pointSpan.classList.contains("active"), 157 "Span for point 0 is no longer active" 158 ); 159 160 await teardown({ selector, property, ...config }); 161 }