Source code

Revision control

Copy as Markdown

Other Tools

Test Info:

/* Any copyright is dedicated to the Public Domain.
"use strict";
const { AppMenuNotifications } = ChromeUtils.importESModule(
);
/**
* The update banner should become visible when the badge-only notification is
* shown before opening the menu.
*/
add_task(async function testBannerVisibilityBeforeOpen() {
let newWin = await BrowserTestUtils.openNewBrowserWindow();
AppMenuNotifications.showBadgeOnlyNotification("update-restart");
let menuButton = newWin.document.getElementById("PanelUI-menu-button");
let shown = BrowserTestUtils.waitForEvent(
newWin.PanelUI.mainView,
"ViewShown"
);
menuButton.click();
await shown;
let banner = newWin.document.getElementById("appMenu-update-banner");
let labelPromise = BrowserTestUtils.waitForMutationCondition(
banner,
{ attributes: true, attributeFilter: ["label"] },
() => banner.hasAttribute("label")
);
ok(!banner.hidden, "Update banner should be shown");
await labelPromise;
Assert.notEqual(
banner.getAttribute("label"),
"",
"Update banner should contain text"
);
AppMenuNotifications.removeNotification(/.*/);
await BrowserTestUtils.closeWindow(newWin);
});
/**
* The update banner should become visible when the badge-only notification is
* shown during the menu is opened.
*/
add_task(async function testBannerVisibilityDuringOpen() {
let newWin = await BrowserTestUtils.openNewBrowserWindow();
let menuButton = newWin.document.getElementById("PanelUI-menu-button");
let shown = BrowserTestUtils.waitForEvent(
newWin.PanelUI.mainView,
"ViewShown"
);
menuButton.click();
await shown;
let banner = newWin.document.getElementById("appMenu-update-banner");
ok(
!banner.hasAttribute("label"),
"Update banner shouldn't contain text before notification"
);
let labelPromise = BrowserTestUtils.waitForMutationCondition(
banner,
{ attributes: true, attributeFilter: ["label"] },
() => banner.hasAttribute("label")
);
AppMenuNotifications.showNotification("update-restart");
ok(!banner.hidden, "Update banner should be shown");
await labelPromise;
Assert.notEqual(
banner.getAttribute("label"),
"",
"Update banner should contain text"
);
AppMenuNotifications.removeNotification(/.*/);
await BrowserTestUtils.closeWindow(newWin);
});
/**
* The update banner should become visible when the badge-only notification is
* shown after opening/closing the menu, so that the DOM tree is there but
* the menu is closed.
*/
add_task(async function testBannerVisibilityAfterClose() {
let newWin = await BrowserTestUtils.openNewBrowserWindow();
let menuButton = newWin.document.getElementById("PanelUI-menu-button");
let shown = BrowserTestUtils.waitForEvent(
newWin.PanelUI.mainView,
"ViewShown"
);
menuButton.click();
await shown;
ok(newWin.PanelUI.mainView.hasAttribute("visible"));
let banner = newWin.document.getElementById("appMenu-update-banner");
ok(banner.hidden, "Update banner should be hidden before notification");
ok(
!banner.hasAttribute("label"),
"Update banner shouldn't contain text before notification"
);
let labelPromise = BrowserTestUtils.waitForMutationCondition(
banner,
{ attributes: true, attributeFilter: ["label"] },
() => banner.hasAttribute("label")
);
let hidden = BrowserTestUtils.waitForCondition(() => {
return !newWin.PanelUI.mainView.hasAttribute("visible");
});
menuButton.click();
await hidden;
AppMenuNotifications.showBadgeOnlyNotification("update-restart");
shown = BrowserTestUtils.waitForEvent(newWin.PanelUI.mainView, "ViewShown");
menuButton.click();
await shown;
ok(!banner.hidden, "Update banner should be shown");
await labelPromise;
Assert.notEqual(
banner.getAttribute("label"),
"",
"Update banner should contain text"
);
AppMenuNotifications.removeNotification(/.*/);
await BrowserTestUtils.closeWindow(newWin);
});