1
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
"use strict";
2
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
var __create = Object.create;
3
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
var __defProp = Object.defineProperty;
4
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
var __getOwnPropNames = Object.getOwnPropertyNames;
6
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
var __getProtoOf = Object.getPrototypeOf;
7
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
var __hasOwnProp = Object.prototype.hasOwnProperty;
8
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
var __export = (target, all) => {
9
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
for (var name in all)
10
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
__defProp(target, name, { get: all[name], enumerable: true });
11
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
};
12
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
var __copyProps = (to, from, except, desc) => {
13
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
if (from && typeof from === "object" || typeof from === "function") {
14
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
for (let key of __getOwnPropNames(from))
15
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
if (!__hasOwnProp.call(to, key) && key !== except)
16
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
17
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
}
18
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
return to;
19
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
};
20
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
21
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
// If the importer is in node compatibility mode or this is not an ESM
22
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
// file that has been converted to a CommonJS file using a Babel-
23
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
// compatible transform (i.e. "__esModule" has not been set), then set
24
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
// "default" to the CommonJS "module.exports" for node compatibility.
25
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
26
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
mod
27
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
));
28
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
29
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
var base_exports = {};
30
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
__export(base_exports, {
31
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
TerminalReporter: () => TerminalReporter,
32
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
fitToWidth: () => fitToWidth,
33
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
formatError: () => formatError,
34
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
formatFailure: () => formatFailure,
35
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
formatResultFailure: () => formatResultFailure,
36
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
formatRetry: () => formatRetry,
37
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
internalScreen: () => internalScreen,
38
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
kOutputSymbol: () => kOutputSymbol,
39
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
markErrorsAsReported: () => markErrorsAsReported,
40
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
nonTerminalScreen: () => nonTerminalScreen,
41
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
prepareErrorStack: () => prepareErrorStack,
42
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
relativeFilePath: () => relativeFilePath,
43
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
resolveOutputFile: () => resolveOutputFile,
44
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
separator: () => separator,
45
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
stepSuffix: () => stepSuffix,
46
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
terminalScreen: () => terminalScreen
47
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
});
48
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
module.exports = __toCommonJS(base_exports);
49
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
var import_path = __toESM(require("path"));
50
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
var import_utils = require("playwright-core/lib/utils");
51
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
var import_utilsBundle = require("playwright-core/lib/utilsBundle");
52
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
var import_utils2 = require("playwright-core/lib/utils");
53
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
var import_util = require("../util");
54
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
var import_utilsBundle2 = require("../utilsBundle");
55
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
const kOutputSymbol = Symbol("output");
56
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
const DEFAULT_TTY_WIDTH = 100;
57
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
const DEFAULT_TTY_HEIGHT = 40;
58
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
const originalProcessStdout = process.stdout;
59
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
const originalProcessStderr = process.stderr;
60
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
const terminalScreen = (() => {
61
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
let isTTY = !!originalProcessStdout.isTTY;
62
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
let ttyWidth = originalProcessStdout.columns || 0;
63
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
let ttyHeight = originalProcessStdout.rows || 0;
64
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
if (process.env.PLAYWRIGHT_FORCE_TTY === "false" || process.env.PLAYWRIGHT_FORCE_TTY === "0") {
65
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
isTTY = false;
66
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
ttyWidth = 0;
67
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
ttyHeight = 0;
68
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
} else if (process.env.PLAYWRIGHT_FORCE_TTY === "true" || process.env.PLAYWRIGHT_FORCE_TTY === "1") {
69
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
isTTY = true;
70
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
ttyWidth = originalProcessStdout.columns || DEFAULT_TTY_WIDTH;
71
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
ttyHeight = originalProcessStdout.rows || DEFAULT_TTY_HEIGHT;
72
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
} else if (process.env.PLAYWRIGHT_FORCE_TTY) {
73
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
isTTY = true;
74
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
const sizeMatch = process.env.PLAYWRIGHT_FORCE_TTY.match(/^(\d+)x(\d+)$/);
75
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
if (sizeMatch) {
76
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
ttyWidth = +sizeMatch[1];
77
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
ttyHeight = +sizeMatch[2];
78
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
} else {
79
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
ttyWidth = +process.env.PLAYWRIGHT_FORCE_TTY;
80
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
ttyHeight = DEFAULT_TTY_HEIGHT;
81
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
}
82
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
if (isNaN(ttyWidth))
83
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
ttyWidth = DEFAULT_TTY_WIDTH;
84
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
if (isNaN(ttyHeight))
85
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
ttyHeight = DEFAULT_TTY_HEIGHT;
86
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
}
87
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
let useColors = isTTY;
88
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
if (process.env.DEBUG_COLORS === "0" || process.env.DEBUG_COLORS === "false" || process.env.FORCE_COLOR === "0" || process.env.FORCE_COLOR === "false")
89
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
useColors = false;
90
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
else if (process.env.DEBUG_COLORS || process.env.FORCE_COLOR)
91
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
useColors = true;
92
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
const colors = useColors ? import_utils2.colors : import_utils2.noColors;
93
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
return {
94
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
resolveFiles: "cwd",
95
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
isTTY,
96
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
ttyWidth,
97
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
ttyHeight,
98
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
colors,
99
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
stdout: originalProcessStdout,
100
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
stderr: originalProcessStderr
101
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
};
102
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
})();
103
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
const nonTerminalScreen = {
104
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
colors: terminalScreen.colors,
105
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
isTTY: false,
106
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
ttyWidth: 0,
107
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
ttyHeight: 0,
108
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
resolveFiles: "rootDir"
109
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
};
110
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
const internalScreen = {
111
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
colors: import_utils2.colors,
112
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
isTTY: false,
113
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
ttyWidth: 0,
114
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
ttyHeight: 0,
115
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
resolveFiles: "rootDir"
116
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
};
117
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
class TerminalReporter {
118
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
constructor(options = {}) {
119
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
this.totalTestCount = 0;
120
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
this.fileDurations = /* @__PURE__ */ new Map();
121
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
this._fatalErrors = [];
122
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
this._failureCount = 0;
123
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
this.screen = options.screen ?? terminalScreen;
124
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
this._options = options;
125
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
}
126
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
version() {
127
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
return "v2";
128
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
}
129
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
onConfigure(config) {
130
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
this.config = config;
131
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
}
132
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
onBegin(suite) {
133
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
this.suite = suite;
134
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
this.totalTestCount = suite.allTests().length;
135
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
}
136
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
onStdOut(chunk, test, result) {
137
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
this._appendOutput({ chunk, type: "stdout" }, result);
138
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
}
139
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
onStdErr(chunk, test, result) {
140
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
this._appendOutput({ chunk, type: "stderr" }, result);
141
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
}
142
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
_appendOutput(output, result) {
143
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
if (!result)
144
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
return;
145
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
result[kOutputSymbol] = result[kOutputSymbol] || [];
146
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
result[kOutputSymbol].push(output);
147
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
}
148
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
onTestEnd(test, result) {
149
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
if (result.status !== "skipped" && result.status !== test.expectedStatus)
150
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
++this._failureCount;
151
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
const projectName = test.titlePath()[1];
152
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
const relativePath = relativeTestPath(this.screen, this.config, test);
153
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
const fileAndProject = (projectName ? `[${projectName}] \u203A ` : "") + relativePath;
154
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
const entry = this.fileDurations.get(fileAndProject) || { duration: 0, workers: /* @__PURE__ */ new Set() };
155
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
entry.duration += result.duration;
156
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
entry.workers.add(result.workerIndex);
157
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
this.fileDurations.set(fileAndProject, entry);
158
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
}
159
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
onError(error) {
160
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
this._fatalErrors.push(error);
161
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
}
162
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
async onEnd(result) {
163
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
this.result = result;
164
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
}
165
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
fitToScreen(line, prefix) {
166
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
if (!this.screen.ttyWidth) {
167
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
return line;
168
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
}
169
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
return fitToWidth(line, this.screen.ttyWidth, prefix);
170
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
}
171
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
generateStartingMessage() {
172
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
const jobs = this.config.metadata.actualWorkers ?? this.config.workers;
173
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
const shardDetails = this.config.shard ? `, shard ${this.config.shard.current} of ${this.config.shard.total}` : "";
174
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
if (!this.totalTestCount)
175
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
return "";
176
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
return "\n" + this.screen.colors.dim("Running ") + this.totalTestCount + this.screen.colors.dim(` test${this.totalTestCount !== 1 ? "s" : ""} using `) + jobs + this.screen.colors.dim(` worker${jobs !== 1 ? "s" : ""}${shardDetails}`);
177
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
}
178
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
getSlowTests() {
179
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
if (!this.config.reportSlowTests)
180
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
return [];
181
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
const fileDurations = [...this.fileDurations.entries()].filter(([key, value]) => value.workers.size === 1).map(([key, value]) => [key, value.duration]);
182
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
fileDurations.sort((a, b) => b[1] - a[1]);
183
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
const count = Math.min(fileDurations.length, this.config.reportSlowTests.max || Number.POSITIVE_INFINITY);
184
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
const threshold = this.config.reportSlowTests.threshold;
185
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
return fileDurations.filter(([, duration]) => duration > threshold).slice(0, count);
186
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
}
187
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
generateSummaryMessage({ didNotRun, skipped, expected, interrupted, unexpected, flaky, fatalErrors }) {
188
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
const tokens = [];
189
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
if (unexpected.length) {
190
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
tokens.push(this.screen.colors.red(` ${unexpected.length} failed`));
191
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
for (const test of unexpected)
192
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
tokens.push(this.screen.colors.red(this.formatTestHeader(test, { indent: " " })));
193
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
}
194
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
if (interrupted.length) {
195
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
tokens.push(this.screen.colors.yellow(` ${interrupted.length} interrupted`));
196
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
for (const test of interrupted)
197
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
tokens.push(this.screen.colors.yellow(this.formatTestHeader(test, { indent: " " })));
198
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
}
199
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
if (flaky.length) {
200
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
tokens.push(this.screen.colors.yellow(` ${flaky.length} flaky`));
201
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
for (const test of flaky)
202
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
tokens.push(this.screen.colors.yellow(this.formatTestHeader(test, { indent: " " })));
203
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
}
204
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
if (skipped)
205
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
tokens.push(this.screen.colors.yellow(` ${skipped} skipped`));
206
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
if (didNotRun)
207
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
tokens.push(this.screen.colors.yellow(` ${didNotRun} did not run`));
208
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
if (expected)
209
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
tokens.push(this.screen.colors.green(` ${expected} passed`) + this.screen.colors.dim(` (${(0, import_utilsBundle.ms)(this.result.duration)})`));
210
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
if (fatalErrors.length && expected + unexpected.length + interrupted.length + flaky.length > 0)
211
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
tokens.push(this.screen.colors.red(` ${fatalErrors.length === 1 ? "1 error was not a part of any test" : fatalErrors.length + " errors were not a part of any test"}, see above for details`));
212
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
return tokens.join("\n");
213
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
}
214
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
generateSummary() {
215
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
let didNotRun = 0;
216
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
let skipped = 0;
217
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
let expected = 0;
218
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
const interrupted = [];
219
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
const interruptedToPrint = [];
220
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
const unexpected = [];
221
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
const flaky = [];
222
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
this.suite.allTests().forEach((test) => {
223
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
switch (test.outcome()) {
224
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
case "skipped": {
225
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
if (test.results.some((result) => result.status === "interrupted")) {
226
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
if (test.results.some((result) => !!result.error))
227
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
interruptedToPrint.push(test);
228
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
interrupted.push(test);
229
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
} else if (!test.results.length || test.expectedStatus !== "skipped") {
230
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
++didNotRun;
231
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
} else {
232
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
++skipped;
233
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
}
234
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
break;
235
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
}
236
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
case "expected":
237
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
++expected;
238
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
break;
239
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
case "unexpected":
240
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
unexpected.push(test);
241
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
break;
242
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
case "flaky":
243
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
flaky.push(test);
244
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
break;
245
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
}
246
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
});
247
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
const failuresToPrint = [...unexpected, ...flaky, ...interruptedToPrint];
248
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
return {
249
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
didNotRun,
250
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
skipped,
251
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
expected,
252
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
interrupted,
253
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
unexpected,
254
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
flaky,
255
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
failuresToPrint,
256
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
fatalErrors: this._fatalErrors
257
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
};
258
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
}
259
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
epilogue(full) {
260
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
const summary = this.generateSummary();
261
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
const summaryMessage = this.generateSummaryMessage(summary);
262
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
if (full && summary.failuresToPrint.length && !this._options.omitFailures)
263
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
this._printFailures(summary.failuresToPrint);
264
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
this._printSlowTests();
265
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
this._printSummary(summaryMessage);
266
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
}
267
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
_printFailures(failures) {
268
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
this.writeLine("");
269
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
failures.forEach((test, index) => {
270
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
this.writeLine(this.formatFailure(test, index + 1));
271
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
});
272
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
}
273
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
_printSlowTests() {
274
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
const slowTests = this.getSlowTests();
275
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
slowTests.forEach(([file, duration]) => {
276
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
this.writeLine(this.screen.colors.yellow(" Slow test file: ") + file + this.screen.colors.yellow(` (${(0, import_utilsBundle.ms)(duration)})`));
277
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
});
278
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
if (slowTests.length)
279
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
this.writeLine(this.screen.colors.yellow(" Consider running tests from slow files in parallel. See: https://playwright.dev/docs/test-parallel"));
280
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
}
281
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
_printSummary(summary) {
282
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
if (summary.trim())
283
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
this.writeLine(summary);
284
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
}
285
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
willRetry(test) {
286
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
return test.outcome() === "unexpected" && test.results.length <= test.retries;
287
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
}
288
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
formatTestTitle(test, step) {
289
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
return formatTestTitle(this.screen, this.config, test, step, this._options);
290
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
}
291
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
formatTestHeader(test, options = {}) {
292
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
return formatTestHeader(this.screen, this.config, test, { ...options, includeTestId: this._options.includeTestId });
293
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
}
294
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
formatFailure(test, index) {
295
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
return formatFailure(this.screen, this.config, test, index, this._options);
296
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
}
297
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
formatError(error) {
298
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
return formatError(this.screen, error);
299
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
}
300
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
formatResultErrors(test, result) {
301
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
return formatResultErrors(this.screen, test, result);
302
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
}
303
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
writeLine(line) {
304
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
this.screen.stdout?.write(line ? line + "\n" : "\n");
305
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
}
306
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
}
307
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
function formatResultErrors(screen, test, result) {
308
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
const lines = [];
309
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
if (test.outcome() === "unexpected") {
310
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
const errorDetails = formatResultFailure(screen, test, result, " ");
311
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
if (errorDetails.length > 0)
312
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
lines.push("");
313
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
for (const error of errorDetails)
314
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
lines.push(error.message, "");
315
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
}
316
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
return lines.join("\n");
317
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
}
318
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
function formatFailure(screen, config, test, index, options) {
319
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
const lines = [];
320
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
let printedHeader = false;
321
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
for (const result of test.results) {
322
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
const resultLines = [];
323
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
const errors = formatResultFailure(screen, test, result, " ");
324
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
if (!errors.length)
325
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
continue;
326
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
if (!printedHeader) {
327
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
const header = formatTestHeader(screen, config, test, { indent: " ", index, mode: "error", includeTestId: options?.includeTestId });
328
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
lines.push(screen.colors.red(header));
329
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
printedHeader = true;
330
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
}
331
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
if (result.retry) {
332
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
resultLines.push("");
333
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
resultLines.push(screen.colors.gray(separator(screen, ` Retry #${result.retry}`)));
334
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
}
335
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
resultLines.push(...errors.map((error) => "\n" + error.message));
336
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
const attachmentGroups = groupAttachments(result.attachments);
337
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
for (let i = 0; i < attachmentGroups.length; ++i) {
338
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
const attachment = attachmentGroups[i];
339
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
if (attachment.name === "error-context" && attachment.path) {
340
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
resultLines.push("");
341
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
resultLines.push(screen.colors.dim(` Error Context: ${relativeFilePath(screen, config, attachment.path)}`));
342
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
continue;
343
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
}
344
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
if (attachment.name.startsWith("_"))
345
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
continue;
346
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
const hasPrintableContent = attachment.contentType.startsWith("text/");
347
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
if (!attachment.path && !hasPrintableContent)
348
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
continue;
349
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
resultLines.push("");
350
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
resultLines.push(screen.colors.dim(separator(screen, ` attachment #${i + 1}: ${screen.colors.bold(attachment.name)} (${attachment.contentType})`)));
351
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
if (attachment.actual?.path) {
352
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
if (attachment.expected?.path) {
353
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
const expectedPath = relativeFilePath(screen, config, attachment.expected.path);
354
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
resultLines.push(screen.colors.dim(` Expected: ${expectedPath}`));
355
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
}
356
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
const actualPath = relativeFilePath(screen, config, attachment.actual.path);
357
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
resultLines.push(screen.colors.dim(` Received: ${actualPath}`));
358
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
if (attachment.previous?.path) {
359
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
const previousPath = relativeFilePath(screen, config, attachment.previous.path);
360
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
resultLines.push(screen.colors.dim(` Previous: ${previousPath}`));
361
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
}
362
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
if (attachment.diff?.path) {
363
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
const diffPath = relativeFilePath(screen, config, attachment.diff.path);
364
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
resultLines.push(screen.colors.dim(` Diff: ${diffPath}`));
365
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
}
366
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
} else if (attachment.path) {
367
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
const relativePath = relativeFilePath(screen, config, attachment.path);
368
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
resultLines.push(screen.colors.dim(` ${relativePath}`));
369
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
if (attachment.name === "trace") {
370
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
const packageManagerCommand = (0, import_utils.getPackageManagerExecCommand)();
371
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
resultLines.push(screen.colors.dim(` Usage:`));
372
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
resultLines.push("");
373
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
resultLines.push(screen.colors.dim(` ${packageManagerCommand} playwright show-trace ${quotePathIfNeeded(relativePath)}`));
374
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
resultLines.push("");
375
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
}
376
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
} else {
377
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
if (attachment.contentType.startsWith("text/") && attachment.body) {
378
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
let text = attachment.body.toString();
379
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
if (text.length > 300)
380
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
text = text.slice(0, 300) + "...";
381
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
for (const line of text.split("\n"))
382
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
resultLines.push(screen.colors.dim(` ${line}`));
383
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
}
384
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
}
385
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
resultLines.push(screen.colors.dim(separator(screen, " ")));
386
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
}
387
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
lines.push(...resultLines);
388
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
}
389
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
lines.push("");
390
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
return lines.join("\n");
391
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
}
392
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
function formatRetry(screen, result) {
393
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
const retryLines = [];
394
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
if (result.retry) {
395
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
retryLines.push("");
396
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
retryLines.push(screen.colors.gray(separator(screen, ` Retry #${result.retry}`)));
397
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
}
398
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
return retryLines;
399
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
}
400
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
function quotePathIfNeeded(path2) {
401
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
if (/\s/.test(path2))
402
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
return `"${path2}"`;
403
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
return path2;
404
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
}
405
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
const kReportedSymbol = Symbol("reported");
406
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
function markErrorsAsReported(result) {
407
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
result[kReportedSymbol] = result.errors.length;
408
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
}
409
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
function formatResultFailure(screen, test, result, initialIndent) {
410
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
const errorDetails = [];
411
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
if (result.status === "passed" && test.expectedStatus === "failed") {
412
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
errorDetails.push({
413
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
message: indent(screen.colors.red(`Expected to fail, but passed.`), initialIndent)
414
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
});
415
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
}
416
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
if (result.status === "interrupted") {
417
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
errorDetails.push({
418
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
message: indent(screen.colors.red(`Test was interrupted.`), initialIndent)
419
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
});
420
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
}
421
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
const reportedIndex = result[kReportedSymbol] || 0;
422
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
for (const error of result.errors.slice(reportedIndex)) {
423
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
const formattedError = formatError(screen, error);
424
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
errorDetails.push({
425
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
message: indent(formattedError.message, initialIndent),
426
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
location: formattedError.location
427
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
});
428
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
}
429
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
return errorDetails;
430
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
}
431
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
function relativeFilePath(screen, config, file) {
432
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
if (screen.resolveFiles === "cwd")
433
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
return import_path.default.relative(process.cwd(), file);
434
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
return import_path.default.relative(config.rootDir, file);
435
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
}
436
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
function relativeTestPath(screen, config, test) {
437
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
return relativeFilePath(screen, config, test.location.file);
438
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
}
439
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
function stepSuffix(step) {
440
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
const stepTitles = step ? step.titlePath() : [];
441
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
return stepTitles.map((t) => t.split("\n")[0]).map((t) => " \u203A " + t).join("");
442
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
}
443
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
function formatTestTitle(screen, config, test, step, options = {}) {
444
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
const [, projectName, , ...titles] = test.titlePath();
445
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
const location = `${relativeTestPath(screen, config, test)}:${test.location.line}:${test.location.column}`;
446
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
const testId = options.includeTestId ? `[id=${test.id}] ` : "";
447
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
const projectLabel = options.includeTestId ? `project=` : "";
448
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
const projectTitle = projectName ? `[${projectLabel}${projectName}] \u203A ` : "";
449
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
const testTitle = `${testId}${projectTitle}${location} \u203A ${titles.join(" \u203A ")}`;
450
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
const extraTags = test.tags.filter((t) => !testTitle.includes(t) && !config.tags.includes(t));
451
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
return `${testTitle}${stepSuffix(step)}${extraTags.length ? " " + extraTags.join(" ") : ""}`;
452
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
}
453
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
function formatTestHeader(screen, config, test, options = {}) {
454
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
const title = formatTestTitle(screen, config, test, void 0, options);
455
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
const header = `${options.indent || ""}${options.index ? options.index + ") " : ""}${title}`;
456
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
let fullHeader = header;
457
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
if (options.mode === "error") {
458
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
const stepPaths = /* @__PURE__ */ new Set();
459
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
for (const result of test.results.filter((r) => !!r.errors.length)) {
460
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
const stepPath = [];
461
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
const visit = (steps) => {
462
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
const errors = steps.filter((s) => s.error);
463
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
if (errors.length > 1)
464
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
return;
465
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
if (errors.length === 1 && errors[0].category === "test.step") {
466
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
stepPath.push(errors[0].title);
467
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
visit(errors[0].steps);
468
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
}
469
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
};
470
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
visit(result.steps);
471
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
stepPaths.add(["", ...stepPath].join(" \u203A "));
472
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
}
473
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
fullHeader = header + (stepPaths.size === 1 ? stepPaths.values().next().value : "");
474
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
}
475
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
return separator(screen, fullHeader);
476
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
}
477
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
function formatError(screen, error) {
478
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
const message = error.message || error.value || "";
479
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
const stack = error.stack;
480
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
if (!stack && !error.location)
481
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
return { message };
482
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
const tokens = [];
483
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
const parsedStack = stack ? prepareErrorStack(stack) : void 0;
484
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
tokens.push(parsedStack?.message || message);
485
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
if (error.snippet) {
486
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
let snippet = error.snippet;
487
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
if (!screen.colors.enabled)
488
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
snippet = (0, import_util.stripAnsiEscapes)(snippet);
489
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
tokens.push("");
490
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
tokens.push(snippet);
491
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
}
492
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
if (parsedStack && parsedStack.stackLines.length)
493
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
tokens.push(screen.colors.dim(parsedStack.stackLines.join("\n")));
494
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
let location = error.location;
495
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
if (parsedStack && !location)
496
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
location = parsedStack.location;
497
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
if (error.cause)
498
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
tokens.push(screen.colors.dim("[cause]: ") + formatError(screen, error.cause).message);
499
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
return {
500
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
location,
501
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
message: tokens.join("\n")
502
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
};
503
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
}
504
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
function separator(screen, text = "") {
505
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
if (text)
506
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
text += " ";
507
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
const columns = Math.min(100, screen.ttyWidth || 100);
508
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
return text + screen.colors.dim("\u2500".repeat(Math.max(0, columns - (0, import_util.stripAnsiEscapes)(text).length)));
509
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
}
510
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
function indent(lines, tab) {
511
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
return lines.replace(/^(?=.+$)/gm, tab);
512
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
}
513
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
function prepareErrorStack(stack) {
514
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
return (0, import_utils.parseErrorStack)(stack, import_path.default.sep, !!process.env.PWDEBUGIMPL);
515
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
}
516
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
function characterWidth(c) {
517
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
return import_utilsBundle2.getEastAsianWidth.eastAsianWidth(c.codePointAt(0));
518
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
}
519
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
function stringWidth(v) {
520
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
let width = 0;
521
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
for (const { segment } of new Intl.Segmenter(void 0, { granularity: "grapheme" }).segment(v))
522
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
width += characterWidth(segment);
523
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
return width;
524
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
}
525
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
function suffixOfWidth(v, width) {
526
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
const segments = [...new Intl.Segmenter(void 0, { granularity: "grapheme" }).segment(v)];
527
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
let suffixBegin = v.length;
528
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
for (const { segment, index } of segments.reverse()) {
529
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
const segmentWidth = stringWidth(segment);
530
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
if (segmentWidth > width)
531
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
break;
532
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
width -= segmentWidth;
533
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
suffixBegin = index;
534
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
}
535
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
return v.substring(suffixBegin);
536
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
}
537
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
function fitToWidth(line, width, prefix) {
538
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
const prefixLength = prefix ? (0, import_util.stripAnsiEscapes)(prefix).length : 0;
539
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
width -= prefixLength;
540
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
if (stringWidth(line) <= width)
541
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
return line;
542
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
const parts = line.split(import_util.ansiRegex);
543
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
const taken = [];
544
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
for (let i = parts.length - 1; i >= 0; i--) {
545
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
if (i % 2) {
546
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
taken.push(parts[i]);
547
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
} else {
548
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
let part = suffixOfWidth(parts[i], width);
549
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
const wasTruncated = part.length < parts[i].length;
550
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
if (wasTruncated && parts[i].length > 0) {
551
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
part = "\u2026" + suffixOfWidth(parts[i], width - 1);
552
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
}
553
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
taken.push(part);
554
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
width -= stringWidth(part);
555
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
}
556
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
}
557
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
return taken.reverse().join("");
558
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
}
559
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
function resolveFromEnv(name) {
560
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
const value = process.env[name];
561
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
if (value)
562
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
return import_path.default.resolve(process.cwd(), value);
563
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
return void 0;
564
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
}
565
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
function resolveOutputFile(reporterName, options) {
566
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
const name = reporterName.toUpperCase();
567
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
let outputFile = resolveFromEnv(`PLAYWRIGHT_${name}_OUTPUT_FILE`);
568
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
if (!outputFile && options.outputFile)
569
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
outputFile = import_path.default.resolve(options.configDir, options.outputFile);
570
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
if (outputFile)
571
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
return { outputFile };
572
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
let outputDir = resolveFromEnv(`PLAYWRIGHT_${name}_OUTPUT_DIR`);
573
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
if (!outputDir && options.outputDir)
574
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
outputDir = import_path.default.resolve(options.configDir, options.outputDir);
575
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
if (!outputDir && options.default)
576
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
outputDir = (0, import_util.resolveReporterOutputPath)(options.default.outputDir, options.configDir, void 0);
577
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
if (!outputDir)
578
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
outputDir = options.configDir;
579
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
const reportName = process.env[`PLAYWRIGHT_${name}_OUTPUT_NAME`] ?? options.fileName ?? options.default?.fileName;
580
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
if (!reportName)
581
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
return void 0;
582
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
outputFile = import_path.default.resolve(outputDir, reportName);
583
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
return { outputFile, outputDir };
584
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
}
585
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
function groupAttachments(attachments) {
586
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
const result = [];
587
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
const attachmentsByPrefix = /* @__PURE__ */ new Map();
588
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
for (const attachment of attachments) {
589
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
if (!attachment.path) {
590
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
result.push(attachment);
591
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
continue;
592
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
}
593
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
const match = attachment.name.match(/^(.*)-(expected|actual|diff|previous)(\.[^.]+)?$/);
594
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
if (!match) {
595
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
result.push(attachment);
596
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
continue;
597
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
}
598
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
const [, name, category] = match;
599
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
let group = attachmentsByPrefix.get(name);
600
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
if (!group) {
601
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
group = { ...attachment, name };
602
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
attachmentsByPrefix.set(name, group);
603
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
result.push(group);
604
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
}
605
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
if (category === "expected")
606
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
group.expected = attachment;
607
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
else if (category === "actual")
608
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
group.actual = attachment;
609
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
else if (category === "diff")
610
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
group.diff = attachment;
611
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
else if (category === "previous")
612
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
group.previous = attachment;
613
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
}
614
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
return result;
615
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
}
616
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
// Annotate the CommonJS export names for ESM import in node:
617
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
0 && (module.exports = {
618
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
TerminalReporter,
619
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
fitToWidth,
620
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
formatError,
621
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
formatFailure,
622
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
formatResultFailure,
623
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
formatRetry,
624
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
internalScreen,
625
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
kOutputSymbol,
626
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
markErrorsAsReported,
627
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
nonTerminalScreen,
628
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
prepareErrorStack,
629
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
relativeFilePath,
630
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
resolveOutputFile,
631
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
separator,
632
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
stepSuffix,
633
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
terminalScreen
634
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
});
635
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!