summaryrefslogtreecommitdiffstats
path: root/comm/mailnews/news/test/unit/test_bug540288.js
diff options
context:
space:
mode:
Diffstat (limited to 'comm/mailnews/news/test/unit/test_bug540288.js')
-rw-r--r--comm/mailnews/news/test/unit/test_bug540288.js114
1 files changed, 114 insertions, 0 deletions
diff --git a/comm/mailnews/news/test/unit/test_bug540288.js b/comm/mailnews/news/test/unit/test_bug540288.js
new file mode 100644
index 0000000000..9ffe8a7616
--- /dev/null
+++ b/comm/mailnews/news/test/unit/test_bug540288.js
@@ -0,0 +1,114 @@
+/* -*- Mode: JavaScript; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/* Tests that an empty cache entry doesn't return an empty message for news. */
+
+// The basic daemon to use for testing Nntpd.jsm implementations
+var daemon = setupNNTPDaemon();
+
+var server;
+var localserver;
+
+var streamListener = {
+ _data: "",
+
+ QueryInterface: ChromeUtils.generateQI([
+ "nsIStreamListener",
+ "nsIRequestObserver",
+ ]),
+
+ // nsIRequestObserver
+ onStartRequest(aRequest) {},
+ onStopRequest(aRequest, aStatusCode) {
+ Assert.equal(aStatusCode, 0);
+
+ // Reduce any \r\n to just \n so we can do a good comparison on any
+ // platform.
+ var reduced = this._data.replace(/\r\n/g, "\n");
+ Assert.equal(reduced, kSimpleNewsArticle);
+
+ // We must finish closing connections and tidying up after a timeout
+ // so that the thread has time to unwrap itself.
+ do_timeout(0, doTestFinished);
+ },
+
+ // nsIStreamListener
+ onDataAvailable(aRequest, aInputStream, aOffset, aCount) {
+ let scriptStream = Cc[
+ "@mozilla.org/scriptableinputstream;1"
+ ].createInstance(Ci.nsIScriptableInputStream);
+
+ scriptStream.init(aInputStream);
+
+ this._data += scriptStream.read(aCount);
+ },
+};
+
+function doTestFinished() {
+ localserver.closeCachedConnections();
+
+ server.stop();
+
+ var thread = gThreadManager.currentThread;
+ while (thread.hasPendingEvents()) {
+ thread.processNextEvent(true);
+ }
+
+ do_test_finished();
+}
+
+function run_test() {
+ server = makeServer(NNTP_RFC977_handler, daemon);
+ server.start();
+ localserver = setupLocalServer(server.port);
+ var uri = Services.io.newURI(
+ "news://localhost:" + server.port + "/TSS1%40nntp.test"
+ );
+
+ try {
+ // Add an empty message to the cache
+ MailServices.nntp.cacheStorage.asyncOpenURI(
+ uri,
+ "",
+ Ci.nsICacheStorage.OPEN_NORMALLY,
+ {
+ onCacheEntryAvailable(cacheEntry, isNew, status) {
+ Assert.equal(status, Cr.NS_OK);
+
+ cacheEntry.markValid();
+
+ // Get the folder and new mail
+ var folder = localserver.rootFolder.getChildNamed(
+ "test.subscribe.simple"
+ );
+ folder.clearFlag(Ci.nsMsgFolderFlags.Offline);
+ folder.getNewMessages(null, {
+ OnStopRunningUrl() {
+ localserver.closeCachedConnections();
+ },
+ });
+ server.performTest();
+
+ Assert.equal(folder.getTotalMessages(false), 1);
+ Assert.ok(folder.hasNewMessages);
+
+ server.resetTest();
+
+ var message = folder.firstNewMessage;
+
+ var messageUri = folder.getUriForMsg(message);
+
+ Cc["@mozilla.org/messenger/messageservice;1?type=news"]
+ .getService(Ci.nsIMsgMessageService)
+ .loadMessage(messageUri, streamListener, null, null, false);
+
+ // Get the server to run
+ server.performTest();
+ },
+ }
+ );
+
+ do_test_pending();
+ } catch (e) {
+ server.stop();
+ do_throw(e);
+ }
+}