tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

test_message.js (6520B)


      1 /* This Source Code Form is subject to the terms of the Mozilla Public
      2 * License, v. 2.0. If a copy of the MPL was not distributed with this file,
      3 * You can obtain one at http://mozilla.org/MPL/2.0/. */
      4 
      5 const { error } = ChromeUtils.importESModule(
      6  "chrome://remote/content/shared/webdriver/Errors.sys.mjs"
      7 );
      8 const { Command, Message, Response } = ChromeUtils.importESModule(
      9  "chrome://remote/content/marionette/message.sys.mjs"
     10 );
     11 
     12 add_task(function test_Message_Origin() {
     13  equal(0, Message.Origin.Client);
     14  equal(1, Message.Origin.Server);
     15 });
     16 
     17 add_task(function test_Message_fromPacket() {
     18  let cmd = new Command(4, "foo");
     19  let resp = new Response(5, () => {});
     20  resp.error = "foo";
     21 
     22  ok(Message.fromPacket(cmd.toPacket()) instanceof Command);
     23  ok(Message.fromPacket(resp.toPacket()) instanceof Response);
     24  Assert.throws(
     25    () => Message.fromPacket([3, 4, 5, 6]),
     26    /Unrecognised message type in packet/
     27  );
     28 });
     29 
     30 add_task(function test_Command() {
     31  let cmd = new Command(42, "foo", { bar: "baz" });
     32  equal(42, cmd.id);
     33  equal("foo", cmd.name);
     34  deepEqual({ bar: "baz" }, cmd.parameters);
     35  equal(null, cmd.onerror);
     36  equal(null, cmd.onresult);
     37  equal(Message.Origin.Client, cmd.origin);
     38  equal(false, cmd.sent);
     39 });
     40 
     41 add_task(function test_Command_onresponse() {
     42  let onerrorOk = false;
     43  let onresultOk = false;
     44 
     45  let cmd = new Command(7, "foo");
     46  cmd.onerror = () => (onerrorOk = true);
     47  cmd.onresult = () => (onresultOk = true);
     48 
     49  let errorResp = new Response(8, () => {});
     50  errorResp.error = new error.WebDriverError("foo");
     51 
     52  let bodyResp = new Response(9, () => {});
     53  bodyResp.body = "bar";
     54 
     55  cmd.onresponse(errorResp);
     56  equal(true, onerrorOk);
     57  equal(false, onresultOk);
     58 
     59  cmd.onresponse(bodyResp);
     60  equal(true, onresultOk);
     61 });
     62 
     63 add_task(function test_Command_ctor() {
     64  let cmd = new Command(42, "bar", { bar: "baz" });
     65  let msg = cmd.toPacket();
     66 
     67  equal(Command.Type, msg[0]);
     68  equal(cmd.id, msg[1]);
     69  equal(cmd.name, msg[2]);
     70  equal(cmd.parameters, msg[3]);
     71 });
     72 
     73 add_task(function test_Command_toString() {
     74  let cmd = new Command(42, "foo", { bar: "baz" });
     75  equal(JSON.stringify(cmd.toPacket()), cmd.toString());
     76 });
     77 
     78 add_task(function test_Command_fromPacket() {
     79  let c1 = new Command(42, "foo", { bar: "baz" });
     80 
     81  let msg = c1.toPacket();
     82  let c2 = Command.fromPacket(msg);
     83 
     84  equal(c1.id, c2.id);
     85  equal(c1.name, c2.name);
     86  equal(c1.parameters, c2.parameters);
     87 
     88  Assert.throws(
     89    () => Command.fromPacket([null, 2, "foo", {}]),
     90    /InvalidArgumentError/
     91  );
     92  Assert.throws(
     93    () => Command.fromPacket([1, 2, "foo", {}]),
     94    /InvalidArgumentError/
     95  );
     96  Assert.throws(
     97    () => Command.fromPacket([0, null, "foo", {}]),
     98    /InvalidArgumentError/
     99  );
    100  Assert.throws(
    101    () => Command.fromPacket([0, 2, null, {}]),
    102    /InvalidArgumentError/
    103  );
    104  Assert.throws(
    105    () => Command.fromPacket([0, 2, "foo", false]),
    106    /InvalidArgumentError/
    107  );
    108 
    109  let nullParams = Command.fromPacket([0, 2, "foo", null]);
    110  equal(
    111    "[object Object]",
    112    Object.prototype.toString.call(nullParams.parameters)
    113  );
    114 });
    115 
    116 add_task(function test_Command_Type() {
    117  equal(0, Command.Type);
    118 });
    119 
    120 add_task(function test_Response_ctor() {
    121  let handler = () => {
    122    throw new Error("foo");
    123  };
    124 
    125  let resp = new Response(42, handler);
    126  equal(42, resp.id);
    127  equal(null, resp.error);
    128  ok("origin" in resp);
    129  equal(Message.Origin.Server, resp.origin);
    130  equal(false, resp.sent);
    131  equal(handler, resp.respHandler_);
    132 });
    133 
    134 add_task(function test_Response_sendConditionally() {
    135  let fired = false;
    136  let resp = new Response(42, () => (fired = true));
    137  resp.sendConditionally(() => false);
    138  equal(false, resp.sent);
    139  equal(false, fired);
    140  resp.sendConditionally(() => true);
    141  equal(true, resp.sent);
    142  equal(true, fired);
    143 });
    144 
    145 add_task(function test_Response_send() {
    146  let fired = false;
    147  let resp = new Response(42, () => (fired = true));
    148  resp.send();
    149  equal(true, resp.sent);
    150  equal(true, fired);
    151 });
    152 
    153 add_task(function test_Response_sendError_sent() {
    154  let resp = new Response(42, r => equal(false, r.sent));
    155  resp.sendError(new error.WebDriverError());
    156  ok(resp.sent);
    157  Assert.throws(() => resp.send(), /already been sent/);
    158 });
    159 
    160 add_task(function test_Response_sendError_body() {
    161  let resp = new Response(42, r => equal(null, r.body));
    162  resp.sendError(new error.WebDriverError());
    163 });
    164 
    165 add_task(function test_Response_sendError_errorSerialisation() {
    166  let err1 = new error.WebDriverError();
    167  let resp1 = new Response(42);
    168  resp1.sendError(err1);
    169  equal(err1.status, resp1.error.error);
    170  deepEqual(err1.toJSON(), resp1.error);
    171 
    172  let err2 = new error.InvalidArgumentError();
    173  let resp2 = new Response(43);
    174  resp2.sendError(err2);
    175  equal(err2.status, resp2.error.error);
    176  deepEqual(err2.toJSON(), resp2.error);
    177 });
    178 
    179 add_task(function test_Response_sendError_wrapInternalError() {
    180  let err = new ReferenceError("foo");
    181 
    182  // errors that originate from JavaScript (i.e. Marionette implementation
    183  // issues) should be converted to UnknownError for transport
    184  let resp = new Response(42, r => {
    185    equal("unknown error", r.error.error);
    186    equal(false, resp.sent);
    187  });
    188 
    189  // they should also throw after being sent
    190  Assert.throws(() => resp.sendError(err), /foo/);
    191  equal(true, resp.sent);
    192 });
    193 
    194 add_task(function test_Response_toPacket() {
    195  let resp = new Response(42, () => {});
    196  let msg = resp.toPacket();
    197 
    198  equal(Response.Type, msg[0]);
    199  equal(resp.id, msg[1]);
    200  equal(resp.error, msg[2]);
    201  equal(resp.body, msg[3]);
    202 });
    203 
    204 add_task(function test_Response_toString() {
    205  let resp = new Response(42, () => {});
    206  resp.error = "foo";
    207  resp.body = "bar";
    208 
    209  equal(JSON.stringify(resp.toPacket()), resp.toString());
    210 });
    211 
    212 add_task(function test_Response_fromPacket() {
    213  let r1 = new Response(42, () => {});
    214  r1.error = "foo";
    215  r1.body = "bar";
    216 
    217  let msg = r1.toPacket();
    218  let r2 = Response.fromPacket(msg);
    219 
    220  equal(r1.id, r2.id);
    221  equal(r1.error, r2.error);
    222  equal(r1.body, r2.body);
    223 
    224  Assert.throws(
    225    () => Response.fromPacket([null, 2, "foo", {}]),
    226    /InvalidArgumentError/
    227  );
    228  Assert.throws(
    229    () => Response.fromPacket([0, 2, "foo", {}]),
    230    /InvalidArgumentError/
    231  );
    232  Assert.throws(
    233    () => Response.fromPacket([1, null, "foo", {}]),
    234    /InvalidArgumentError/
    235  );
    236  Assert.throws(
    237    () => Response.fromPacket([1, 2, null, {}]),
    238    /InvalidArgumentError/
    239  );
    240  Response.fromPacket([1, 2, "foo", null]);
    241 });
    242 
    243 add_task(function test_Response_Type() {
    244  equal(1, Response.Type);
    245 });