1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
|
/* 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/. */
// This tests that we use IMAP move if the IMAP server supports it.
var { MailServices } = ChromeUtils.import(
"resource:///modules/MailServices.jsm"
);
/* import-globals-from ../../../test/resources/logHelper.js */
/* import-globals-from ../../../test/resources/MessageGenerator.jsm */
load("../../../resources/logHelper.js");
load("../../../resources/MessageGenerator.jsm");
var gFolder1;
var tests = [setupCUSTOM1, startTest, doMove, testMove, teardownIMAPPump];
function setupCUSTOM1() {
setupIMAPPump("CUSTOM1");
Services.prefs.setBoolPref(
"mail.server.default.autosync_offline_stores",
false
);
}
async function startTest() {
IMAPPump.incomingServer.rootFolder.createSubfolder("folder 1", null);
await PromiseTestUtils.promiseFolderAdded("folder 1");
addImapMessage();
let listener = new PromiseTestUtils.PromiseUrlListener();
IMAPPump.inbox.updateFolderWithListener(null, listener);
await listener.promise;
// ...and download for offline use.
let promiseUrlListener = new PromiseTestUtils.PromiseUrlListener();
IMAPPump.inbox.downloadAllForOffline(promiseUrlListener, null);
await promiseUrlListener.promise;
}
async function doMove() {
let rootFolder = IMAPPump.incomingServer.rootFolder;
gFolder1 = rootFolder
.getChildNamed("folder 1")
.QueryInterface(Ci.nsIMsgImapMailFolder);
let msg = IMAPPump.inbox.msgDatabase.getMsgHdrForKey(
IMAPPump.mailbox.uidnext - 1
);
IMAPPump.server._test = true;
let listener = new PromiseTestUtils.PromiseCopyListener();
MailServices.copy.copyMessages(
IMAPPump.inbox,
[msg],
gFolder1,
true,
listener,
null,
false
);
IMAPPump.server.performTest("UID MOVE");
await listener.promise;
}
async function testMove() {
Assert.equal(IMAPPump.inbox.getTotalMessages(false), 0);
let listener = new PromiseTestUtils.PromiseUrlListener();
gFolder1.updateFolderWithListener(null, listener);
await listener.promise;
Assert.equal(gFolder1.getTotalMessages(false), 1);
// maildir should also delete the files.
if (IMAPPump.inbox.msgStore.storeType == "maildir") {
let curDir = IMAPPump.inbox.filePath.clone();
curDir.append("cur");
Assert.ok(curDir.exists());
Assert.ok(curDir.isDirectory());
let curEnum = curDir.directoryEntries;
// the directory should be empty, fails from bug 771643
Assert.ok(!curEnum.hasMoreElements());
}
}
function run_test() {
tests.forEach(x => add_task(x));
run_next_test();
}
|