add 1.42 format test

This commit is contained in:
Yury Semikhatsky 2024-03-28 16:03:09 -07:00
parent 51cdd27080
commit 1a3c561fcd
3 changed files with 176 additions and 0 deletions

View file

@ -0,0 +1,127 @@
/**
* 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 { Metadata } from '../../../types/test';
import type * as reporterTypes from '../../../types/testReporter';
export type JsonLocation = reporterTypes.Location;
export type JsonError = string;
export type JsonStackFrame = { file: string, line: number, column: number };
export type JsonStdIOType = 'stdout' | 'stderr';
export type JsonConfig = Pick<reporterTypes.FullConfig, 'configFile' | 'globalTimeout' | 'maxFailures' | 'metadata' | 'rootDir' | 'version' | 'workers'>;
export type JsonPattern = {
s?: string;
r?: { source: string, flags: string };
};
export type JsonProject = {
grep: JsonPattern[];
grepInvert: JsonPattern[];
metadata: Metadata;
name: string;
dependencies: string[];
// This is relative to root dir.
snapshotDir: string;
// This is relative to root dir.
outputDir: string;
repeatEach: number;
retries: number;
suites: JsonSuite[];
teardown?: string;
// This is relative to root dir.
testDir: string;
testIgnore: JsonPattern[];
testMatch: JsonPattern[];
timeout: number;
};
export type JsonSuite = {
title: string;
location?: JsonLocation;
suites: JsonSuite[];
tests: JsonTestCase[];
};
export type JsonTestCase = {
testId: string;
title: string;
location: JsonLocation;
retries: number;
tags?: string[];
repeatEachIndex: number;
};
export type JsonTestEnd = {
testId: string;
expectedStatus: reporterTypes.TestStatus;
timeout: number;
annotations: { type: string, description?: string }[];
};
export type JsonTestResultStart = {
id: string;
retry: number;
workerIndex: number;
parallelIndex: number;
startTime: number;
};
export type JsonAttachment = Omit<reporterTypes.TestResult['attachments'][0], 'body'> & { base64?: string };
export type JsonTestResultEnd = {
id: string;
duration: number;
status: reporterTypes.TestStatus;
errors: reporterTypes.TestError[];
attachments: JsonAttachment[];
};
export type JsonTestStepStart = {
id: string;
parentStepId?: string;
title: string;
category: string,
startTime: number;
location?: reporterTypes.Location;
};
export type JsonTestStepEnd = {
id: string;
duration: number;
error?: reporterTypes.TestError;
};
export type JsonFullResult = {
status: reporterTypes.FullResult['status'];
startTime: number;
duration: number;
};
export type JsonEvent = {
method: string;
params: any
};
export type BlobReportMetadata = {
version: number;
userAgent: string;
name?: string;
shard?: { total: number, current: number };
pathSeparator?: string;
};

BIN
tests/assets/blob-1.42.zip Normal file

Binary file not shown.

View file

@ -1741,3 +1741,52 @@ test('TestSuite.project() should return owning project', async ({ runInlineTest,
expect(exitCode).toBe(0);
expect(output).toContain(`test project: my-project`);
});
test('open blob-1.42', async ({ runInlineTest, mergeReports }) => {
test.info().annotations.push({ type: 'issue', description: 'https://github.com/microsoft/playwright/issues/29984' });
await runInlineTest({
'echo-reporter.js': `
export default class EchoReporter {
lines = [];
onTestBegin(test) {
this.lines.push(test.titlePath().join(' > '));
}
onEnd() {
console.log(this.lines.join('\\n'));
}
};
`,
'merge.config.ts': `module.exports = {
testDir: 'mergeRoot',
reporter: './echo-reporter.js'
};`,
});
const blobDir = test.info().outputPath('blob-report');
await fs.promises.mkdir(blobDir, { recursive: true });
await fs.promises.copyFile(path.join(__dirname, '../assets/blob-1.42.zip'), path.join(blobDir, 'blob-1.42.zip'));
const { exitCode, output } = await mergeReports(blobDir, undefined, { additionalArgs: ['--config', 'merge.config.ts'] });
expect(exitCode).toBe(0);
expect(output).toContain(` > chromium > example.spec.ts > test 0
> chromium > example.spec.ts > describe 1 > describe 2 > test 3
> chromium > example.spec.ts > describe 1 > describe 2 > test 4
> chromium > example.spec.ts > describe 1 > describe 2 > test 2
> chromium > example.spec.ts > describe 1 > test 1
> chromium > example.spec.ts > describe 1 > test 5
> chromium > example.spec.ts > test 6
> firefox > example.spec.ts > describe 1 > describe 2 > test 2
> firefox > example.spec.ts > describe 1 > describe 2 > test 3
> firefox > example.spec.ts > test 0
> firefox > example.spec.ts > describe 1 > describe 2 > test 4
> firefox > example.spec.ts > describe 1 > test 1
> firefox > example.spec.ts > test 6
> firefox > example.spec.ts > describe 1 > test 5
> webkit > example.spec.ts > describe 1 > describe 2 > test 4
> webkit > example.spec.ts > test 0
> webkit > example.spec.ts > describe 1 > test 1
> webkit > example.spec.ts > describe 1 > describe 2 > test 2
> webkit > example.spec.ts > describe 1 > describe 2 > test 3
> webkit > example.spec.ts > test 6
> webkit > example.spec.ts > describe 1 > test 5`);
});