chore: expose find related files over test server (#29604)

This commit is contained in:
Pavel Feldman 2024-02-22 13:37:24 -08:00 committed by GitHub
parent 92b1b16041
commit ac0787d0c8
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 28 additions and 12 deletions

View File

@ -34,7 +34,7 @@ import { program } from 'playwright-core/lib/cli/program';
export { program } from 'playwright-core/lib/cli/program';
import type { ReporterDescription } from '../types/test';
import { prepareErrorStack } from './reporters/base';
import { affectedTestFiles, cacheDir } from './transform/compilationCache';
import { cacheDir } from './transform/compilationCache';
import { runTestServer } from './runner/testServer';
function addTestCommand(program: Command) {
@ -102,17 +102,7 @@ function addFindRelatedTestFilesCommand(program: Command) {
command.description('Returns the list of related tests to the given files');
command.option('-c, --config <file>', `Configuration file, or a test directory with optional "playwright.config.{m,c}?{js,ts}"`);
command.action(async (files, options) => {
await withRunnerAndMutedWrite(options.config, async (runner, config, configDir) => {
const result = await runner.loadAllTests();
if (result.status !== 'passed' || !result.suite)
return { errors: result.errors };
const resolvedFiles = (files as string[]).map(file => path.resolve(process.cwd(), file));
const override = (config as any)['@playwright/test']?.['cli']?.['find-related-test-files'];
if (override)
return await override(resolvedFiles, config, configDir, result.suite);
return { testFiles: affectedTestFiles(resolvedFiles) };
});
await withRunnerAndMutedWrite(options.config, runner => runner.findRelatedTestFiles('in-process', files));
});
}

View File

@ -30,6 +30,7 @@ import { InternalReporter } from '../reporters/internalReporter';
import { Multiplexer } from '../reporters/multiplexer';
import type { Suite } from '../common/test';
import { wrapReporterAsV2 } from '../reporters/reporterV2';
import { affectedTestFiles } from '../transform/compilationCache';
type ProjectConfigWithFiles = {
name: string;
@ -44,6 +45,11 @@ type ConfigListFilesReport = {
error?: TestError;
};
export type FindRelatedTestFilesReport = {
testFiles: string[];
errors?: TestError[];
};
export class Runner {
private _config: FullConfigInternal;
@ -144,4 +150,16 @@ export class Runner {
webServerPluginsForConfig(config).forEach(p => config.plugins.push({ factory: p }));
return await runUIMode(config, options);
}
async findRelatedTestFiles(mode: 'in-process' | 'out-of-process', files: string[]): Promise<FindRelatedTestFilesReport> {
const result = await this.loadAllTests(mode);
if (result.status !== 'passed' || !result.suite)
return { errors: result.errors, testFiles: [] };
const resolvedFiles = (files as string[]).map(file => path.resolve(process.cwd(), file));
const override = (this._config.config as any)['@playwright/test']?.['cli']?.['find-related-test-files'];
if (override)
return await override(resolvedFiles, this._config.config, this._config.configDir, result.suite);
return { testFiles: affectedTestFiles(resolvedFiles) };
}
}

View File

@ -27,6 +27,8 @@ import { Multiplexer } from '../reporters/multiplexer';
import { createReporters } from './reporters';
import { TestRun, createTaskRunnerForList, createTaskRunnerForTestServer } from './tasks';
import type { ConfigCLIOverrides } from '../common/ipc';
import { Runner } from './runner';
import type { FindRelatedTestFilesReport } from './runner';
type PlaywrightTestOptions = {
headed?: boolean,
@ -117,6 +119,12 @@ class Dispatcher {
await this._runTests(params.reporter, params.locations, params.options);
}
async findRelatedTestFiles(params: { files: string[] }): Promise<FindRelatedTestFilesReport> {
const config = await this._loadConfig({});
const runner = new Runner(config);
return runner.findRelatedTestFiles('out-of-process', params.files);
}
async stop() {
await this._stopTests();
}