diff options
Diffstat (limited to 'comm/mailnews/test/resources/filterTestUtils.js')
-rw-r--r-- | comm/mailnews/test/resources/filterTestUtils.js | 89 |
1 files changed, 89 insertions, 0 deletions
diff --git a/comm/mailnews/test/resources/filterTestUtils.js b/comm/mailnews/test/resources/filterTestUtils.js new file mode 100644 index 0000000000..c34d1147c0 --- /dev/null +++ b/comm/mailnews/test/resources/filterTestUtils.js @@ -0,0 +1,89 @@ +/* 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/. */ + +// Utility functions for testing interactions with filters. + +var contains = Ci.nsMsgSearchOp.Contains; +// This maps strings to a filter attribute (excluding the parameter) +var ATTRIB_MAP = { + // Template : [attrib, op, field of value, otherHeader] + subject: [Ci.nsMsgSearchAttrib.Subject, contains, "str", null], + from: [Ci.nsMsgSearchAttrib.Sender, contains, "str", null], + date: [Ci.nsMsgSearchAttrib.Date, Ci.nsMsgSearchOp.Is, "date", null], + size: [Ci.nsMsgSearchAttrib.Size, Ci.nsMsgSearchOp.Is, "size", null], + "message-id": [ + Ci.nsMsgSearchAttrib.OtherHeader + 1, + contains, + "str", + "Message-ID", + ], + "user-agent": [ + Ci.nsMsgSearchAttrib.OtherHeader + 2, + contains, + "str", + "User-Agent", + ], +}; +// And this maps strings to filter actions +var ACTION_MAP = { + // Template : [action, auxiliary attribute field, auxiliary value] + priority: [Ci.nsMsgFilterAction.ChangePriority, "priority", 6], + delete: [Ci.nsMsgFilterAction.Delete], + read: [Ci.nsMsgFilterAction.MarkRead], + unread: [Ci.nsMsgFilterAction.MarkUnread], + kill: [Ci.nsMsgFilterAction.KillThread], + watch: [Ci.nsMsgFilterAction.WatchThread], + flag: [Ci.nsMsgFilterAction.MarkFlagged], + stop: [Ci.nsMsgFilterAction.StopExecution], + tag: [Ci.nsMsgFilterAction.AddTag, "strValue", "tag"], +}; + +/** + * Creates a filter and appends it to the nsIMsgFilterList. + * + * @param {nsIMsgFilter} list - An nsIMsgFilter to which the new filter will be appended. + * @param {string} trigger - A key of ATTRIB_MAP that represents the filter trigger. + * @param {string} value - The value of the filter trigger. + * @param {nsMsgFilterAction} action - A key of ACTION_MAP that represents the action to be taken. + */ +function createFilter(list, trigger, value, action) { + var filter = list.createFilter(trigger + action + "Test"); + filter.filterType = Ci.nsMsgFilterType.NewsRule; + + var searchTerm = filter.createTerm(); + searchTerm.matchAll = false; + if (trigger in ATTRIB_MAP) { + let information = ATTRIB_MAP[trigger]; + searchTerm.attrib = information[0]; + if (information[3] != null) { + searchTerm.arbitraryHeader = information[3]; + } + searchTerm.op = information[1]; + var oldValue = searchTerm.value; + oldValue.attrib = information[0]; + oldValue[information[2]] = value; + searchTerm.value = oldValue; + } else { + throw new Error("Unknown trigger " + trigger); + } + searchTerm.booleanAnd = true; + filter.appendTerm(searchTerm); + + var filterAction = filter.createAction(); + if (action in ACTION_MAP) { + let information = ACTION_MAP[action]; + filterAction.type = information[0]; + if (1 in information) { + filterAction[information[1]] = information[2]; + } + } else { + throw new Error("Unknown action " + action); + } + filter.appendAction(filterAction); + + filter.enabled = true; + + // Add to the end + list.insertFilterAt(list.filterCount, filter); +} |