Revision control

Copy as Markdown

Other Tools

/* 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/. */
/**
* Tests folders with special use flags prevent removal of those flags, if the
* flags come from an Exchange server.
*/
const { IMAPServer } = ChromeUtils.importESModule(
);
add_task(async function testLockedFlagsEWS() {
const [server, incomingServer] = setupBasicEwsTestServer({});
await subtest(server, incomingServer);
});
add_task(async function testLockedFlagsGraph() {
const [server, incomingServer] = setupBasicGraphTestServer();
await subtest(server, incomingServer);
});
async function subtest(server, incomingServer) {
server.appendRemoteFolder(
new RemoteFolder("notspecial", "root", "Not Special")
);
const account = MailServices.accounts.createAccount();
account.addIdentity(MailServices.accounts.createIdentity());
account.incomingServer = incomingServer;
const rootFolder = account.incomingServer.rootFolder;
await syncFolder(incomingServer, rootFolder);
const inboxFolder = rootFolder.getChildNamed("INBOX");
testLockedFlag(inboxFolder, "Inbox");
testUnlockedFlag(inboxFolder);
const sentFolder = rootFolder.getChildNamed("Sent");
testLockedFlag(sentFolder, "SentMail");
testUnlockedFlag(sentFolder);
const draftsFolder = rootFolder.getChildNamed("Drafts");
testLockedFlag(draftsFolder, "Drafts");
testUnlockedFlag(draftsFolder);
const trashFolder = rootFolder.getChildNamed("Deleted Items");
testLockedFlag(trashFolder, "Trash");
testUnlockedFlag(trashFolder);
const spamFolder = rootFolder.getChildNamed("Junk");
testLockedFlag(spamFolder, "Junk");
testUnlockedFlag(spamFolder);
const archivesFolder = rootFolder.getChildNamed("Archives");
testLockedFlag(archivesFolder, "Archive");
testUnlockedFlag(archivesFolder);
const notSpecialFolder = rootFolder.getChildNamed("Not Special");
testUnlockedFlag(notSpecialFolder);
testUnlockedFlag(notSpecialFolder, "SentMail");
testUnlockedFlag(notSpecialFolder, "Archive");
}
function testLockedFlag(folder, flagName) {
info(`checking the locked functions with ${flagName} flag on ${folder.URI}`);
const flag = Ci.nsMsgFolderFlags[flagName];
const initialFlags = folder.flags;
Assert.ok(initialFlags & flag, "folder had flag to begin with");
folder.clearFlag(flag);
Assert.equal(
folder.flags.toString(16),
initialFlags.toString(16),
"flags are unchanged after clearFlag"
);
folder.toggleFlag(flag);
Assert.equal(
folder.flags.toString(16),
initialFlags.toString(16),
"flags are unchanged after toggleFlag"
);
folder.flags &= ~flag;
Assert.equal(
folder.flags.toString(16),
initialFlags.toString(16),
"flags are unchanged after setFlags"
);
}
function testUnlockedFlag(folder, flagName = "Unused4") {
info(
`checking the unlocked functions with ${flagName} flag on ${folder.URI}`
);
const flag = Ci.nsMsgFolderFlags[flagName];
const initialFlags = folder.flags;
Assert.ok(!(initialFlags & flag), "folder did not have flag to begin with");
folder.setFlag(flag);
Assert.equal(
folder.flags.toString(16),
(initialFlags | flag).toString(16),
"flag is added by setFlag"
);
folder.clearFlag(flag);
Assert.equal(
folder.flags.toString(16),
initialFlags.toString(16),
"flag is removed by clearFlag"
);
folder.toggleFlag(flag);
Assert.equal(
folder.flags.toString(16),
(initialFlags | flag).toString(16),
"flag is added by toggleFlag"
);
folder.flags &= ~flag;
Assert.equal(
folder.flags.toString(16),
initialFlags.toString(16),
"flag is removed by setFlags"
);
}