summaryrefslogtreecommitdiffstats
path: root/comm/mailnews/imap/test/unit/test_customCommandReturnsFetchResponse.js
diff options
context:
space:
mode:
Diffstat (limited to 'comm/mailnews/imap/test/unit/test_customCommandReturnsFetchResponse.js')
-rw-r--r--comm/mailnews/imap/test/unit/test_customCommandReturnsFetchResponse.js134
1 files changed, 134 insertions, 0 deletions
diff --git a/comm/mailnews/imap/test/unit/test_customCommandReturnsFetchResponse.js b/comm/mailnews/imap/test/unit/test_customCommandReturnsFetchResponse.js
new file mode 100644
index 0000000000..abf45ab3e3
--- /dev/null
+++ b/comm/mailnews/imap/test/unit/test_customCommandReturnsFetchResponse.js
@@ -0,0 +1,134 @@
+/* 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/. */
+
+/*
+ * Test to ensure that imap customCommandResult function works properly
+ * Bug 778246
+ */
+
+var { PromiseTestUtils } = ChromeUtils.import(
+ "resource://testing-common/mailnews/PromiseTestUtils.jsm"
+);
+
+// IMAP pump
+
+// Globals
+
+// Messages to load must have CRLF line endings, that is Windows style
+var gMessageFileName = "bugmail10"; // message file used as the test message
+var gMessage, gExpectedLength;
+
+var gCustomList = ["Custom1", "Custom2", "Custom3"];
+
+var gMsgWindow = Cc["@mozilla.org/messenger/msgwindow;1"].createInstance(
+ Ci.nsIMsgWindow
+);
+
+setupIMAPPump("CUSTOM1");
+
+add_setup(async function () {
+ Services.prefs.setBoolPref(
+ "mail.server.server1.autosync_offline_stores",
+ false
+ );
+ // Load and update a message in the imap fake server.
+
+ gMessage = new ImapMessage(
+ specForFileName(gMessageFileName),
+ IMAPPump.mailbox.uidnext++,
+ []
+ );
+ gMessage.xCustomList = [];
+ IMAPPump.mailbox.addMessage(gMessage);
+ let listener = new PromiseTestUtils.PromiseUrlListener();
+ IMAPPump.inbox.updateFolderWithListener(null, listener);
+ await listener.promise;
+});
+
+add_task(async function testStoreCustomList() {
+ let msgHdr = mailTestUtils.firstMsgHdr(IMAPPump.inbox);
+ gExpectedLength = gCustomList.length;
+ let uri = IMAPPump.inbox.issueCommandOnMsgs(
+ "STORE",
+ msgHdr.messageKey + " X-CUSTOM-LIST (" + gCustomList.join(" ") + ")",
+ gMsgWindow
+ );
+ uri.QueryInterface(Ci.nsIMsgMailNewsUrl);
+ // Listens for response from customCommandResult request for X-CUSTOM-LIST.
+ let storeCustomListSetListener = new PromiseTestUtils.PromiseUrlListener({
+ OnStopRunningUrl(aUrl, aExitCode) {
+ aUrl.QueryInterface(Ci.nsIImapUrl);
+ Assert.equal(
+ aUrl.customCommandResult,
+ "(" + gMessage.xCustomList.join(" ") + ")"
+ );
+ Assert.equal(gMessage.xCustomList.length, gExpectedLength);
+ },
+ });
+ uri.RegisterListener(storeCustomListSetListener);
+ await storeCustomListSetListener.promise;
+});
+
+add_task(async function testStoreMinusCustomList() {
+ let msgHdr = mailTestUtils.firstMsgHdr(IMAPPump.inbox);
+ gExpectedLength--;
+ let uri = IMAPPump.inbox.issueCommandOnMsgs(
+ "STORE",
+ msgHdr.messageKey + " -X-CUSTOM-LIST (" + gCustomList[0] + ")",
+ gMsgWindow
+ );
+ uri.QueryInterface(Ci.nsIMsgMailNewsUrl);
+ // Listens for response from customCommandResult request for X-CUSTOM-LIST.
+ let storeCustomListRemovedListener = new PromiseTestUtils.PromiseUrlListener({
+ OnStopRunningUrl(aUrl, aExitCode) {
+ aUrl.QueryInterface(Ci.nsIImapUrl);
+ Assert.equal(
+ aUrl.customCommandResult,
+ "(" + gMessage.xCustomList.join(" ") + ")"
+ );
+ Assert.equal(gMessage.xCustomList.length, gExpectedLength);
+ },
+ });
+ uri.RegisterListener(storeCustomListRemovedListener);
+ await storeCustomListRemovedListener.promise;
+});
+
+add_task(async function testStorePlusCustomList() {
+ let msgHdr = mailTestUtils.firstMsgHdr(IMAPPump.inbox);
+ gExpectedLength++;
+ let uri = IMAPPump.inbox.issueCommandOnMsgs(
+ "STORE",
+ msgHdr.messageKey + ' +X-CUSTOM-LIST ("Custom4")',
+ gMsgWindow
+ );
+ uri.QueryInterface(Ci.nsIMsgMailNewsUrl);
+ let storeCustomListAddedListener = new PromiseTestUtils.PromiseUrlListener({
+ OnStopRunningUrl(aUrl, aExitCode) {
+ aUrl.QueryInterface(Ci.nsIImapUrl);
+ Assert.equal(
+ aUrl.customCommandResult,
+ "(" + gMessage.xCustomList.join(" ") + ")"
+ );
+ Assert.equal(gMessage.xCustomList.length, gExpectedLength);
+ },
+ });
+ uri.RegisterListener(storeCustomListAddedListener);
+ await storeCustomListAddedListener.promise;
+});
+
+// Cleanup at end
+add_task(function endTest() {
+ teardownIMAPPump();
+});
+
+/*
+ * helper functions
+ */
+
+// given a test file, return the file uri spec
+function specForFileName(aFileName) {
+ let file = do_get_file("../../../data/" + aFileName);
+ let msgfileuri = Services.io.newFileURI(file).QueryInterface(Ci.nsIFileURL);
+ return msgfileuri.spec;
+}