66 lines
2.4 KiB
JavaScript
66 lines
2.4 KiB
JavaScript
/* Any copyright is dedicated to the Public Domain.
|
|
http://creativecommons.org/publicdomain/zero/1.0/ */
|
|
|
|
"use strict";
|
|
|
|
/**
|
|
* Check that all customizable buttons have labels and icons.
|
|
*
|
|
* This is primarily designed to ensure we don't end up with items without
|
|
* labels in customize mode. In the past, this has happened due to race
|
|
* conditions, where labels would be correct if and only if the item had
|
|
* already been moved into a toolbar or panel in the main UI before
|
|
* (forcing it to be constructed and any fluent identifiers to be localized
|
|
* and applied).
|
|
* We use a new window to ensure that earlier tests using some of the widgets
|
|
* in the palette do not influence our checks to see that such items get
|
|
* labels, "even" if the first time they're rendered is in customize mode's
|
|
* palette.
|
|
*/
|
|
add_task(async function test_all_buttons_have_labels() {
|
|
let win = await BrowserTestUtils.openNewBrowserWindow();
|
|
registerCleanupFunction(async () => {
|
|
await endCustomizing(win);
|
|
return BrowserTestUtils.closeWindow(win);
|
|
});
|
|
await startCustomizing(win);
|
|
let { palette } = win.gNavToolbox;
|
|
// Wait for things to paint.
|
|
await TestUtils.waitForCondition(() => {
|
|
return !!Array.from(palette.querySelectorAll(".toolbarbutton-icon")).filter(
|
|
n => {
|
|
let rect = n.getBoundingClientRect();
|
|
return rect.height > 0 && rect.width > 0;
|
|
}
|
|
).length;
|
|
}, "Must start rendering icons.");
|
|
|
|
for (let wrapper of palette.children) {
|
|
if (wrapper.hasAttribute("title")) {
|
|
ok(true, wrapper.firstElementChild.id + " has a label.");
|
|
} else {
|
|
info(
|
|
`${wrapper.firstElementChild.id} doesn't seem to have a label, waiting.`
|
|
);
|
|
await BrowserTestUtils.waitForAttribute("title", wrapper);
|
|
ok(
|
|
wrapper.hasAttribute("title"),
|
|
wrapper.firstElementChild.id + " has a label."
|
|
);
|
|
}
|
|
let icons = Array.from(wrapper.querySelectorAll(".toolbarbutton-icon"));
|
|
// If there are icons, at least one must be visible
|
|
// (not everything necessarily has one, e.g. the search bar has no icon)
|
|
if (icons.length) {
|
|
let visibleIcons = icons.filter(n => {
|
|
let rect = n.getBoundingClientRect();
|
|
return rect.height > 0 && rect.width > 0;
|
|
});
|
|
Assert.greater(
|
|
visibleIcons.length,
|
|
0,
|
|
`${wrapper.firstElementChild.id} should have at least one visible icon.`
|
|
);
|
|
}
|
|
}
|
|
});
|