summaryrefslogtreecommitdiff
path: root/xpcom/tests/unit/test_compmgr_warnings.js
blob: be77b0d1b108f45bbace99bdd59c62d8e2ca79b9 (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
Components.utils.import("resource://gre/modules/XPCOMUtils.jsm");

var Cc = Components.classes;
var Ci = Components.interfaces;

function info(s) {
  dump("TEST-INFO | test_compmgr_warnings.js | " + s + "\n");
}

var gMessagesExpected = [
  { line: 2, message: /Malformed CID/, found: false },
  { line: 6, message: /re-register/, found: false },
  { line: 9, message: /Could not/, found: false },
  { line: 2, message: /binary component twice/, found: false },
  { line: 3, message: /binary component twice/, found: false },
];

const kConsoleListener = {
  QueryInterface: XPCOMUtils.generateQI([Ci.nsIConsoleListener]),

  observe: function listener_observe(message) {
    if (!(message instanceof Ci.nsIScriptError)) {
      info("Not a script error: " + message.message);
      return;
    }

    info("Script error... " + message.sourceName + ":" + message.lineNumber + ": " + message.errorMessage);
    for (let expected of gMessagesExpected) {
      if (message.lineNumber != expected.line)
        continue;

      if (!expected.message.test(message.errorMessage))
        continue;

      info("Found expected message: " + expected.message);
      do_check_false(expected.found);
                
      expected.found = true;
    }
  }
};

function run_deferred_event(fn) {
  do_test_pending();
  Components.classes["@mozilla.org/thread-manager;1"].
    getService(Ci.nsIThreadManager).mainThread.dispatch(function() {
      fn();
      do_test_finished();
    }, 0);
}

function run_test()
{
  let cs = Components.classes["@mozilla.org/consoleservice;1"].
    getService(Ci.nsIConsoleService);
  cs.registerListener(kConsoleListener);

  var manifest = do_get_file('compmgr_warnings.manifest');
  registerAppManifest(manifest);
  manifest = do_get_file('components/testcomponent.manifest');
  registerAppManifest(manifest);

  run_deferred_event(function() {
    cs.unregisterListener(kConsoleListener);

    for (let expected of gMessagesExpected) {
      info("checking " + expected.message);
      do_check_true(expected.found);
    }
  });
}