@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.
@@ -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 { expectError };
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: boolean;
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 expectError(userFilter: (logEntry: LogEntry) => boolean): void;
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.expectError = void 0;
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: false,
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 expect_1 = require("./chai/expect");
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
- printLog(logEntry);
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 expectError(userFilter) {
79
- const logFounds = logEntries.filter((logEntry) => {
80
- if (userFilter(logEntry)) {
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
- (0, expect_1.expect)(logFounds.length).not.toBe(0);
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.expectError = expectError;
102
+ exports.expectLog = expectLog;
89
103
  function getTimestamp() {
90
104
  const now = new Date();
91
105
  const time = now.toTimeString().split(' ')[0];
@@ -0,0 +1,5 @@
1
+ export { fetch };
2
+ export { fetchHtml };
3
+ import fetch_ from 'node-fetch';
4
+ declare function fetchHtml(pathname: string): Promise<string>;
5
+ declare function fetch(...args: Parameters<typeof fetch_>): Promise<import("node-fetch").Response>;
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;
@@ -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;
@@ -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
- (0, utils_1.assert)(page);
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;
@@ -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.runCommandThatTerminates = exports.getServerUrl = exports.sleep = exports.isMac = exports.isWindows = exports.isLinux = exports.isCI = exports.isMinNodeVersion = exports.skip = exports.run = exports.expectError = exports.fetch = exports.fetchHtml = exports.autoRetry = exports.partRegex = void 0;
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 Logs_2 = require("./Logs");
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
- Logs_2.Logs.logEagerly = true;
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
- Logs_2.Logs.add({
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
- Logs_2.Logs.add({
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
- Logs_2.Logs.add({
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
- Logs_2.Logs.add({
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
- Logs_2.Logs.add({
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
- Logs_2.Logs.add({
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
- Logs_2.Logs.add({
147
+ Logs_1.Logs.add({
167
148
  logSource: 'run()',
168
149
  logText: `Process termination (expected)`,
169
150
  });
170
151
  }
171
152
  else {
172
- Logs_2.Logs.add({
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
- Logs_2.Logs.add({
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
- Logs_2.Logs.add({
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 all the logs printed above for more information.',
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 run runCommandThatTerminates()
80
- {
81
- const testInfo = (0, getCurrentTest_1.getCurrentTest)();
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
- if (testInfo.runInfo.isRunCommandThatTerminates) {
85
- (0, utils_1.assertUsage)(!testInfo.tests, "Can't call test() when calling runCommandThatTerminates()");
86
- (0, utils_1.assertUsage)(!testInfo.startServer, "Can't call run() when calling runCommandThatTerminates()");
87
- (0, logTestStatus_1.logPass)();
88
- return true;
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/setup.ts
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
@@ -0,0 +1,2 @@
1
+ export { skip };
2
+ declare function skip(reason: string): void;
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;
@@ -1,4 +1,6 @@
1
- export declare const cliConfig: {
2
- debugEsbuild: boolean;
1
+ export { cliConfig };
2
+ declare const cliConfig: {
3
+ verbose: boolean;
3
4
  inspect: boolean;
5
+ debugEsbuild: boolean;
4
6
  };
@@ -1,9 +1,16 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.cliConfig = void 0;
4
- const cliArgs = process.argv.slice(2);
5
- exports.cliConfig = {
6
- debugEsbuild: cliArgs.includes('--debug-esbuild'),
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: cliArgs.includes('--inspect') || !!process.env.TEST_INSPECT,
13
+ inspect: inspect || !!process.env.TEST_INSPECT,
14
+ debugEsbuild,
9
15
  };
16
+ exports.cliConfig = cliConfig;
@@ -12,3 +12,4 @@ export * from './fsWindowsBugWorkaround';
12
12
  export * from './isObject';
13
13
  export * from './isCallable';
14
14
  export * from './platform';
15
+ export * from './isMinNodeVersion';
@@ -28,3 +28,4 @@ __exportStar(require("./fsWindowsBugWorkaround"), exports);
28
28
  __exportStar(require("./isObject"), exports);
29
29
  __exportStar(require("./isCallable"), exports);
30
30
  __exportStar(require("./platform"), exports);
31
+ __exportStar(require("./isMinNodeVersion"), exports);
@@ -0,0 +1,2 @@
1
+ export { isMinNodeVersion };
2
+ declare function isMinNodeVersion(minNodeVersion: 14): boolean;
@@ -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,6 @@
1
+ export { prepare };
2
+ export { check };
3
+ export { validate };
4
+ declare function prepare(): void;
5
+ declare function check(option: string): boolean;
6
+ declare function validate(): void;
@@ -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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@brillout/test-e2e",
3
- "version": "0.5.9",
3
+ "version": "0.5.11",
4
4
  "bin": "./bin.js",
5
5
  "main": "./dist/index.js",
6
6
  "scripts": {
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;