diff --git a/packages/trace-viewer/src/ui/teleSuiteUpdater.ts b/packages/playwright/src/isomorphic/teleSuiteUpdater.ts similarity index 84% rename from packages/trace-viewer/src/ui/teleSuiteUpdater.ts rename to packages/playwright/src/isomorphic/teleSuiteUpdater.ts index 0d448ea172..ef1c2dbb3e 100644 --- a/packages/trace-viewer/src/ui/teleSuiteUpdater.ts +++ b/packages/playwright/src/isomorphic/teleSuiteUpdater.ts @@ -14,11 +14,24 @@ * limitations under the License. */ -import { TeleReporterReceiver, TeleSuite } from '@testIsomorphic/teleReceiver'; -import { statusEx } from '@testIsomorphic/testTree'; -import type { ReporterV2 } from 'playwright/src/reporters/reporterV2'; -import type * as reporterTypes from 'playwright/types/testReporter'; -import type { Progress, TestModel } from './uiModeModel'; +import { TeleReporterReceiver, TeleSuite } from './teleReceiver'; +import { statusEx } from './testTree'; +import type { ReporterV2 } from '../reporters/reporterV2'; +import type * as reporterTypes from '../../types/testReporter'; + +export type TeleSuiteUpdaterProgress = { + total: number; + passed: number; + failed: number; + skipped: number; +}; + +export type TeleSuiteUpdaterTestModel = { + config: reporterTypes.FullConfig; + rootSuite: reporterTypes.Suite; + loadErrors: reporterTypes.TestError[]; + progress: TeleSuiteUpdaterProgress; +}; export type TeleSuiteUpdaterOptions = { onUpdate: (force?: boolean) => void, @@ -30,7 +43,7 @@ export class TeleSuiteUpdater { rootSuite: TeleSuite | undefined; config: reporterTypes.FullConfig | undefined; readonly loadErrors: reporterTypes.TestError[] = []; - readonly progress: Progress = { + readonly progress: TeleSuiteUpdaterProgress = { total: 0, passed: 0, failed: 0, @@ -118,11 +131,11 @@ export class TeleSuiteUpdater { return false; }, - onStdOut: () => {}, - onStdErr: () => {}, - onExit: () => {}, - onStepBegin: () => {}, - onStepEnd: () => {}, + onStdOut: () => { }, + onStdErr: () => { }, + onExit: () => { }, + onStepBegin: () => { }, + onStepEnd: () => { }, }; } @@ -134,7 +147,7 @@ export class TeleSuiteUpdater { onError: (error: reporterTypes.TestError) => this._handleOnError(error) }); for (const message of report) - receiver.dispatch(message); + void receiver.dispatch(message); } processListReport(report: any[]) { @@ -144,14 +157,14 @@ export class TeleSuiteUpdater { this._testResultsSnapshot = new Map(tests.map(test => [test.id, test.results])); this._receiver.reset(); for (const message of report) - this._receiver.dispatch(message); + void this._receiver.dispatch(message); } processTestReportEvent(message: any) { // The order of receiver dispatches matters here, we want to assign `lastRunTestCount` // before we use it. - this._lastRunReceiver?.dispatch(message)?.catch(() => {}); - this._receiver.dispatch(message)?.catch(() => {}); + this._lastRunReceiver?.dispatch(message)?.catch(() => { }); + this._receiver.dispatch(message)?.catch(() => { }); } private _handleOnError(error: reporterTypes.TestError) { @@ -160,7 +173,7 @@ export class TeleSuiteUpdater { this._options.onUpdate(); } - asModel(): TestModel { + asModel(): TeleSuiteUpdaterTestModel { return { rootSuite: this.rootSuite || new TeleSuite('', 'root'), config: this.config!, diff --git a/packages/trace-viewer/src/ui/uiModeFiltersView.tsx b/packages/trace-viewer/src/ui/uiModeFiltersView.tsx index 1c1be674f7..7671c2e9ba 100644 --- a/packages/trace-viewer/src/ui/uiModeFiltersView.tsx +++ b/packages/trace-viewer/src/ui/uiModeFiltersView.tsx @@ -20,7 +20,7 @@ import '@web/third_party/vscode/codicon.css'; import { settings } from '@web/uiUtils'; import React from 'react'; import './uiModeFiltersView.css'; -import type { TestModel } from './uiModeModel'; +import type { TeleSuiteUpdaterTestModel } from '@testIsomorphic/teleSuiteUpdater'; export const FiltersView: React.FC<{ filterText: string; @@ -29,7 +29,7 @@ export const FiltersView: React.FC<{ setStatusFilters: (filters: Map) => void; projectFilters: Map; setProjectFilters: (filters: Map) => void; - testModel: TestModel | undefined, + testModel: TeleSuiteUpdaterTestModel | undefined, runTests: () => void; }> = ({ filterText, setFilterText, statusFilters, setStatusFilters, projectFilters, setProjectFilters, testModel, runTests }) => { const [expanded, setExpanded] = React.useState(false); diff --git a/packages/trace-viewer/src/ui/uiModeModel.ts b/packages/trace-viewer/src/ui/uiModeModel.ts deleted file mode 100644 index 97952cfbfd..0000000000 --- a/packages/trace-viewer/src/ui/uiModeModel.ts +++ /dev/null @@ -1,33 +0,0 @@ -/* - Copyright (c) Microsoft Corporation. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ - -import type * as reporterTypes from 'playwright/types/testReporter'; - -export type Progress = { - total: number; - passed: number; - failed: number; - skipped: number; -}; - -export type TestModel = { - config: reporterTypes.FullConfig; - rootSuite: reporterTypes.Suite; - loadErrors: reporterTypes.TestError[]; - progress: Progress; -}; - -export const pathSeparator = navigator.userAgent.toLowerCase().includes('windows') ? '\\' : '/'; diff --git a/packages/trace-viewer/src/ui/uiModeTestListView.tsx b/packages/trace-viewer/src/ui/uiModeTestListView.tsx index b7a9d8e1d1..99a5f22dfa 100644 --- a/packages/trace-viewer/src/ui/uiModeTestListView.tsx +++ b/packages/trace-viewer/src/ui/uiModeTestListView.tsx @@ -27,10 +27,10 @@ import type * as reporterTypes from 'playwright/types/testReporter'; import React from 'react'; import type { SourceLocation } from './modelUtil'; import { testStatusIcon } from './testUtils'; -import type { TestModel } from './uiModeModel'; import './uiModeTestListView.css'; import type { TestServerConnection } from '@testIsomorphic/testServerConnection'; import { TagView } from './tag'; +import type { TeleSuiteUpdaterTestModel } from '@testIsomorphic/teleSuiteUpdater'; const TestTreeView = TreeView; @@ -38,7 +38,7 @@ export const TestListView: React.FC<{ filterText: string, testTree: TestTree, testServerConnection: TestServerConnection | undefined, - testModel?: TestModel, + testModel?: TeleSuiteUpdaterTestModel, runTests: (mode: 'bounce-if-busy' | 'queue-if-busy', testIds: Set) => void, runningState?: { testIds: Set, itemSelectedByUser?: boolean, completed?: boolean }, watchAll: boolean, @@ -179,7 +179,7 @@ export const TestListView: React.FC<{ noItemsMessage={isLoading ? 'Loading\u2026' : 'No tests'} />; }; -function itemLocation(item: TreeItem | undefined, model: TestModel | undefined): SourceLocation | undefined { +function itemLocation(item: TreeItem | undefined, model: TeleSuiteUpdaterTestModel | undefined): SourceLocation | undefined { if (!item || !model) return; return { diff --git a/packages/trace-viewer/src/ui/uiModeView.tsx b/packages/trace-viewer/src/ui/uiModeView.tsx index b12617c300..4a73575a11 100644 --- a/packages/trace-viewer/src/ui/uiModeView.tsx +++ b/packages/trace-viewer/src/ui/uiModeView.tsx @@ -18,8 +18,7 @@ import '@web/third_party/vscode/codicon.css'; import '@web/common.css'; import React from 'react'; import { TeleSuite } from '@testIsomorphic/teleReceiver'; -import { TeleSuiteUpdater } from './teleSuiteUpdater'; -import type { Progress } from './uiModeModel'; +import { TeleSuiteUpdater, type TeleSuiteUpdaterProgress, type TeleSuiteUpdaterTestModel } from '@testIsomorphic/teleSuiteUpdater'; import type { TeleTestCase } from '@testIsomorphic/teleReceiver'; import type * as reporterTypes from 'playwright/types/testReporter'; import { SplitView } from '@web/components/splitView'; @@ -34,13 +33,13 @@ import { clsx, settings, useSetting } from '@web/uiUtils'; import { statusEx, TestTree } from '@testIsomorphic/testTree'; import type { TreeItem } from '@testIsomorphic/testTree'; import { TestServerConnection } from '@testIsomorphic/testServerConnection'; -import { pathSeparator } from './uiModeModel'; -import type { TestModel } from './uiModeModel'; import { FiltersView } from './uiModeFiltersView'; import { TestListView } from './uiModeTestListView'; import { TraceView } from './uiModeTraceView'; import { SettingsView } from './settingsView'; +const pathSeparator = navigator.userAgent.toLowerCase().includes('windows') ? '\\' : '/'; + let xtermSize = { cols: 80, rows: 24 }; const xtermDataSource: XtermDataSource = { pending: [], @@ -80,8 +79,8 @@ export const UIModeView: React.FC<{}> = ({ ['skipped', false], ])); const [projectFilters, setProjectFilters] = React.useState>(new Map()); - const [testModel, setTestModel] = React.useState(); - const [progress, setProgress] = React.useState(); + const [testModel, setTestModel] = React.useState(); + const [progress, setProgress] = React.useState(); const [selectedItem, setSelectedItem] = React.useState<{ treeItem?: TreeItem, testFile?: SourceLocation, testCase?: reporterTypes.TestCase }>({}); const [visibleTestIds, setVisibleTestIds] = React.useState>(new Set()); const [isLoading, setIsLoading] = React.useState(false);