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
// Test of chaining copies between the same folders
var { addMessagesToFolder, MessageGenerator, MessageScenarioFactory } =
  ChromeUtils.importESModule(
  );
var { MailServices } = ChromeUtils.importESModule(
);
var gCopySource;
var gCopyDest;
var gMessages;
var gCurTestNum = 1;
// main test
var gTestArray = [
  function copyMsg1() {
    gMessages = [...gCopySource.msgDatabase.enumerateMessages()];
    CopyNextMessage();
  },
  function copyMsg2() {
    CopyNextMessage();
  },
  function copyMsg3() {
    CopyNextMessage();
  },
  function copyMsg4() {
    CopyNextMessage();
  },
];
function CopyNextMessage() {
  if (gMessages.length > 0) {
    const msgHdr = gMessages.shift();
    MailServices.copy.copyMessages(
      gCopySource,
      [msgHdr],
      gCopyDest,
      true,
      copyListener,
      null,
      false
    );
  } else {
    do_throw("TEST FAILED - out of messages");
  }
}
function run_test() {
  localAccountUtils.loadLocalMailAccount();
  const messageGenerator = new MessageGenerator();
  const scenarioFactory = new MessageScenarioFactory(messageGenerator);
  // "Master" do_test_pending(), paired with a do_test_finished() at the end of
  // all the operations.
  do_test_pending();
  gCopyDest = localAccountUtils.inboxFolder.createLocalSubfolder("copyDest");
  // build up a diverse list of messages
  let messages = [];
  messages = messages.concat(scenarioFactory.directReply(10));
  gCopySource = localAccountUtils.rootFolder.createLocalSubfolder("copySource");
  addMessagesToFolder(messages, gCopySource);
  mailTestUtils.updateFolderAndNotify(gCopySource, doTest);
  return true;
}
function doTest() {
  var test = gCurTestNum;
  if (test <= gTestArray.length) {
    var testFn = gTestArray[test - 1];
    dump("Doing test " + test + " " + testFn.name + "\n");
    try {
      testFn();
    } catch (ex) {
      do_throw("TEST FAILED " + ex);
    }
  } else {
    endTest();
  }
}
function endTest() {
  // Cleanup, null out everything
  dump(" Exiting mail tests\n");
  gMessages = null;
  do_test_finished(); // for the one in run_test()
}
/**
 * @implements {nsIMsgCopyServiceListener}
 */
var copyListener = {
  onStartCopy() {},
  onProgress() {},
  setMessageKey() {},
  getMessageId() {
    return null;
  },
  onStopCopy(aStatus) {
    // Check: message successfully copied.
    Assert.equal(aStatus, 0);
    ++gCurTestNum;
    doTest();
  },
};