fune/remote/shared/test/xpcshell/test_Prompt.js

132 lines
3.3 KiB
JavaScript

/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this file,
* You can obtain one at http://mozilla.org/MPL/2.0/. */
"use strict";
const { modal } = ChromeUtils.importESModule(
"chrome://remote/content/shared/Prompt.sys.mjs"
);
const chromeWindow = {};
const mockModalDialog = {
docShell: {
chromeEventHandler: null,
},
opener: {
ownerGlobal: chromeWindow,
},
Dialog: {
args: {
modalType: Services.prompt.MODAL_TYPE_WINDOW,
},
},
};
const mockContentBrowser = {};
const mockCurBrowser = {
window: chromeWindow,
contentBrowser: mockContentBrowser,
};
const mockDialogObject = new modal.Dialog(
() => mockCurBrowser,
mockModalDialog
);
add_task(function test_addCallback() {
let observer = new modal.DialogObserver(() => mockCurBrowser);
let cb1 = () => true;
let cb2 = () => false;
equal(observer.callbacks.size, 0);
observer.add(cb1);
equal(observer.callbacks.size, 1);
observer.add(cb1);
equal(observer.callbacks.size, 1);
observer.add(cb2);
equal(observer.callbacks.size, 2);
});
add_task(function test_removeCallback() {
let observer = new modal.DialogObserver(() => mockCurBrowser);
let cb1 = () => true;
let cb2 = () => false;
equal(observer.callbacks.size, 0);
observer.add(cb1);
observer.add(cb2);
equal(observer.callbacks.size, 2);
observer.remove(cb1);
equal(observer.callbacks.size, 1);
observer.remove(cb1);
equal(observer.callbacks.size, 1);
observer.remove(cb2);
equal(observer.callbacks.size, 0);
});
add_task(function test_registerDialogClosedEventHandler() {
let observer = new modal.DialogObserver(() => mockCurBrowser);
let mockChromeWindow = {
addEventListener(event, cb) {
equal(
event,
"DOMModalDialogClosed",
"registered event for closing modal"
);
equal(cb, observer, "set itself as handler");
},
};
observer.observe(mockChromeWindow, "domwindowopened");
});
add_task(function test_handleCallbackOpenModalDialog() {
let observer = new modal.DialogObserver(() => mockCurBrowser);
observer.add((action, dialog, contentBrowser) => {
equal(action, modal.ACTION_OPENED, "'opened' action has been passed");
equal(
dialog.curBrowser_,
mockDialogObject.curBrowser_,
"dialog has been passed"
);
equal(contentBrowser, mockContentBrowser, "contentBrowser has been passed");
});
observer.observe(mockModalDialog, "common-dialog-loaded");
});
add_task(function test_handleCallbackCloseModalDialog() {
let observer = new modal.DialogObserver(() => mockCurBrowser);
const detail = {
areLeaving: true,
value: "text",
};
observer.add((action, eventDetail, contentBrowser) => {
equal(action, modal.ACTION_CLOSED, "'closed' action has been passed");
equal(detail, eventDetail, "dialog has been passed");
equal(contentBrowser, mockContentBrowser, "contentBrowser has been passed");
});
observer.handleEvent({
type: "DOMModalDialogClosed",
target: mockContentBrowser,
detail,
});
});
add_task(async function test_dialogClosed() {
let observer = new modal.DialogObserver(() => mockCurBrowser);
const dialogClosed = observer.dialogClosed();
observer.handleEvent({
type: "DOMModalDialogClosed",
target: mockModalDialog,
});
await dialogClosed;
});