diff --git a/packages/playwright/src/common/configLoader.ts b/packages/playwright/src/common/configLoader.ts index 83e90f5820..a5144de168 100644 --- a/packages/playwright/src/common/configLoader.ts +++ b/packages/playwright/src/common/configLoader.ts @@ -93,7 +93,8 @@ export class ConfigLoader { } static async deserialize(data: SerializedConfig): Promise { - addToCompilationCache(data.compilationCache); + if (data.compilationCache) + addToCompilationCache(data.compilationCache); const loader = new ConfigLoader(data.configCLIOverrides); const config = data.configFile ? await loader.loadConfigFile(data.configFile) : await loader.loadEmptyConfig(data.configDir); diff --git a/packages/playwright/src/common/ipc.ts b/packages/playwright/src/common/ipc.ts index 8bbd3319ad..5656878abf 100644 --- a/packages/playwright/src/common/ipc.ts +++ b/packages/playwright/src/common/ipc.ts @@ -134,12 +134,12 @@ export type TeardownErrorsPayload = { export type EnvProducedPayload = [string, string | null][]; -export function serializeConfig(config: FullConfigInternal): SerializedConfig { +export function serializeConfig(config: FullConfigInternal, passCompilationCache: boolean): SerializedConfig { const result: SerializedConfig = { configFile: config.config.configFile, configDir: config.configDir, configCLIOverrides: config.configCLIOverrides, - compilationCache: serializeCompilationCache(), + compilationCache: passCompilationCache ? serializeCompilationCache() : undefined, }; return result; } diff --git a/packages/playwright/src/runner/dispatcher.ts b/packages/playwright/src/runner/dispatcher.ts index f922cf9555..da2b759aa6 100644 --- a/packages/playwright/src/runner/dispatcher.ts +++ b/packages/playwright/src/runner/dispatcher.ts @@ -97,7 +97,7 @@ export class Dispatcher { // 2. Start the worker if it is down. let startError; if (!worker) { - worker = this._createWorker(job, index, serializeConfig(this._config)); + worker = this._createWorker(job, index, serializeConfig(this._config, true)); this._workerSlots[index].worker = worker; worker.on('exit', () => this._workerSlots[index].worker = undefined); startError = await worker.start(); diff --git a/packages/playwright/src/runner/loaderHost.ts b/packages/playwright/src/runner/loaderHost.ts index 0b2bac5dad..cc311e5f6e 100644 --- a/packages/playwright/src/runner/loaderHost.ts +++ b/packages/playwright/src/runner/loaderHost.ts @@ -59,7 +59,7 @@ export class OutOfProcessLoaderHost { } async start(errors: TestError[]) { - const startError = await this._processHost.startRunner(serializeConfig(this._config)); + const startError = await this._processHost.startRunner(serializeConfig(this._config, false)); if (startError) { errors.push({ message: `Test loader process failed to start with code "${startError.code}" and signal "${startError.signal}"`, diff --git a/packages/playwright/src/runner/runner.ts b/packages/playwright/src/runner/runner.ts index 2f3fa739ab..e9df35fd4e 100644 --- a/packages/playwright/src/runner/runner.ts +++ b/packages/playwright/src/runner/runner.ts @@ -110,7 +110,7 @@ export class Runner { return status; } - async loadAllTests(): Promise<{ status: FullResult['status'], suite?: Suite, errors: TestError[] }> { + async loadAllTests(mode: 'in-process' | 'out-of-process' = 'in-process'): Promise<{ status: FullResult['status'], suite?: Suite, errors: TestError[] }> { const config = this._config; const errors: TestError[] = []; const reporter = new InternalReporter(new Multiplexer([wrapReporterAsV2({ @@ -118,7 +118,7 @@ export class Runner { errors.push(error); } })])); - const taskRunner = createTaskRunnerForList(config, reporter, 'in-process', { failOnLoadErrors: true }); + const taskRunner = createTaskRunnerForList(config, reporter, mode, { failOnLoadErrors: true }); const testRun = new TestRun(config, reporter); reporter.onConfigure(config.config); diff --git a/packages/playwright/src/runner/uiMode.ts b/packages/playwright/src/runner/uiMode.ts index 3846aaad78..d0071e14f1 100644 --- a/packages/playwright/src/runner/uiMode.ts +++ b/packages/playwright/src/runner/uiMode.ts @@ -17,7 +17,7 @@ import { openTraceViewerApp, openTraceInBrowser, registry } from 'playwright-core/lib/server'; import { isUnderTest, ManualPromise } from 'playwright-core/lib/utils'; import type { FullResult } from '../../types/testReporter'; -import { clearCompilationCache, collectAffectedTestFiles, dependenciesForTestFile } from '../transform/compilationCache'; +import { collectAffectedTestFiles, dependenciesForTestFile } from '../transform/compilationCache'; import type { FullConfigInternal } from '../common/config'; import { InternalReporter } from '../reporters/internalReporter'; import { TeleReporterEmitter } from '../reporters/teleEmitter'; @@ -172,7 +172,6 @@ class UIMode { this._config.testIdMatcher = undefined; const taskRunner = createTaskRunnerForList(this._config, reporter, 'out-of-process', { failOnLoadErrors: false }); const testRun = new TestRun(this._config, reporter); - clearCompilationCache(); reporter.onConfigure(this._config.config); const status = await taskRunner.run(testRun, 0); await reporter.onEnd({ status }); @@ -200,7 +199,6 @@ class UIMode { const reporter = new InternalReporter(new Multiplexer(reporters)); const taskRunner = createTaskRunnerForWatch(this._config, reporter); const testRun = new TestRun(this._config, reporter); - clearCompilationCache(); reporter.onConfigure(this._config.config); const stop = new ManualPromise(); const run = taskRunner.run(testRun, 0, stop).then(async status => { diff --git a/packages/playwright/src/runner/watchMode.ts b/packages/playwright/src/runner/watchMode.ts index 575653d3e2..ec165a2a69 100644 --- a/packages/playwright/src/runner/watchMode.ts +++ b/packages/playwright/src/runner/watchMode.ts @@ -22,7 +22,7 @@ import { createFileMatcher, createFileMatcherFromArguments } from '../util'; import type { Matcher } from '../util'; import { TestRun, createTaskRunnerForWatch, createTaskRunnerForWatchSetup } from './tasks'; import { buildProjectsClosure, filterProjects } from './projectUtils'; -import { clearCompilationCache, collectAffectedTestFiles } from '../transform/compilationCache'; +import { collectAffectedTestFiles } from '../transform/compilationCache'; import type { FullResult } from '../../types/testReporter'; import { chokidar } from '../utilsBundle'; import type { FSWatcher as CFSWatcher } from 'chokidar'; @@ -283,7 +283,6 @@ async function runTests(config: FullConfigInternal, failedTestIdCollector: Set