diff --git a/testing/marionette/session.js b/testing/marionette/session.js index f5d5b93fe949..f353b6407b57 100644 --- a/testing/marionette/session.js +++ b/testing/marionette/session.js @@ -53,23 +53,21 @@ session.Timeouts = class { let t = new session.Timeouts(); for (let [typ, ms] of Object.entries(json)) { - assert.positiveInteger(ms); - switch (typ) { case "implicit": - t.implicit = ms; + t.implicit = assert.positiveInteger(ms); break; case "script": - t.script = ms; + t.script = assert.positiveInteger(ms); break; case "pageLoad": - t.pageLoad = ms; + t.pageLoad = assert.positiveInteger(ms); break; default: - throw new InvalidArgumentError(); + throw new InvalidArgumentError("Unrecognised timeout: " + typ); } } diff --git a/testing/marionette/test_session.js b/testing/marionette/test_session.js index 195495a82e94..4b1b0f31b2a9 100644 --- a/testing/marionette/test_session.js +++ b/testing/marionette/test_session.js @@ -48,6 +48,43 @@ add_test(function test_Timeouts_fromJSON() { run_next_test(); }); +add_test(function test_Timeouts_fromJSON_unrecognised_field() { + let json = { + sessionId: "foobar", + script: 42, + }; + try { + session.Timeouts.fromJSON(json); + } catch (e) { + equal(e.name, InvalidArgumentError.name); + equal(e.message, "Unrecognised timeout: sessionId"); + } + + run_next_test(); +}); + +add_test(function test_Timeouts_fromJSON_invalid_type() { + try { + session.Timeouts.fromJSON({script: "foobar"}); + } catch (e) { + equal(e.name, InvalidArgumentError.name); + equal(e.message, "Expected [object String] \"foobar\" to be an integer"); + } + + run_next_test(); +}); + +add_test(function test_Timeouts_fromJSON_bounds() { + try { + session.Timeouts.fromJSON({script: -42}); + } catch (e) { + equal(e.name, InvalidArgumentError.name); + equal(e.message, "Expected [object Number] -42 to be >= 0"); + } + + run_next_test(); +}); + add_test(function test_PageLoadStrategy() { equal(session.PageLoadStrategy.None, "none"); equal(session.PageLoadStrategy.Eager, "eager");