fix: propagate custom executable path to codegen (#6509)
This commit is contained in:
		
							parent
							
								
									d540b4478b
								
							
						
					
					
						commit
						460cc31941
					
				|  | @ -209,10 +209,10 @@ type CaptureOptions = { | |||
|   fullPage: boolean; | ||||
| }; | ||||
| 
 | ||||
| async function launchContext(options: Options, headless: boolean): Promise<{ browser: Browser, browserName: string, launchOptions: LaunchOptions, contextOptions: BrowserContextOptions, context: BrowserContext }> { | ||||
| async function launchContext(options: Options, headless: boolean, executablePath?: string): Promise<{ browser: Browser, browserName: string, launchOptions: LaunchOptions, contextOptions: BrowserContextOptions, context: BrowserContext }> { | ||||
|   validateOptions(options); | ||||
|   const browserType = lookupBrowserType(options); | ||||
|   const launchOptions: LaunchOptions = { headless }; | ||||
|   const launchOptions: LaunchOptions = { headless, executablePath }; | ||||
|   if (options.channel) | ||||
|     launchOptions.channel = options.channel as any; | ||||
| 
 | ||||
|  | @ -347,7 +347,7 @@ async function openPage(context: BrowserContext, url: string | undefined): Promi | |||
| } | ||||
| 
 | ||||
| async function open(options: Options, url: string | undefined, language: string) { | ||||
|   const { context, launchOptions, contextOptions } = await launchContext(options, !!process.env.PWTEST_CLI_HEADLESS); | ||||
|   const { context, launchOptions, contextOptions } = await launchContext(options, !!process.env.PWTEST_CLI_HEADLESS, process.env.PWTEST_CLI_EXECUTABLE_PATH); | ||||
|   await context._enableRecorder({ | ||||
|     language, | ||||
|     launchOptions, | ||||
|  | @ -361,7 +361,7 @@ async function open(options: Options, url: string | undefined, language: string) | |||
| } | ||||
| 
 | ||||
| async function codegen(options: Options, url: string | undefined, language: string, outputFile?: string) { | ||||
|   const { context, launchOptions, contextOptions } = await launchContext(options, !!process.env.PWTEST_CLI_HEADLESS); | ||||
|   const { context, launchOptions, contextOptions } = await launchContext(options, !!process.env.PWTEST_CLI_HEADLESS, process.env.PWTEST_CLI_EXECUTABLE_PATH); | ||||
|   await context._enableRecorder({ | ||||
|     language, | ||||
|     launchOptions, | ||||
|  |  | |||
|  | @ -41,6 +41,7 @@ export class CodeGenerator extends EventEmitter { | |||
|     super(); | ||||
| 
 | ||||
|     launchOptions = { headless: false, ...launchOptions }; | ||||
|     delete launchOptions.executablePath; | ||||
|     this._enabled = generateHeaders; | ||||
|     this._options = { browserName, generateHeaders, launchOptions, contextOptions, deviceName, saveStorage }; | ||||
|     this.restart(); | ||||
|  |  | |||
|  | @ -27,6 +27,7 @@ type CLITestArgs = { | |||
|   recorderPageGetter: () => Promise<Page>; | ||||
|   openRecorder: () => Promise<Recorder>; | ||||
|   runCLI: (args: string[]) => CLIMock; | ||||
|   executablePath: string | undefined; | ||||
| }; | ||||
| 
 | ||||
| export const test = contextTest.extend({ | ||||
|  | @ -34,7 +35,7 @@ export const test = contextTest.extend({ | |||
|     process.env.PWTEST_RECORDER_PORT = String(10907 + workerInfo.workerIndex); | ||||
|   }, | ||||
| 
 | ||||
|   async beforeEach({ page, context, toImpl, browserName, browserChannel, headful, mode }, testInfo: folio.TestInfo): Promise<CLITestArgs> { | ||||
|   async beforeEach({ page, context, toImpl, browserName, browserChannel, headful, mode, launchOptions: { executablePath } }, testInfo: folio.TestInfo): Promise<CLITestArgs> { | ||||
|     testInfo.skip(mode === 'service'); | ||||
|     const recorderPageGetter = async () => { | ||||
|       while (!toImpl(context).recorderAppForTest) | ||||
|  | @ -46,7 +47,7 @@ export const test = contextTest.extend({ | |||
|     }; | ||||
|     return { | ||||
|       runCLI: (cliArgs: string[]) => { | ||||
|         this._cli = new CLIMock(browserName, browserChannel, !headful, cliArgs); | ||||
|         this._cli = new CLIMock(browserName, browserChannel, !headful, cliArgs, executablePath); | ||||
|         return this._cli; | ||||
|       }, | ||||
|       openRecorder: async () => { | ||||
|  | @ -54,6 +55,7 @@ export const test = contextTest.extend({ | |||
|         return new Recorder(page, await recorderPageGetter()); | ||||
|       }, | ||||
|       recorderPageGetter, | ||||
|       executablePath | ||||
|     }; | ||||
|   }, | ||||
| 
 | ||||
|  | @ -161,7 +163,7 @@ class CLIMock { | |||
|   private waitForCallback: () => void; | ||||
|   exited: Promise<void>; | ||||
| 
 | ||||
|   constructor(browserName: string, browserChannel: string, headless: boolean, args: string[]) { | ||||
|   constructor(browserName: string, browserChannel: string, headless: boolean, args: string[], executablePath?: string) { | ||||
|     this.data = ''; | ||||
|     const nodeArgs = [ | ||||
|       path.join(__dirname, '..', '..', 'lib', 'cli', 'cli.js'), | ||||
|  | @ -176,6 +178,7 @@ class CLIMock { | |||
|         ...process.env, | ||||
|         PWTEST_CLI_EXIT: '1', | ||||
|         PWTEST_CLI_HEADLESS: headless ? '1' : undefined, | ||||
|         PWTEST_CLI_EXECUTABLE_PATH: executablePath, | ||||
|       }, | ||||
|       stdio: 'pipe' | ||||
|     }); | ||||
|  | @ -186,9 +189,15 @@ class CLIMock { | |||
|     }); | ||||
|     this.exited = new Promise((f, r) => { | ||||
|       this.process.stderr.on('data', data => { | ||||
|         r(new Error(data)); | ||||
|         console.error(data.toString()); | ||||
|       }); | ||||
|       this.process.on('exit', (exitCode, signal) => { | ||||
|         if (exitCode) | ||||
|           r(new Error(`Process failed with exit code ${exitCode}`)); | ||||
|         if (signal) | ||||
|           r(new Error(`Process recieved signal: ${signal}`)); | ||||
|         f(); | ||||
|       }); | ||||
|       this.process.on('exit', f); | ||||
|     }); | ||||
|   } | ||||
| 
 | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue