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; |   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); |   validateOptions(options); | ||||||
|   const browserType = lookupBrowserType(options); |   const browserType = lookupBrowserType(options); | ||||||
|   const launchOptions: LaunchOptions = { headless }; |   const launchOptions: LaunchOptions = { headless, executablePath }; | ||||||
|   if (options.channel) |   if (options.channel) | ||||||
|     launchOptions.channel = options.channel as any; |     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) { | 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({ |   await context._enableRecorder({ | ||||||
|     language, |     language, | ||||||
|     launchOptions, |     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) { | 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({ |   await context._enableRecorder({ | ||||||
|     language, |     language, | ||||||
|     launchOptions, |     launchOptions, | ||||||
|  |  | ||||||
|  | @ -41,6 +41,7 @@ export class CodeGenerator extends EventEmitter { | ||||||
|     super(); |     super(); | ||||||
| 
 | 
 | ||||||
|     launchOptions = { headless: false, ...launchOptions }; |     launchOptions = { headless: false, ...launchOptions }; | ||||||
|  |     delete launchOptions.executablePath; | ||||||
|     this._enabled = generateHeaders; |     this._enabled = generateHeaders; | ||||||
|     this._options = { browserName, generateHeaders, launchOptions, contextOptions, deviceName, saveStorage }; |     this._options = { browserName, generateHeaders, launchOptions, contextOptions, deviceName, saveStorage }; | ||||||
|     this.restart(); |     this.restart(); | ||||||
|  |  | ||||||
|  | @ -27,6 +27,7 @@ type CLITestArgs = { | ||||||
|   recorderPageGetter: () => Promise<Page>; |   recorderPageGetter: () => Promise<Page>; | ||||||
|   openRecorder: () => Promise<Recorder>; |   openRecorder: () => Promise<Recorder>; | ||||||
|   runCLI: (args: string[]) => CLIMock; |   runCLI: (args: string[]) => CLIMock; | ||||||
|  |   executablePath: string | undefined; | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| export const test = contextTest.extend({ | export const test = contextTest.extend({ | ||||||
|  | @ -34,7 +35,7 @@ export const test = contextTest.extend({ | ||||||
|     process.env.PWTEST_RECORDER_PORT = String(10907 + workerInfo.workerIndex); |     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'); |     testInfo.skip(mode === 'service'); | ||||||
|     const recorderPageGetter = async () => { |     const recorderPageGetter = async () => { | ||||||
|       while (!toImpl(context).recorderAppForTest) |       while (!toImpl(context).recorderAppForTest) | ||||||
|  | @ -46,7 +47,7 @@ export const test = contextTest.extend({ | ||||||
|     }; |     }; | ||||||
|     return { |     return { | ||||||
|       runCLI: (cliArgs: string[]) => { |       runCLI: (cliArgs: string[]) => { | ||||||
|         this._cli = new CLIMock(browserName, browserChannel, !headful, cliArgs); |         this._cli = new CLIMock(browserName, browserChannel, !headful, cliArgs, executablePath); | ||||||
|         return this._cli; |         return this._cli; | ||||||
|       }, |       }, | ||||||
|       openRecorder: async () => { |       openRecorder: async () => { | ||||||
|  | @ -54,6 +55,7 @@ export const test = contextTest.extend({ | ||||||
|         return new Recorder(page, await recorderPageGetter()); |         return new Recorder(page, await recorderPageGetter()); | ||||||
|       }, |       }, | ||||||
|       recorderPageGetter, |       recorderPageGetter, | ||||||
|  |       executablePath | ||||||
|     }; |     }; | ||||||
|   }, |   }, | ||||||
| 
 | 
 | ||||||
|  | @ -161,7 +163,7 @@ class CLIMock { | ||||||
|   private waitForCallback: () => void; |   private waitForCallback: () => void; | ||||||
|   exited: Promise<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 = ''; |     this.data = ''; | ||||||
|     const nodeArgs = [ |     const nodeArgs = [ | ||||||
|       path.join(__dirname, '..', '..', 'lib', 'cli', 'cli.js'), |       path.join(__dirname, '..', '..', 'lib', 'cli', 'cli.js'), | ||||||
|  | @ -176,6 +178,7 @@ class CLIMock { | ||||||
|         ...process.env, |         ...process.env, | ||||||
|         PWTEST_CLI_EXIT: '1', |         PWTEST_CLI_EXIT: '1', | ||||||
|         PWTEST_CLI_HEADLESS: headless ? '1' : undefined, |         PWTEST_CLI_HEADLESS: headless ? '1' : undefined, | ||||||
|  |         PWTEST_CLI_EXECUTABLE_PATH: executablePath, | ||||||
|       }, |       }, | ||||||
|       stdio: 'pipe' |       stdio: 'pipe' | ||||||
|     }); |     }); | ||||||
|  | @ -186,9 +189,15 @@ class CLIMock { | ||||||
|     }); |     }); | ||||||
|     this.exited = new Promise((f, r) => { |     this.exited = new Promise((f, r) => { | ||||||
|       this.process.stderr.on('data', data => { |       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