Blame testing/marionette/test_session.js

Packit f0b94e
/* This Source Code Form is subject to the terms of the Mozilla Public
Packit f0b94e
 * License, v. 2.0. If a copy of the MPL was not distributed with this file,
Packit f0b94e
 * You can obtain one at http://mozilla.org/MPL/2.0/. */
Packit f0b94e
Packit f0b94e
"use strict";
Packit f0b94e
Packit f0b94e
ChromeUtils.import("resource://gre/modules/Preferences.jsm");
Packit f0b94e
ChromeUtils.import("resource://gre/modules/Services.jsm");
Packit f0b94e
Packit f0b94e
ChromeUtils.import("chrome://marionette/content/error.js");
Packit f0b94e
ChromeUtils.import("chrome://marionette/content/session.js");
Packit f0b94e
Packit f0b94e
add_test(function test_Timeouts_ctor() {
Packit f0b94e
  let ts = new session.Timeouts();
Packit f0b94e
  equal(ts.implicit, 0);
Packit f0b94e
  equal(ts.pageLoad, 300000);
Packit f0b94e
  equal(ts.script, 30000);
Packit f0b94e
Packit f0b94e
  run_next_test();
Packit f0b94e
});
Packit f0b94e
Packit f0b94e
add_test(function test_Timeouts_toString() {
Packit f0b94e
  equal(new session.Timeouts().toString(), "[object session.Timeouts]");
Packit f0b94e
Packit f0b94e
  run_next_test();
Packit f0b94e
});
Packit f0b94e
Packit f0b94e
add_test(function test_Timeouts_toJSON() {
Packit f0b94e
  let ts = new session.Timeouts();
Packit f0b94e
  deepEqual(ts.toJSON(), {"implicit": 0, "pageLoad": 300000, "script": 30000});
Packit f0b94e
Packit f0b94e
  run_next_test();
Packit f0b94e
});
Packit f0b94e
Packit f0b94e
add_test(function test_Timeouts_fromJSON() {
Packit f0b94e
  let json = {
Packit f0b94e
    implicit: 10,
Packit f0b94e
    pageLoad: 20,
Packit f0b94e
    script: 30,
Packit f0b94e
  };
Packit f0b94e
  let ts = session.Timeouts.fromJSON(json);
Packit f0b94e
  equal(ts.implicit, json.implicit);
Packit f0b94e
  equal(ts.pageLoad, json.pageLoad);
Packit f0b94e
  equal(ts.script, json.script);
Packit f0b94e
Packit f0b94e
  run_next_test();
Packit f0b94e
});
Packit f0b94e
Packit f0b94e
add_test(function test_Timeouts_fromJSON_unrecognised_field() {
Packit f0b94e
  let json = {
Packit f0b94e
    sessionId: "foobar",
Packit f0b94e
    script: 42,
Packit f0b94e
  };
Packit f0b94e
  try {
Packit f0b94e
    session.Timeouts.fromJSON(json);
Packit f0b94e
  } catch (e) {
Packit f0b94e
    equal(e.name, InvalidArgumentError.name);
Packit f0b94e
    equal(e.message, "Unrecognised timeout: sessionId");
Packit f0b94e
  }
Packit f0b94e
Packit f0b94e
  run_next_test();
Packit f0b94e
});
Packit f0b94e
Packit f0b94e
add_test(function test_Timeouts_fromJSON_invalid_type() {
Packit f0b94e
  try {
Packit f0b94e
    session.Timeouts.fromJSON({script: "foobar"});
Packit f0b94e
  } catch (e) {
Packit f0b94e
    equal(e.name, InvalidArgumentError.name);
Packit f0b94e
    equal(e.message, "Expected [object String] \"foobar\" to be an integer");
Packit f0b94e
  }
Packit f0b94e
Packit f0b94e
  run_next_test();
Packit f0b94e
});
Packit f0b94e
Packit f0b94e
add_test(function test_Timeouts_fromJSON_bounds() {
Packit f0b94e
  try {
Packit f0b94e
    session.Timeouts.fromJSON({script: -42});
Packit f0b94e
  } catch (e) {
Packit f0b94e
    equal(e.name, InvalidArgumentError.name);
Packit f0b94e
    equal(e.message, "Expected [object Number] -42 to be >= 0");
Packit f0b94e
  }
Packit f0b94e
Packit f0b94e
  run_next_test();
Packit f0b94e
});
Packit f0b94e
Packit f0b94e
add_test(function test_PageLoadStrategy() {
Packit f0b94e
  equal(session.PageLoadStrategy.None, "none");
Packit f0b94e
  equal(session.PageLoadStrategy.Eager, "eager");
Packit f0b94e
  equal(session.PageLoadStrategy.Normal, "normal");
Packit f0b94e
Packit f0b94e
  run_next_test();
Packit f0b94e
});
Packit f0b94e
Packit f0b94e
add_test(function test_Proxy_ctor() {
Packit f0b94e
  let p = new session.Proxy();
Packit f0b94e
  let props = [
Packit f0b94e
    "proxyType",
Packit f0b94e
    "httpProxy",
Packit f0b94e
    "sslProxy",
Packit f0b94e
    "ftpProxy",
Packit f0b94e
    "socksProxy",
Packit f0b94e
    "socksVersion",
Packit f0b94e
    "proxyAutoconfigUrl",
Packit f0b94e
  ];
Packit f0b94e
  for (let prop of props) {
Packit f0b94e
    ok(prop in p, `${prop} in ${JSON.stringify(props)}`);
Packit f0b94e
    equal(p[prop], null);
Packit f0b94e
  }
Packit f0b94e
Packit f0b94e
  run_next_test();
Packit f0b94e
});
Packit f0b94e
Packit f0b94e
add_test(function test_Proxy_init() {
Packit f0b94e
  let p = new session.Proxy();
Packit f0b94e
Packit f0b94e
  // no changed made, and 5 (system) is default
Packit f0b94e
  equal(p.init(), false);
Packit f0b94e
  equal(Preferences.get("network.proxy.type"), 5);
Packit f0b94e
Packit f0b94e
  // pac
Packit f0b94e
  p.proxyType = "pac";
Packit f0b94e
  p.proxyAutoconfigUrl = "http://localhost:1234";
Packit f0b94e
  ok(p.init());
Packit f0b94e
Packit f0b94e
  equal(Preferences.get("network.proxy.type"), 2);
Packit f0b94e
  equal(Preferences.get("network.proxy.autoconfig_url"),
Packit f0b94e
      "http://localhost:1234");
Packit f0b94e
Packit f0b94e
  // direct
Packit f0b94e
  p = new session.Proxy();
Packit f0b94e
  p.proxyType = "direct";
Packit f0b94e
  ok(p.init());
Packit f0b94e
  equal(Preferences.get("network.proxy.type"), 0);
Packit f0b94e
Packit f0b94e
  // autodetect
Packit f0b94e
  p = new session.Proxy();
Packit f0b94e
  p.proxyType = "autodetect";
Packit f0b94e
  ok(p.init());
Packit f0b94e
  equal(Preferences.get("network.proxy.type"), 4);
Packit f0b94e
Packit f0b94e
  // system
Packit f0b94e
  p = new session.Proxy();
Packit f0b94e
  p.proxyType = "system";
Packit f0b94e
  ok(p.init());
Packit f0b94e
  equal(Preferences.get("network.proxy.type"), 5);
Packit f0b94e
Packit f0b94e
  // manual
Packit f0b94e
  for (let proxy of ["ftp", "http", "ssl", "socks"]) {
Packit f0b94e
    p = new session.Proxy();
Packit f0b94e
    p.proxyType = "manual";
Packit f0b94e
    p.noProxy = ["foo", "bar"];
Packit f0b94e
    p[`${proxy}Proxy`] = "foo";
Packit f0b94e
    p[`${proxy}ProxyPort`] = 42;
Packit f0b94e
    if (proxy === "socks") {
Packit f0b94e
      p[`${proxy}Version`] = 4;
Packit f0b94e
    }
Packit f0b94e
Packit f0b94e
    ok(p.init());
Packit f0b94e
    equal(Preferences.get("network.proxy.type"), 1);
Packit f0b94e
    equal(Preferences.get("network.proxy.no_proxies_on"), "foo, bar");
Packit f0b94e
    equal(Preferences.get(`network.proxy.${proxy}`), "foo");
Packit f0b94e
    equal(Preferences.get(`network.proxy.${proxy}_port`), 42);
Packit f0b94e
    if (proxy === "socks") {
Packit f0b94e
      equal(Preferences.get(`network.proxy.${proxy}_version`), 4);
Packit f0b94e
    }
Packit f0b94e
  }
Packit f0b94e
Packit f0b94e
  // empty no proxy should reset default exclustions
Packit f0b94e
  p = new session.Proxy();
Packit f0b94e
  p.proxyType = "manual";
Packit f0b94e
  p.noProxy = [];
Packit f0b94e
  ok(p.init());
Packit f0b94e
  equal(Preferences.get("network.proxy.no_proxies_on"), "");
Packit f0b94e
Packit f0b94e
  run_next_test();
Packit f0b94e
});
Packit f0b94e
Packit f0b94e
add_test(function test_Proxy_toString() {
Packit f0b94e
  equal(new session.Proxy().toString(), "[object session.Proxy]");
Packit f0b94e
Packit f0b94e
  run_next_test();
Packit f0b94e
});
Packit f0b94e
Packit f0b94e
add_test(function test_Proxy_toJSON() {
Packit f0b94e
  let p = new session.Proxy();
Packit f0b94e
  deepEqual(p.toJSON(), {});
Packit f0b94e
Packit f0b94e
  // autoconfig url
Packit f0b94e
  p = new session.Proxy();
Packit f0b94e
  p.proxyType = "pac";
Packit f0b94e
  p.proxyAutoconfigUrl = "foo";
Packit f0b94e
  deepEqual(p.toJSON(), {proxyType: "pac", proxyAutoconfigUrl: "foo"});
Packit f0b94e
Packit f0b94e
  // manual proxy
Packit f0b94e
  p = new session.Proxy();
Packit f0b94e
  p.proxyType = "manual";
Packit f0b94e
  deepEqual(p.toJSON(), {proxyType: "manual"});
Packit f0b94e
Packit f0b94e
  for (let proxy of ["ftpProxy", "httpProxy", "sslProxy", "socksProxy"]) {
Packit f0b94e
    let expected = {proxyType: "manual"}
Packit f0b94e
Packit f0b94e
    p = new session.Proxy();
Packit f0b94e
    p.proxyType = "manual";
Packit f0b94e
Packit f0b94e
    if (proxy == "socksProxy") {
Packit f0b94e
      p.socksVersion = 5;
Packit f0b94e
      expected.socksVersion = 5;
Packit f0b94e
    }
Packit f0b94e
Packit f0b94e
    // without port
Packit f0b94e
    p[proxy] = "foo";
Packit f0b94e
    expected[proxy] = "foo"
Packit f0b94e
    deepEqual(p.toJSON(), expected);
Packit f0b94e
Packit f0b94e
    // with port
Packit f0b94e
    p[proxy] = "foo";
Packit f0b94e
    p[`${proxy}Port`] = 0;
Packit f0b94e
    expected[proxy] = "foo:0";
Packit f0b94e
    deepEqual(p.toJSON(), expected);
Packit f0b94e
Packit f0b94e
    p[`${proxy}Port`] = 42;
Packit f0b94e
    expected[proxy] = "foo:42"
Packit f0b94e
    deepEqual(p.toJSON(), expected);
Packit f0b94e
Packit f0b94e
    // add brackets for IPv6 address as proxy hostname
Packit f0b94e
    p[proxy] = "2001:db8::1";
Packit f0b94e
    p[`${proxy}Port`] = 42;
Packit f0b94e
    expected[proxy] = "foo:42"
Packit f0b94e
    expected[proxy] = "[2001:db8::1]:42";
Packit f0b94e
    deepEqual(p.toJSON(), expected);
Packit f0b94e
  }
Packit f0b94e
Packit f0b94e
  // noProxy: add brackets for IPv6 address
Packit f0b94e
  p = new session.Proxy();
Packit f0b94e
  p.proxyType = "manual";
Packit f0b94e
  p.noProxy = ["2001:db8::1"];
Packit f0b94e
  let expected = {proxyType: "manual", noProxy: "[2001:db8::1]"};
Packit f0b94e
  deepEqual(p.toJSON(), expected);
Packit f0b94e
Packit f0b94e
  run_next_test();
Packit f0b94e
});
Packit f0b94e
Packit f0b94e
add_test(function test_Proxy_fromJSON() {
Packit f0b94e
  let p = new session.Proxy();
Packit f0b94e
  deepEqual(p, session.Proxy.fromJSON(undefined));
Packit f0b94e
  deepEqual(p, session.Proxy.fromJSON(null));
Packit f0b94e
Packit f0b94e
  for (let typ of [true, 42, "foo", []]) {
Packit f0b94e
    Assert.throws(() => session.Proxy.fromJSON(typ), /InvalidArgumentError/);
Packit f0b94e
  }
Packit f0b94e
Packit f0b94e
  // must contain a valid proxyType
Packit f0b94e
  Assert.throws(() => session.Proxy.fromJSON({}), /InvalidArgumentError/);
Packit f0b94e
  Assert.throws(() => session.Proxy.fromJSON({proxyType: "foo"}),
Packit f0b94e
      /InvalidArgumentError/);
Packit f0b94e
Packit f0b94e
  // autoconfig url
Packit f0b94e
  for (let url of [true, 42, [], {}]) {
Packit f0b94e
    Assert.throws(() => session.Proxy.fromJSON(
Packit f0b94e
        {proxyType: "pac", proxyAutoconfigUrl: url}), /InvalidArgumentError/);
Packit f0b94e
  }
Packit f0b94e
Packit f0b94e
  p = new session.Proxy();
Packit f0b94e
  p.proxyType = "pac";
Packit f0b94e
  p.proxyAutoconfigUrl = "foo";
Packit f0b94e
  deepEqual(p,
Packit f0b94e
      session.Proxy.fromJSON({proxyType: "pac", proxyAutoconfigUrl: "foo"}));
Packit f0b94e
Packit f0b94e
  // manual proxy
Packit f0b94e
  p = new session.Proxy();
Packit f0b94e
  p.proxyType = "manual";
Packit f0b94e
  deepEqual(p, session.Proxy.fromJSON({proxyType: "manual"}));
Packit f0b94e
Packit f0b94e
  for (let proxy of ["httpProxy", "sslProxy", "ftpProxy", "socksProxy"]) {
Packit f0b94e
    let manual = {proxyType: "manual"};
Packit f0b94e
Packit f0b94e
    // invalid hosts
Packit f0b94e
    for (let host of [true, 42, [], {}, null, "http://foo",
Packit f0b94e
        "foo:-1", "foo:65536", "foo/test", "foo#42", "foo?foo=bar",
Packit f0b94e
        "2001:db8::1"]) {
Packit f0b94e
      manual[proxy] = host;
Packit f0b94e
      Assert.throws(() => session.Proxy.fromJSON(manual),
Packit f0b94e
          /InvalidArgumentError/);
Packit f0b94e
    }
Packit f0b94e
Packit f0b94e
    p = new session.Proxy();
Packit f0b94e
    p.proxyType = "manual";
Packit f0b94e
    if (proxy == "socksProxy") {
Packit f0b94e
      manual.socksVersion = 5;
Packit f0b94e
      p.socksVersion = 5;
Packit f0b94e
    }
Packit f0b94e
Packit f0b94e
    let host_map = {
Packit f0b94e
      "foo:1": {hostname: "foo", port: 1},
Packit f0b94e
      "foo:21": {hostname: "foo", port: 21},
Packit f0b94e
      "foo:80": {hostname: "foo", port: 80},
Packit f0b94e
      "foo:443": {hostname: "foo", port: 443},
Packit f0b94e
      "foo:65535": {hostname: "foo", port: 65535},
Packit f0b94e
      "127.0.0.1:42": {hostname: "127.0.0.1", port: 42},
Packit f0b94e
      "[2001:db8::1]:42": {hostname: "2001:db8::1", port: "42"},
Packit f0b94e
    };
Packit f0b94e
Packit f0b94e
    // valid proxy hosts with port
Packit f0b94e
    for (let host in host_map) {
Packit f0b94e
      manual[proxy] = host;
Packit f0b94e
Packit f0b94e
      p[`${proxy}`] = host_map[host]["hostname"];
Packit f0b94e
      p[`${proxy}Port`] = host_map[host]["port"];
Packit f0b94e
Packit f0b94e
      deepEqual(p, session.Proxy.fromJSON(manual));
Packit f0b94e
    }
Packit f0b94e
Packit f0b94e
    // Without a port the default port of the scheme is used
Packit f0b94e
    for (let host of ["foo", "foo:"]) {
Packit f0b94e
      manual[proxy] = host;
Packit f0b94e
Packit f0b94e
      // For socks no default port is available
Packit f0b94e
      p[proxy] = `foo`;
Packit f0b94e
      if (proxy === "socksProxy") {
Packit f0b94e
        p[`${proxy}Port`] = null;
Packit f0b94e
      } else {
Packit f0b94e
        let default_ports = {"ftpProxy": 21, "httpProxy": 80,
Packit f0b94e
           "sslProxy": 443};
Packit f0b94e
Packit f0b94e
        p[`${proxy}Port`] = default_ports[proxy];
Packit f0b94e
      }
Packit f0b94e
Packit f0b94e
      deepEqual(p, session.Proxy.fromJSON(manual));
Packit f0b94e
    }
Packit f0b94e
  }
Packit f0b94e
Packit f0b94e
  // missing required socks version
Packit f0b94e
  Assert.throws(() => session.Proxy.fromJSON(
Packit f0b94e
      {proxyType: "manual", socksProxy: "foo:1234"}),
Packit f0b94e
      /InvalidArgumentError/);
Packit f0b94e
Packit f0b94e
  // noProxy: invalid settings
Packit f0b94e
  for (let noProxy of [true, 42, {}, null, "foo",
Packit f0b94e
      [true], [42], [{}], [null]]) {
Packit f0b94e
    Assert.throws(() => session.Proxy.fromJSON(
Packit f0b94e
        {proxyType: "manual", noProxy: noProxy}),
Packit f0b94e
        /InvalidArgumentError/);
Packit f0b94e
  }
Packit f0b94e
Packit f0b94e
  // noProxy: valid settings
Packit f0b94e
  p = new session.Proxy();
Packit f0b94e
  p.proxyType = "manual";
Packit f0b94e
  for (let noProxy of [[], ["foo"], ["foo", "bar"], ["127.0.0.1"]]) {
Packit f0b94e
    let manual = {proxyType: "manual", "noProxy": noProxy}
Packit f0b94e
    p.noProxy = noProxy;
Packit f0b94e
    deepEqual(p, session.Proxy.fromJSON(manual));
Packit f0b94e
  }
Packit f0b94e
Packit f0b94e
  // noProxy: IPv6 needs brackets removed
Packit f0b94e
  p = new session.Proxy();
Packit f0b94e
  p.proxyType = "manual";
Packit f0b94e
  p.noProxy = ["2001:db8::1"];
Packit f0b94e
  let manual = {proxyType: "manual", "noProxy": ["[2001:db8::1]"]}
Packit f0b94e
  deepEqual(p, session.Proxy.fromJSON(manual));
Packit f0b94e
Packit f0b94e
  run_next_test();
Packit f0b94e
});
Packit f0b94e
Packit f0b94e
add_test(function test_Capabilities_ctor() {
Packit f0b94e
  let caps = new session.Capabilities();
Packit f0b94e
  ok(caps.has("browserName"));
Packit f0b94e
  ok(caps.has("browserVersion"));
Packit f0b94e
  ok(caps.has("platformName"));
Packit f0b94e
  ok(caps.has("platformVersion"));
Packit f0b94e
  equal(session.PageLoadStrategy.Normal, caps.get("pageLoadStrategy"));
Packit f0b94e
  equal(false, caps.get("acceptInsecureCerts"));
Packit f0b94e
  ok(caps.get("timeouts") instanceof session.Timeouts);
Packit f0b94e
  ok(caps.get("proxy") instanceof session.Proxy);
Packit f0b94e
Packit f0b94e
  ok(caps.has("rotatable"));
Packit f0b94e
Packit f0b94e
  equal(false, caps.get("moz:accessibilityChecks"));
Packit f0b94e
  ok(caps.has("moz:processID"));
Packit f0b94e
  ok(caps.has("moz:profile"));
Packit f0b94e
  equal(false, caps.get("moz:useNonSpecCompliantPointerOrigin"));
Packit f0b94e
  equal(true, caps.get("moz:webdriverClick"));
Packit f0b94e
Packit f0b94e
  run_next_test();
Packit f0b94e
});
Packit f0b94e
Packit f0b94e
add_test(function test_Capabilities_toString() {
Packit f0b94e
  equal("[object session.Capabilities]", new session.Capabilities().toString());
Packit f0b94e
Packit f0b94e
  run_next_test();
Packit f0b94e
});
Packit f0b94e
Packit f0b94e
add_test(function test_Capabilities_toJSON() {
Packit f0b94e
  let caps = new session.Capabilities();
Packit f0b94e
  let json = caps.toJSON();
Packit f0b94e
Packit f0b94e
  equal(caps.get("browserName"), json.browserName);
Packit f0b94e
  equal(caps.get("browserVersion"), json.browserVersion);
Packit f0b94e
  equal(caps.get("platformName"), json.platformName);
Packit f0b94e
  equal(caps.get("platformVersion"), json.platformVersion);
Packit f0b94e
  equal(caps.get("pageLoadStrategy"), json.pageLoadStrategy);
Packit f0b94e
  equal(caps.get("acceptInsecureCerts"), json.acceptInsecureCerts);
Packit f0b94e
  deepEqual(caps.get("timeouts").toJSON(), json.timeouts);
Packit f0b94e
  equal(undefined, json.proxy);
Packit f0b94e
Packit f0b94e
  equal(caps.get("rotatable"), json.rotatable);
Packit f0b94e
Packit f0b94e
  equal(caps.get("moz:accessibilityChecks"), json["moz:accessibilityChecks"]);
Packit f0b94e
  equal(caps.get("moz:processID"), json["moz:processID"]);
Packit f0b94e
  equal(caps.get("moz:profile"), json["moz:profile"]);
Packit f0b94e
  equal(caps.get("moz:useNonSpecCompliantPointerOrigin"),
Packit f0b94e
        json["moz:useNonSpecCompliantPointerOrigin"]);
Packit f0b94e
  equal(caps.get("moz:webdriverClick"), json["moz:webdriverClick"]);
Packit f0b94e
Packit f0b94e
  run_next_test();
Packit f0b94e
});
Packit f0b94e
Packit f0b94e
add_test(function test_Capabilities_fromJSON() {
Packit f0b94e
  const {fromJSON} = session.Capabilities;
Packit f0b94e
Packit f0b94e
  // plain
Packit f0b94e
  for (let typ of [{}, null, undefined]) {
Packit f0b94e
    ok(fromJSON(typ).has("browserName"));
Packit f0b94e
  }
Packit f0b94e
  for (let typ of [true, 42, "foo", []]) {
Packit f0b94e
    Assert.throws(() => fromJSON(typ), /InvalidArgumentError/);
Packit f0b94e
  }
Packit f0b94e
Packit f0b94e
  // matching
Packit f0b94e
  let caps = new session.Capabilities();
Packit f0b94e
Packit f0b94e
  caps = fromJSON({acceptInsecureCerts: true});
Packit f0b94e
  equal(true, caps.get("acceptInsecureCerts"));
Packit f0b94e
  caps = fromJSON({acceptInsecureCerts: false});
Packit f0b94e
  equal(false, caps.get("acceptInsecureCerts"));
Packit f0b94e
  Assert.throws(() => fromJSON({acceptInsecureCerts: "foo"}));
Packit f0b94e
Packit f0b94e
  for (let strategy of Object.values(session.PageLoadStrategy)) {
Packit f0b94e
    caps = fromJSON({pageLoadStrategy: strategy});
Packit f0b94e
    equal(strategy, caps.get("pageLoadStrategy"));
Packit f0b94e
  }
Packit f0b94e
  Assert.throws(() => fromJSON({pageLoadStrategy: "foo"}));
Packit f0b94e
Packit f0b94e
  let proxyConfig = {proxyType: "manual"};
Packit f0b94e
  caps = fromJSON({proxy: proxyConfig});
Packit f0b94e
  equal("manual", caps.get("proxy").proxyType);
Packit f0b94e
Packit f0b94e
  let timeoutsConfig = {implicit: 123};
Packit f0b94e
  caps = fromJSON({timeouts: timeoutsConfig});
Packit f0b94e
  equal(123, caps.get("timeouts").implicit);
Packit f0b94e
Packit f0b94e
  caps = fromJSON({"moz:accessibilityChecks": true});
Packit f0b94e
  equal(true, caps.get("moz:accessibilityChecks"));
Packit f0b94e
  caps = fromJSON({"moz:accessibilityChecks": false});
Packit f0b94e
  equal(false, caps.get("moz:accessibilityChecks"));
Packit f0b94e
  Assert.throws(() => fromJSON({"moz:accessibilityChecks": "foo"}));
Packit f0b94e
  Assert.throws(() => fromJSON({"moz:accessibilityChecks": 1}));
Packit f0b94e
Packit f0b94e
  caps = fromJSON({"moz:useNonSpecCompliantPointerOrigin": false});
Packit f0b94e
  equal(false, caps.get("moz:useNonSpecCompliantPointerOrigin"));
Packit f0b94e
  caps = fromJSON({"moz:useNonSpecCompliantPointerOrigin": true});
Packit f0b94e
  equal(true, caps.get("moz:useNonSpecCompliantPointerOrigin"));
Packit f0b94e
  Assert.throws(() => fromJSON({"moz:useNonSpecCompliantPointerOrigin": "foo"}));
Packit f0b94e
  Assert.throws(() => fromJSON({"moz:useNonSpecCompliantPointerOrigin": 1}));
Packit f0b94e
Packit f0b94e
  caps = fromJSON({"moz:webdriverClick": true});
Packit f0b94e
  equal(true, caps.get("moz:webdriverClick"));
Packit f0b94e
  caps = fromJSON({"moz:webdriverClick": false});
Packit f0b94e
  equal(false, caps.get("moz:webdriverClick"));
Packit f0b94e
  Assert.throws(() => fromJSON({"moz:webdriverClick": "foo"}));
Packit f0b94e
  Assert.throws(() => fromJSON({"moz:webdriverClick": 1}));
Packit f0b94e
Packit f0b94e
  run_next_test();
Packit f0b94e
});
Packit f0b94e
Packit f0b94e
// use session.Proxy.toJSON to test marshal
Packit f0b94e
add_test(function test_marshal() {
Packit f0b94e
  let proxy = new session.Proxy();
Packit f0b94e
Packit f0b94e
  // drop empty fields
Packit f0b94e
  deepEqual({}, proxy.toJSON());
Packit f0b94e
  proxy.proxyType = "manual";
Packit f0b94e
  deepEqual({proxyType: "manual"}, proxy.toJSON());
Packit f0b94e
  proxy.proxyType = null;
Packit f0b94e
  deepEqual({}, proxy.toJSON());
Packit f0b94e
  proxy.proxyType = undefined;
Packit f0b94e
  deepEqual({}, proxy.toJSON());
Packit f0b94e
Packit f0b94e
  // iterate over object literals
Packit f0b94e
  proxy.proxyType = {foo: "bar"};
Packit f0b94e
  deepEqual({proxyType: {foo: "bar"}}, proxy.toJSON());
Packit f0b94e
Packit f0b94e
  // iterate over complex object that implement toJSON
Packit f0b94e
  proxy.proxyType = new session.Proxy();
Packit f0b94e
  deepEqual({}, proxy.toJSON());
Packit f0b94e
  proxy.proxyType.proxyType = "manual";
Packit f0b94e
  deepEqual({proxyType: {proxyType: "manual"}}, proxy.toJSON());
Packit f0b94e
Packit f0b94e
  // drop objects with no entries
Packit f0b94e
  proxy.proxyType = {foo: {}};
Packit f0b94e
  deepEqual({}, proxy.toJSON());
Packit f0b94e
  proxy.proxyType = {foo: new session.Proxy()};
Packit f0b94e
  deepEqual({}, proxy.toJSON());
Packit f0b94e
Packit f0b94e
  run_next_test();
Packit f0b94e
});