diff options
Diffstat (limited to 'comm/mailnews/base/test/unit/test_nsMsgMailSession_Alerts.js')
-rw-r--r-- | comm/mailnews/base/test/unit/test_nsMsgMailSession_Alerts.js | 217 |
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); +} |