summaryrefslogtreecommitdiffstats
path: root/comm/mailnews/search/test/unit/test_searchCustomTerm.js
blob: baea69767b082c955423f43935385cff5814c549 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
/* 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 custom search features.
 *
 */
/* import-globals-from ../../../test/resources/searchTestUtils.js */
load("../../../resources/searchTestUtils.js");

var { MailServices } = ChromeUtils.import(
  "resource:///modules/MailServices.jsm"
);

var kCustomId = "xpcomtest@mozilla.org#test";
var gHdr;

var Tests = [
  {
    setValue: "iamgood",
    testValue: "iamnotgood",
    op: Ci.nsMsgSearchOp.Is,
    count: 0,
  },
  {
    setValue: "iamgood",
    testValue: "iamgood",
    op: Ci.nsMsgSearchOp.Is,
    count: 1,
  },
];

// nsIMsgSearchCustomTerm object
var customTerm = {
  id: kCustomId,
  name: "term name",
  getEnabled(scope, op) {
    return (
      scope == Ci.nsMsgSearchScope.offlineMail && op == Ci.nsMsgSearchOp.Is
    );
  },
  getAvailable(scope, op) {
    return (
      scope == Ci.nsMsgSearchScope.offlineMail && op == Ci.nsMsgSearchOp.Is
    );
  },
  getAvailableOperators(scope) {
    return [Ci.nsMsgSearchOp.Is];
  },
  match(msgHdr, searchValue, searchOp) {
    switch (searchOp) {
      case Ci.nsMsgSearchOp.Is:
        if (msgHdr.getStringProperty("theTestProperty") == searchValue) {
          return true;
        }
    }
    return false;
  },
};

function run_test() {
  localAccountUtils.loadLocalMailAccount();
  MailServices.filters.addCustomTerm(customTerm);

  var copyListener = {
    OnStartCopy() {},
    OnProgress(aProgress, aProgressMax) {},
    SetMessageKey(aKey) {
      gHdr = localAccountUtils.inboxFolder.GetMessageHeader(aKey);
    },
    SetMessageId(aMessageId) {},
    OnStopCopy(aStatus) {
      doTest();
    },
  };

  // Get a message into the local filestore.
  // function testSearch() continues the testing after the copy.
  let bugmail1 = do_get_file("../../../data/bugmail1");
  do_test_pending();

  MailServices.copy.copyFileMessage(
    bugmail1,
    localAccountUtils.inboxFolder,
    null,
    false,
    0,
    "",
    copyListener,
    null
  );
}

function doTest() {
  let test = Tests.shift();
  if (test) {
    gHdr.setStringProperty("theTestProperty", test.setValue);
    new TestSearch(
      localAccountUtils.inboxFolder,
      test.testValue,
      Ci.nsMsgSearchAttrib.Custom,
      test.op,
      test.count,
      doTest,
      kCustomId
    );
  } else {
    gHdr = null;
    do_test_finished();
  }
}