123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371 |
- /* 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/. */
- "use strict";
- const {utils: Cu} = Components;
- Cu.import("resource://gre/modules/Preferences.jsm");
- Cu.import("resource://gre/modules/Services.jsm");
- Cu.import("chrome://marionette/content/error.js");
- Cu.import("chrome://marionette/content/session.js");
- add_test(function test_Timeouts_ctor() {
- let ts = new session.Timeouts();
- equal(ts.implicit, 0);
- equal(ts.pageLoad, 300000);
- equal(ts.script, 30000);
- run_next_test();
- });
- add_test(function test_Timeouts_toString() {
- equal(new session.Timeouts().toString(), "[object session.Timeouts]");
- run_next_test();
- });
- add_test(function test_Timeouts_toJSON() {
- let ts = new session.Timeouts();
- deepEqual(ts.toJSON(), {"implicit": 0, "page load": 300000, "script": 30000});
- run_next_test();
- });
- add_test(function test_Timeouts_fromJSON() {
- let json = {
- "implicit": 10,
- "page load": 20,
- "script": 30,
- };
- let ts = session.Timeouts.fromJSON(json);
- equal(ts.implicit, json["implicit"]);
- equal(ts.pageLoad, json["page load"]);
- equal(ts.script, json["script"]);
- run_next_test();
- });
- add_test(function test_PageLoadStrategy() {
- equal(session.PageLoadStrategy.None, "none");
- equal(session.PageLoadStrategy.Eager, "eager");
- equal(session.PageLoadStrategy.Normal, "normal");
- run_next_test();
- });
- add_test(function test_Proxy_ctor() {
- let p = new session.Proxy();
- let props = [
- "proxyType",
- "httpProxy",
- "httpProxyPort",
- "sslProxy",
- "sslProxyPort",
- "ftpProxy",
- "ftpProxyPort",
- "socksProxy",
- "socksProxyPort",
- "socksVersion",
- "proxyAutoconfigUrl",
- ];
- for (let prop of props) {
- ok(prop in p, `${prop} in ${JSON.stringify(props)}`);
- equal(p[prop], null);
- }
- run_next_test();
- });
- add_test(function test_Proxy_init() {
- let p = new session.Proxy();
- // no changed made, and 5 (system) is default
- equal(p.init(), false);
- equal(Preferences.get("network.proxy.type"), 5);
- // pac
- p.proxyType = "pac";
- p.proxyAutoconfigUrl = "http://localhost:1234";
- ok(p.init());
- equal(Preferences.get("network.proxy.type"), 2);
- equal(Preferences.get("network.proxy.autoconfig_url"),
- "http://localhost:1234");
- // autodetect
- p = new session.Proxy();
- p.proxyType = "autodetect";
- ok(p.init());
- equal(Preferences.get("network.proxy.type"), 4);
- // system
- p = new session.Proxy();
- p.proxyType = "system";
- ok(p.init());
- equal(Preferences.get("network.proxy.type"), 5);
- // noproxy
- p = new session.Proxy();
- p.proxyType = "noproxy";
- ok(p.init());
- equal(Preferences.get("network.proxy.type"), 0);
- run_next_test();
- });
- add_test(function test_Proxy_toString() {
- equal(new session.Proxy().toString(), "[object session.Proxy]");
- run_next_test();
- });
- add_test(function test_Proxy_toJSON() {
- let p = new session.Proxy();
- deepEqual(p.toJSON(), {});
- p = new session.Proxy();
- p.proxyType = "manual";
- deepEqual(p.toJSON(), {proxyType: "manual"});
- run_next_test();
- });
- add_test(function test_Proxy_fromJSON() {
- deepEqual({}, session.Proxy.fromJSON(undefined).toJSON());
- deepEqual({}, session.Proxy.fromJSON(null).toJSON());
- for (let typ of [true, 42, "foo", []]) {
- Assert.throws(() => session.Proxy.fromJSON(typ), InvalidArgumentError);
- }
- // must contain proxyType
- Assert.throws(() => session.Proxy.fromJSON({}), InvalidArgumentError);
- deepEqual({proxyType: "foo"},
- session.Proxy.fromJSON({proxyType: "foo"}).toJSON());
- // manual
- session.Proxy.fromJSON({proxyType: "manual"});
- for (let proxy of ["httpProxy", "sslProxy", "ftpProxy", "socksProxy"]) {
- let manual = {proxyType: "manual"};
- for (let typ of [true, 42, [], {}, null]) {
- manual[proxy] = typ;
- Assert.throws(() => session.Proxy.fromJSON(manual),
- InvalidArgumentError);
- }
- manual[proxy] = "foo";
- Assert.throws(() => session.Proxy.fromJSON(manual),
- InvalidArgumentError);
- for (let typ of ["bar", true, [], {}, null, undefined]) {
- manual[proxy + "Port"] = typ;
- Assert.throws(() => session.Proxy.fromJSON(manual),
- InvalidArgumentError);
- }
- manual[proxy] = "foo";
- manual[proxy + "Port"] = 1234;
- let expected = {
- "proxyType": "manual",
- [proxy]: "foo",
- [proxy + "Port"]: 1234,
- };
- if (proxy == "socksProxy") {
- manual.socksProxyVersion = 42;
- expected.socksProxyVersion = 42;
- }
- deepEqual(expected, session.Proxy.fromJSON(manual).toJSON());
- }
- Assert.throws(() => session.Proxy.fromJSON(
- {proxyType: "manual", socksProxy: "foo", socksProxyPort: 1234}),
- InvalidArgumentError);
- run_next_test();
- });
- add_test(function test_Capabilities_ctor() {
- let caps = new session.Capabilities();
- ok(caps.has("browserName"));
- ok(caps.has("browserVersion"));
- ok(caps.has("platformName"));
- ok(caps.has("platformVersion"));
- equal(session.PageLoadStrategy.Normal, caps.get("pageLoadStrategy"));
- equal(false, caps.get("acceptInsecureCerts"));
- ok(caps.get("timeouts") instanceof session.Timeouts);
- ok(caps.get("proxy") instanceof session.Proxy);
- ok(caps.has("rotatable"));
- equal(0, caps.get("specificationLevel"));
- ok(caps.has("moz:processID"));
- ok(caps.has("moz:profile"));
- equal(false, caps.get("moz:accessibilityChecks"));
- run_next_test();
- });
- add_test(function test_Capabilities_toString() {
- equal("[object session.Capabilities]", new session.Capabilities().toString());
- run_next_test();
- });
- add_test(function test_Capabilities_toJSON() {
- let caps = new session.Capabilities();
- let json = caps.toJSON();
- equal(caps.get("browserName"), json.browserName);
- equal(caps.get("browserVersion"), json.browserVersion);
- equal(caps.get("platformName"), json.platformName);
- equal(caps.get("platformVersion"), json.platformVersion);
- equal(caps.get("pageLoadStrategy"), json.pageLoadStrategy);
- equal(caps.get("acceptInsecureCerts"), json.acceptInsecureCerts);
- deepEqual(caps.get("timeouts").toJSON(), json.timeouts);
- equal(undefined, json.proxy);
- equal(caps.get("rotatable"), json.rotatable);
- equal(caps.get("specificationLevel"), json.specificationLevel);
- equal(caps.get("moz:processID"), json["moz:processID"]);
- equal(caps.get("moz:profile"), json["moz:profile"]);
- equal(caps.get("moz:accessibilityChecks"), json["moz:accessibilityChecks"]);
- run_next_test();
- });
- add_test(function test_Capabilities_fromJSON() {
- const {fromJSON} = session.Capabilities;
- // plain
- for (let typ of [{}, null, undefined]) {
- ok(fromJSON(typ, {merge: true}).has("browserName"));
- ok(fromJSON(typ, {merge: false}).has("browserName"));
- }
- for (let typ of [true, 42, "foo", []]) {
- Assert.throws(() =>
- fromJSON(typ, {merge: true}), InvalidArgumentError);
- Assert.throws(() =>
- fromJSON(typ, {merge: false}), InvalidArgumentError);
- }
- // merging
- let desired = {"moz:accessibilityChecks": false};
- let required = {"moz:accessibilityChecks": true};
- let matched = fromJSON(
- {desiredCapabilities: desired, requiredCapabilities: required},
- {merge: true});
- ok(matched.has("moz:accessibilityChecks"));
- equal(true, matched.get("moz:accessibilityChecks"));
- // desiredCapabilities/requriedCapabilities types
- for (let typ of [undefined, null, {}]) {
- ok(fromJSON({desiredCapabilities: typ}, {merge: true}));
- ok(fromJSON({requiredCapabilities: typ}, {merge: true}));
- }
- for (let typ of [true, 42, "foo", []]) {
- Assert.throws(() => fromJSON({desiredCapabilities: typ}, {merge: true}));
- Assert.throws(() => fromJSON({requiredCapabilities: typ}, {merge: true}));
- }
- // matching
- let caps = new session.Capabilities();
- ok(fromJSON({browserName: caps.get("browserName")}));
- ok(fromJSON({browserName: null}));
- ok(fromJSON({browserName: undefined}));
- ok(fromJSON({browserName: "*"}));
- Assert.throws(() => fromJSON({browserName: "foo"}));
- ok(fromJSON({browserVersion: caps.get("browserVersion")}));
- ok(fromJSON({browserVersion: null}));
- ok(fromJSON({browserVersion: undefined}));
- ok(fromJSON({browserVersion: "*"}));
- Assert.throws(() => fromJSON({browserVersion: "foo"}));
- ok(fromJSON({platformName: caps.get("platformName")}));
- ok(fromJSON({platformName: null}));
- ok(fromJSON({platformName: undefined}));
- ok(fromJSON({platformName: "*"}));
- Assert.throws(() => fromJSON({platformName: "foo"}));
- ok(fromJSON({platformVersion: caps.get("platformVersion")}));
- ok(fromJSON({platformVersion: null}));
- ok(fromJSON({platformVersion: undefined}));
- ok(fromJSON({platformVersion: "*"}));
- Assert.throws(() => fromJSON({platformVersion: "foo"}));
- caps = fromJSON({acceptInsecureCerts: true});
- equal(true, caps.get("acceptInsecureCerts"));
- caps = fromJSON({acceptInsecureCerts: false});
- equal(false, caps.get("acceptInsecureCerts"));
- Assert.throws(() => fromJSON({acceptInsecureCerts: "foo"}));
- for (let strategy of Object.values(session.PageLoadStrategy)) {
- caps = fromJSON({pageLoadStrategy: strategy});
- equal(strategy, caps.get("pageLoadStrategy"));
- }
- Assert.throws(() => fromJSON({pageLoadStrategy: "foo"}));
- let proxyConfig = {proxyType: "manual"};
- caps = fromJSON({proxy: proxyConfig});
- equal("manual", caps.get("proxy").proxyType);
- let timeoutsConfig = {implicit: 123};
- caps = fromJSON({timeouts: timeoutsConfig});
- equal(123, caps.get("timeouts").implicit);
- equal(0, caps.get("specificationLevel"));
- caps = fromJSON({specificationLevel: 123});
- equal(123, caps.get("specificationLevel"));
- Assert.throws(() => fromJSON({specificationLevel: "foo"}));
- Assert.throws(() => fromJSON({specificationLevel: -1}));
- caps = fromJSON({"moz:accessibilityChecks": true});
- equal(true, caps.get("moz:accessibilityChecks"));
- caps = fromJSON({"moz:accessibilityChecks": false});
- equal(false, caps.get("moz:accessibilityChecks"));
- Assert.throws(() => fromJSON({"moz:accessibilityChecks": "foo"}));
- run_next_test();
- });
- // use session.Proxy.toJSON to test marshal
- add_test(function test_marshal() {
- let proxy = new session.Proxy();
- // drop empty fields
- deepEqual({}, proxy.toJSON());
- proxy.proxyType = "manual";
- deepEqual({proxyType: "manual"}, proxy.toJSON());
- proxy.proxyType = null;
- deepEqual({}, proxy.toJSON());
- proxy.proxyType = undefined;
- deepEqual({}, proxy.toJSON());
- // iterate over object literals
- proxy.proxyType = {foo: "bar"};
- deepEqual({proxyType: {foo: "bar"}}, proxy.toJSON());
- // iterate over complex object that implement toJSON
- proxy.proxyType = new session.Proxy();
- deepEqual({}, proxy.toJSON());
- proxy.proxyType.proxyType = "manual";
- deepEqual({proxyType: {proxyType: "manual"}}, proxy.toJSON());
- // drop objects with no entries
- proxy.proxyType = {foo: {}};
- deepEqual({}, proxy.toJSON());
- proxy.proxyType = {foo: new session.Proxy()};
- deepEqual({}, proxy.toJSON());
- run_next_test();
- });
|