diff options
Diffstat (limited to 'comm/mailnews/search/test/unit/test_searchJunk.js')
-rw-r--r-- | comm/mailnews/search/test/unit/test_searchJunk.js | 322 |
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(); + } +} |