diff --git a/packages/test-runner-core/architecture.md b/packages/test-runner-core/architecture.md index 3742a28c1..ca35c2abc 100644 --- a/packages/test-runner-core/architecture.md +++ b/packages/test-runner-core/architecture.md @@ -178,12 +178,6 @@ A test session is a combination of a combination of a browser and a testfile. Fo The `TestSession` data structure represents these individual combinations, and contains information about the status and test results. The status property is updated over time as the test session executed. It's implemented as a regular javascript object, and should be treated as immutable. -### TestSessionGroup - -A test group is a way to group together related tests which share the same configuration options. A user can do this from the config, using the `groups` entry. For example to execute a group of tests only on a certain browser, or to execute tests in a different HTML environment. - -A default group is always created as well, this contains all the default options from the top level config. - ### TestScheduler The scheduler is created by the test runner, and is not exposed as a public property. It manages the actual execution of a test session, and communicates with the browser launcher. diff --git a/packages/test-runner-core/src/config/TestRunnerGroupConfig.ts b/packages/test-runner-core/src/config/TestRunnerGroupConfig.ts index f768e3b80..e4c389ee8 100644 --- a/packages/test-runner-core/src/config/TestRunnerGroupConfig.ts +++ b/packages/test-runner-core/src/config/TestRunnerGroupConfig.ts @@ -3,7 +3,6 @@ import { TestRunnerCoreConfig } from './TestRunnerCoreConfig.js'; export interface TestRunnerGroupConfig { name: string; - configFilePath?: string; files?: string | string[]; browsers?: BrowserLauncher[]; testRunnerHtml?: ( diff --git a/packages/test-runner-core/src/runner/TestRunner.ts b/packages/test-runner-core/src/runner/TestRunner.ts index f2b486244..f2adbd30d 100644 --- a/packages/test-runner-core/src/runner/TestRunner.ts +++ b/packages/test-runner-core/src/runner/TestRunner.ts @@ -51,10 +51,7 @@ export class TestRunner extends EventEmitter { throw new Error('The open option requires the manual option to be set.'); } - const { sessionGroups, testFiles, testSessions, browsers } = createTestSessions( - config, - groupConfigs, - ); + const { testFiles, testSessions, browsers } = createTestSessions(config, groupConfigs); this.config = config; this.testFiles = testFiles; @@ -65,7 +62,7 @@ export class TestRunner extends EventEmitter { this.browsers.findIndex(br => br.name === a) - this.browsers.findIndex(br => br.name === b), ); - this.sessions = new TestSessionManager(sessionGroups, testSessions); + this.sessions = new TestSessionManager(testSessions); this.scheduler = new TestScheduler(config, this.sessions, browsers); this.server = new TestRunnerServer( this.config, diff --git a/packages/test-runner-core/src/runner/createSessionGroups.ts b/packages/test-runner-core/src/runner/createSessionGroups.ts index 40d8e134f..ade77b495 100644 --- a/packages/test-runner-core/src/runner/createSessionGroups.ts +++ b/packages/test-runner-core/src/runner/createSessionGroups.ts @@ -7,11 +7,9 @@ import { TestRunnerCoreConfig } from '../config/TestRunnerCoreConfig.js'; import { TestRunnerGroupConfig } from '../config/TestRunnerGroupConfig.js'; import { BrowserLauncher } from '../browser-launcher/BrowserLauncher.js'; import { collectTestFiles } from './collectTestFiles.js'; -import { TestSessionGroup } from '../test-session/TestSessionGroup.js'; interface GroupConfigWithoutOptionals extends TestRunnerGroupConfig { name: string; - configFilePath?: string; files: string | string[]; browsers: BrowserLauncher[]; } @@ -34,7 +32,6 @@ export function createTestSessions( // merge group with config defaults const mergedGroupConfig: GroupConfigWithoutOptionals = { name: groupConfig.name, - configFilePath: groupConfig.configFilePath, testRunnerHtml: config.testRunnerHtml, browsers: config.browsers, files: config.files ?? [], @@ -59,14 +56,12 @@ export function createTestSessions( groups.push(mergedGroupConfig); } - const sessionGroups: TestSessionGroup[] = []; const testSessions: TestSession[] = []; const testFiles = new Set(); const browsers = new Set(); for (const group of groups) { - const baseDir = group.configFilePath ? path.dirname(group.configFilePath) : process.cwd(); - const testFilesForGroup = collectTestFiles(group.files, baseDir) + const testFilesForGroup = collectTestFiles(group.files) // Normalize file path because glob returns windows paths with forward slashes: // C:/foo/bar -> C:\foo\bar .map(testFile => path.normalize(testFile)); @@ -75,27 +70,17 @@ export function createTestSessions( throw new Error(`Could not find any test files with pattern(s): ${group.files}`); } - for (const file of testFilesForGroup) { - testFiles.add(file); - } - - const sessionGroup: TestSessionGroup = { - name: group.name, - browsers: group.browsers, - testFiles: testFilesForGroup, - testRunnerHtml: group.testRunnerHtml, - sessionIds: [], - }; - - for (const browser of group.browsers) { + for (const browser of browsers) { browsers.add(browser); } for (const testFile of testFilesForGroup) { + testFiles.add(testFile); + for (const browser of group.browsers) { - const session: TestSession = { + testSessions.push({ id: nanoid(), - group: sessionGroup, + group, debug: false, testRun: -1, browser, @@ -104,10 +89,7 @@ export function createTestSessions( errors: [], logs: [], request404s: [], - }; - - testSessions.push(session); - sessionGroup.sessionIds.push(session.id); + }); } } } @@ -117,7 +99,6 @@ export function createTestSessions( } return { - sessionGroups, testSessions, testFiles: Array.from(testFiles), browsers: Array.from(browsers), diff --git a/packages/test-runner-core/src/test-session/BasicTestSession.ts b/packages/test-runner-core/src/test-session/BasicTestSession.ts index 690d5f493..9f9bda2b5 100644 --- a/packages/test-runner-core/src/test-session/BasicTestSession.ts +++ b/packages/test-runner-core/src/test-session/BasicTestSession.ts @@ -1,9 +1,8 @@ import { BrowserLauncher } from '../browser-launcher/BrowserLauncher'; -import { TestSessionGroup } from './TestSessionGroup.js'; export interface BasicTestSession { id: string; - group: TestSessionGroup; + group: { name: string }; debug: boolean; browser: BrowserLauncher; testFile: string; diff --git a/packages/test-runner-core/src/test-session/TestSessionGroup.ts b/packages/test-runner-core/src/test-session/TestSessionGroup.ts deleted file mode 100644 index 4b8d0fc48..000000000 --- a/packages/test-runner-core/src/test-session/TestSessionGroup.ts +++ /dev/null @@ -1,15 +0,0 @@ -import { BrowserLauncher } from '../browser-launcher/BrowserLauncher'; -import { TestRunnerCoreConfig } from '../config/TestRunnerCoreConfig'; -import { TestRunnerGroupConfig } from '../config/TestRunnerGroupConfig'; - -export interface TestSessionGroup { - name: string; - testFiles: string[]; - browsers: BrowserLauncher[]; - sessionIds: string[]; - testRunnerHtml?: ( - testRunnerImport: string, - config: TestRunnerCoreConfig, - group: TestRunnerGroupConfig, - ) => string; -} diff --git a/packages/test-runner-core/src/test-session/TestSessionManager.ts b/packages/test-runner-core/src/test-session/TestSessionManager.ts index b8edf7344..81f7fbe99 100644 --- a/packages/test-runner-core/src/test-session/TestSessionManager.ts +++ b/packages/test-runner-core/src/test-session/TestSessionManager.ts @@ -2,7 +2,6 @@ import { TestSession } from './TestSession.js'; import { TestSessionStatus } from './TestSessionStatus.js'; import { EventEmitter } from '../utils/EventEmitter.js'; import { DebugTestSession } from './DebugTestSession.js'; -import { TestSessionGroup } from './TestSessionGroup.js'; import { BrowserLauncher } from '../browser-launcher/BrowserLauncher.js'; interface EventMap { @@ -19,13 +18,11 @@ function* filtered(it: Iterator, filter: (value: T) => unknown) { } export class TestSessionManager extends EventEmitter { - private _groups: TestSessionGroup[]; private sessionsMap = new Map(); private debugSessions = new Map(); - constructor(groups: TestSessionGroup[], sessions: TestSession[]) { + constructor(sessions: TestSession[]) { super(); - this._groups = groups; for (const session of sessions) { this.sessionsMap.set(session.id, session); } @@ -51,10 +48,6 @@ export class TestSessionManager extends EventEmitter { this.emit('session-updated', undefined); } - groups() { - return this._groups; - } - get(id: string) { return this.sessionsMap.get(id); } diff --git a/packages/test-runner-core/test/src/runner/TestScheduler.test.ts b/packages/test-runner-core/test/src/runner/TestScheduler.test.ts index 5433c7661..cf52a04ae 100644 --- a/packages/test-runner-core/test/src/runner/TestScheduler.test.ts +++ b/packages/test-runner-core/test/src/runner/TestScheduler.test.ts @@ -95,7 +95,7 @@ describe('TestScheduler', () => { const session = createSession({ id, browser }); sessions.push(session); } - const sessionManager = new TestSessionManager([], sessions); + const sessionManager = new TestSessionManager(sessions); const scheduler = new TestScheduler(mockConfig, sessionManager, [browser]); return [scheduler, sessionManager, sessions, browserStubs]; } @@ -323,7 +323,7 @@ describe('TestScheduler', () => { } } - const sessionManager = new TestSessionManager([], sessions); + const sessionManager = new TestSessionManager(sessions); const scheduler = new TestScheduler( mockConfig, sessionManager, diff --git a/packages/test-runner/src/config/collectGroupConfigs.ts b/packages/test-runner/src/config/collectGroupConfigs.ts index 02b53e2de..f366929b4 100644 --- a/packages/test-runner/src/config/collectGroupConfigs.ts +++ b/packages/test-runner/src/config/collectGroupConfigs.ts @@ -3,7 +3,10 @@ import { readConfig, ConfigLoaderError } from '@web/config-loader'; import globby from 'globby'; import { TestRunnerStartError } from '../TestRunnerStartError.js'; -function validateGroupConfig(configFilePath: string, config: Partial) { +function validateGroupConfig( + configFilePath: string, + config: Partial, +): TestRunnerGroupConfig { if (config.browsers != null && !Array.isArray(config.browsers)) { throw new TestRunnerStartError( `Group config at ${configFilePath} has invalid browsers option. It should be an array.`, @@ -16,7 +19,7 @@ function validateGroupConfig(configFilePath: string, config: Partial