summaryrefslogtreecommitdiffstats
path: root/comm/mailnews/db/msgdb/test/unit/test_enumerator_cleanup.js
diff options
context:
space:
mode:
Diffstat (limited to 'comm/mailnews/db/msgdb/test/unit/test_enumerator_cleanup.js')
-rw-r--r--comm/mailnews/db/msgdb/test/unit/test_enumerator_cleanup.js56
1 files changed, 56 insertions, 0 deletions
diff --git a/comm/mailnews/db/msgdb/test/unit/test_enumerator_cleanup.js b/comm/mailnews/db/msgdb/test/unit/test_enumerator_cleanup.js
new file mode 100644
index 0000000000..dfb5aa5285
--- /dev/null
+++ b/comm/mailnews/db/msgdb/test/unit/test_enumerator_cleanup.js
@@ -0,0 +1,56 @@
+/*
+ * Test nsMsgDatabase's cleanup of nsMsgDBEnumerators
+ */
+
+var { MailServices } = ChromeUtils.import(
+ "resource:///modules/MailServices.jsm"
+);
+
+var anyOldMessage = do_get_file("../../../../data/bugmail1");
+
+/**
+ * Test closing a db with an outstanding enumerator.
+ */
+function test_enumerator_cleanup() {
+ let db = localAccountUtils.inboxFolder.msgDatabase;
+ let enumerator = db.enumerateMessages();
+ Cc["@mozilla.org/msgDatabase/msgDBService;1"]
+ .getService(Ci.nsIMsgDBService)
+ .forceFolderDBClosed(localAccountUtils.inboxFolder);
+ localAccountUtils.inboxFolder.msgDatabase = null;
+ db = null;
+ gc();
+ [...enumerator];
+ do_test_finished();
+}
+
+/*
+ * This infrastructure down here exists just to get
+ * test_references_header_parsing its message header.
+ */
+
+function run_test() {
+ localAccountUtils.loadLocalMailAccount();
+ do_test_pending();
+ MailServices.copy.copyFileMessage(
+ anyOldMessage,
+ localAccountUtils.inboxFolder,
+ null,
+ false,
+ 0,
+ "",
+ messageHeaderGetterListener,
+ null
+ );
+ return true;
+}
+
+var messageHeaderGetterListener = {
+ OnStartCopy() {},
+ OnProgress(aProgress, aProgressMax) {},
+ GetMessageId(aMessageId) {},
+ SetMessageKey(aKey) {},
+ OnStopCopy(aStatus) {
+ do_timeout(0, test_enumerator_cleanup);
+ },
+};