Bug 1434883 - Part 1 - Fix tests for the activated page action panel. r=Gijs

The promisePanelEvent function was unreliable because it did not raise an error if the provided panel did not exist, which caused one of the callers to ignore a missing panel silently. All the callers have now been updated based on whether they expect the panel to exist or not.

MozReview-Commit-ID: AGT4rHls4OB

--HG--
extra : rebase_source : f95967444ffbd2bbdc99560104845af31b71e94b
This commit is contained in:
Paolo Amadini 2018-02-04 16:32:20 +00:00
parent 0cb35f87a6
commit 815f92794b
3 changed files with 27 additions and 15 deletions

View File

@ -560,10 +560,10 @@ add_task(async function sendToDevice_inUrlbar() {
Assert.notEqual(urlbarButton, null, "The urlbar button should exist");
Assert.ok(!urlbarButton.disabled,
"The urlbar button should not be disabled");
let panelPromise =
promisePanelShown(BrowserPageActions._activatedActionPanelID);
EventUtils.synthesizeMouseAtCenter(urlbarButton, {});
await panelPromise;
// The panel element for _activatedActionPanelID is created synchronously
// only after the associated button has been clicked.
await promisePanelShown(BrowserPageActions._activatedActionPanelID);
Assert.equal(urlbarButton.getAttribute("open"), "true",
"Button has open attribute");

View File

@ -266,10 +266,14 @@ function promisePanelHidden(panelIDOrNode) {
function promisePanelEvent(panelIDOrNode, eventType) {
return new Promise(resolve => {
let panel = typeof(panelIDOrNode) != "string" ? panelIDOrNode :
document.getElementById(panelIDOrNode);
if (!panel ||
(eventType == "popupshown" && panel.state == "open") ||
let panel = panelIDOrNode;
if (typeof panel == "string") {
panel = document.getElementById(panelIDOrNode);
if (!panel) {
throw new Error(`Panel with ID "${panelIDOrNode}" does not exist.`);
}
}
if ((eventType == "popupshown" && panel.state == "open") ||
(eventType == "popuphidden" && panel.state == "closed")) {
executeSoon(resolve);
return;

View File

@ -431,7 +431,7 @@ add_task(async function withSubview() {
Assert.notEqual(panelViewButtonNodeUrlbar, null, "panelViewButtonNodeUrlbar");
onButtonCommandExpectedButtonID = panelViewButtonIDUrlbar;
EventUtils.synthesizeMouseAtCenter(panelViewButtonNodeUrlbar, {});
await promisePanelHidden(BrowserPageActions._activatedActionPanelID);
assertActivatedPageActionPanelHidden();
Assert.equal(onButtonCommandCallCount, 2,
"onButtonCommandCallCount should be inc'ed");
@ -532,7 +532,7 @@ add_task(async function withIframe() {
Assert.notEqual(aaPanel, null, "activated-action panel");
Assert.equal(aaPanel.anchorNode.id, urlbarButtonID, "aaPanel.anchorNode.id");
EventUtils.synthesizeMouseAtCenter(urlbarButtonNode, {});
await promisePanelHidden(BrowserPageActions._activatedActionPanelID);
assertActivatedPageActionPanelHidden();
// Click the action's urlbar button.
EventUtils.synthesizeMouseAtCenter(urlbarButtonNode, {});
@ -546,7 +546,7 @@ add_task(async function withIframe() {
Assert.notEqual(aaPanel, null, "aaPanel");
Assert.equal(aaPanel.anchorNode.id, urlbarButtonID, "aaPanel.anchorNode.id");
EventUtils.synthesizeMouseAtCenter(urlbarButtonNode, {});
await promisePanelHidden(BrowserPageActions._activatedActionPanelID);
assertActivatedPageActionPanelHidden();
// Hide the action's button in the urlbar.
action.pinnedToUrlbar = false;
@ -567,7 +567,7 @@ add_task(async function withIframe() {
Assert.equal(aaPanel.anchorNode.id, BrowserPageActions.mainButtonNode.id,
"aaPanel.anchorNode.id");
EventUtils.synthesizeMouseAtCenter(BrowserPageActions.mainButtonNode, {});
await promisePanelHidden(BrowserPageActions._activatedActionPanelID);
assertActivatedPageActionPanelHidden();
// Remove the action.
action.remove();
@ -1416,6 +1416,10 @@ add_task(async function contextMenu() {
});
function assertActivatedPageActionPanelHidden() {
Assert.ok(!document.getElementById(BrowserPageActions._activatedActionPanelID));
}
function promisePageActionPanelOpen() {
let dwu = window.QueryInterface(Ci.nsIInterfaceRequestor)
.getInterface(Ci.nsIDOMWindowUtils);
@ -1459,10 +1463,14 @@ function promisePanelHidden(panelIDOrNode) {
function promisePanelEvent(panelIDOrNode, eventType) {
return new Promise(resolve => {
let panel = typeof(panelIDOrNode) != "string" ? panelIDOrNode :
document.getElementById(panelIDOrNode);
if (!panel ||
(eventType == "popupshown" && panel.state == "open") ||
let panel = panelIDOrNode;
if (typeof panel == "string") {
panel = document.getElementById(panelIDOrNode);
if (!panel) {
throw new Error(`Panel with ID "${panelIDOrNode}" does not exist.`);
}
}
if ((eventType == "popupshown" && panel.state == "open") ||
(eventType == "popuphidden" && panel.state == "closed")) {
executeSoon(resolve);
return;