summaryrefslogtreecommitdiffstats
path: root/comm/mailnews/compose/test/unit/test_temporaryFilesRemoved.js
diff options
context:
space:
mode:
Diffstat (limited to 'comm/mailnews/compose/test/unit/test_temporaryFilesRemoved.js')
-rw-r--r--comm/mailnews/compose/test/unit/test_temporaryFilesRemoved.js123
1 files changed, 123 insertions, 0 deletions
diff --git a/comm/mailnews/compose/test/unit/test_temporaryFilesRemoved.js b/comm/mailnews/compose/test/unit/test_temporaryFilesRemoved.js
new file mode 100644
index 0000000000..6a350ac64e
--- /dev/null
+++ b/comm/mailnews/compose/test/unit/test_temporaryFilesRemoved.js
@@ -0,0 +1,123 @@
+/* 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 that temporary files for draft are surely removed.
+ */
+
+var gMsgCompose;
+var gExpectedFiles;
+
+var progressListener = {
+ onStateChange(aWebProgress, aRequest, aStateFlags, aStatus) {
+ if (aStateFlags & Ci.nsIWebProgressListener.STATE_STOP) {
+ do_timeout(0, checkResult);
+ }
+ },
+
+ onProgressChange(
+ aWebProgress,
+ aRequest,
+ aCurSelfProgress,
+ aMaxSelfProgress,
+ aCurTotalProgress,
+ aMaxTotalProgress
+ ) {},
+ onLocationChange(aWebProgress, aRequest, aLocation, aFlags) {},
+ onStatusChange(aWebProgress, aRequest, aStatus, aMessage) {},
+ onSecurityChange(aWebProgress, aRequest, state) {},
+ onContentBlockingEvent(aWebProgress, aRequest, aEvent) {},
+
+ QueryInterface: ChromeUtils.generateQI([
+ "nsIWebProgressListener",
+ "nsISupportsWeakReference",
+ ]),
+};
+
+/**
+ * Get the count of temporary files. Because nsIFile.createUnique creates a random
+ * file name, we iterate the tmp dir and count the files that match filename
+ * patterns.
+ */
+async function getTemporaryFilesCount() {
+ let tmpDir = Services.dirsvc.get("TmpD", Ci.nsIFile).path;
+ let entries = await IOUtils.getChildren(tmpDir);
+ let tempFiles = {
+ "nsmail.tmp": 0,
+ "nscopy.tmp": 0,
+ "nsemail.eml": 0,
+ "nsemail.tmp": 0,
+ "nsqmail.tmp": 0,
+ };
+ for (const path of entries) {
+ for (let pattern of Object.keys(tempFiles)) {
+ let [name, extName] = pattern.split(".");
+ if (PathUtils.filename(path).startsWith(name) && path.endsWith(extName)) {
+ tempFiles[pattern]++;
+ }
+ }
+ }
+ return tempFiles;
+}
+
+/**
+ * Temp files should be deleted as soon as the draft is finished saving, so the
+ * counts should be the same as before.
+ */
+async function checkResult() {
+ let filesCount = await getTemporaryFilesCount();
+ for (let [pattern, count] of Object.entries(filesCount)) {
+ Assert.equal(
+ count,
+ gExpectedFiles[pattern],
+ `${pattern} should not exists`
+ );
+ }
+ do_test_finished();
+}
+
+add_task(async function () {
+ gExpectedFiles = await getTemporaryFilesCount();
+
+ // Ensure we have at least one mail account
+ localAccountUtils.loadLocalMailAccount();
+
+ gMsgCompose = Cc["@mozilla.org/messengercompose/compose;1"].createInstance(
+ Ci.nsIMsgCompose
+ );
+ let fields = Cc[
+ "@mozilla.org/messengercompose/composefields;1"
+ ].createInstance(Ci.nsIMsgCompFields);
+ let params = Cc[
+ "@mozilla.org/messengercompose/composeparams;1"
+ ].createInstance(Ci.nsIMsgComposeParams);
+
+ fields.from = "Nobody <nobody@tinderbox.test>";
+ fields.body = "body text";
+ fields.useMultipartAlternative = true;
+
+ params.composeFields = fields;
+ params.format = Ci.nsIMsgCompFormat.HTML;
+
+ gMsgCompose.initialize(params, null, null);
+
+ let identity = getSmtpIdentity(null, getBasicSmtpServer());
+
+ localAccountUtils.rootFolder.createLocalSubfolder("Drafts");
+
+ let progress = Cc["@mozilla.org/messenger/progress;1"].createInstance(
+ Ci.nsIMsgProgress
+ );
+ progress.registerListener(progressListener);
+
+ do_test_pending();
+
+ gMsgCompose.sendMsg(
+ Ci.nsIMsgSend.nsMsgSaveAsDraft,
+ identity,
+ "",
+ null,
+ progress
+ );
+});