summaryrefslogtreecommitdiffstats
path: root/comm/mailnews/base/test/unit/test_postPluginFilters.js
diff options
context:
space:
mode:
Diffstat (limited to 'comm/mailnews/base/test/unit/test_postPluginFilters.js')
-rw-r--r--comm/mailnews/base/test/unit/test_postPluginFilters.js223
1 files changed, 223 insertions, 0 deletions
diff --git a/comm/mailnews/base/test/unit/test_postPluginFilters.js b/comm/mailnews/base/test/unit/test_postPluginFilters.js
new file mode 100644
index 0000000000..de75307886
--- /dev/null
+++ b/comm/mailnews/base/test/unit/test_postPluginFilters.js
@@ -0,0 +1,223 @@
+/* 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 post-plugin message filters as implemented in bug 198100
+ */
+
+/* import-globals-from ../../../test/resources/POP3pump.js */
+load("../../../resources/POP3pump.js");
+
+// Globals
+
+var gDbService = Cc["@mozilla.org/msgDatabase/msgDBService;1"].getService(
+ Ci.nsIMsgDBService
+);
+
+// command functions for test data
+var kTrain = 0; // train a file as a trait
+var kClass = 1; // classify files with traits
+
+var gTest; // currently active test
+var gMsgHdr; // current message header
+
+var kJunkFile = "../../../data/bugmail1";
+var kGoodFile = "../../../data/draft1";
+
+var kPriorityLow = 3;
+var kPriorityHigh = 5;
+var gInboxListener; // database listener object
+
+var gTests = [
+ {
+ // train two different messages
+ command: kTrain,
+ fileName: kGoodFile,
+ traitId: MailServices.junk.GOOD_TRAIT,
+ },
+ {
+ command: kTrain,
+ fileName: kJunkFile,
+ traitId: MailServices.junk.JUNK_TRAIT,
+ },
+ {
+ // test a filter that acts on GOOD messages
+ command: kClass,
+ fileName: kGoodFile,
+ test() {
+ Assert.equal(kPriorityHigh, gMsgHdr.priority);
+ },
+ },
+ {
+ // test a filter that acts on JUNK messages
+ command: kClass,
+ fileName: kJunkFile,
+ test() {
+ Assert.equal(kPriorityLow, gMsgHdr.priority);
+ },
+ },
+];
+
+// main test
+function run_test() {
+ // Setup some incoming filters, setting junk priority low, and good high.
+
+ // Can't use the fake server, must use the deferredTo local server!
+ let filterList = localAccountUtils.incomingServer.getFilterList(null);
+
+ // junkIsLow filter
+ let filter = filterList.createFilter("junkIsLow");
+ let searchTerm = filter.createTerm();
+ searchTerm.attrib = Ci.nsMsgSearchAttrib.JunkStatus;
+ let value = searchTerm.value;
+ value.attrib = Ci.nsMsgSearchAttrib.JunkStatus;
+ value.junkStatus = MailServices.junk.JUNK;
+ searchTerm.value = value;
+ searchTerm.op = Ci.nsMsgSearchOp.Is;
+ searchTerm.booleanAnd = false;
+ filter.appendTerm(searchTerm);
+ let action = filter.createAction();
+ action.type = Ci.nsMsgFilterAction.ChangePriority;
+ action.priority = kPriorityLow;
+ filter.appendAction(action);
+ filter.filterType = Ci.nsMsgFilterType.PostPlugin;
+ filter.enabled = true;
+ filterList.insertFilterAt(0, filter);
+
+ // goodIsHigh filter
+ filter = filterList.createFilter("goodIsHigh");
+ searchTerm = filter.createTerm();
+ searchTerm.attrib = Ci.nsMsgSearchAttrib.JunkStatus;
+ value = searchTerm.value;
+ value.attrib = Ci.nsMsgSearchAttrib.JunkStatus;
+ value.junkStatus = MailServices.junk.GOOD;
+ searchTerm.value = value;
+ searchTerm.op = Ci.nsMsgSearchOp.Is;
+ searchTerm.booleanAnd = false;
+ filter.appendTerm(searchTerm);
+ action = filter.createAction();
+ action.type = Ci.nsMsgFilterAction.ChangePriority;
+ action.priority = kPriorityHigh;
+ filter.appendAction(action);
+ filter.filterType = Ci.nsMsgFilterType.PostPlugin;
+ filter.enabled = true;
+ filterList.insertFilterAt(1, filter);
+
+ // setup a db listener to grab the message headers. There's probably an
+ // easier way, but this works.
+ gInboxListener = new DBListener();
+ gDbService.registerPendingListener(
+ localAccountUtils.inboxFolder,
+ gInboxListener
+ );
+
+ do_test_pending();
+
+ startCommand();
+}
+
+function endTest() {
+ // Cleanup
+ dump(" Exiting mail tests\n");
+ if (gInboxListener) {
+ gDbService.unregisterPendingListener(gInboxListener);
+ }
+
+ gPOP3Pump = null;
+
+ do_test_finished(); // for the one in run_test()
+}
+
+var classifyListener = {
+ // nsIMsgTraitClassificationListener implementation
+ onMessageTraitsClassified(aMsgURI, aTraits, aPercents) {
+ // print("Message URI is " + aMsgURI);
+ if (!aMsgURI) {
+ // Ignore end-of-batch signal.
+ return;
+ }
+
+ startCommand();
+ },
+};
+
+/** @implements {nsIDBChangeListener} */
+function DBListener() {}
+
+DBListener.prototype = {
+ onHdrFlagsChanged(aHdrChanged, aOldFlags, aNewFlags, aInstigator) {},
+
+ onHdrDeleted(aHdrChanged, aParentKey, Flags, aInstigator) {},
+
+ onHdrAdded(aHdrChanged, aParentKey, aFlags, aInstigator) {
+ gMsgHdr = aHdrChanged;
+ },
+
+ onParentChanged(aKeyChanged, oldParent, newParent, aInstigator) {},
+
+ onAnnouncerGoingAway(instigator) {
+ if (gInboxListener) {
+ try {
+ POP3Pump.inbox.msgDatabase.removeListener(gInboxListener);
+ } catch (e) {
+ dump("listener not found\n");
+ }
+ }
+ },
+
+ onReadChanged(aInstigator) {},
+
+ onJunkScoreChanged(aInstigator) {},
+
+ onHdrPropertyChanged(aHdrToChange, aPreChange, aStatus, aInstigator) {},
+ onEvent(aDB, aEvent) {},
+};
+
+// start the next test command
+function startCommand() {
+ if (gTest && gTest.test) {
+ dump("doing test " + gTest.test.name + "\n");
+ gTest.test();
+ }
+ if (!gTests.length) {
+ // Do we have more commands?
+ // no, all done
+ endTest();
+ return;
+ }
+
+ gTest = gTests.shift();
+ switch (gTest.command) {
+ case kTrain:
+ // train message
+ var proArray = [];
+ proArray.push(gTest.traitId);
+
+ MailServices.junk.setMsgTraitClassification(
+ getSpec(gTest.fileName), // aMsgURI
+ [], // aOldTraits
+ proArray, // aNewTraits
+ classifyListener // aTraitListener
+ );
+ // null, // [optional] in nsIMsgWindow aMsgWindow
+ // null, // [optional] in nsIJunkMailClassificationListener aJunkListener
+ break;
+
+ case kClass:
+ // classify message
+ gPOP3Pump.files = [gTest.fileName];
+ gPOP3Pump.onDone = function () {
+ do_timeout(100, startCommand);
+ };
+ gPOP3Pump.run();
+ break;
+ }
+}
+
+function getSpec(aFileName) {
+ var file = do_get_file(aFileName);
+ var uri = Services.io.newFileURI(file).QueryInterface(Ci.nsIURL);
+ uri = uri.mutate().setQuery("type=application/x-message-display").finalize();
+ return uri.spec;
+}