summaryrefslogtreecommitdiffstats
path: root/comm/mailnews/local/test/unit/test_pop3Download.js
diff options
context:
space:
mode:
Diffstat (limited to 'comm/mailnews/local/test/unit/test_pop3Download.js')
-rw-r--r--comm/mailnews/local/test/unit/test_pop3Download.js81
1 files changed, 81 insertions, 0 deletions
diff --git a/comm/mailnews/local/test/unit/test_pop3Download.js b/comm/mailnews/local/test/unit/test_pop3Download.js
new file mode 100644
index 0000000000..0268170f30
--- /dev/null
+++ b/comm/mailnews/local/test/unit/test_pop3Download.js
@@ -0,0 +1,81 @@
+/**
+ * The intent of this file is to test that pop3 download code message storage
+ * works correctly.
+ */
+
+/* import-globals-from ../../../test/resources/POP3pump.js */
+load("../../../resources/POP3pump.js");
+
+var testSubjects = [
+ "[Bug 397009] A filter will let me tag, but not untag",
+ "Hello, did you receive my bugmail?",
+ "[Bug 655578] list-id filter broken",
+];
+
+var gMsgHdrs = [];
+var gHdrIndex = 0;
+var gFiles = [
+ "../../../data/bugmail1",
+ "../../../data/draft1",
+ "../../../data/bugmail19",
+];
+
+// This combination of prefs is required to reproduce bug 713611, which
+// is what this test is about.
+Services.prefs.setBoolPref("mailnews.downloadToTempFile", false);
+Services.prefs.setBoolPref("mail.server.default.leave_on_server", true);
+
+function run_test() {
+ // add 3 messages
+ gPOP3Pump.files = gFiles;
+ gPOP3Pump.onDone = continueTest;
+ do_test_pending();
+ gPOP3Pump.run();
+}
+
+function continueTest() {
+ // get message headers for the inbox folder
+ var msgCount = 0;
+ for (let hdr of localAccountUtils.inboxFolder.msgDatabase.enumerateMessages()) {
+ gMsgHdrs.push(hdr);
+ Assert.equal(hdr.subject, testSubjects[msgCount++]);
+ }
+ Assert.equal(msgCount, 3);
+ gPOP3Pump = null;
+ streamNextMessage();
+}
+
+function streamNextMessage() {
+ let msghdr = gMsgHdrs[gHdrIndex];
+ let msgURI = msghdr.folder.getUriForMsg(msghdr);
+ let msgServ = MailServices.messageServiceFromURI(msgURI);
+ msgServ.streamMessage(msgURI, gStreamListener, null, null, false, "", true);
+}
+
+var gStreamListener = {
+ QueryInterface: ChromeUtils.generateQI(["nsIStreamListener"]),
+ _stream: null,
+ _data: null,
+ onStartRequest(aRequest) {
+ this._stream = null;
+ this._data = "";
+ },
+ onStopRequest(aRequest, aStatusCode) {
+ // check that the streamed message starts with "From "
+ Assert.ok(this._data.startsWith("From "));
+ if (++gHdrIndex == gFiles.length) {
+ do_test_finished();
+ } else {
+ streamNextMessage();
+ }
+ },
+ onDataAvailable(aRequest, aInputStream, aOff, aCount) {
+ if (this._stream == null) {
+ this._stream = Cc["@mozilla.org/scriptableinputstream;1"].createInstance(
+ Ci.nsIScriptableInputStream
+ );
+ this._stream.init(aInputStream);
+ }
+ this._data += this._stream.read(aCount);
+ },
+};