File: test_returncode.js

package info (click to toggle)
thunderbird 1%3A78.8.0-1~deb10u1
  • links: PTS, VCS
  • area: main
  • in suites: buster
  • size: 2,910,720 kB
  • sloc: cpp: 5,890,568; javascript: 4,416,354; ansic: 3,051,657; python: 917,001; asm: 304,197; xml: 206,624; sh: 109,232; java: 108,679; makefile: 22,984; perl: 15,867; yacc: 4,565; objc: 3,026; pascal: 1,787; lex: 1,720; ada: 1,681; cs: 879; exp: 505; awk: 485; sql: 452; php: 436; lisp: 432; ruby: 99; sed: 69; csh: 45
file content (78 lines) | stat: -rw-r--r-- 3,228 bytes parent folder | download | duplicates (12)
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
/* 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/. */

const Cm = Components.manager;

ChromeUtils.import("resource://gre/modules/XPCOMUtils.jsm");

function getConsoleMessages() {
  let consoleService = Cc["@mozilla.org/consoleservice;1"].getService(Ci.nsIConsoleService);
  let messages = consoleService.getMessageArray().map((m) => m.toString());
  // reset ready for the next call.
  consoleService.reset();
  return messages;
}

function run_test() {
  // Load the component manifests.
  registerXPCTestComponents();
  registerAppManifest(do_get_file('../components/js/xpctest.manifest'));

  // and the tests.
  test_simple();
  test_nested();
}

function test_simple() {
  let parent = Cc["@mozilla.org/js/xpc/test/native/ReturnCodeParent;1"]
               .createInstance(Ci.nsIXPCTestReturnCodeParent);
  let result;

  // flush existing messages before we start testing.
  getConsoleMessages();

  // Ask the C++ to call the JS object which will throw.
  result = parent.callChild(Ci.nsIXPCTestReturnCodeChild.CHILD_SHOULD_THROW);
  Assert.equal(result, Cr.NS_ERROR_XPC_JAVASCRIPT_ERROR_WITH_DETAILS,
               "exception caused NS_ERROR_XPC_JAVASCRIPT_ERROR_WITH_DETAILS");

  let messages = getConsoleMessages();
  Assert.equal(messages.length, 1, "got a console message from the exception");
  Assert.ok(messages[0].includes("a requested error"), "got the message text");

  // Ask the C++ to call the JS object which will return success.
  result = parent.callChild(Ci.nsIXPCTestReturnCodeChild.CHILD_SHOULD_RETURN_SUCCESS);
  Assert.equal(result, Cr.NS_OK, "success is success");

  Assert.deepEqual(getConsoleMessages(), [], "no messages reported on success.");

  // And finally the point of this test!
  // Ask the C++ to call the JS object which will use .returnCode
  result = parent.callChild(Ci.nsIXPCTestReturnCodeChild.CHILD_SHOULD_RETURN_RESULTCODE);
  Assert.equal(result, Cr.NS_ERROR_FAILURE,
               "NS_ERROR_FAILURE was seen as the error code.");

  Assert.deepEqual(getConsoleMessages(), [], "no messages reported with .returnCode");
}

function test_nested() {
  let parent = Cc["@mozilla.org/js/xpc/test/native/ReturnCodeParent;1"]
               .createInstance(Ci.nsIXPCTestReturnCodeParent);
  let result;

  // flush existing messages before we start testing.
  getConsoleMessages();

  // Ask the C++ to call the "outer" JS object, which will set .returnCode, but
  // then create and call *another* component which itself sets the .returnCode
  // to a different value.  This checks the returnCode is correctly saved
  // across call contexts.
  result = parent.callChild(Ci.nsIXPCTestReturnCodeChild.CHILD_SHOULD_NEST_RESULTCODES);
  Assert.equal(result, Cr.NS_ERROR_UNEXPECTED,
               "NS_ERROR_UNEXPECTED was seen as the error code.");
  // We expect one message, which is the child reporting what it got as the
  // return code - which should be NS_ERROR_FAILURE
  let expected = ["nested child returned " + Cr.NS_ERROR_FAILURE];
  Assert.deepEqual(getConsoleMessages(), expected, "got the correct sub-error");
}