@brillout/test-e2e 0.5.9 → 0.5.11
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/Logs/isTolerateError.js +5 -0
- package/dist/Logs.d.ts +3 -3
- package/dist/Logs.js +23 -9
- package/dist/fetch.d.ts +5 -0
- package/dist/fetch.js +30 -0
- package/dist/getCurrentTest.d.ts +2 -0
- package/dist/getCurrentTest.js +7 -1
- package/dist/index.d.ts +9 -1
- package/dist/index.js +25 -16
- package/dist/page.js +2 -2
- package/dist/run.d.ts +12 -0
- package/dist/{setup.js → run.js} +17 -90
- package/dist/runAll.js +17 -17
- package/dist/skip.d.ts +2 -0
- package/dist/skip.js +9 -0
- package/dist/utils/cliConfig.d.ts +4 -2
- package/dist/utils/cliConfig.js +11 -4
- package/dist/utils/index.d.ts +1 -0
- package/dist/utils/index.js +1 -0
- package/dist/utils/isMinNodeVersion.d.ts +2 -0
- package/dist/utils/isMinNodeVersion.js +12 -0
- package/dist/utils/parseCli.d.ts +6 -0
- package/dist/utils/parseCli.js +27 -0
- package/package.json +1 -1
- package/dist/setup.d.ts +0 -33
|
@@ -1,8 +1,13 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
2
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
6
|
exports.isTolerateError = void 0;
|
|
4
7
|
const getConfig_1 = require("../getConfig");
|
|
8
|
+
const strip_ansi_1 = __importDefault(require("strip-ansi"));
|
|
5
9
|
function isTolerateError({ logSource, logText }) {
|
|
10
|
+
logText = (0, strip_ansi_1.default)(logText);
|
|
6
11
|
if (tolerateError({ logSource, logText })) {
|
|
7
12
|
return true;
|
|
8
13
|
}
|
package/dist/Logs.d.ts
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
export {
|
|
1
|
+
export { expectLog };
|
|
2
2
|
export declare const Logs: {
|
|
3
3
|
add: typeof add;
|
|
4
4
|
flushLogs: typeof flushLogs;
|
|
5
5
|
logErrorsAndWarnings: typeof logErrorsAndWarnings;
|
|
6
6
|
clearLogs: typeof clearLogs;
|
|
7
7
|
hasFailLogs: typeof hasFailLogs;
|
|
8
|
-
logEagerly:
|
|
8
|
+
logEagerly: "all" | "logs";
|
|
9
9
|
};
|
|
10
10
|
export type { LogSource };
|
|
11
11
|
declare type LogSource = 'stdout' | 'stderr' | 'Browser Error' | 'Browser Warning' | 'Browser Log' | 'Playwright' | 'run()' | 'run() failure' | 'test()' | 'Connection Error';
|
|
@@ -25,4 +25,4 @@ declare function add({ logSource, logText, loggedAfterExit, }: {
|
|
|
25
25
|
logText: string;
|
|
26
26
|
loggedAfterExit?: boolean;
|
|
27
27
|
}): void;
|
|
28
|
-
declare function
|
|
28
|
+
declare function expectLog(logText: string, logFilter?: (logEntry: LogEntry) => boolean): void;
|
package/dist/Logs.js
CHANGED
|
@@ -3,21 +3,21 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.Logs = exports.
|
|
6
|
+
exports.Logs = exports.expectLog = void 0;
|
|
7
7
|
exports.Logs = {
|
|
8
8
|
add,
|
|
9
9
|
flushLogs,
|
|
10
10
|
logErrorsAndWarnings,
|
|
11
11
|
clearLogs,
|
|
12
12
|
hasFailLogs,
|
|
13
|
-
logEagerly:
|
|
13
|
+
logEagerly: 'all',
|
|
14
14
|
};
|
|
15
15
|
const utils_1 = require("./utils");
|
|
16
16
|
const picocolors_1 = __importDefault(require("picocolors"));
|
|
17
17
|
const getCurrentTest_1 = require("./getCurrentTest");
|
|
18
18
|
const logSection_1 = require("./logSection");
|
|
19
19
|
const isTolerateError_1 = require("./Logs/isTolerateError");
|
|
20
|
-
const
|
|
20
|
+
const strip_ansi_1 = __importDefault(require("strip-ansi"));
|
|
21
21
|
let logEntries = [];
|
|
22
22
|
function hasFailLogs(failOnWarning) {
|
|
23
23
|
const failLogs = getErrorLogs(failOnWarning);
|
|
@@ -72,20 +72,34 @@ function add({ logSource, logText, loggedAfterExit = false, }) {
|
|
|
72
72
|
};
|
|
73
73
|
logEntries.push(logEntry);
|
|
74
74
|
if (exports.Logs.logEagerly) {
|
|
75
|
-
|
|
75
|
+
let shouldLog = false;
|
|
76
|
+
if (exports.Logs.logEagerly === 'all')
|
|
77
|
+
shouldLog = true;
|
|
78
|
+
if (exports.Logs.logEagerly === 'logs' && logSource !== 'Playwright')
|
|
79
|
+
shouldLog = true;
|
|
80
|
+
if (shouldLog)
|
|
81
|
+
printLog(logEntry);
|
|
76
82
|
}
|
|
77
83
|
}
|
|
78
|
-
function
|
|
79
|
-
const
|
|
80
|
-
if (
|
|
84
|
+
function expectLog(logText, logFilter) {
|
|
85
|
+
const logsFound = logEntries.filter((logEntry) => {
|
|
86
|
+
if ((0, strip_ansi_1.default)(logEntry.logText).includes(logText)) {
|
|
81
87
|
logEntry.isNotFailure = true;
|
|
82
88
|
return true;
|
|
83
89
|
}
|
|
84
90
|
return false;
|
|
85
91
|
});
|
|
86
|
-
|
|
92
|
+
const logsFoundWithFilter = logsFound.filter((logEntry) => logFilter?.(logEntry));
|
|
93
|
+
if (logsFoundWithFilter.length === 0) {
|
|
94
|
+
if (logsFound.length === 0) {
|
|
95
|
+
throw new Error(`The following log was expected but wasn't logged: "${logText}"`);
|
|
96
|
+
}
|
|
97
|
+
else {
|
|
98
|
+
throw new Error(`The following log was logged as expected, but it didn't match the logFilter() you provided`);
|
|
99
|
+
}
|
|
100
|
+
}
|
|
87
101
|
}
|
|
88
|
-
exports.
|
|
102
|
+
exports.expectLog = expectLog;
|
|
89
103
|
function getTimestamp() {
|
|
90
104
|
const now = new Date();
|
|
91
105
|
const time = now.toTimeString().split(' ')[0];
|
package/dist/fetch.d.ts
ADDED
package/dist/fetch.js
ADDED
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.fetchHtml = exports.fetch = void 0;
|
|
7
|
+
const getCurrentTest_1 = require("./getCurrentTest");
|
|
8
|
+
const node_fetch_1 = __importDefault(require("node-fetch"));
|
|
9
|
+
const Logs_1 = require("./Logs");
|
|
10
|
+
async function fetchHtml(pathname) {
|
|
11
|
+
const response = await fetch((0, getCurrentTest_1.getServerUrl)() + pathname);
|
|
12
|
+
const html = await response.text();
|
|
13
|
+
return html;
|
|
14
|
+
}
|
|
15
|
+
exports.fetchHtml = fetchHtml;
|
|
16
|
+
async function fetch(...args) {
|
|
17
|
+
try {
|
|
18
|
+
return await (0, node_fetch_1.default)(...args);
|
|
19
|
+
}
|
|
20
|
+
catch (err) {
|
|
21
|
+
Logs_1.Logs.add({
|
|
22
|
+
logSource: 'Connection Error',
|
|
23
|
+
logText: `Couldn't connect to \`${args[0]}\`. Args: \`${JSON.stringify(args.slice(1))}\`. Err: \`${
|
|
24
|
+
// @ts-ignore
|
|
25
|
+
err.message}\``,
|
|
26
|
+
});
|
|
27
|
+
throw new Error("Couldn't connect to server. See `Connection Error` log for more details.");
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
exports.fetch = fetch;
|
package/dist/getCurrentTest.d.ts
CHANGED
|
@@ -4,6 +4,7 @@ export { setCurrentTest };
|
|
|
4
4
|
export { getRunInfo };
|
|
5
5
|
export { setRunInfo };
|
|
6
6
|
export { getCwd };
|
|
7
|
+
export { getServerUrl };
|
|
7
8
|
export type { TestInfo };
|
|
8
9
|
import type { Page } from 'playwright-chromium';
|
|
9
10
|
declare type TestInfo = {
|
|
@@ -55,3 +56,4 @@ declare function setRunInfo({ cmd, serverUrl, additionalTimeout, doNotFailOnWarn
|
|
|
55
56
|
isRunCommandThatTerminates?: boolean;
|
|
56
57
|
}): void;
|
|
57
58
|
declare function getCwd(): string;
|
|
59
|
+
declare function getServerUrl(): string;
|
package/dist/getCurrentTest.js
CHANGED
|
@@ -3,7 +3,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.getCwd = exports.setRunInfo = exports.getRunInfo = exports.setCurrentTest = exports.getCurrentTestOptional = exports.getCurrentTest = void 0;
|
|
6
|
+
exports.getServerUrl = exports.getCwd = exports.setRunInfo = exports.getRunInfo = exports.setCurrentTest = exports.getCurrentTestOptional = exports.getCurrentTest = void 0;
|
|
7
7
|
const utils_1 = require("./utils");
|
|
8
8
|
const path_1 = __importDefault(require("path"));
|
|
9
9
|
const TIMEOUTS_1 = require("./TIMEOUTS");
|
|
@@ -69,3 +69,9 @@ function getCwd() {
|
|
|
69
69
|
return cwd;
|
|
70
70
|
}
|
|
71
71
|
exports.getCwd = getCwd;
|
|
72
|
+
function getServerUrl() {
|
|
73
|
+
const testInfo = getCurrentTest();
|
|
74
|
+
const serverUrl = testInfo.runInfo?.serverUrl;
|
|
75
|
+
return serverUrl;
|
|
76
|
+
}
|
|
77
|
+
exports.getServerUrl = getServerUrl;
|
package/dist/index.d.ts
CHANGED
|
@@ -1,6 +1,14 @@
|
|
|
1
|
-
export * from './setup';
|
|
2
1
|
export { expect } from './chai/expect';
|
|
3
2
|
export { test } from './test';
|
|
4
3
|
export { page } from './page';
|
|
5
4
|
export { editFile, editFileRevert } from './editFile';
|
|
6
5
|
export { testScreenshotFixture } from './testScreenshotFixture';
|
|
6
|
+
export { partRegex } from '@brillout/part-regex';
|
|
7
|
+
export { autoRetry } from './autoRetry';
|
|
8
|
+
export { fetch, fetchHtml } from './fetch';
|
|
9
|
+
export { expectLog } from './Logs';
|
|
10
|
+
export { run } from './run';
|
|
11
|
+
export { skip } from './skip';
|
|
12
|
+
export { isMinNodeVersion, isCI, isLinux, isWindows, isMac, sleep } from './utils';
|
|
13
|
+
export { getServerUrl } from './getCurrentTest';
|
|
14
|
+
export { runCommandThatTerminates } from './runCommandThatTerminates';
|
package/dist/index.js
CHANGED
|
@@ -1,21 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
-
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
-
};
|
|
16
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
-
exports.testScreenshotFixture = exports.editFileRevert = exports.editFile = exports.page = exports.test = exports.expect = void 0;
|
|
18
|
-
__exportStar(require("./setup"), exports);
|
|
3
|
+
exports.runCommandThatTerminates = exports.getServerUrl = exports.sleep = exports.isMac = exports.isWindows = exports.isLinux = exports.isCI = exports.isMinNodeVersion = exports.skip = exports.run = exports.expectLog = exports.fetchHtml = exports.fetch = exports.autoRetry = exports.partRegex = exports.testScreenshotFixture = exports.editFileRevert = exports.editFile = exports.page = exports.test = exports.expect = void 0;
|
|
19
4
|
var expect_1 = require("./chai/expect");
|
|
20
5
|
Object.defineProperty(exports, "expect", { enumerable: true, get: function () { return expect_1.expect; } });
|
|
21
6
|
var test_1 = require("./test");
|
|
@@ -27,3 +12,27 @@ Object.defineProperty(exports, "editFile", { enumerable: true, get: function ()
|
|
|
27
12
|
Object.defineProperty(exports, "editFileRevert", { enumerable: true, get: function () { return editFile_1.editFileRevert; } });
|
|
28
13
|
var testScreenshotFixture_1 = require("./testScreenshotFixture");
|
|
29
14
|
Object.defineProperty(exports, "testScreenshotFixture", { enumerable: true, get: function () { return testScreenshotFixture_1.testScreenshotFixture; } });
|
|
15
|
+
var part_regex_1 = require("@brillout/part-regex");
|
|
16
|
+
Object.defineProperty(exports, "partRegex", { enumerable: true, get: function () { return part_regex_1.partRegex; } });
|
|
17
|
+
var autoRetry_1 = require("./autoRetry");
|
|
18
|
+
Object.defineProperty(exports, "autoRetry", { enumerable: true, get: function () { return autoRetry_1.autoRetry; } });
|
|
19
|
+
var fetch_1 = require("./fetch");
|
|
20
|
+
Object.defineProperty(exports, "fetch", { enumerable: true, get: function () { return fetch_1.fetch; } });
|
|
21
|
+
Object.defineProperty(exports, "fetchHtml", { enumerable: true, get: function () { return fetch_1.fetchHtml; } });
|
|
22
|
+
var Logs_1 = require("./Logs");
|
|
23
|
+
Object.defineProperty(exports, "expectLog", { enumerable: true, get: function () { return Logs_1.expectLog; } });
|
|
24
|
+
var run_1 = require("./run");
|
|
25
|
+
Object.defineProperty(exports, "run", { enumerable: true, get: function () { return run_1.run; } });
|
|
26
|
+
var skip_1 = require("./skip");
|
|
27
|
+
Object.defineProperty(exports, "skip", { enumerable: true, get: function () { return skip_1.skip; } });
|
|
28
|
+
var utils_1 = require("./utils");
|
|
29
|
+
Object.defineProperty(exports, "isMinNodeVersion", { enumerable: true, get: function () { return utils_1.isMinNodeVersion; } });
|
|
30
|
+
Object.defineProperty(exports, "isCI", { enumerable: true, get: function () { return utils_1.isCI; } });
|
|
31
|
+
Object.defineProperty(exports, "isLinux", { enumerable: true, get: function () { return utils_1.isLinux; } });
|
|
32
|
+
Object.defineProperty(exports, "isWindows", { enumerable: true, get: function () { return utils_1.isWindows; } });
|
|
33
|
+
Object.defineProperty(exports, "isMac", { enumerable: true, get: function () { return utils_1.isMac; } });
|
|
34
|
+
Object.defineProperty(exports, "sleep", { enumerable: true, get: function () { return utils_1.sleep; } });
|
|
35
|
+
var getCurrentTest_1 = require("./getCurrentTest");
|
|
36
|
+
Object.defineProperty(exports, "getServerUrl", { enumerable: true, get: function () { return getCurrentTest_1.getServerUrl; } });
|
|
37
|
+
var runCommandThatTerminates_1 = require("./runCommandThatTerminates");
|
|
38
|
+
Object.defineProperty(exports, "runCommandThatTerminates", { enumerable: true, get: function () { return runCommandThatTerminates_1.runCommandThatTerminates; } });
|
package/dist/page.js
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.page = void 0;
|
|
4
|
-
const utils_1 = require("./utils");
|
|
5
4
|
const getCurrentTest_1 = require("./getCurrentTest");
|
|
6
5
|
const page = new Proxy({}, {
|
|
7
6
|
get(_, prop) {
|
|
8
7
|
const { page } = (0, getCurrentTest_1.getCurrentTest)();
|
|
9
|
-
|
|
8
|
+
if (!page)
|
|
9
|
+
throw new Error("`page` isn't available. Make sure to access `page` only inside test() calls. In particular, if test() is async, then make sure to await all asynchronous code executed by your async test().");
|
|
10
10
|
return page[prop];
|
|
11
11
|
},
|
|
12
12
|
});
|
package/dist/run.d.ts
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export { run };
|
|
2
|
+
declare function run(cmd: string, { additionalTimeout, serverIsReadyMessage, serverIsReadyDelay, inspect, cwd, doNotFailOnWarning, serverUrl, isFlaky, }?: {
|
|
3
|
+
additionalTimeout?: number;
|
|
4
|
+
serverIsReadyMessage?: string | ((log: string) => boolean);
|
|
5
|
+
serverIsReadyDelay?: number;
|
|
6
|
+
inspect?: boolean;
|
|
7
|
+
/** deprecated */
|
|
8
|
+
cwd?: string;
|
|
9
|
+
doNotFailOnWarning?: boolean;
|
|
10
|
+
serverUrl?: string;
|
|
11
|
+
isFlaky?: boolean;
|
|
12
|
+
}): void;
|
package/dist/{setup.js → run.js}
RENAMED
|
@@ -1,35 +1,13 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.
|
|
7
|
-
var part_regex_1 = require("@brillout/part-regex");
|
|
8
|
-
Object.defineProperty(exports, "partRegex", { enumerable: true, get: function () { return part_regex_1.partRegex; } });
|
|
9
|
-
var autoRetry_1 = require("./autoRetry");
|
|
10
|
-
Object.defineProperty(exports, "autoRetry", { enumerable: true, get: function () { return autoRetry_1.autoRetry; } });
|
|
11
|
-
var Logs_1 = require("./Logs");
|
|
12
|
-
Object.defineProperty(exports, "expectError", { enumerable: true, get: function () { return Logs_1.expectError; } });
|
|
13
|
-
var runCommandThatTerminates_1 = require("./runCommandThatTerminates");
|
|
14
|
-
Object.defineProperty(exports, "runCommandThatTerminates", { enumerable: true, get: function () { return runCommandThatTerminates_1.runCommandThatTerminates; } });
|
|
3
|
+
exports.run = void 0;
|
|
15
4
|
const utils_1 = require("./utils");
|
|
16
|
-
Object.defineProperty(exports, "sleep", { enumerable: true, get: function () { return utils_1.sleep; } });
|
|
17
|
-
Object.defineProperty(exports, "isWindows", { enumerable: true, get: function () { return utils_1.isWindows; } });
|
|
18
|
-
Object.defineProperty(exports, "isLinux", { enumerable: true, get: function () { return utils_1.isLinux; } });
|
|
19
|
-
Object.defineProperty(exports, "isCI", { enumerable: true, get: function () { return utils_1.isCI; } });
|
|
20
|
-
Object.defineProperty(exports, "isMac", { enumerable: true, get: function () { return utils_1.isMac; } });
|
|
21
|
-
const node_fetch_1 = __importDefault(require("node-fetch"));
|
|
22
5
|
const utils_2 = require("./utils");
|
|
23
|
-
const
|
|
6
|
+
const Logs_1 = require("./Logs");
|
|
24
7
|
const editFile_1 = require("./editFile");
|
|
25
8
|
const getCurrentTest_1 = require("./getCurrentTest");
|
|
26
9
|
const page_1 = require("./page");
|
|
27
10
|
const TIMEOUTS_1 = require("./TIMEOUTS");
|
|
28
|
-
function skip(reason) {
|
|
29
|
-
const testInfo = (0, getCurrentTest_1.getCurrentTest)();
|
|
30
|
-
testInfo.skipped = { reason };
|
|
31
|
-
}
|
|
32
|
-
exports.skip = skip;
|
|
33
11
|
function run(cmd, {
|
|
34
12
|
//baseUrl = '',
|
|
35
13
|
additionalTimeout = 0, serverIsReadyMessage, serverIsReadyDelay = 1000, inspect = utils_1.cliConfig.inspect, cwd, doNotFailOnWarning, serverUrl, isFlaky, } = {}) {
|
|
@@ -43,7 +21,10 @@ additionalTimeout = 0, serverIsReadyMessage, serverIsReadyDelay = 1000, inspect
|
|
|
43
21
|
isFlaky,
|
|
44
22
|
});
|
|
45
23
|
if (inspect) {
|
|
46
|
-
|
|
24
|
+
Logs_1.Logs.logEagerly = 'all';
|
|
25
|
+
}
|
|
26
|
+
else if (utils_1.cliConfig.verbose) {
|
|
27
|
+
Logs_1.Logs.logEagerly = 'logs';
|
|
47
28
|
}
|
|
48
29
|
const testInfo = (0, getCurrentTest_1.getCurrentTest)();
|
|
49
30
|
let runProcess = null;
|
|
@@ -77,7 +58,7 @@ additionalTimeout = 0, serverIsReadyMessage, serverIsReadyDelay = 1000, inspect
|
|
|
77
58
|
}
|
|
78
59
|
};
|
|
79
60
|
testInfo.terminateServer = async () => {
|
|
80
|
-
|
|
61
|
+
Logs_1.Logs.add({
|
|
81
62
|
logSource: 'run()',
|
|
82
63
|
logText: 'Terminate server.',
|
|
83
64
|
});
|
|
@@ -92,7 +73,7 @@ additionalTimeout = 0, serverIsReadyMessage, serverIsReadyDelay = 1000, inspect
|
|
|
92
73
|
// Also called when the page throws an error or a warning
|
|
93
74
|
function onConsole(msg) {
|
|
94
75
|
const type = msg.type();
|
|
95
|
-
|
|
76
|
+
Logs_1.Logs.add({
|
|
96
77
|
logSource: (() => {
|
|
97
78
|
if (type === 'error') {
|
|
98
79
|
return 'Browser Error';
|
|
@@ -112,7 +93,7 @@ additionalTimeout = 0, serverIsReadyMessage, serverIsReadyDelay = 1000, inspect
|
|
|
112
93
|
}
|
|
113
94
|
// For uncaught exceptions
|
|
114
95
|
function onPageError(err) {
|
|
115
|
-
|
|
96
|
+
Logs_1.Logs.add({
|
|
116
97
|
logSource: 'Browser Error',
|
|
117
98
|
logText: JSON.stringify({
|
|
118
99
|
text: err.message,
|
|
@@ -136,7 +117,7 @@ async function startProcess({ serverIsReadyMessage, serverIsReadyDelay, addition
|
|
|
136
117
|
return serverIsReady;
|
|
137
118
|
};
|
|
138
119
|
}
|
|
139
|
-
|
|
120
|
+
Logs_1.Logs.add({
|
|
140
121
|
logSource: 'run()',
|
|
141
122
|
logText: `Spawn command \`${cmd}\``,
|
|
142
123
|
});
|
|
@@ -148,14 +129,14 @@ async function startProcess({ serverIsReadyMessage, serverIsReadyDelay, addition
|
|
|
148
129
|
isReadyTimeout: TIMEOUTS_1.TIMEOUT_NPM_SCRIPT + additionalTimeout,
|
|
149
130
|
killPort: process.env.CI || !(0, utils_1.isLinux)() ? false : getServerPort(),
|
|
150
131
|
onStderr(data, { loggedAfterExit }) {
|
|
151
|
-
|
|
132
|
+
Logs_1.Logs.add({
|
|
152
133
|
logSource: 'stderr',
|
|
153
134
|
logText: data,
|
|
154
135
|
loggedAfterExit,
|
|
155
136
|
});
|
|
156
137
|
},
|
|
157
138
|
onStdout(data, { loggedAfterExit }) {
|
|
158
|
-
|
|
139
|
+
Logs_1.Logs.add({
|
|
159
140
|
logSource: 'stdout',
|
|
160
141
|
logText: data,
|
|
161
142
|
loggedAfterExit,
|
|
@@ -163,20 +144,20 @@ async function startProcess({ serverIsReadyMessage, serverIsReadyDelay, addition
|
|
|
163
144
|
},
|
|
164
145
|
onExit(errMsg) {
|
|
165
146
|
if (!errMsg) {
|
|
166
|
-
|
|
147
|
+
Logs_1.Logs.add({
|
|
167
148
|
logSource: 'run()',
|
|
168
149
|
logText: `Process termination (expected)`,
|
|
169
150
|
});
|
|
170
151
|
}
|
|
171
152
|
else {
|
|
172
|
-
|
|
153
|
+
Logs_1.Logs.add({
|
|
173
154
|
logSource: 'run() failure',
|
|
174
155
|
logText: errMsg,
|
|
175
156
|
});
|
|
176
157
|
}
|
|
177
158
|
},
|
|
178
159
|
onTerminationError(errMsg) {
|
|
179
|
-
|
|
160
|
+
Logs_1.Logs.add({
|
|
180
161
|
logSource: 'run() failure',
|
|
181
162
|
logText: errMsg,
|
|
182
163
|
});
|
|
@@ -194,69 +175,15 @@ async function startProcess({ serverIsReadyMessage, serverIsReadyDelay, addition
|
|
|
194
175
|
done(!!err);
|
|
195
176
|
if (err)
|
|
196
177
|
throw err;
|
|
197
|
-
|
|
178
|
+
Logs_1.Logs.add({
|
|
198
179
|
logSource: 'run()',
|
|
199
180
|
logText: 'Server is ready.',
|
|
200
181
|
});
|
|
201
182
|
await (0, utils_1.sleep)(serverIsReadyDelay);
|
|
202
183
|
return { terminate };
|
|
203
184
|
}
|
|
204
|
-
async function fetchHtml(pathname) {
|
|
205
|
-
const response = await fetch(getServerUrl() + pathname);
|
|
206
|
-
const html = await response.text();
|
|
207
|
-
return html;
|
|
208
|
-
}
|
|
209
|
-
exports.fetchHtml = fetchHtml;
|
|
210
|
-
async function fetch(...args) {
|
|
211
|
-
try {
|
|
212
|
-
return await (0, node_fetch_1.default)(...args);
|
|
213
|
-
}
|
|
214
|
-
catch (err) {
|
|
215
|
-
Logs_2.Logs.add({
|
|
216
|
-
logSource: 'Connection Error',
|
|
217
|
-
logText: `Couldn't connect to \`${args[0]}\`. Args: \`${JSON.stringify(args.slice(1))}\`. Err: \`${
|
|
218
|
-
// @ts-ignore
|
|
219
|
-
err.message}\``,
|
|
220
|
-
});
|
|
221
|
-
throw new Error("Couldn't connect to server. See `Connection Error` log for more details.");
|
|
222
|
-
}
|
|
223
|
-
}
|
|
224
|
-
exports.fetch = fetch;
|
|
225
|
-
/*
|
|
226
|
-
async function bailOnTimeout(asyncFunc: () => Promise<void>, { timeout }: { timeout: number }) {
|
|
227
|
-
let resolve: () => void
|
|
228
|
-
let reject: (err: Error) => void
|
|
229
|
-
const promise = new Promise<void>((_resolve, _reject) => {
|
|
230
|
-
resolve = _resolve
|
|
231
|
-
reject = _reject
|
|
232
|
-
})
|
|
233
|
-
|
|
234
|
-
const t = setTimeout(() => {
|
|
235
|
-
reject(new Error(`Function timeout.`))
|
|
236
|
-
}, timeout)
|
|
237
|
-
await asyncFunc()
|
|
238
|
-
clearTimeout(t)
|
|
239
|
-
resolve()
|
|
240
|
-
|
|
241
|
-
return promise
|
|
242
|
-
}
|
|
243
|
-
*/
|
|
244
|
-
function isMinNodeVersion(minNodeVersion) {
|
|
245
|
-
const { version } = process;
|
|
246
|
-
(0, utils_2.assert)(version.startsWith('v'));
|
|
247
|
-
const major = parseInt(version[1] + version[2], 10);
|
|
248
|
-
(0, utils_2.assert)(12 <= major && major <= 50);
|
|
249
|
-
return major >= minNodeVersion;
|
|
250
|
-
}
|
|
251
|
-
exports.isMinNodeVersion = isMinNodeVersion;
|
|
252
|
-
function getServerUrl() {
|
|
253
|
-
const testInfo = (0, getCurrentTest_1.getCurrentTest)();
|
|
254
|
-
const serverUrl = testInfo.runInfo?.serverUrl;
|
|
255
|
-
return serverUrl;
|
|
256
|
-
}
|
|
257
|
-
exports.getServerUrl = getServerUrl;
|
|
258
185
|
function getServerPort() {
|
|
259
|
-
const serverUrl = getServerUrl();
|
|
186
|
+
const serverUrl = (0, getCurrentTest_1.getServerUrl)();
|
|
260
187
|
const portStr = serverUrl.split(':').slice(-1)[0].split('/')[0];
|
|
261
188
|
(0, utils_2.assert)(/\d+/.test(portStr), { serverUrl });
|
|
262
189
|
const port = parseInt(portStr, 10);
|
package/dist/runAll.js
CHANGED
|
@@ -27,7 +27,7 @@ async function runAll(filter) {
|
|
|
27
27
|
(0, utils_1.assert)(hasFailedTestFile && hasFailLog);
|
|
28
28
|
(0, utils_1.assert)(failedTestFiles.length > 0);
|
|
29
29
|
throw new Error([
|
|
30
|
-
'Following test files failed, see
|
|
30
|
+
'Following test files failed, see logs above for more information.',
|
|
31
31
|
...failedTestFiles.map((testFile) => ` ${testFile}`),
|
|
32
32
|
].join('\n'));
|
|
33
33
|
}
|
|
@@ -76,17 +76,23 @@ async function buildAndTest(testFile, browser, isSecondAttempt) {
|
|
|
76
76
|
(0, logError_1.logError)(execErr);
|
|
77
77
|
return false;
|
|
78
78
|
}
|
|
79
|
-
// When user calls
|
|
80
|
-
|
|
81
|
-
|
|
79
|
+
// When user calls skip()
|
|
80
|
+
const testInfo = (0, getCurrentTest_1.getCurrentTest)();
|
|
81
|
+
if (testInfo.skipped) {
|
|
82
|
+
assertSkipUsage(testInfo);
|
|
83
|
+
(0, logTestStatus_1.logWarn)(testInfo.skipped.reason);
|
|
84
|
+
return true;
|
|
85
|
+
}
|
|
86
|
+
else {
|
|
82
87
|
// Set when user calls run() or runCommandThatTerminates()
|
|
83
88
|
(0, utils_1.assert)(testInfo.runInfo);
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
89
|
+
}
|
|
90
|
+
// When user calls run runCommandThatTerminates()
|
|
91
|
+
if (testInfo.runInfo.isRunCommandThatTerminates) {
|
|
92
|
+
(0, utils_1.assertUsage)(!testInfo.tests, "Can't call test() when calling runCommandThatTerminates()");
|
|
93
|
+
(0, utils_1.assertUsage)(!testInfo.startServer, "Can't call run() when calling runCommandThatTerminates()");
|
|
94
|
+
(0, logTestStatus_1.logPass)();
|
|
95
|
+
return true;
|
|
90
96
|
}
|
|
91
97
|
const success = await runServerAndTests(browser, isSecondAttempt);
|
|
92
98
|
(0, getCurrentTest_2.setCurrentTest)(null);
|
|
@@ -94,12 +100,6 @@ async function buildAndTest(testFile, browser, isSecondAttempt) {
|
|
|
94
100
|
}
|
|
95
101
|
async function runServerAndTests(browser, isSecondAttempt) {
|
|
96
102
|
const testInfo = (0, getCurrentTest_1.getCurrentTest)();
|
|
97
|
-
// Set when user calls skip()
|
|
98
|
-
if (testInfo.skipped) {
|
|
99
|
-
assertSkipUsage(testInfo);
|
|
100
|
-
(0, logTestStatus_1.logWarn)(testInfo.skipped.reason);
|
|
101
|
-
return true;
|
|
102
|
-
}
|
|
103
103
|
// Set when user calls run()
|
|
104
104
|
(0, utils_1.assert)(testInfo.runInfo);
|
|
105
105
|
(0, utils_1.assert)(testInfo.startServer);
|
|
@@ -127,7 +127,7 @@ async function runServerAndTests(browser, isSecondAttempt) {
|
|
|
127
127
|
if (success) {
|
|
128
128
|
const failOnWarning = true;
|
|
129
129
|
if (Logs_1.Logs.hasFailLogs(failOnWarning) &&
|
|
130
|
-
// See comments about taskkill in src/
|
|
130
|
+
// See comments about taskkill in src/utils/runCommandLongRunning.ts
|
|
131
131
|
!(0, utils_1.isWindows)()) {
|
|
132
132
|
logFailure(null, `${getErrorType(failOnWarning)} occurred during server termination`, isFinalAttempt);
|
|
133
133
|
success = false;
|
package/dist/skip.d.ts
ADDED
package/dist/skip.js
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.skip = void 0;
|
|
4
|
+
const getCurrentTest_1 = require("./getCurrentTest");
|
|
5
|
+
function skip(reason) {
|
|
6
|
+
const testInfo = (0, getCurrentTest_1.getCurrentTest)();
|
|
7
|
+
testInfo.skipped = { reason };
|
|
8
|
+
}
|
|
9
|
+
exports.skip = skip;
|
package/dist/utils/cliConfig.js
CHANGED
|
@@ -1,9 +1,16 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.cliConfig = void 0;
|
|
4
|
-
const
|
|
5
|
-
|
|
6
|
-
|
|
4
|
+
const parseCli_1 = require("./parseCli");
|
|
5
|
+
(0, parseCli_1.prepare)();
|
|
6
|
+
const verbose = (0, parseCli_1.check)('--verbose');
|
|
7
|
+
const inspect = (0, parseCli_1.check)('--inspect');
|
|
8
|
+
const debugEsbuild = (0, parseCli_1.check)('--debug-esbuild');
|
|
9
|
+
(0, parseCli_1.validate)();
|
|
10
|
+
const cliConfig = {
|
|
11
|
+
verbose,
|
|
7
12
|
// To inspect a specific test: `$ touch examples/some-example/INSPECT`
|
|
8
|
-
inspect:
|
|
13
|
+
inspect: inspect || !!process.env.TEST_INSPECT,
|
|
14
|
+
debugEsbuild,
|
|
9
15
|
};
|
|
16
|
+
exports.cliConfig = cliConfig;
|
package/dist/utils/index.d.ts
CHANGED
package/dist/utils/index.js
CHANGED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.isMinNodeVersion = void 0;
|
|
4
|
+
const assert_1 = require("./assert");
|
|
5
|
+
function isMinNodeVersion(minNodeVersion) {
|
|
6
|
+
const { version } = process;
|
|
7
|
+
(0, assert_1.assert)(version.startsWith('v'));
|
|
8
|
+
const major = parseInt(version[1] + version[2], 10);
|
|
9
|
+
(0, assert_1.assert)(12 <= major && major <= 50);
|
|
10
|
+
return major >= minNodeVersion;
|
|
11
|
+
}
|
|
12
|
+
exports.isMinNodeVersion = isMinNodeVersion;
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.validate = exports.check = exports.prepare = void 0;
|
|
4
|
+
let optionList;
|
|
5
|
+
const optionsKnown = [];
|
|
6
|
+
function prepare() {
|
|
7
|
+
optionList = process.argv.filter((w) => w.startsWith('--'));
|
|
8
|
+
}
|
|
9
|
+
exports.prepare = prepare;
|
|
10
|
+
function check(option) {
|
|
11
|
+
optionsKnown.push(option);
|
|
12
|
+
const val = optionList.includes(option);
|
|
13
|
+
if (val)
|
|
14
|
+
optionList = optionList.filter((s) => s !== option);
|
|
15
|
+
return val;
|
|
16
|
+
}
|
|
17
|
+
exports.check = check;
|
|
18
|
+
function validate() {
|
|
19
|
+
if (optionList.length > 0) {
|
|
20
|
+
throw new Error([
|
|
21
|
+
// prettier-ignore
|
|
22
|
+
`unknown options: ${optionList.join(' ')}`,
|
|
23
|
+
`known options: ${optionsKnown.join(' ')}`,
|
|
24
|
+
].join('\n'));
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
exports.validate = validate;
|
package/package.json
CHANGED
package/dist/setup.d.ts
DELETED
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
export { partRegex } from '@brillout/part-regex';
|
|
2
|
-
export { autoRetry } from './autoRetry';
|
|
3
|
-
export { fetchHtml };
|
|
4
|
-
export { fetch };
|
|
5
|
-
export { expectError } from './Logs';
|
|
6
|
-
export { run };
|
|
7
|
-
export { skip };
|
|
8
|
-
export { isMinNodeVersion };
|
|
9
|
-
export { isCI };
|
|
10
|
-
export { isLinux };
|
|
11
|
-
export { isWindows };
|
|
12
|
-
export { isMac };
|
|
13
|
-
export { sleep };
|
|
14
|
-
export { getServerUrl };
|
|
15
|
-
export { runCommandThatTerminates } from './runCommandThatTerminates';
|
|
16
|
-
import { sleep, isWindows, isLinux, isCI, isMac } from './utils';
|
|
17
|
-
import fetch_ from 'node-fetch';
|
|
18
|
-
declare function skip(reason: string): void;
|
|
19
|
-
declare function run(cmd: string, { additionalTimeout, serverIsReadyMessage, serverIsReadyDelay, inspect, cwd, doNotFailOnWarning, serverUrl, isFlaky, }?: {
|
|
20
|
-
additionalTimeout?: number;
|
|
21
|
-
serverIsReadyMessage?: string | ((log: string) => boolean);
|
|
22
|
-
serverIsReadyDelay?: number;
|
|
23
|
-
inspect?: boolean;
|
|
24
|
-
/** deprecated */
|
|
25
|
-
cwd?: string;
|
|
26
|
-
doNotFailOnWarning?: boolean;
|
|
27
|
-
serverUrl?: string;
|
|
28
|
-
isFlaky?: boolean;
|
|
29
|
-
}): void;
|
|
30
|
-
declare function fetchHtml(pathname: string): Promise<string>;
|
|
31
|
-
declare function fetch(...args: Parameters<typeof fetch_>): Promise<import("node-fetch").Response>;
|
|
32
|
-
declare function isMinNodeVersion(minNodeVersion: 14): boolean;
|
|
33
|
-
declare function getServerUrl(): string;
|