forked from mozilla/gecko-dev
-
Notifications
You must be signed in to change notification settings - Fork 0
/
browser_grids_grid-list-subgrids.js
95 lines (80 loc) · 4 KB
/
browser_grids_grid-list-subgrids.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
/* Any copyright is dedicated to the Public Domain.
http://creativecommons.org/publicdomain/zero/1.0/ */
"use strict";
// Tests that the list of grids show the subgrids in the correct nested list and toggling
// the CSS grid highlighter for a subgrid.
const TEST_URI = URL_ROOT + "doc_subgrid.html";
add_task(async function() {
await addTab(TEST_URI);
const { gridInspector, inspector } = await openLayoutView();
const { document: doc } = gridInspector;
const { highlighters, store } = inspector;
await selectNode("#grid", inspector);
const gridListEl = doc.getElementById("grid-list");
const containerSubgridListEl = gridListEl.children[1];
const mainSubgridListEl = containerSubgridListEl.querySelector("ul");
info("Checking the initial state of the Grid Inspector.");
is(getGridItemElements(gridListEl).length, 1, "One grid container is listed.");
is(getGridItemElements(containerSubgridListEl).length, 2,
"Got the correct number of subgrids in div.container");
is(getGridItemElements(mainSubgridListEl).length, 2,
"Got the correct number of subgrids in main.subgrid");
ok(!highlighters.gridHighlighters.size && !highlighters.parentGridHighlighters.size,
"No CSS grid highlighter is shown.");
info("Toggling ON the CSS grid highlighter for header.");
let onHighlighterShown = highlighters.once("grid-highlighter-shown");
let onCheckboxChange = waitUntilState(store, state => state.grids[1].highlighted);
let checkbox = containerSubgridListEl.children[0].querySelector("input");
checkbox.click();
await onHighlighterShown;
await onCheckboxChange;
info("Checking the CSS grid highlighter and parent grid highlighter are created.");
is(highlighters.gridHighlighters.size, 1, "CSS grid highlighter is shown.");
is(highlighters.parentGridHighlighters.size, 1,
"CSS grid highlighter for parent grid container is shown.");
info("Toggling ON the CSS grid highlighter for main.");
onHighlighterShown = highlighters.once("grid-highlighter-shown");
onCheckboxChange = waitUntilState(store, state =>
state.grids[1].highlighted && state.grids[2].highlighted);
checkbox = containerSubgridListEl.children[1].querySelector("input");
checkbox.click();
await onHighlighterShown;
await onCheckboxChange;
info("Checking the number of CSS grid highlighters present.");
is(highlighters.gridHighlighters.size, 2,
"Got the correct number of CSS grid highlighter shown.");
is(highlighters.parentGridHighlighters.size, 1,
"Only 1 parent grid highlighter should be shown for the same subgrid parent.");
info("Toggling OFF the CSS grid highlighter for main.");
let onHighlighterHidden = highlighters.once("grid-highlighter-hidden");
onCheckboxChange = waitUntilState(store, state =>
state.grids[1].highlighted && !state.grids[2].highlighted);
checkbox.click();
await onHighlighterHidden;
await onCheckboxChange;
info("Checking the number of CSS grid highlighters present.");
is(highlighters.gridHighlighters.size, 1,
"Got the correct number of CSS grid highlighter shown.");
is(highlighters.parentGridHighlighters.size, 1,
"Got the correct number of CSS grid parent highlighter shown.");
info("Toggling OFF the CSS grid highlighter for header.");
onHighlighterHidden = highlighters.once("grid-highlighter-hidden");
onCheckboxChange = waitUntilState(store, state => !state.grids[1].highlighted);
checkbox = containerSubgridListEl.children[0].querySelector("input");
checkbox.click();
await onHighlighterHidden;
await onCheckboxChange;
info("Checking the CSS grid highlighter is not shown.");
ok(!highlighters.gridHighlighters.size && !highlighters.parentGridHighlighters.size,
"No CSS grid highlighter is shown.");
});
/**
* Returns the grid item elements <li> from the grid list element <ul>.
*
* @param {Element} gridListEl
* The grid list element <ul>.
* @return {Array<Element>} containing the grid item elements <li>.
*/
function getGridItemElements(gridListEl) {
return [...gridListEl.children].filter(node => node.nodeName === "li");
}