test_Session.js (4090B)
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 "use strict"; 6 7 const { Timeouts } = ChromeUtils.importESModule( 8 "chrome://remote/content/shared/webdriver/Capabilities.sys.mjs" 9 ); 10 const { getWebDriverSessionById, WebDriverSession } = 11 ChromeUtils.importESModule( 12 "chrome://remote/content/shared/webdriver/Session.sys.mjs" 13 ); 14 15 function createSession(options = {}) { 16 const { capabilities = {}, connection, isBidi = false } = options; 17 18 const flags = new Set(); 19 if (isBidi) { 20 flags.add("bidi"); 21 } else { 22 flags.add("http"); 23 } 24 25 return new WebDriverSession(capabilities, flags, connection); 26 } 27 28 add_task(function test_WebDriverSession_ctor() { 29 // Missing WebDriver session flags 30 Assert.throws(() => new WebDriverSession({}), /TypeError/); 31 32 // Session needs to be either HTTP or BiDi 33 for (const flags of [[], ["bidi", "http"]]) { 34 Assert.throws( 35 () => new WebDriverSession({}, new Set(flags)), 36 /SessionNotCreatedError:/ 37 ); 38 } 39 40 // Session id and path 41 let session = createSession(); 42 equal(typeof session.id, "string"); 43 equal(session.path, `/session/${session.id}`); 44 45 // Sets HTTP and BiDi flags correctly. 46 session = createSession({ isBidi: false }); 47 equal(session.bidi, false); 48 equal(session.http, true); 49 session = createSession({ isBidi: true }); 50 equal(session.bidi, true); 51 equal(session.http, false); 52 53 // Sets capabilities based on session configuration flag. 54 const capabilities = { 55 acceptInsecureCerts: true, 56 unhandledPromptBehavior: "ignore", 57 58 // HTTP only 59 pageLoadStrategy: "eager", 60 strictFileInteractability: true, 61 timeouts: { script: 1000 }, 62 }; 63 64 // HTTP session 65 session = createSession({ capabilities, isBidi: false }); 66 equal(session.acceptInsecureCerts, true); 67 equal(session.pageLoadStrategy, "eager"); 68 equal(session.strictFileInteractability, true); 69 equal(session.timeouts.script, 1000); 70 equal(session.userPromptHandler.toJSON(), "ignore"); 71 72 // BiDi session 73 session = createSession({ capabilities, isBidi: true }); 74 equal(session.acceptInsecureCerts, true); 75 equal(session.userPromptHandler.toJSON(), "ignore"); 76 77 equal(session.pageLoadStrategy, undefined); 78 equal(session.strictFileInteractability, undefined); 79 equal(session.timeouts, undefined); 80 }); 81 82 add_task(function test_WebDriverSession_destroy() { 83 const session = createSession(); 84 85 session.destroy(); 86 87 // Calling twice doesn't raise error. 88 session.destroy(); 89 }); 90 91 add_task(function test_WebDriverSession_getters() { 92 const session = createSession(); 93 94 equal( 95 session.a11yChecks, 96 session.capabilities.get("moz:accessibilityChecks") 97 ); 98 equal( 99 session.acceptInsecureCerts, 100 session.capabilities.get("acceptInsecureCerts") 101 ); 102 equal(session.pageLoadStrategy, session.capabilities.get("pageLoadStrategy")); 103 equal(session.proxy, session.capabilities.get("proxy")); 104 equal( 105 session.strictFileInteractability, 106 session.capabilities.get("strictFileInteractability") 107 ); 108 equal(session.timeouts, session.capabilities.get("timeouts")); 109 equal( 110 session.userPromptHandler, 111 session.capabilities.get("unhandledPromptBehavior") 112 ); 113 }); 114 115 add_task(function test_WebDriverSession_setters() { 116 const session = createSession(); 117 118 const timeouts = new Timeouts(); 119 timeouts.pageLoad = 45; 120 121 session.timeouts = timeouts; 122 equal(session.timeouts, session.capabilities.get("timeouts")); 123 }); 124 125 add_task(function test_getWebDriverSessionById() { 126 const session1 = createSession(); 127 const session2 = createSession(); 128 129 equal(getWebDriverSessionById(session1.id), session1); 130 equal(getWebDriverSessionById(session2.id), session2); 131 132 session1.destroy(); 133 equal(getWebDriverSessionById(session1.id), undefined); 134 equal(getWebDriverSessionById(session2.id), session2); 135 136 session2.destroy(); 137 equal(getWebDriverSessionById(session1.id), undefined); 138 equal(getWebDriverSessionById(session2.id), undefined); 139 });