| 
									
										
										
										
											2020-08-03 13:41:48 -07:00
										 |  |  | /** | 
					
						
							|  |  |  |  * Copyright 2017 Google Inc. All rights reserved. | 
					
						
							|  |  |  |  * Modifications copyright (c) Microsoft Corporation. | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * Licensed under the Apache License, Version 2.0 (the "License"); | 
					
						
							|  |  |  |  * you may not use this file except in compliance with the License. | 
					
						
							|  |  |  |  * You may obtain a copy of the License at | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  *     http://www.apache.org/licenses/LICENSE-2.0
 | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * Unless required by applicable law or agreed to in writing, software | 
					
						
							|  |  |  |  * distributed under the License is distributed on an "AS IS" BASIS, | 
					
						
							|  |  |  |  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | 
					
						
							|  |  |  |  * See the License for the specific language governing permissions and | 
					
						
							|  |  |  |  * limitations under the License. | 
					
						
							|  |  |  |  */ | 
					
						
							| 
									
										
										
										
											2020-09-02 21:43:38 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-09-11 23:40:49 +02:00
										 |  |  | import domain from 'domain'; | 
					
						
							| 
									
										
										
										
											2022-07-01 09:58:07 -07:00
										 |  |  | import { playwrightTest, expect } from '../config/browserTest'; | 
					
						
							| 
									
										
										
										
											2020-09-25 23:30:46 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-07-01 09:58:07 -07:00
										 |  |  | // Use something worker-scoped (e.g. expectScopeState) forces a new worker for this file.
 | 
					
						
							| 
									
										
										
										
											2021-05-17 14:56:39 -07:00
										 |  |  | // Otherwise, a browser launched for other tests in this worker will affect the expectations.
 | 
					
						
							| 
									
										
										
										
											2022-07-01 09:58:07 -07:00
										 |  |  | const it = playwrightTest.extend<{}, { expectScopeState: (object: any, golden: any) => void }>({ | 
					
						
							| 
									
										
										
										
											2022-08-18 20:12:33 +02:00
										 |  |  |   expectScopeState: [async ({ toImplInWorkerScope }, use) => { | 
					
						
							| 
									
										
										
										
											2022-07-01 09:58:07 -07:00
										 |  |  |     await use((object, golden) => { | 
					
						
							|  |  |  |       golden = trimGuids(golden); | 
					
						
							| 
									
										
										
										
											2022-07-31 14:31:17 -07:00
										 |  |  |       const remoteRoot = toImplInWorkerScope(); | 
					
						
							| 
									
										
										
										
											2022-07-01 09:58:07 -07:00
										 |  |  |       const remoteState = trimGuids(remoteRoot._debugScopeState()); | 
					
						
							|  |  |  |       const localRoot = object._connection._rootObject; | 
					
						
							|  |  |  |       const localState = trimGuids(localRoot._debugScopeState()); | 
					
						
							|  |  |  |       expect(localState).toEqual(golden); | 
					
						
							|  |  |  |       expect(remoteState).toEqual(golden); | 
					
						
							|  |  |  |     }); | 
					
						
							|  |  |  |   }, { scope: 'worker' }], | 
					
						
							| 
									
										
										
										
											2021-10-26 12:45:53 -08:00
										 |  |  | }); | 
					
						
							| 
									
										
										
										
											2021-05-17 14:56:39 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-07-01 13:57:33 -07:00
										 |  |  | it.skip(({ mode }) => mode !== 'default'); | 
					
						
							| 
									
										
										
										
											2022-02-13 14:03:47 -08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-07-01 09:58:07 -07:00
										 |  |  | it('should scope context handles', async ({ browserType, server, expectScopeState }) => { | 
					
						
							| 
									
										
										
										
											2021-10-27 18:00:06 -08:00
										 |  |  |   const browser = await browserType.launch(); | 
					
						
							| 
									
										
										
										
											2020-08-03 13:41:48 -07:00
										 |  |  |   const GOLDEN_PRECONDITION = { | 
					
						
							|  |  |  |     _guid: '', | 
					
						
							|  |  |  |     objects: [ | 
					
						
							| 
									
										
										
										
											2021-04-20 23:03:56 -07:00
										 |  |  |       { _guid: 'android', objects: [] }, | 
					
						
							|  |  |  |       { _guid: 'browser-type', objects: [] }, | 
					
						
							|  |  |  |       { _guid: 'browser-type', objects: [] }, | 
					
						
							|  |  |  |       { _guid: 'browser-type', objects: [ | 
					
						
							|  |  |  |         { _guid: 'browser', objects: [] } | 
					
						
							| 
									
										
										
										
											2020-08-03 13:41:48 -07:00
										 |  |  |       ] }, | 
					
						
							| 
									
										
										
										
											2021-04-20 23:03:56 -07:00
										 |  |  |       { _guid: 'electron', objects: [] }, | 
					
						
							| 
									
										
										
										
											2021-12-09 17:21:17 -08:00
										 |  |  |       { _guid: 'localUtils', objects: [] }, | 
					
						
							| 
									
										
										
										
											2020-08-03 13:41:48 -07:00
										 |  |  |       { _guid: 'Playwright', objects: [] }, | 
					
						
							| 
									
										
										
										
											2021-04-20 23:03:56 -07:00
										 |  |  |       { _guid: 'selectors', objects: [] }, | 
					
						
							| 
									
										
										
										
											2020-08-03 13:41:48 -07:00
										 |  |  |     ] | 
					
						
							|  |  |  |   }; | 
					
						
							| 
									
										
										
										
											2022-08-25 11:58:41 -07:00
										 |  |  |   expectScopeState(browser, GOLDEN_PRECONDITION); | 
					
						
							| 
									
										
										
										
											2020-08-03 13:41:48 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  |   const context = await browser.newContext(); | 
					
						
							|  |  |  |   const page = await context.newPage(); | 
					
						
							| 
									
										
										
										
											2021-12-15 17:33:09 -08:00
										 |  |  |   // Firefox Beta 96 yields a console warning for the pages that
 | 
					
						
							|  |  |  |   // don't use `<!DOCTYPE HTML> tag.
 | 
					
						
							|  |  |  |   await page.goto(server.PREFIX + '/empty-standard-mode.html'); | 
					
						
							| 
									
										
										
										
											2022-08-25 11:58:41 -07:00
										 |  |  |   expectScopeState(browser, { | 
					
						
							| 
									
										
										
										
											2020-08-03 13:41:48 -07:00
										 |  |  |     _guid: '', | 
					
						
							|  |  |  |     objects: [ | 
					
						
							| 
									
										
										
										
											2021-04-20 23:03:56 -07:00
										 |  |  |       { _guid: 'android', objects: [] }, | 
					
						
							|  |  |  |       { _guid: 'browser-type', objects: [] }, | 
					
						
							|  |  |  |       { _guid: 'browser-type', objects: [] }, | 
					
						
							|  |  |  |       { _guid: 'browser-type', objects: [ | 
					
						
							|  |  |  |         { _guid: 'browser', objects: [ | 
					
						
							|  |  |  |           { _guid: 'browser-context', objects: [ | 
					
						
							| 
									
										
										
										
											2022-09-05 01:19:44 -07:00
										 |  |  |             { _guid: 'request', objects: [] }, | 
					
						
							|  |  |  |             { _guid: 'response', objects: [] }, | 
					
						
							| 
									
										
										
										
											2022-07-15 07:56:47 -08:00
										 |  |  |             { _guid: 'page', objects: [ | 
					
						
							| 
									
										
										
										
											2022-09-05 01:19:44 -07:00
										 |  |  |               { _guid: 'frame', objects: [] }, | 
					
						
							| 
									
										
										
										
											2022-07-15 07:56:47 -08:00
										 |  |  |             ] }, | 
					
						
							|  |  |  |             { _guid: 'request-context', objects: [] }, | 
					
						
							|  |  |  |             { _guid: 'tracing', objects: [] } | 
					
						
							| 
									
										
										
										
											2021-09-27 18:58:08 +02:00
										 |  |  |           ] }, | 
					
						
							| 
									
										
										
										
											2020-08-03 13:41:48 -07:00
										 |  |  |         ] }, | 
					
						
							|  |  |  |       ] }, | 
					
						
							| 
									
										
										
										
											2021-04-20 23:03:56 -07:00
										 |  |  |       { _guid: 'electron', objects: [] }, | 
					
						
							| 
									
										
										
										
											2021-12-09 17:21:17 -08:00
										 |  |  |       { _guid: 'localUtils', objects: [] }, | 
					
						
							| 
									
										
										
										
											2020-08-03 13:41:48 -07:00
										 |  |  |       { _guid: 'Playwright', objects: [] }, | 
					
						
							| 
									
										
										
										
											2021-04-20 23:03:56 -07:00
										 |  |  |       { _guid: 'selectors', objects: [] }, | 
					
						
							| 
									
										
										
										
											2020-08-03 13:41:48 -07:00
										 |  |  |     ] | 
					
						
							|  |  |  |   }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   await context.close(); | 
					
						
							| 
									
										
										
										
											2022-08-25 11:58:41 -07:00
										 |  |  |   expectScopeState(browser, GOLDEN_PRECONDITION); | 
					
						
							| 
									
										
										
										
											2021-04-02 21:07:45 -07:00
										 |  |  |   await browser.close(); | 
					
						
							| 
									
										
										
										
											2020-08-03 13:41:48 -07:00
										 |  |  | }); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-07-01 09:58:07 -07:00
										 |  |  | it('should scope CDPSession handles', async ({ browserType, browserName, expectScopeState }) => { | 
					
						
							| 
									
										
										
										
											2021-04-02 21:07:45 -07:00
										 |  |  |   it.skip(browserName !== 'chromium'); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-10-27 18:00:06 -08:00
										 |  |  |   const browser = await browserType.launch(); | 
					
						
							| 
									
										
										
										
											2020-08-03 13:41:48 -07:00
										 |  |  |   const GOLDEN_PRECONDITION = { | 
					
						
							|  |  |  |     _guid: '', | 
					
						
							|  |  |  |     objects: [ | 
					
						
							| 
									
										
										
										
											2021-04-20 23:03:56 -07:00
										 |  |  |       { _guid: 'android', objects: [] }, | 
					
						
							|  |  |  |       { _guid: 'browser-type', objects: [] }, | 
					
						
							|  |  |  |       { _guid: 'browser-type', objects: [] }, | 
					
						
							|  |  |  |       { _guid: 'browser-type', objects: [ | 
					
						
							|  |  |  |         { _guid: 'browser', objects: [] } | 
					
						
							| 
									
										
										
										
											2020-08-03 13:41:48 -07:00
										 |  |  |       ] }, | 
					
						
							| 
									
										
										
										
											2021-04-20 23:03:56 -07:00
										 |  |  |       { _guid: 'electron', objects: [] }, | 
					
						
							| 
									
										
										
										
											2021-12-09 17:21:17 -08:00
										 |  |  |       { _guid: 'localUtils', objects: [] }, | 
					
						
							| 
									
										
										
										
											2020-08-03 13:41:48 -07:00
										 |  |  |       { _guid: 'Playwright', objects: [] }, | 
					
						
							| 
									
										
										
										
											2021-04-20 23:03:56 -07:00
										 |  |  |       { _guid: 'selectors', objects: [] }, | 
					
						
							| 
									
										
										
										
											2020-08-03 13:41:48 -07:00
										 |  |  |     ] | 
					
						
							|  |  |  |   }; | 
					
						
							| 
									
										
										
										
											2022-08-25 11:58:41 -07:00
										 |  |  |   expectScopeState(browserType, GOLDEN_PRECONDITION); | 
					
						
							| 
									
										
										
										
											2020-08-03 13:41:48 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-04-02 09:47:14 +08:00
										 |  |  |   const session = await browser.newBrowserCDPSession(); | 
					
						
							| 
									
										
										
										
											2022-08-25 11:58:41 -07:00
										 |  |  |   expectScopeState(browserType, { | 
					
						
							| 
									
										
										
										
											2020-08-03 13:41:48 -07:00
										 |  |  |     _guid: '', | 
					
						
							|  |  |  |     objects: [ | 
					
						
							| 
									
										
										
										
											2021-04-20 23:03:56 -07:00
										 |  |  |       { _guid: 'android', objects: [] }, | 
					
						
							|  |  |  |       { _guid: 'browser-type', objects: [] }, | 
					
						
							|  |  |  |       { _guid: 'browser-type', objects: [] }, | 
					
						
							|  |  |  |       { _guid: 'browser-type', objects: [ | 
					
						
							|  |  |  |         { _guid: 'browser', objects: [ | 
					
						
							|  |  |  |           { _guid: 'cdp-session', objects: [] }, | 
					
						
							| 
									
										
										
										
											2020-08-03 13:41:48 -07:00
										 |  |  |         ] }, | 
					
						
							|  |  |  |       ] }, | 
					
						
							| 
									
										
										
										
											2021-04-20 23:03:56 -07:00
										 |  |  |       { _guid: 'electron', objects: [] }, | 
					
						
							| 
									
										
										
										
											2021-12-09 17:21:17 -08:00
										 |  |  |       { _guid: 'localUtils', objects: [] }, | 
					
						
							| 
									
										
										
										
											2020-08-03 13:41:48 -07:00
										 |  |  |       { _guid: 'Playwright', objects: [] }, | 
					
						
							| 
									
										
										
										
											2021-04-20 23:03:56 -07:00
										 |  |  |       { _guid: 'selectors', objects: [] }, | 
					
						
							| 
									
										
										
										
											2020-08-03 13:41:48 -07:00
										 |  |  |     ] | 
					
						
							|  |  |  |   }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   await session.detach(); | 
					
						
							| 
									
										
										
										
											2022-08-25 11:58:41 -07:00
										 |  |  |   expectScopeState(browserType, GOLDEN_PRECONDITION); | 
					
						
							| 
									
										
										
										
											2021-04-02 21:07:45 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  |   await browser.close(); | 
					
						
							| 
									
										
										
										
											2020-08-03 13:41:48 -07:00
										 |  |  | }); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-07-01 09:58:07 -07:00
										 |  |  | it('should scope browser handles', async ({ browserType, expectScopeState }) => { | 
					
						
							| 
									
										
										
										
											2020-08-03 13:41:48 -07:00
										 |  |  |   const GOLDEN_PRECONDITION = { | 
					
						
							|  |  |  |     _guid: '', | 
					
						
							|  |  |  |     objects: [ | 
					
						
							| 
									
										
										
										
											2021-04-20 23:03:56 -07:00
										 |  |  |       { _guid: 'android', objects: [] }, | 
					
						
							|  |  |  |       { _guid: 'browser-type', objects: [] }, | 
					
						
							|  |  |  |       { _guid: 'browser-type', objects: [] }, | 
					
						
							|  |  |  |       { _guid: 'browser-type', objects: [] }, | 
					
						
							|  |  |  |       { _guid: 'electron', objects: [] }, | 
					
						
							| 
									
										
										
										
											2021-12-09 17:21:17 -08:00
										 |  |  |       { _guid: 'localUtils', objects: [] }, | 
					
						
							| 
									
										
										
										
											2020-08-03 13:41:48 -07:00
										 |  |  |       { _guid: 'Playwright', objects: [] }, | 
					
						
							| 
									
										
										
										
											2021-04-20 23:03:56 -07:00
										 |  |  |       { _guid: 'selectors', objects: [] }, | 
					
						
							| 
									
										
										
										
											2020-08-03 13:41:48 -07:00
										 |  |  |     ] | 
					
						
							|  |  |  |   }; | 
					
						
							| 
									
										
										
										
											2022-08-25 11:58:41 -07:00
										 |  |  |   expectScopeState(browserType, GOLDEN_PRECONDITION); | 
					
						
							| 
									
										
										
										
											2020-08-03 13:41:48 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-10-27 18:00:06 -08:00
										 |  |  |   const browser = await browserType.launch(); | 
					
						
							| 
									
										
										
										
											2020-08-03 13:41:48 -07:00
										 |  |  |   await browser.newContext(); | 
					
						
							| 
									
										
										
										
											2022-08-25 11:58:41 -07:00
										 |  |  |   expectScopeState(browserType, { | 
					
						
							| 
									
										
										
										
											2020-08-03 13:41:48 -07:00
										 |  |  |     _guid: '', | 
					
						
							|  |  |  |     objects: [ | 
					
						
							| 
									
										
										
										
											2021-04-20 23:03:56 -07:00
										 |  |  |       { _guid: 'android', objects: [] }, | 
					
						
							|  |  |  |       { _guid: 'browser-type', objects: [] }, | 
					
						
							|  |  |  |       { _guid: 'browser-type', objects: [] }, | 
					
						
							|  |  |  |       { _guid: 'browser-type', objects: [ | 
					
						
							| 
									
										
										
										
											2020-09-02 23:22:23 -07:00
										 |  |  |         { | 
					
						
							| 
									
										
										
										
											2021-04-20 23:03:56 -07:00
										 |  |  |           _guid: 'browser', objects: [ | 
					
						
							| 
									
										
										
										
											2022-07-15 07:56:47 -08:00
										 |  |  |             { _guid: 'browser-context', objects: [ | 
					
						
							|  |  |  |               { _guid: 'request-context', objects: [] }, | 
					
						
							|  |  |  |               { _guid: 'tracing', objects: [] }, | 
					
						
							|  |  |  |             ] }, | 
					
						
							| 
									
										
										
										
											2020-09-02 23:22:23 -07:00
										 |  |  |           ] | 
					
						
							|  |  |  |         }, | 
					
						
							|  |  |  |       ] | 
					
						
							|  |  |  |       }, | 
					
						
							| 
									
										
										
										
											2021-04-20 23:03:56 -07:00
										 |  |  |       { _guid: 'electron', objects: [] }, | 
					
						
							| 
									
										
										
										
											2021-12-09 17:21:17 -08:00
										 |  |  |       { _guid: 'localUtils', objects: [] }, | 
					
						
							| 
									
										
										
										
											2020-08-03 13:41:48 -07:00
										 |  |  |       { _guid: 'Playwright', objects: [] }, | 
					
						
							| 
									
										
										
										
											2021-04-20 23:03:56 -07:00
										 |  |  |       { _guid: 'selectors', objects: [] }, | 
					
						
							| 
									
										
										
										
											2020-08-03 13:41:48 -07:00
										 |  |  |     ] | 
					
						
							|  |  |  |   }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   await browser.close(); | 
					
						
							| 
									
										
										
										
											2022-08-25 11:58:41 -07:00
										 |  |  |   expectScopeState(browserType, GOLDEN_PRECONDITION); | 
					
						
							| 
									
										
										
										
											2020-08-03 13:41:48 -07:00
										 |  |  | }); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-11-14 22:20:00 -08:00
										 |  |  | it('should not generate dispatchers for subresources w/o listeners', async ({ page, server, browserType, expectScopeState, video }) => { | 
					
						
							| 
									
										
										
										
											2022-11-09 21:10:57 -08:00
										 |  |  |   server.setRedirect('/one-style.css', '/two-style.css'); | 
					
						
							|  |  |  |   server.setRedirect('/two-style.css', '/three-style.css'); | 
					
						
							|  |  |  |   server.setRedirect('/three-style.css', '/four-style.css'); | 
					
						
							|  |  |  |   server.setRoute('/four-style.css', (req, res) => res.end('body {box-sizing: border-box; }')); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   await page.goto(server.PREFIX + '/one-style.html'); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   expectScopeState(browserType, { | 
					
						
							|  |  |  |     _guid: '', | 
					
						
							|  |  |  |     objects: [ | 
					
						
							|  |  |  |       { _guid: 'android', objects: [] }, | 
					
						
							|  |  |  |       { _guid: 'browser-type', objects: [] }, | 
					
						
							|  |  |  |       { _guid: 'browser-type', objects: [] }, | 
					
						
							|  |  |  |       { _guid: 'browser-type', objects: [ | 
					
						
							|  |  |  |         { | 
					
						
							|  |  |  |           _guid: 'browser', objects: [ | 
					
						
							| 
									
										
										
										
											2022-11-14 22:20:00 -08:00
										 |  |  |             ...(video === 'on' ? [{ _guid: 'artifact', objects: [] }] : []), | 
					
						
							| 
									
										
										
										
											2022-11-09 21:10:57 -08:00
										 |  |  |             { _guid: 'browser-context', objects: [ | 
					
						
							|  |  |  |               { | 
					
						
							|  |  |  |                 _guid: 'page', objects: [ | 
					
						
							|  |  |  |                   { _guid: 'frame', objects: [] } | 
					
						
							|  |  |  |                 ] | 
					
						
							|  |  |  |               }, | 
					
						
							|  |  |  |               { _guid: 'request', objects: [] }, | 
					
						
							|  |  |  |               { _guid: 'request-context', objects: [] }, | 
					
						
							|  |  |  |               { _guid: 'response', objects: [] }, | 
					
						
							|  |  |  |               { _guid: 'tracing', objects: [] } | 
					
						
							|  |  |  |             ] }, | 
					
						
							|  |  |  |           ] | 
					
						
							|  |  |  |         }], | 
					
						
							|  |  |  |       }, | 
					
						
							|  |  |  |       { _guid: 'electron', objects: [] }, | 
					
						
							|  |  |  |       { _guid: 'localUtils', objects: [] }, | 
					
						
							|  |  |  |       { _guid: 'Playwright', objects: [] }, | 
					
						
							|  |  |  |       { _guid: 'selectors', objects: [] }, | 
					
						
							|  |  |  |     ] | 
					
						
							|  |  |  |   }); | 
					
						
							|  |  |  | }); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-10-27 18:00:06 -08:00
										 |  |  | it('should work with the domain module', async ({ browserType, server, browserName }) => { | 
					
						
							| 
									
										
										
										
											2021-04-01 13:18:04 -07:00
										 |  |  |   const local = domain.create(); | 
					
						
							|  |  |  |   local.run(() => { }); | 
					
						
							|  |  |  |   let err; | 
					
						
							|  |  |  |   local.on('error', e => err = e); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-10-27 18:00:06 -08:00
										 |  |  |   const browser = await browserType.launch(); | 
					
						
							| 
									
										
										
										
											2020-09-11 23:40:49 +02:00
										 |  |  |   const page = await browser.newPage(); | 
					
						
							| 
									
										
										
										
											2020-11-19 12:09:42 -08:00
										 |  |  | 
 | 
					
						
							|  |  |  |   expect(await page.evaluate(() => 1 + 1)).toBe(2); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   // At the time of writing, we used to emit 'error' event for WebSockets,
 | 
					
						
							|  |  |  |   // which failed with 'domain' module.
 | 
					
						
							|  |  |  |   let callback; | 
					
						
							|  |  |  |   const result = new Promise(f => callback = f); | 
					
						
							|  |  |  |   page.on('websocket', ws => ws.on('socketerror', callback)); | 
					
						
							|  |  |  |   page.evaluate(port => { | 
					
						
							|  |  |  |     new WebSocket('ws://localhost:' + port + '/bogus-ws'); | 
					
						
							|  |  |  |   }, server.PORT); | 
					
						
							|  |  |  |   const message = await result; | 
					
						
							| 
									
										
										
										
											2021-05-13 10:22:23 -07:00
										 |  |  |   if (browserName === 'firefox') | 
					
						
							| 
									
										
										
										
											2020-11-19 12:09:42 -08:00
										 |  |  |     expect(message).toBe('CLOSE_ABNORMAL'); | 
					
						
							|  |  |  |   else | 
					
						
							|  |  |  |     expect(message).toContain(': 400'); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-09-11 23:40:49 +02:00
										 |  |  |   await browser.close(); | 
					
						
							| 
									
										
										
										
											2021-04-01 13:18:04 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  |   if (err) | 
					
						
							|  |  |  |     throw err; | 
					
						
							| 
									
										
										
										
											2020-09-11 23:40:49 +02:00
										 |  |  | }); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-08-03 13:41:48 -07:00
										 |  |  | function compareObjects(a, b) { | 
					
						
							|  |  |  |   if (a._guid !== b._guid) | 
					
						
							|  |  |  |     return a._guid.localeCompare(b._guid); | 
					
						
							|  |  |  |   return a.objects.length - b.objects.length; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | function trimGuids(object) { | 
					
						
							|  |  |  |   if (Array.isArray(object)) | 
					
						
							|  |  |  |     return object.map(trimGuids).sort(compareObjects); | 
					
						
							|  |  |  |   if (typeof object === 'object') { | 
					
						
							|  |  |  |     const result = {}; | 
					
						
							|  |  |  |     for (const key in object) | 
					
						
							|  |  |  |       result[key] = trimGuids(object[key]); | 
					
						
							|  |  |  |     return result; | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  |   if (typeof object === 'string') | 
					
						
							|  |  |  |     return object ? object.match(/[^@]+/)[0] : ''; | 
					
						
							|  |  |  |   return object; | 
					
						
							|  |  |  | } |