summaryrefslogtreecommitdiffstats
path: root/comm/mailnews/search/test/unit/test_searchJunk.js
diff options
context:
space:
mode:
Diffstat (limited to 'comm/mailnews/search/test/unit/test_searchJunk.js')
-rw-r--r--comm/mailnews/search/test/unit/test_searchJunk.js322
1 files changed, 322 insertions, 0 deletions
diff --git a/comm/mailnews/search/test/unit/test_searchJunk.js b/comm/mailnews/search/test/unit/test_searchJunk.js
new file mode 100644
index 0000000000..fdffd96165
--- /dev/null
+++ b/comm/mailnews/search/test/unit/test_searchJunk.js
@@ -0,0 +1,322 @@
+/* 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/. */
+
+// Testing of search by junk percent and junk score origin
+
+/* import-globals-from ../../../test/resources/searchTestUtils.js */
+load("../../../resources/searchTestUtils.js");
+
+var { MailServices } = ChromeUtils.import(
+ "resource:///modules/MailServices.jsm"
+);
+
+var IsGreaterThan = Ci.nsMsgSearchOp.IsGreaterThan;
+var IsLessThan = Ci.nsMsgSearchOp.IsLessThan;
+var Is = Ci.nsMsgSearchOp.Is;
+var Isnt = Ci.nsMsgSearchOp.Isnt;
+var IsEmpty = Ci.nsMsgSearchOp.IsEmpty;
+var IsntEmpty = Ci.nsMsgSearchOp.IsntEmpty;
+
+var offlineMail = Ci.nsMsgSearchScope.offlineMail;
+
+var JunkScoreOrigin = Ci.nsMsgSearchAttrib.JunkScoreOrigin;
+var JunkPercent = Ci.nsMsgSearchAttrib.JunkPercent;
+var JunkStatus = Ci.nsMsgSearchAttrib.JunkStatus;
+
+var fileName = "../../../data/bugmail1";
+
+/*
+ * The search for junkpercent is defined as the effective value,
+ * while the "junkpercent" database term is always the result
+ * from the bayes filter. This is optimized to make views that
+ * rely on junk percent search work with the best value for junk
+ * percent, while allowing junk percent from the bayes filter
+ * to be saved for analysis.
+ *
+ * This means that the search for "junk percent" only uses the
+ * database junkpercent value if junkscoreorigin is "plugin".
+ * Otherwise, it uses junkstatus (if set) or defaults to 0
+ * (not junk) if the message is unclassified.
+ */
+
+var Tests = [
+ {
+ // test empty junk status
+ junkScore: false,
+ testValue: 90,
+ attrib: JunkStatus,
+ op: IsEmpty,
+ count: 1,
+ },
+ {
+ junkScore: false,
+ testValue: 90,
+ attrib: JunkStatus,
+ op: IsntEmpty,
+ count: 0,
+ },
+ {
+ junkScore: "0",
+ junkScoreOrigin: "plugin",
+ junkPercent: "10",
+ testValue: 90,
+ attrib: JunkStatus,
+ op: IsntEmpty,
+ count: 1,
+ },
+ {
+ junkScore: "0",
+ junkScoreOrigin: "plugin",
+ junkPercent: "10",
+ testValue: 90,
+ attrib: JunkStatus,
+ op: IsEmpty,
+ count: 0,
+ },
+ {
+ junkScore: "100",
+ junkScoreOrigin: "plugin",
+ junkPercent: "10",
+ testValue: 90,
+ attrib: JunkStatus,
+ op: IsntEmpty,
+ count: 1,
+ },
+ {
+ junkScore: "100",
+ junkScoreOrigin: "plugin",
+ junkPercent: "10",
+ testValue: 90,
+ attrib: JunkStatus,
+ op: IsEmpty,
+ count: 0,
+ },
+ {
+ // Use junkpercent from database
+ junkScore: "0",
+ junkScoreOrigin: "plugin",
+ junkPercent: "10",
+ testValue: 90,
+ attrib: JunkPercent,
+ op: IsGreaterThan,
+ count: 0,
+ },
+ {
+ junkScore: "0",
+ junkScoreOrigin: "plugin",
+ junkPercent: "10",
+ testValue: 90,
+ attrib: JunkPercent,
+ op: IsLessThan,
+ count: 1,
+ },
+ {
+ junkScore: "0",
+ junkScoreOrigin: "plugin",
+ junkPercent: "10",
+ testValue: 90,
+ attrib: JunkPercent,
+ op: Is,
+ count: 0,
+ },
+ {
+ junkScore: "0",
+ junkScoreOrigin: "plugin",
+ junkPercent: "90",
+ testValue: 10,
+ attrib: JunkPercent,
+ op: IsGreaterThan,
+ count: 1,
+ },
+ {
+ junkScore: "0",
+ junkScoreOrigin: "plugin",
+ junkPercent: "90",
+ testValue: 10,
+ attrib: JunkPercent,
+ op: IsLessThan,
+ count: 0,
+ },
+ {
+ junkScore: "0",
+ junkScoreOrigin: "plugin",
+ junkPercent: "10",
+ testValue: 10,
+ attrib: JunkPercent,
+ op: Is,
+ count: 1,
+ },
+ {
+ // values set by user, use junkscore not junkpercent
+ junkScore: "0",
+ junkScoreOrigin: "user",
+ junkPercent: "90",
+ testValue: 50,
+ attrib: JunkPercent,
+ op: IsGreaterThan,
+ count: 0,
+ },
+ {
+ junkScore: "0",
+ junkScoreOrigin: "user",
+ junkPercent: "90",
+ testValue: 50,
+ attrib: JunkPercent,
+ op: IsLessThan,
+ count: 1,
+ },
+ {
+ junkScore: "0",
+ junkScoreOrigin: "user",
+ junkPercent: "90",
+ testValue: 50,
+ attrib: JunkPercent,
+ op: Is,
+ count: 0,
+ },
+ {
+ junkScore: "100",
+ junkScoreOrigin: "user",
+ junkPercent: "10",
+ testValue: 50,
+ attrib: JunkPercent,
+ op: IsGreaterThan,
+ count: 1,
+ },
+ {
+ junkScore: "100",
+ junkScoreOrigin: "user",
+ junkPercent: "10",
+ testValue: 50,
+ attrib: JunkPercent,
+ op: IsLessThan,
+ count: 0,
+ },
+ {
+ junkScore: "0",
+ junkScoreOrigin: "user",
+ junkPercent: "90",
+ testValue: 0,
+ attrib: JunkPercent,
+ op: Is,
+ count: 1,
+ },
+ {
+ // default to 0 when nothing set
+ junkScore: "",
+ junkScoreOrigin: "",
+ junkPercent: "",
+ testValue: 0,
+ attrib: JunkPercent,
+ op: Is,
+ count: 1,
+ },
+ {
+ // junkscoreorigin search tests
+ junkScore: "0",
+ junkScoreOrigin: "plugin",
+ junkPercent: "50",
+ testValue: "plugin",
+ attrib: JunkScoreOrigin,
+ op: Is,
+ count: 1,
+ },
+ {
+ junkScore: "0",
+ junkScoreOrigin: "plugin",
+ junkPercent: "50",
+ testValue: "plugin",
+ attrib: JunkScoreOrigin,
+ op: Isnt,
+ count: 0,
+ },
+ {
+ junkScore: "0",
+ junkScoreOrigin: "filter",
+ junkPercent: "50",
+ testValue: "plugin",
+ attrib: JunkScoreOrigin,
+ op: Is,
+ count: 0,
+ },
+ {
+ junkScore: "0",
+ junkScoreOrigin: "filter",
+ junkPercent: "50",
+ testValue: "plugin",
+ attrib: JunkScoreOrigin,
+ op: Isnt,
+ count: 1,
+ },
+];
+
+function run_test() {
+ localAccountUtils.loadLocalMailAccount();
+
+ // test that validity table terms are valid
+
+ // offline mail table
+ testValidityTable(offlineMail, Is, JunkPercent, true);
+ testValidityTable(offlineMail, Isnt, JunkPercent, false);
+ testValidityTable(offlineMail, IsGreaterThan, JunkPercent, true);
+ testValidityTable(offlineMail, IsLessThan, JunkPercent, true);
+
+ testValidityTable(offlineMail, Is, JunkScoreOrigin, true);
+ testValidityTable(offlineMail, Isnt, JunkScoreOrigin, true);
+ testValidityTable(offlineMail, IsGreaterThan, JunkScoreOrigin, false);
+ testValidityTable(offlineMail, IsLessThan, JunkScoreOrigin, false);
+
+ // Get a message into the local filestore. function testJunkSearch() continues the testing after the copy.
+ do_test_pending();
+ var file = do_get_file(fileName);
+ MailServices.copy.copyFileMessage(
+ file,
+ localAccountUtils.inboxFolder,
+ null,
+ false,
+ 0,
+ "",
+ copyListener,
+ null
+ );
+ return true;
+}
+
+var hdr;
+var copyListener = {
+ OnStartCopy() {},
+ OnProgress(aProgress, aProgressMax) {},
+ SetMessageKey(aKey) {
+ hdr = localAccountUtils.inboxFolder.GetMessageHeader(aKey);
+ },
+ SetMessageId(aMessageId) {},
+ OnStopCopy(aStatus) {
+ testJunkSearch();
+ },
+};
+
+// Runs at completion of each copy
+// process each test from queue, calls itself upon completion of each search
+function testJunkSearch() {
+ var test = Tests.shift();
+ if (test) {
+ if (test.junkScore) {
+ hdr.setStringProperty("junkpercent", test.junkPercent);
+ hdr.setStringProperty("junkscoreorigin", test.junkScoreOrigin);
+ hdr.setStringProperty("junkscore", test.junkScore);
+ }
+
+ new TestSearch(
+ localAccountUtils.inboxFolder,
+ test.testValue,
+ test.attrib,
+ test.op,
+ test.count,
+ testJunkSearch
+ );
+ } else {
+ hdr = null;
+ do_test_finished();
+ }
+}