From 6bf0a5cb5034a7e684dcc3500e841785237ce2dd Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Sun, 7 Apr 2024 19:32:43 +0200 Subject: Adding upstream version 1:115.7.0. Signed-off-by: Daniel Baumann --- .../db/msgdb/test/unit/test_filter_enumerator.js | 100 +++++++++++++++++++++ 1 file changed, 100 insertions(+) create mode 100644 comm/mailnews/db/msgdb/test/unit/test_filter_enumerator.js (limited to 'comm/mailnews/db/msgdb/test/unit/test_filter_enumerator.js') diff --git a/comm/mailnews/db/msgdb/test/unit/test_filter_enumerator.js b/comm/mailnews/db/msgdb/test/unit/test_filter_enumerator.js new file mode 100644 index 0000000000..914b5afd29 --- /dev/null +++ b/comm/mailnews/db/msgdb/test/unit/test_filter_enumerator.js @@ -0,0 +1,100 @@ +/* import-globals-from ../../../../test/resources/MessageGenerator.jsm */ +load("../../../../resources/MessageGenerator.jsm"); + +var gMessages = []; + +const kSetCount = 13; +const kNumExpectedMatches = 10; + +function setupGlobals() { + localAccountUtils.loadLocalMailAccount(); + // Create a message generator + let messageGenerator = new MessageGenerator(); + let localInbox = localAccountUtils.inboxFolder.QueryInterface( + Ci.nsIMsgLocalMailFolder + ); + + for (let i = 0; i < kSetCount; i++) { + let message = messageGenerator.makeMessage(); + gMessages.push(message); + localInbox.addMessage(message.toMboxString()); + } +} + +function run_test() { + setupGlobals(); + do_test_pending(); + let inboxDB = localAccountUtils.inboxFolder.msgDatabase; + + // give messages 1,3,5 gloda-ids. These won't end up in our search hits. + let msgHdr1 = inboxDB.getMsgHdrForMessageID(gMessages[0].messageId); + msgHdr1.setUint32Property("gloda-id", 11111); + let msgHdr3 = inboxDB.getMsgHdrForMessageID(gMessages[2].messageId); + msgHdr3.setUint32Property("gloda-id", 33333); + let msgHdr5 = inboxDB.getMsgHdrForMessageID(gMessages[4].messageId); + msgHdr5.setUint32Property("gloda-id", 5555); + // set up a search term array that will give us the array of messages + // that gloda should index, as defined by this function: + let searchSession = Cc[ + "@mozilla.org/messenger/searchSession;1" + ].createInstance(Ci.nsIMsgSearchSession); + let searchTerms = []; + + searchSession.addScopeTerm( + Ci.nsMsgSearchScope.offlineMail, + localAccountUtils.inboxFolder + ); + let searchTerm = searchSession.createTerm(); + + // Create the following search term: + // (folderFlag & Mail && folderFlag != ImapBox) && + // msg property.gloda-id isEmpty + + searchTerm.beginsGrouping = true; + searchTerm.booleanAnd = true; + searchTerm.attrib = Ci.nsMsgSearchAttrib.FolderFlag; + searchTerm.op = Ci.nsMsgSearchOp.Is; + let value = searchTerm.value; + value.status = Ci.nsMsgFolderFlags.Mail; + value.attrib = Ci.nsMsgSearchAttrib.FolderFlag; + searchTerm.value = value; + searchTerms.push(searchTerm); + + searchTerm = searchSession.createTerm(); + searchTerm.booleanAnd = true; + searchTerm.attrib = Ci.nsMsgSearchAttrib.FolderFlag; + searchTerm.op = Ci.nsMsgSearchOp.Isnt; + value = searchTerm.value; + value.status = Ci.nsMsgFolderFlags.ImapBox; + value.attrib = Ci.nsMsgSearchAttrib.FolderFlag; + searchTerm.value = value; + searchTerm.endsGrouping = true; + searchTerms.push(searchTerm); + + searchTerm = searchSession.createTerm(); + searchTerm.booleanAnd = true; + searchTerm.attrib = Ci.nsMsgSearchAttrib.HdrProperty; + searchTerm.hdrProperty = "gloda-id"; + searchTerm.op = Ci.nsMsgSearchOp.IsEmpty; + value = searchTerm.value; + value.str = "gloda-id"; + value.attrib = Ci.nsMsgSearchAttrib.HdrProperty; + searchTerm.value = value; + searchTerms.push(searchTerm); + + let msgEnumerator = inboxDB.getFilterEnumerator(searchTerms); + let matchingHdrs = [...msgEnumerator]; + Assert.equal(kNumExpectedMatches, matchingHdrs.length); + Assert.equal(matchingHdrs[0].messageId, gMessages[1].messageId); + Assert.equal(matchingHdrs[1].messageId, gMessages[3].messageId); + + // try it backwards, with roller skates: + msgEnumerator = inboxDB.getFilterEnumerator(searchTerms, true); + matchingHdrs = [...msgEnumerator]; + Assert.equal(kNumExpectedMatches, matchingHdrs.length); + Assert.equal(matchingHdrs[0].messageId, gMessages[12].messageId); + Assert.equal(matchingHdrs[1].messageId, gMessages[11].messageId); + Assert.equal(matchingHdrs[9].messageId, gMessages[1].messageId); + + do_test_finished(); +} -- cgit v1.2.3