summaryrefslogtreecommitdiffstats
path: root/comm/mailnews/base/test/unit/test_nsMsgMailSession_Alerts.js
diff options
context:
space:
mode:
Diffstat (limited to 'comm/mailnews/base/test/unit/test_nsMsgMailSession_Alerts.js')
-rw-r--r--comm/mailnews/base/test/unit/test_nsMsgMailSession_Alerts.js217
1 files changed, 217 insertions, 0 deletions
diff --git a/comm/mailnews/base/test/unit/test_nsMsgMailSession_Alerts.js b/comm/mailnews/base/test/unit/test_nsMsgMailSession_Alerts.js
new file mode 100644
index 0000000000..61c1cf3fe9
--- /dev/null
+++ b/comm/mailnews/base/test/unit/test_nsMsgMailSession_Alerts.js
@@ -0,0 +1,217 @@
+/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/*
+ * Test suite for nsMsgMailSession functions relating to alerts and their
+ * listeners.
+ */
+
+var { MailServices } = ChromeUtils.import(
+ "resource:///modules/MailServices.jsm"
+);
+
+/* import-globals-from ../../../test/resources/alertTestUtils.js */
+load("../../../resources/alertTestUtils.js");
+
+var gDialogTitle = null;
+var gText = null;
+
+function reset() {
+ gDialogTitle = null;
+ gText = null;
+}
+
+/* exported alert */
+// Used in alertTestUtils.
+function alert(aDialogTitle, aText) {
+ Assert.equal(gDialogTitle, null);
+ Assert.equal(gText, null);
+
+ gDialogTitle = aDialogTitle;
+ gText = aText;
+}
+
+var msgWindow = {
+ get promptDialog() {
+ return alertUtilsPrompts;
+ },
+
+ QueryInterface: ChromeUtils.generateQI(["nsIMsgWindow"]),
+};
+
+var msgUrl = {
+ _msgWindow: null,
+
+ get msgWindow() {
+ return this._msgWindow;
+ },
+
+ QueryInterface: ChromeUtils.generateQI(["nsIMsgMailNewsUrl"]),
+};
+
+function alertListener() {}
+
+alertListener.prototype = {
+ mReturn: false,
+ mMessage: null,
+ mMsgWindow: null,
+
+ reset() {
+ this.mMessage = null;
+ this.mMsgWindow = null;
+ },
+
+ onAlert(aMessage, aMsgWindow) {
+ Assert.equal(this.mMessage, null);
+ Assert.equal(this.mMsgWindow, null);
+
+ this.mMessage = aMessage;
+ this.mMsgWindow = aMsgWindow;
+
+ return this.mReturn;
+ },
+ QueryInferface: ChromeUtils.generateQI([Ci.nsIMsgMailNewsUrl]),
+};
+
+function run_test() {
+ // Test - No listeners, check alert tries to alert the user.
+
+ reset();
+
+ msgUrl._msgWindow = msgWindow;
+
+ MailServices.mailSession.alertUser("test message", msgUrl);
+
+ // The dialog title doesn't get set at the moment.
+ Assert.equal(gDialogTitle, null);
+ Assert.equal(gText, "test message");
+
+ // Test - No listeners and no msgWindow, check no alerts.
+
+ reset();
+
+ msgUrl._msgWindow = null;
+
+ MailServices.mailSession.alertUser("test no message", msgUrl);
+
+ // The dialog title doesn't get set at the moment.
+ Assert.equal(gDialogTitle, null);
+ Assert.equal(gText, null);
+
+ // Test - One listener, returning false (prompt should still happen).
+
+ reset();
+
+ var listener1 = new alertListener();
+ listener1.mReturn = false;
+
+ MailServices.mailSession.addUserFeedbackListener(listener1);
+
+ msgUrl._msgWindow = msgWindow;
+
+ MailServices.mailSession.alertUser("message test", msgUrl);
+
+ Assert.equal(gDialogTitle, null);
+ Assert.equal(gText, "message test");
+
+ Assert.equal(listener1.mMessage, "message test");
+ Assert.notEqual(listener1.mMsgWindow, null);
+
+ // Test - One listener, returning false, no msg window (prompt shouldn't
+ // happen).
+
+ reset();
+ listener1.reset();
+
+ MailServices.mailSession.alertUser("message test no prompt", null);
+
+ Assert.equal(gDialogTitle, null);
+ Assert.equal(gText, null);
+
+ Assert.equal(listener1.mMessage, "message test no prompt");
+ Assert.equal(listener1.mMsgWindow, null);
+
+ // Test - Two listeners, both returning false (prompt should happen).
+
+ reset();
+ listener1.reset();
+
+ var listener2 = new alertListener();
+ listener2.mReturn = false;
+
+ MailServices.mailSession.addUserFeedbackListener(listener2);
+
+ msgUrl._msgWindow = msgWindow;
+
+ MailServices.mailSession.alertUser("two listeners", msgUrl);
+
+ Assert.equal(gDialogTitle, null);
+ Assert.equal(gText, "two listeners");
+
+ Assert.equal(listener1.mMessage, "two listeners");
+ Assert.notEqual(listener1.mMsgWindow, null);
+
+ Assert.equal(listener2.mMessage, "two listeners");
+ Assert.notEqual(listener2.mMsgWindow, null);
+
+ // Test - Two listeners, one returning true (prompt shouldn't happen).
+
+ reset();
+ listener1.reset();
+ listener2.reset();
+
+ listener2.mReturn = true;
+
+ msgUrl._msgWindow = msgWindow;
+
+ MailServices.mailSession.alertUser("no prompt", msgUrl);
+
+ Assert.equal(gDialogTitle, null);
+ Assert.equal(gText, null);
+
+ Assert.equal(listener1.mMessage, "no prompt");
+ Assert.notEqual(listener1.mMsgWindow, null);
+
+ Assert.equal(listener2.mMessage, "no prompt");
+ Assert.notEqual(listener2.mMsgWindow, null);
+
+ // Test - Remove a listener.
+
+ reset();
+ listener1.reset();
+ listener2.reset();
+
+ MailServices.mailSession.removeUserFeedbackListener(listener1);
+
+ msgUrl._msgWindow = msgWindow;
+
+ MailServices.mailSession.alertUser("remove listener", msgUrl);
+
+ Assert.equal(gDialogTitle, null);
+ Assert.equal(gText, null);
+
+ Assert.equal(listener1.mMessage, null);
+ Assert.equal(listener1.mMsgWindow, null);
+
+ Assert.equal(listener2.mMessage, "remove listener");
+ Assert.notEqual(listener2.mMsgWindow, null);
+
+ // Test - Remove the other listener.
+
+ reset();
+ listener1.reset();
+ listener2.reset();
+
+ MailServices.mailSession.removeUserFeedbackListener(listener2);
+
+ msgUrl._msgWindow = msgWindow;
+
+ MailServices.mailSession.alertUser("no listeners", msgUrl);
+
+ Assert.equal(gDialogTitle, null);
+ Assert.equal(gText, "no listeners");
+
+ Assert.equal(listener1.mMessage, null);
+ Assert.equal(listener1.mMsgWindow, null);
+
+ Assert.equal(listener2.mMessage, null);
+ Assert.equal(listener2.mMsgWindow, null);
+}