@cucumber/cucumber 7.3.0 → 8.0.0-rc.2
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/README.md +11 -4
- package/lib/cli/argv_parser.d.ts +3 -3
- package/lib/cli/argv_parser.js +19 -19
- package/lib/cli/argv_parser.js.map +1 -1
- package/lib/cli/configuration_builder.d.ts +5 -46
- package/lib/cli/configuration_builder.js +61 -150
- package/lib/cli/configuration_builder.js.map +1 -1
- package/lib/cli/helpers.d.ts +5 -3
- package/lib/cli/helpers.js +42 -15
- package/lib/cli/helpers.js.map +1 -1
- package/lib/cli/i18n.js +7 -7
- package/lib/cli/i18n.js.map +1 -1
- package/lib/cli/index.d.ts +4 -23
- package/lib/cli/index.js +18 -193
- package/lib/cli/index.js.map +1 -1
- package/lib/cli/install_validator.js +1 -1
- package/lib/cli/install_validator.js.map +1 -1
- package/lib/cli/option_splitter.js +1 -0
- package/lib/cli/option_splitter.js.map +1 -1
- package/lib/cli/profile_loader.d.ts +3 -2
- package/lib/cli/profile_loader.js +20 -13
- package/lib/cli/profile_loader.js.map +1 -1
- package/lib/cli/publish_banner.js +1 -1
- package/lib/cli/publish_banner.js.map +1 -1
- package/lib/cli/run.js +3 -4
- package/lib/cli/run.js.map +1 -1
- package/lib/configuration/index.d.ts +1 -0
- package/lib/configuration/index.js +14 -0
- package/lib/configuration/index.js.map +1 -0
- package/lib/configuration/types.d.ts +29 -0
- package/lib/configuration/types.js +3 -0
- package/lib/configuration/types.js.map +1 -0
- package/lib/formatter/builder.d.ts +5 -4
- package/lib/formatter/builder.js +41 -55
- package/lib/formatter/builder.js.map +1 -1
- package/lib/formatter/get_color_fns.d.ts +4 -0
- package/lib/formatter/get_color_fns.js +11 -4
- package/lib/formatter/get_color_fns.js.map +1 -1
- package/lib/formatter/helpers/event_data_collector.d.ts +2 -1
- package/lib/formatter/helpers/event_data_collector.js +16 -15
- package/lib/formatter/helpers/event_data_collector.js.map +1 -1
- package/lib/formatter/helpers/formatters.d.ts +6 -0
- package/lib/formatter/helpers/formatters.js +41 -0
- package/lib/formatter/helpers/formatters.js.map +1 -0
- package/lib/formatter/helpers/gherkin_document_parser.js +29 -42
- package/lib/formatter/helpers/gherkin_document_parser.js.map +1 -1
- package/lib/formatter/helpers/issue_helpers.d.ts +2 -2
- package/lib/formatter/helpers/issue_helpers.js +6 -7
- package/lib/formatter/helpers/issue_helpers.js.map +1 -1
- package/lib/formatter/helpers/keyword_type.js +2 -6
- package/lib/formatter/helpers/keyword_type.js.map +1 -1
- package/lib/formatter/helpers/location_helpers.js +1 -1
- package/lib/formatter/helpers/location_helpers.js.map +1 -1
- package/lib/formatter/helpers/pickle_parser.js +9 -18
- package/lib/formatter/helpers/pickle_parser.js.map +1 -1
- package/lib/formatter/helpers/step_argument_formatter.js +1 -1
- package/lib/formatter/helpers/step_argument_formatter.js.map +1 -1
- package/lib/formatter/helpers/summary_helpers.js +8 -7
- package/lib/formatter/helpers/summary_helpers.js.map +1 -1
- package/lib/formatter/helpers/test_case_attempt_formatter.js +12 -12
- package/lib/formatter/helpers/test_case_attempt_formatter.js.map +1 -1
- package/lib/formatter/helpers/test_case_attempt_parser.js +17 -20
- package/lib/formatter/helpers/test_case_attempt_parser.js.map +1 -1
- package/lib/formatter/helpers/usage_helpers/index.js +26 -40
- package/lib/formatter/helpers/usage_helpers/index.js.map +1 -1
- package/lib/formatter/html_formatter.d.ts +1 -0
- package/lib/formatter/html_formatter.js +5 -4
- package/lib/formatter/html_formatter.js.map +1 -1
- package/lib/formatter/http_stream.js +7 -7
- package/lib/formatter/http_stream.js.map +1 -1
- package/lib/formatter/index.d.ts +1 -0
- package/lib/formatter/index.js.map +1 -1
- package/lib/formatter/json_formatter.d.ts +1 -0
- package/lib/formatter/json_formatter.js +25 -20
- package/lib/formatter/json_formatter.js.map +1 -1
- package/lib/formatter/message_formatter.d.ts +1 -0
- package/lib/formatter/message_formatter.js +1 -0
- package/lib/formatter/message_formatter.js.map +1 -1
- package/lib/formatter/progress_bar_formatter.d.ts +1 -0
- package/lib/formatter/progress_bar_formatter.js +17 -16
- package/lib/formatter/progress_bar_formatter.js.map +1 -1
- package/lib/formatter/progress_formatter.d.ts +1 -0
- package/lib/formatter/progress_formatter.js +3 -2
- package/lib/formatter/progress_formatter.js.map +1 -1
- package/lib/formatter/publish.d.ts +1 -0
- package/lib/formatter/publish.js +5 -0
- package/lib/formatter/publish.js.map +1 -0
- package/lib/formatter/rerun_formatter.d.ts +1 -0
- package/lib/formatter/rerun_formatter.js +15 -11
- package/lib/formatter/rerun_formatter.js.map +1 -1
- package/lib/formatter/snippets_formatter.d.ts +1 -0
- package/lib/formatter/snippets_formatter.js +3 -2
- package/lib/formatter/snippets_formatter.js.map +1 -1
- package/lib/formatter/step_definition_snippet_builder/index.js +2 -2
- package/lib/formatter/step_definition_snippet_builder/index.js.map +1 -1
- package/lib/formatter/step_definition_snippet_builder/javascript_snippet_syntax.js +3 -0
- package/lib/formatter/step_definition_snippet_builder/javascript_snippet_syntax.js.map +1 -1
- package/lib/formatter/step_definition_snippet_builder/snippet_syntax.d.ts +1 -1
- package/lib/formatter/step_definition_snippet_builder/snippet_syntax.js.map +1 -1
- package/lib/formatter/summary_formatter.d.ts +1 -0
- package/lib/formatter/summary_formatter.js +10 -10
- package/lib/formatter/summary_formatter.js.map +1 -1
- package/lib/formatter/usage_formatter.d.ts +1 -0
- package/lib/formatter/usage_formatter.js +9 -9
- package/lib/formatter/usage_formatter.js.map +1 -1
- package/lib/formatter/usage_json_formatter.d.ts +1 -0
- package/lib/formatter/usage_json_formatter.js +3 -2
- package/lib/formatter/usage_json_formatter.js.map +1 -1
- package/lib/importer.js +13 -0
- package/lib/index.d.ts +2 -0
- package/lib/index.js +6 -1
- package/lib/index.js.map +1 -1
- package/lib/models/data_table.js +9 -7
- package/lib/models/data_table.js.map +1 -1
- package/lib/models/step_definition.js +4 -5
- package/lib/models/step_definition.js.map +1 -1
- package/lib/pickle_filter.js +13 -13
- package/lib/pickle_filter.js.map +1 -1
- package/lib/run/formatters.d.ts +14 -0
- package/lib/run/formatters.js +76 -0
- package/lib/run/formatters.js.map +1 -0
- package/lib/run/index.d.ts +2 -0
- package/lib/run/index.js +15 -0
- package/lib/run/index.js.map +1 -0
- package/lib/run/paths.d.ts +6 -0
- package/lib/run/paths.js +83 -0
- package/lib/run/paths.js.map +1 -0
- package/lib/run/runCucumber.d.ts +3 -0
- package/lib/run/runCucumber.js +88 -0
- package/lib/run/runCucumber.js.map +1 -0
- package/lib/run/runtime.d.ts +19 -0
- package/lib/run/runtime.js +58 -0
- package/lib/run/runtime.js.map +1 -0
- package/lib/run/support.d.ts +8 -0
- package/lib/run/support.js +26 -0
- package/lib/run/support.js.map +1 -0
- package/lib/run/types.d.ts +12 -0
- package/lib/run/types.js +3 -0
- package/lib/run/types.js.map +1 -0
- package/lib/runtime/assemble_test_cases.js +3 -3
- package/lib/runtime/assemble_test_cases.js.map +1 -1
- package/lib/runtime/attachment_manager/index.js +4 -4
- package/lib/runtime/attachment_manager/index.js.map +1 -1
- package/lib/runtime/helpers.d.ts +1 -0
- package/lib/runtime/helpers.js +42 -4
- package/lib/runtime/helpers.js.map +1 -1
- package/lib/runtime/index.d.ts +5 -3
- package/lib/runtime/index.js +22 -46
- package/lib/runtime/index.js.map +1 -1
- package/lib/runtime/parallel/coordinator.d.ts +6 -5
- package/lib/runtime/parallel/coordinator.js +19 -22
- package/lib/runtime/parallel/coordinator.js.map +1 -1
- package/lib/runtime/parallel/run_worker.js +1 -1
- package/lib/runtime/parallel/run_worker.js.map +1 -1
- package/lib/runtime/parallel/worker.js +21 -13
- package/lib/runtime/parallel/worker.js.map +1 -1
- package/lib/runtime/step_runner.js +5 -7
- package/lib/runtime/step_runner.js.map +1 -1
- package/lib/runtime/stopwatch.js +4 -4
- package/lib/runtime/stopwatch.js.map +1 -1
- package/lib/runtime/test_case_runner.d.ts +3 -3
- package/lib/runtime/test_case_runner.js +19 -28
- package/lib/runtime/test_case_runner.js.map +1 -1
- package/lib/stack_trace_filter.js +6 -7
- package/lib/stack_trace_filter.js.map +1 -1
- package/lib/step_arguments.js +2 -2
- package/lib/step_arguments.js.map +1 -1
- package/lib/support_code_library_builder/{build_helpers.d.ts → build_parameter_type.d.ts} +0 -2
- package/lib/support_code_library_builder/build_parameter_type.js +13 -0
- package/lib/support_code_library_builder/build_parameter_type.js.map +1 -0
- package/lib/support_code_library_builder/get_definition_line_and_uri.d.ts +3 -0
- package/lib/support_code_library_builder/get_definition_line_and_uri.js +30 -0
- package/lib/support_code_library_builder/get_definition_line_and_uri.js.map +1 -0
- package/lib/support_code_library_builder/index.js +18 -31
- package/lib/support_code_library_builder/index.js.map +1 -1
- package/lib/support_code_library_builder/types.d.ts +2 -1
- package/lib/support_code_library_builder/types.js.map +1 -1
- package/lib/support_code_library_builder/validate_arguments.js +14 -19
- package/lib/support_code_library_builder/validate_arguments.js.map +1 -1
- package/lib/time.d.ts +1 -0
- package/lib/time.js +17 -2
- package/lib/time.js.map +1 -1
- package/lib/user_code_runner.js +10 -17
- package/lib/user_code_runner.js.map +1 -1
- package/lib/value_checker.d.ts +2 -2
- package/lib/value_checker.js.map +1 -1
- package/lib/version.d.ts +1 -0
- package/lib/version.js +6 -0
- package/lib/version.js.map +1 -0
- package/lib/wrapper.mjs +38 -0
- package/package.json +77 -67
- package/CHANGELOG.md +0 -1908
- package/lib/support_code_library_builder/build_helpers.js +0 -41
- package/lib/support_code_library_builder/build_helpers.js.map +0 -1
- package/lib/support_code_library_builder/finalize_helpers.d.ts +0 -10
- package/lib/support_code_library_builder/finalize_helpers.js +0 -26
- package/lib/support_code_library_builder/finalize_helpers.js.map +0 -1
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/// <reference types="node" />
|
|
2
|
+
import { IFormatterStream } from '../formatter';
|
|
3
|
+
import { EventEmitter } from 'events';
|
|
4
|
+
import { EventDataCollector } from '../formatter/helpers';
|
|
5
|
+
import { ISupportCodeLibrary } from '../support_code_library_builder/types';
|
|
6
|
+
import { IFormatterConfiguration } from '../configuration';
|
|
7
|
+
export declare function initializeFormatters({ cwd, stdout, eventBroadcaster, eventDataCollector, configuration, supportCodeLibrary, }: {
|
|
8
|
+
cwd: string;
|
|
9
|
+
stdout: IFormatterStream;
|
|
10
|
+
eventBroadcaster: EventEmitter;
|
|
11
|
+
eventDataCollector: EventDataCollector;
|
|
12
|
+
configuration: IFormatterConfiguration;
|
|
13
|
+
supportCodeLibrary: ISupportCodeLibrary;
|
|
14
|
+
}): Promise<() => Promise<void>>;
|
|
@@ -0,0 +1,76 @@
|
|
|
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.initializeFormatters = void 0;
|
|
7
|
+
const util_1 = require("util");
|
|
8
|
+
const value_checker_1 = require("../value_checker");
|
|
9
|
+
const builder_1 = __importDefault(require("../formatter/builder"));
|
|
10
|
+
const fs_1 = __importDefault(require("mz/fs"));
|
|
11
|
+
const path_1 = __importDefault(require("path"));
|
|
12
|
+
const publish_1 = require("../formatter/publish");
|
|
13
|
+
const http_stream_1 = __importDefault(require("../formatter/http_stream"));
|
|
14
|
+
const stream_1 = require("stream");
|
|
15
|
+
async function initializeFormatters({ cwd, stdout, eventBroadcaster, eventDataCollector, configuration = {}, supportCodeLibrary, }) {
|
|
16
|
+
var _a;
|
|
17
|
+
async function initializeFormatter(stream, target, type) {
|
|
18
|
+
var _a, _b;
|
|
19
|
+
stream.on('error', (error) => {
|
|
20
|
+
console.error(error.message);
|
|
21
|
+
process.exit(1);
|
|
22
|
+
});
|
|
23
|
+
const typeOptions = {
|
|
24
|
+
cwd,
|
|
25
|
+
eventBroadcaster,
|
|
26
|
+
eventDataCollector,
|
|
27
|
+
log: stream.write.bind(stream),
|
|
28
|
+
parsedArgvOptions: (_a = configuration.options) !== null && _a !== void 0 ? _a : {},
|
|
29
|
+
stream,
|
|
30
|
+
cleanup: stream === stdout
|
|
31
|
+
? async () => await Promise.resolve()
|
|
32
|
+
: (0, util_1.promisify)(stream.end.bind(stream)),
|
|
33
|
+
supportCodeLibrary,
|
|
34
|
+
};
|
|
35
|
+
if ((0, value_checker_1.doesNotHaveValue)((_b = configuration.options) === null || _b === void 0 ? void 0 : _b.colorsEnabled)) {
|
|
36
|
+
typeOptions.parsedArgvOptions.colorsEnabled = stream.isTTY;
|
|
37
|
+
}
|
|
38
|
+
if (type === 'progress-bar' && !stream.isTTY) {
|
|
39
|
+
console.warn(`Cannot use 'progress-bar' formatter for output to '${target}' as not a TTY. Switching to 'progress' formatter.`);
|
|
40
|
+
type = 'progress';
|
|
41
|
+
}
|
|
42
|
+
return await builder_1.default.build(type, typeOptions);
|
|
43
|
+
}
|
|
44
|
+
const formatters = [];
|
|
45
|
+
formatters.push(await initializeFormatter(stdout, 'stdout', (_a = configuration.stdout) !== null && _a !== void 0 ? _a : 'progress'));
|
|
46
|
+
if (configuration.files) {
|
|
47
|
+
for (const [target, type] of Object.entries(configuration.files)) {
|
|
48
|
+
const stream = fs_1.default.createWriteStream(null, {
|
|
49
|
+
fd: await fs_1.default.open(path_1.default.resolve(cwd, target), 'w'),
|
|
50
|
+
});
|
|
51
|
+
formatters.push(await initializeFormatter(stream, target, type));
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
if (configuration.publish) {
|
|
55
|
+
const { url = publish_1.DEFAULT_CUCUMBER_PUBLISH_URL, token } = configuration.publish;
|
|
56
|
+
const headers = {};
|
|
57
|
+
if (token !== undefined) {
|
|
58
|
+
headers.Authorization = `Bearer ${token}`;
|
|
59
|
+
}
|
|
60
|
+
const stream = new http_stream_1.default(url, 'GET', headers);
|
|
61
|
+
const readerStream = new stream_1.Writable({
|
|
62
|
+
objectMode: true,
|
|
63
|
+
write: function (responseBody, encoding, writeCallback) {
|
|
64
|
+
console.error(responseBody);
|
|
65
|
+
writeCallback();
|
|
66
|
+
},
|
|
67
|
+
});
|
|
68
|
+
stream.pipe(readerStream);
|
|
69
|
+
formatters.push(await initializeFormatter(stream, url, 'message'));
|
|
70
|
+
}
|
|
71
|
+
return async function () {
|
|
72
|
+
await Promise.all(formatters.map(async (f) => await f.finished()));
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
exports.initializeFormatters = initializeFormatters;
|
|
76
|
+
//# sourceMappingURL=formatters.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"formatters.js","sourceRoot":"","sources":["../../src/run/formatters.ts"],"names":[],"mappings":"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","sourcesContent":["import Formatter, { IFormatterStream } from '../formatter'\nimport { EventEmitter } from 'events'\nimport { EventDataCollector } from '../formatter/helpers'\nimport { ISupportCodeLibrary } from '../support_code_library_builder/types'\nimport { promisify } from 'util'\nimport { doesNotHaveValue } from '../value_checker'\nimport { WriteStream as TtyWriteStream } from 'tty'\nimport FormatterBuilder from '../formatter/builder'\nimport fs from 'mz/fs'\nimport path from 'path'\nimport { DEFAULT_CUCUMBER_PUBLISH_URL } from '../formatter/publish'\nimport HttpStream from '../formatter/http_stream'\nimport { Writable } from 'stream'\nimport { IFormatterConfiguration } from '../configuration'\n\nexport async function initializeFormatters({\n cwd,\n stdout,\n eventBroadcaster,\n eventDataCollector,\n configuration = {},\n supportCodeLibrary,\n}: {\n cwd: string\n stdout: IFormatterStream\n eventBroadcaster: EventEmitter\n eventDataCollector: EventDataCollector\n configuration: IFormatterConfiguration\n supportCodeLibrary: ISupportCodeLibrary\n}): Promise<() => Promise<void>> {\n async function initializeFormatter(\n stream: IFormatterStream,\n target: string,\n type: string\n ): Promise<Formatter> {\n stream.on('error', (error) => {\n console.error(error.message)\n process.exit(1)\n })\n const typeOptions = {\n cwd,\n eventBroadcaster,\n eventDataCollector,\n log: stream.write.bind(stream),\n parsedArgvOptions: configuration.options ?? {},\n stream,\n cleanup:\n stream === stdout\n ? async () => await Promise.resolve()\n : promisify<any>(stream.end.bind(stream)),\n supportCodeLibrary,\n }\n if (doesNotHaveValue(configuration.options?.colorsEnabled)) {\n typeOptions.parsedArgvOptions.colorsEnabled = (\n stream as TtyWriteStream\n ).isTTY\n }\n if (type === 'progress-bar' && !(stream as TtyWriteStream).isTTY) {\n console.warn(\n `Cannot use 'progress-bar' formatter for output to '${target}' as not a TTY. Switching to 'progress' formatter.`\n )\n type = 'progress'\n }\n return await FormatterBuilder.build(type, typeOptions)\n }\n\n const formatters: Formatter[] = []\n\n formatters.push(\n await initializeFormatter(\n stdout,\n 'stdout',\n configuration.stdout ?? 'progress'\n )\n )\n\n if (configuration.files) {\n for (const [target, type] of Object.entries(configuration.files)) {\n const stream: IFormatterStream = fs.createWriteStream(null, {\n fd: await fs.open(path.resolve(cwd, target), 'w'),\n })\n formatters.push(await initializeFormatter(stream, target, type))\n }\n }\n\n if (configuration.publish) {\n const { url = DEFAULT_CUCUMBER_PUBLISH_URL, token } = configuration.publish\n const headers: { [key: string]: string } = {}\n if (token !== undefined) {\n headers.Authorization = `Bearer ${token}`\n }\n const stream = new HttpStream(url, 'GET', headers)\n const readerStream = new Writable({\n objectMode: true,\n write: function (responseBody: string, encoding, writeCallback) {\n console.error(responseBody)\n writeCallback()\n },\n })\n stream.pipe(readerStream)\n formatters.push(await initializeFormatter(stream, url, 'message'))\n }\n\n return async function () {\n await Promise.all(formatters.map(async (f) => await f.finished()))\n }\n}\n"]}
|
package/lib/run/index.js
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
|
|
5
|
+
}) : (function(o, m, k, k2) {
|
|
6
|
+
if (k2 === undefined) k2 = k;
|
|
7
|
+
o[k2] = m[k];
|
|
8
|
+
}));
|
|
9
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
10
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
11
|
+
};
|
|
12
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
13
|
+
__exportStar(require("./runCucumber"), exports);
|
|
14
|
+
__exportStar(require("./types"), exports);
|
|
15
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/run/index.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,gDAA6B;AAC7B,0CAAuB","sourcesContent":["export * from './runCucumber'\nexport * from './types'\n"]}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { IRunConfiguration } from '../configuration';
|
|
2
|
+
export declare function resolvePaths(cwd: string, configuration: Pick<IRunConfiguration, 'sources' | 'support'>): Promise<{
|
|
3
|
+
unexpandedFeaturePaths: string[];
|
|
4
|
+
featurePaths: string[];
|
|
5
|
+
supportCodePaths: string[];
|
|
6
|
+
}>;
|
package/lib/run/paths.js
ADDED
|
@@ -0,0 +1,83 @@
|
|
|
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.resolvePaths = void 0;
|
|
7
|
+
const util_1 = require("util");
|
|
8
|
+
const glob_1 = __importDefault(require("glob"));
|
|
9
|
+
const path_1 = __importDefault(require("path"));
|
|
10
|
+
const fs_1 = __importDefault(require("mz/fs"));
|
|
11
|
+
async function resolvePaths(cwd, configuration) {
|
|
12
|
+
var _a;
|
|
13
|
+
const unexpandedFeaturePaths = await getUnexpandedFeaturePaths(cwd, configuration.sources.paths);
|
|
14
|
+
const featurePaths = await expandFeaturePaths(cwd, unexpandedFeaturePaths);
|
|
15
|
+
let unexpandedSupportCodePaths = (_a = configuration.support.paths) !== null && _a !== void 0 ? _a : [];
|
|
16
|
+
if (unexpandedSupportCodePaths.length === 0) {
|
|
17
|
+
unexpandedSupportCodePaths = getFeatureDirectoryPaths(cwd, featurePaths);
|
|
18
|
+
}
|
|
19
|
+
const supportCodePaths = await expandPaths(cwd, unexpandedSupportCodePaths, '.@(js|mjs)');
|
|
20
|
+
return {
|
|
21
|
+
unexpandedFeaturePaths,
|
|
22
|
+
featurePaths,
|
|
23
|
+
supportCodePaths,
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
exports.resolvePaths = resolvePaths;
|
|
27
|
+
async function expandPaths(cwd, unexpandedPaths, defaultExtension) {
|
|
28
|
+
const expandedPaths = await Promise.all(unexpandedPaths.map(async (unexpandedPath) => {
|
|
29
|
+
const matches = await (0, util_1.promisify)(glob_1.default)(unexpandedPath, {
|
|
30
|
+
absolute: true,
|
|
31
|
+
cwd,
|
|
32
|
+
});
|
|
33
|
+
const expanded = await Promise.all(matches.map(async (match) => {
|
|
34
|
+
if (path_1.default.extname(match) === '') {
|
|
35
|
+
return await (0, util_1.promisify)(glob_1.default)(`${match}/**/*${defaultExtension}`);
|
|
36
|
+
}
|
|
37
|
+
return [match];
|
|
38
|
+
}));
|
|
39
|
+
return expanded.flat();
|
|
40
|
+
}));
|
|
41
|
+
return expandedPaths.flat().map((x) => path_1.default.normalize(x));
|
|
42
|
+
}
|
|
43
|
+
async function getUnexpandedFeaturePaths(cwd, args) {
|
|
44
|
+
if (args.length > 0) {
|
|
45
|
+
const nestedFeaturePaths = await Promise.all(args.map(async (arg) => {
|
|
46
|
+
const filename = path_1.default.basename(arg);
|
|
47
|
+
if (filename[0] === '@') {
|
|
48
|
+
const filePath = path_1.default.join(cwd, arg);
|
|
49
|
+
const content = await fs_1.default.readFile(filePath, 'utf8');
|
|
50
|
+
return content.split('\n').map((x) => x.trim());
|
|
51
|
+
}
|
|
52
|
+
return [arg];
|
|
53
|
+
}));
|
|
54
|
+
const featurePaths = nestedFeaturePaths.flat();
|
|
55
|
+
if (featurePaths.length > 0) {
|
|
56
|
+
return featurePaths.filter((x) => x !== '');
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
return ['features/**/*.{feature,feature.md}'];
|
|
60
|
+
}
|
|
61
|
+
function getFeatureDirectoryPaths(cwd, featurePaths) {
|
|
62
|
+
const featureDirs = featurePaths.map((featurePath) => {
|
|
63
|
+
let featureDir = path_1.default.dirname(featurePath);
|
|
64
|
+
let childDir;
|
|
65
|
+
let parentDir = featureDir;
|
|
66
|
+
while (childDir !== parentDir) {
|
|
67
|
+
childDir = parentDir;
|
|
68
|
+
parentDir = path_1.default.dirname(childDir);
|
|
69
|
+
if (path_1.default.basename(parentDir) === 'features') {
|
|
70
|
+
featureDir = parentDir;
|
|
71
|
+
break;
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
return path_1.default.relative(cwd, featureDir);
|
|
75
|
+
});
|
|
76
|
+
return [...new Set(featureDirs)];
|
|
77
|
+
}
|
|
78
|
+
async function expandFeaturePaths(cwd, featurePaths) {
|
|
79
|
+
featurePaths = featurePaths.map((p) => p.replace(/(:\d+)*$/g, '')); // Strip line numbers
|
|
80
|
+
featurePaths = [...new Set(featurePaths)]; // Deduplicate the feature files
|
|
81
|
+
return await expandPaths(cwd, featurePaths, '.feature');
|
|
82
|
+
}
|
|
83
|
+
//# sourceMappingURL=paths.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"paths.js","sourceRoot":"","sources":["../../src/run/paths.ts"],"names":[],"mappings":"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","sourcesContent":["import { promisify } from 'util'\nimport glob from 'glob'\nimport path from 'path'\nimport fs from 'mz/fs'\nimport { IRunConfiguration } from '../configuration'\n\nexport async function resolvePaths(\n cwd: string,\n configuration: Pick<IRunConfiguration, 'sources' | 'support'>\n): Promise<{\n unexpandedFeaturePaths: string[]\n featurePaths: string[]\n supportCodePaths: string[]\n}> {\n const unexpandedFeaturePaths = await getUnexpandedFeaturePaths(\n cwd,\n configuration.sources.paths\n )\n const featurePaths: string[] = await expandFeaturePaths(\n cwd,\n unexpandedFeaturePaths\n )\n let unexpandedSupportCodePaths = configuration.support.paths ?? []\n if (unexpandedSupportCodePaths.length === 0) {\n unexpandedSupportCodePaths = getFeatureDirectoryPaths(cwd, featurePaths)\n }\n const supportCodePaths = await expandPaths(\n cwd,\n unexpandedSupportCodePaths,\n '.@(js|mjs)'\n )\n return {\n unexpandedFeaturePaths,\n featurePaths,\n supportCodePaths,\n }\n}\n\nasync function expandPaths(\n cwd: string,\n unexpandedPaths: string[],\n defaultExtension: string\n): Promise<string[]> {\n const expandedPaths = await Promise.all(\n unexpandedPaths.map(async (unexpandedPath) => {\n const matches = await promisify(glob)(unexpandedPath, {\n absolute: true,\n cwd,\n })\n const expanded = await Promise.all(\n matches.map(async (match) => {\n if (path.extname(match) === '') {\n return await promisify(glob)(`${match}/**/*${defaultExtension}`)\n }\n return [match]\n })\n )\n return expanded.flat()\n })\n )\n return expandedPaths.flat().map((x) => path.normalize(x))\n}\n\nasync function getUnexpandedFeaturePaths(\n cwd: string,\n args: string[]\n): Promise<string[]> {\n if (args.length > 0) {\n const nestedFeaturePaths = await Promise.all(\n args.map(async (arg) => {\n const filename = path.basename(arg)\n if (filename[0] === '@') {\n const filePath = path.join(cwd, arg)\n const content = await fs.readFile(filePath, 'utf8')\n return content.split('\\n').map((x) => x.trim())\n }\n return [arg]\n })\n )\n const featurePaths = nestedFeaturePaths.flat()\n if (featurePaths.length > 0) {\n return featurePaths.filter((x) => x !== '')\n }\n }\n return ['features/**/*.{feature,feature.md}']\n}\n\nfunction getFeatureDirectoryPaths(\n cwd: string,\n featurePaths: string[]\n): string[] {\n const featureDirs = featurePaths.map((featurePath) => {\n let featureDir = path.dirname(featurePath)\n let childDir: string\n let parentDir = featureDir\n while (childDir !== parentDir) {\n childDir = parentDir\n parentDir = path.dirname(childDir)\n if (path.basename(parentDir) === 'features') {\n featureDir = parentDir\n break\n }\n }\n return path.relative(cwd, featureDir)\n })\n return [...new Set(featureDirs)]\n}\n\nasync function expandFeaturePaths(\n cwd: string,\n featurePaths: string[]\n): Promise<string[]> {\n featurePaths = featurePaths.map((p) => p.replace(/(:\\d+)*$/g, '')) // Strip line numbers\n featurePaths = [...new Set(featurePaths)] // Deduplicate the feature files\n return await expandPaths(cwd, featurePaths, '.feature')\n}\n"]}
|
|
@@ -0,0 +1,88 @@
|
|
|
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.runCucumber = void 0;
|
|
7
|
+
const messages_1 = require("@cucumber/messages");
|
|
8
|
+
const events_1 = require("events");
|
|
9
|
+
const helpers_1 = require("../formatter/helpers");
|
|
10
|
+
const helpers_2 = require("../cli/helpers");
|
|
11
|
+
const gherkin_streams_1 = require("@cucumber/gherkin-streams");
|
|
12
|
+
const pickle_filter_1 = __importDefault(require("../pickle_filter"));
|
|
13
|
+
const paths_1 = require("./paths");
|
|
14
|
+
const runtime_1 = require("./runtime");
|
|
15
|
+
const formatters_1 = require("./formatters");
|
|
16
|
+
const support_1 = require("./support");
|
|
17
|
+
async function runCucumber(configuration, environment = {
|
|
18
|
+
cwd: process.cwd(),
|
|
19
|
+
stdout: process.stdout,
|
|
20
|
+
env: process.env,
|
|
21
|
+
}) {
|
|
22
|
+
var _a;
|
|
23
|
+
const { cwd, stdout, env } = environment;
|
|
24
|
+
const newId = messages_1.IdGenerator.uuid();
|
|
25
|
+
const { unexpandedFeaturePaths, featurePaths, supportCodePaths } = await (0, paths_1.resolvePaths)(cwd, configuration);
|
|
26
|
+
const supportCodeLibrary = await (0, support_1.getSupportCodeLibrary)({
|
|
27
|
+
cwd,
|
|
28
|
+
newId,
|
|
29
|
+
supportCodePaths,
|
|
30
|
+
supportCodeRequiredModules: configuration.support.transpileWith,
|
|
31
|
+
});
|
|
32
|
+
const eventBroadcaster = new events_1.EventEmitter();
|
|
33
|
+
const eventDataCollector = new helpers_1.EventDataCollector(eventBroadcaster);
|
|
34
|
+
const cleanup = await (0, formatters_1.initializeFormatters)({
|
|
35
|
+
cwd,
|
|
36
|
+
stdout,
|
|
37
|
+
eventBroadcaster,
|
|
38
|
+
eventDataCollector,
|
|
39
|
+
configuration: configuration.formats,
|
|
40
|
+
supportCodeLibrary,
|
|
41
|
+
});
|
|
42
|
+
await (0, helpers_2.emitMetaMessage)(eventBroadcaster, env);
|
|
43
|
+
const gherkinMessageStream = gherkin_streams_1.GherkinStreams.fromPaths(featurePaths, {
|
|
44
|
+
defaultDialect: configuration.sources.defaultDialect,
|
|
45
|
+
newId,
|
|
46
|
+
relativeTo: cwd,
|
|
47
|
+
});
|
|
48
|
+
let pickleIds = [];
|
|
49
|
+
if (featurePaths.length > 0) {
|
|
50
|
+
pickleIds = await (0, helpers_2.parseGherkinMessageStream)({
|
|
51
|
+
cwd,
|
|
52
|
+
eventBroadcaster,
|
|
53
|
+
eventDataCollector,
|
|
54
|
+
gherkinMessageStream,
|
|
55
|
+
order: (_a = configuration.sources.order) !== null && _a !== void 0 ? _a : 'defined',
|
|
56
|
+
pickleFilter: new pickle_filter_1.default({
|
|
57
|
+
cwd,
|
|
58
|
+
featurePaths: unexpandedFeaturePaths,
|
|
59
|
+
names: configuration.sources.names,
|
|
60
|
+
tagExpression: configuration.sources.tagExpression,
|
|
61
|
+
}),
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
(0, helpers_2.emitSupportCodeMessages)({
|
|
65
|
+
eventBroadcaster,
|
|
66
|
+
supportCodeLibrary,
|
|
67
|
+
newId,
|
|
68
|
+
});
|
|
69
|
+
const runtime = (0, runtime_1.makeRuntime)({
|
|
70
|
+
cwd,
|
|
71
|
+
eventBroadcaster,
|
|
72
|
+
eventDataCollector,
|
|
73
|
+
pickleIds,
|
|
74
|
+
newId,
|
|
75
|
+
supportCodeLibrary,
|
|
76
|
+
supportCodePaths,
|
|
77
|
+
supportCodeRequiredModules: configuration.support.transpileWith,
|
|
78
|
+
options: configuration.runtime,
|
|
79
|
+
});
|
|
80
|
+
const success = await runtime.start();
|
|
81
|
+
await cleanup();
|
|
82
|
+
return {
|
|
83
|
+
success,
|
|
84
|
+
support: supportCodeLibrary,
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
exports.runCucumber = runCucumber;
|
|
88
|
+
//# sourceMappingURL=runCucumber.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runCucumber.js","sourceRoot":"","sources":["../../src/run/runCucumber.ts"],"names":[],"mappings":";;;;;;AAAA,iDAAgD;AAChD,mCAAqC;AACrC,kDAAyD;AACzD,4CAIuB;AACvB,+DAA0D;AAC1D,qEAA2C;AAG3C,mCAAsC;AACtC,uCAAuC;AACvC,6CAAmD;AACnD,uCAAiD;AAE1C,KAAK,UAAU,WAAW,CAC/B,aAAgC,EAChC,cAA+B;IAC7B,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE;IAClB,MAAM,EAAE,OAAO,CAAC,MAAM;IACtB,GAAG,EAAE,OAAO,CAAC,GAAG;CACjB;;IAED,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,WAAW,CAAA;IACxC,MAAM,KAAK,GAAG,sBAAW,CAAC,IAAI,EAAE,CAAA;IAEhC,MAAM,EAAE,sBAAsB,EAAE,YAAY,EAAE,gBAAgB,EAAE,GAC9D,MAAM,IAAA,oBAAY,EAAC,GAAG,EAAE,aAAa,CAAC,CAAA;IAExC,MAAM,kBAAkB,GAAG,MAAM,IAAA,+BAAqB,EAAC;QACrD,GAAG;QACH,KAAK;QACL,gBAAgB;QAChB,0BAA0B,EAAE,aAAa,CAAC,OAAO,CAAC,aAAa;KAChE,CAAC,CAAA;IAEF,MAAM,gBAAgB,GAAG,IAAI,qBAAY,EAAE,CAAA;IAC3C,MAAM,kBAAkB,GAAG,IAAI,4BAAkB,CAAC,gBAAgB,CAAC,CAAA;IAEnE,MAAM,OAAO,GAAG,MAAM,IAAA,iCAAoB,EAAC;QACzC,GAAG;QACH,MAAM;QACN,gBAAgB;QAChB,kBAAkB;QAClB,aAAa,EAAE,aAAa,CAAC,OAAO;QACpC,kBAAkB;KACnB,CAAC,CAAA;IACF,MAAM,IAAA,yBAAe,EAAC,gBAAgB,EAAE,GAAG,CAAC,CAAA;IAE5C,MAAM,oBAAoB,GAAG,gCAAc,CAAC,SAAS,CAAC,YAAY,EAAE;QAClE,cAAc,EAAE,aAAa,CAAC,OAAO,CAAC,cAAc;QACpD,KAAK;QACL,UAAU,EAAE,GAAG;KAChB,CAAC,CAAA;IACF,IAAI,SAAS,GAAa,EAAE,CAAA;IAE5B,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE;QAC3B,SAAS,GAAG,MAAM,IAAA,mCAAyB,EAAC;YAC1C,GAAG;YACH,gBAAgB;YAChB,kBAAkB;YAClB,oBAAoB;YACpB,KAAK,EAAE,MAAA,aAAa,CAAC,OAAO,CAAC,KAAK,mCAAI,SAAS;YAC/C,YAAY,EAAE,IAAI,uBAAY,CAAC;gBAC7B,GAAG;gBACH,YAAY,EAAE,sBAAsB;gBACpC,KAAK,EAAE,aAAa,CAAC,OAAO,CAAC,KAAK;gBAClC,aAAa,EAAE,aAAa,CAAC,OAAO,CAAC,aAAa;aACnD,CAAC;SACH,CAAC,CAAA;KACH;IACD,IAAA,iCAAuB,EAAC;QACtB,gBAAgB;QAChB,kBAAkB;QAClB,KAAK;KACN,CAAC,CAAA;IAEF,MAAM,OAAO,GAAG,IAAA,qBAAW,EAAC;QAC1B,GAAG;QACH,gBAAgB;QAChB,kBAAkB;QAClB,SAAS;QACT,KAAK;QACL,kBAAkB;QAClB,gBAAgB;QAChB,0BAA0B,EAAE,aAAa,CAAC,OAAO,CAAC,aAAa;QAC/D,OAAO,EAAE,aAAa,CAAC,OAAO;KAC/B,CAAC,CAAA;IACF,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,KAAK,EAAE,CAAA;IACrC,MAAM,OAAO,EAAE,CAAA;IAEf,OAAO;QACL,OAAO;QACP,OAAO,EAAE,kBAAkB;KAC5B,CAAA;AACH,CAAC;AAhFD,kCAgFC","sourcesContent":["import { IdGenerator } from '@cucumber/messages'\nimport { EventEmitter } from 'events'\nimport { EventDataCollector } from '../formatter/helpers'\nimport {\n emitMetaMessage,\n emitSupportCodeMessages,\n parseGherkinMessageStream,\n} from '../cli/helpers'\nimport { GherkinStreams } from '@cucumber/gherkin-streams'\nimport PickleFilter from '../pickle_filter'\nimport { IRunConfiguration } from '../configuration'\nimport { IRunEnvironment, IRunResult } from './types'\nimport { resolvePaths } from './paths'\nimport { makeRuntime } from './runtime'\nimport { initializeFormatters } from './formatters'\nimport { getSupportCodeLibrary } from './support'\n\nexport async function runCucumber(\n configuration: IRunConfiguration,\n environment: IRunEnvironment = {\n cwd: process.cwd(),\n stdout: process.stdout,\n env: process.env,\n }\n): Promise<IRunResult> {\n const { cwd, stdout, env } = environment\n const newId = IdGenerator.uuid()\n\n const { unexpandedFeaturePaths, featurePaths, supportCodePaths } =\n await resolvePaths(cwd, configuration)\n\n const supportCodeLibrary = await getSupportCodeLibrary({\n cwd,\n newId,\n supportCodePaths,\n supportCodeRequiredModules: configuration.support.transpileWith,\n })\n\n const eventBroadcaster = new EventEmitter()\n const eventDataCollector = new EventDataCollector(eventBroadcaster)\n\n const cleanup = await initializeFormatters({\n cwd,\n stdout,\n eventBroadcaster,\n eventDataCollector,\n configuration: configuration.formats,\n supportCodeLibrary,\n })\n await emitMetaMessage(eventBroadcaster, env)\n\n const gherkinMessageStream = GherkinStreams.fromPaths(featurePaths, {\n defaultDialect: configuration.sources.defaultDialect,\n newId,\n relativeTo: cwd,\n })\n let pickleIds: string[] = []\n\n if (featurePaths.length > 0) {\n pickleIds = await parseGherkinMessageStream({\n cwd,\n eventBroadcaster,\n eventDataCollector,\n gherkinMessageStream,\n order: configuration.sources.order ?? 'defined',\n pickleFilter: new PickleFilter({\n cwd,\n featurePaths: unexpandedFeaturePaths,\n names: configuration.sources.names,\n tagExpression: configuration.sources.tagExpression,\n }),\n })\n }\n emitSupportCodeMessages({\n eventBroadcaster,\n supportCodeLibrary,\n newId,\n })\n\n const runtime = makeRuntime({\n cwd,\n eventBroadcaster,\n eventDataCollector,\n pickleIds,\n newId,\n supportCodeLibrary,\n supportCodePaths,\n supportCodeRequiredModules: configuration.support.transpileWith,\n options: configuration.runtime,\n })\n const success = await runtime.start()\n await cleanup()\n\n return {\n success,\n support: supportCodeLibrary,\n }\n}\n"]}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/// <reference types="node" />
|
|
2
|
+
import { IRuntime, IRuntimeOptions } from '../runtime';
|
|
3
|
+
import { EventEmitter } from 'events';
|
|
4
|
+
import { EventDataCollector } from '../formatter/helpers';
|
|
5
|
+
import { IdGenerator } from '@cucumber/messages';
|
|
6
|
+
import { ISupportCodeLibrary } from '../support_code_library_builder/types';
|
|
7
|
+
export declare function makeRuntime({ cwd, eventBroadcaster, eventDataCollector, pickleIds, newId, supportCodeLibrary, supportCodePaths, supportCodeRequiredModules, options: { parallel, ...runtimeOptions }, }: {
|
|
8
|
+
cwd: string;
|
|
9
|
+
eventBroadcaster: EventEmitter;
|
|
10
|
+
eventDataCollector: EventDataCollector;
|
|
11
|
+
newId: IdGenerator.NewId;
|
|
12
|
+
pickleIds: string[];
|
|
13
|
+
supportCodeLibrary: ISupportCodeLibrary;
|
|
14
|
+
supportCodePaths: string[];
|
|
15
|
+
supportCodeRequiredModules: string[];
|
|
16
|
+
options: Partial<IRuntimeOptions> & {
|
|
17
|
+
parallel?: number;
|
|
18
|
+
};
|
|
19
|
+
}): IRuntime;
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
|
|
5
|
+
}) : (function(o, m, k, k2) {
|
|
6
|
+
if (k2 === undefined) k2 = k;
|
|
7
|
+
o[k2] = m[k];
|
|
8
|
+
}));
|
|
9
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
10
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
11
|
+
}) : function(o, v) {
|
|
12
|
+
o["default"] = v;
|
|
13
|
+
});
|
|
14
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
15
|
+
if (mod && mod.__esModule) return mod;
|
|
16
|
+
var result = {};
|
|
17
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
18
|
+
__setModuleDefault(result, mod);
|
|
19
|
+
return result;
|
|
20
|
+
};
|
|
21
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
22
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
23
|
+
};
|
|
24
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
25
|
+
exports.makeRuntime = void 0;
|
|
26
|
+
const runtime_1 = __importStar(require("../runtime"));
|
|
27
|
+
const coordinator_1 = __importDefault(require("../runtime/parallel/coordinator"));
|
|
28
|
+
function makeRuntime({ cwd, eventBroadcaster, eventDataCollector, pickleIds, newId, supportCodeLibrary, supportCodePaths, supportCodeRequiredModules, options: { parallel = 0, ...runtimeOptions } = {}, }) {
|
|
29
|
+
// sprinkle specified runtime options over the defaults
|
|
30
|
+
const options = {
|
|
31
|
+
...runtime_1.DEFAULT_RUNTIME_OPTIONS,
|
|
32
|
+
...runtimeOptions,
|
|
33
|
+
};
|
|
34
|
+
if (parallel > 0) {
|
|
35
|
+
return new coordinator_1.default({
|
|
36
|
+
cwd,
|
|
37
|
+
eventBroadcaster,
|
|
38
|
+
eventDataCollector,
|
|
39
|
+
pickleIds,
|
|
40
|
+
options,
|
|
41
|
+
newId,
|
|
42
|
+
supportCodeLibrary,
|
|
43
|
+
supportCodePaths,
|
|
44
|
+
supportCodeRequiredModules,
|
|
45
|
+
numberOfWorkers: parallel,
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
return new runtime_1.default({
|
|
49
|
+
eventBroadcaster,
|
|
50
|
+
eventDataCollector,
|
|
51
|
+
newId,
|
|
52
|
+
pickleIds,
|
|
53
|
+
supportCodeLibrary,
|
|
54
|
+
options,
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
exports.makeRuntime = makeRuntime;
|
|
58
|
+
//# sourceMappingURL=runtime.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runtime.js","sourceRoot":"","sources":["../../src/run/runtime.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAAA,sDAImB;AAKnB,kFAAyD;AAEzD,SAAgB,WAAW,CAAC,EAC1B,GAAG,EACH,gBAAgB,EAChB,kBAAkB,EAClB,SAAS,EACT,KAAK,EACL,kBAAkB,EAClB,gBAAgB,EAChB,0BAA0B,EAC1B,OAAO,EAAE,EAAE,QAAQ,GAAG,CAAC,EAAE,GAAG,cAAc,EAAE,GAAG,EAAE,GAWlD;IACC,uDAAuD;IACvD,MAAM,OAAO,GAAG;QACd,GAAG,iCAAuB;QAC1B,GAAG,cAAc;KAClB,CAAA;IACD,IAAI,QAAQ,GAAG,CAAC,EAAE;QAChB,OAAO,IAAI,qBAAW,CAAC;YACrB,GAAG;YACH,gBAAgB;YAChB,kBAAkB;YAClB,SAAS;YACT,OAAO;YACP,KAAK;YACL,kBAAkB;YAClB,gBAAgB;YAChB,0BAA0B;YAC1B,eAAe,EAAE,QAAQ;SAC1B,CAAC,CAAA;KACH;IACD,OAAO,IAAI,iBAAO,CAAC;QACjB,gBAAgB;QAChB,kBAAkB;QAClB,KAAK;QACL,SAAS;QACT,kBAAkB;QAClB,OAAO;KACR,CAAC,CAAA;AACJ,CAAC;AAhDD,kCAgDC","sourcesContent":["import Runtime, {\n DEFAULT_RUNTIME_OPTIONS,\n IRuntime,\n IRuntimeOptions,\n} from '../runtime'\nimport { EventEmitter } from 'events'\nimport { EventDataCollector } from '../formatter/helpers'\nimport { IdGenerator } from '@cucumber/messages'\nimport { ISupportCodeLibrary } from '../support_code_library_builder/types'\nimport Coordinator from '../runtime/parallel/coordinator'\n\nexport function makeRuntime({\n cwd,\n eventBroadcaster,\n eventDataCollector,\n pickleIds,\n newId,\n supportCodeLibrary,\n supportCodePaths,\n supportCodeRequiredModules,\n options: { parallel = 0, ...runtimeOptions } = {},\n}: {\n cwd: string\n eventBroadcaster: EventEmitter\n eventDataCollector: EventDataCollector\n newId: IdGenerator.NewId\n pickleIds: string[]\n supportCodeLibrary: ISupportCodeLibrary\n supportCodePaths: string[]\n supportCodeRequiredModules: string[]\n options: Partial<IRuntimeOptions> & { parallel?: number }\n}): IRuntime {\n // sprinkle specified runtime options over the defaults\n const options = {\n ...DEFAULT_RUNTIME_OPTIONS,\n ...runtimeOptions,\n }\n if (parallel > 0) {\n return new Coordinator({\n cwd,\n eventBroadcaster,\n eventDataCollector,\n pickleIds,\n options,\n newId,\n supportCodeLibrary,\n supportCodePaths,\n supportCodeRequiredModules,\n numberOfWorkers: parallel,\n })\n }\n return new Runtime({\n eventBroadcaster,\n eventDataCollector,\n newId,\n pickleIds,\n supportCodeLibrary,\n options,\n })\n}\n"]}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { IdGenerator } from '@cucumber/messages';
|
|
2
|
+
import { ISupportCodeLibrary } from '../support_code_library_builder/types';
|
|
3
|
+
export declare function getSupportCodeLibrary({ cwd, newId, supportCodeRequiredModules, supportCodePaths, }: {
|
|
4
|
+
cwd: string;
|
|
5
|
+
newId: IdGenerator.NewId;
|
|
6
|
+
supportCodeRequiredModules: string[];
|
|
7
|
+
supportCodePaths: string[];
|
|
8
|
+
}): Promise<ISupportCodeLibrary>;
|
|
@@ -0,0 +1,26 @@
|
|
|
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.getSupportCodeLibrary = void 0;
|
|
7
|
+
const support_code_library_builder_1 = __importDefault(require("../support_code_library_builder"));
|
|
8
|
+
const url_1 = require("url");
|
|
9
|
+
const helpers_1 = require("../cli/helpers");
|
|
10
|
+
// eslint-disable-next-line @typescript-eslint/no-var-requires
|
|
11
|
+
const { importer } = require('../importer');
|
|
12
|
+
async function getSupportCodeLibrary({ cwd, newId, supportCodeRequiredModules, supportCodePaths, }) {
|
|
13
|
+
support_code_library_builder_1.default.reset(cwd, newId);
|
|
14
|
+
supportCodeRequiredModules.map((module) => require(module));
|
|
15
|
+
for (const codePath of supportCodePaths) {
|
|
16
|
+
if (supportCodeRequiredModules.length || !(0, helpers_1.isJavaScript)(codePath)) {
|
|
17
|
+
require(codePath);
|
|
18
|
+
}
|
|
19
|
+
else {
|
|
20
|
+
await importer((0, url_1.pathToFileURL)(codePath));
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
return support_code_library_builder_1.default.finalize();
|
|
24
|
+
}
|
|
25
|
+
exports.getSupportCodeLibrary = getSupportCodeLibrary;
|
|
26
|
+
//# sourceMappingURL=support.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"support.js","sourceRoot":"","sources":["../../src/run/support.ts"],"names":[],"mappings":";;;;;;AAEA,mGAAuE;AACvE,6BAAmC;AACnC,4CAA6C;AAE7C,8DAA8D;AAC9D,MAAM,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC,aAAa,CAAC,CAAA;AAEpC,KAAK,UAAU,qBAAqB,CAAC,EAC1C,GAAG,EACH,KAAK,EACL,0BAA0B,EAC1B,gBAAgB,GAMjB;IACC,sCAAyB,CAAC,KAAK,CAAC,GAAG,EAAE,KAAK,CAAC,CAAA;IAC3C,0BAA0B,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAA;IAC3D,KAAK,MAAM,QAAQ,IAAI,gBAAgB,EAAE;QACvC,IAAI,0BAA0B,CAAC,MAAM,IAAI,CAAC,IAAA,sBAAY,EAAC,QAAQ,CAAC,EAAE;YAChE,OAAO,CAAC,QAAQ,CAAC,CAAA;SAClB;aAAM;YACL,MAAM,QAAQ,CAAC,IAAA,mBAAa,EAAC,QAAQ,CAAC,CAAC,CAAA;SACxC;KACF;IACD,OAAO,sCAAyB,CAAC,QAAQ,EAAE,CAAA;AAC7C,CAAC;AArBD,sDAqBC","sourcesContent":["import { IdGenerator } from '@cucumber/messages'\nimport { ISupportCodeLibrary } from '../support_code_library_builder/types'\nimport supportCodeLibraryBuilder from '../support_code_library_builder'\nimport { pathToFileURL } from 'url'\nimport { isJavaScript } from '../cli/helpers'\n\n// eslint-disable-next-line @typescript-eslint/no-var-requires\nconst { importer } = require('../importer')\n\nexport async function getSupportCodeLibrary({\n cwd,\n newId,\n supportCodeRequiredModules,\n supportCodePaths,\n}: {\n cwd: string\n newId: IdGenerator.NewId\n supportCodeRequiredModules: string[]\n supportCodePaths: string[]\n}): Promise<ISupportCodeLibrary> {\n supportCodeLibraryBuilder.reset(cwd, newId)\n supportCodeRequiredModules.map((module) => require(module))\n for (const codePath of supportCodePaths) {\n if (supportCodeRequiredModules.length || !isJavaScript(codePath)) {\n require(codePath)\n } else {\n await importer(pathToFileURL(codePath))\n }\n }\n return supportCodeLibraryBuilder.finalize()\n}\n"]}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/// <reference types="node" />
|
|
2
|
+
import { ISupportCodeLibrary } from '../support_code_library_builder/types';
|
|
3
|
+
import { IFormatterStream } from '../formatter';
|
|
4
|
+
export interface IRunEnvironment {
|
|
5
|
+
cwd: string;
|
|
6
|
+
stdout: IFormatterStream;
|
|
7
|
+
env: NodeJS.ProcessEnv;
|
|
8
|
+
}
|
|
9
|
+
export interface IRunResult {
|
|
10
|
+
success: boolean;
|
|
11
|
+
support: ISupportCodeLibrary;
|
|
12
|
+
}
|
package/lib/run/types.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/run/types.ts"],"names":[],"mappings":"","sourcesContent":["import { ISupportCodeLibrary } from '../support_code_library_builder/types'\nimport { IFormatterStream } from '../formatter'\n\nexport interface IRunEnvironment {\n cwd: string\n stdout: IFormatterStream\n env: NodeJS.ProcessEnv\n}\n\nexport interface IRunResult {\n success: boolean\n support: ISupportCodeLibrary\n}\n"]}
|
|
@@ -2,7 +2,6 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.assembleTestCases = void 0;
|
|
4
4
|
const value_checker_1 = require("../value_checker");
|
|
5
|
-
const lodash_1 = require("lodash");
|
|
6
5
|
async function assembleTestCases({ eventBroadcaster, newId, pickles, supportCodeLibrary, }) {
|
|
7
6
|
const result = {};
|
|
8
7
|
for (const pickle of pickles) {
|
|
@@ -39,7 +38,8 @@ async function assembleTestCases({ eventBroadcaster, newId, pickles, supportCode
|
|
|
39
38
|
}
|
|
40
39
|
exports.assembleTestCases = assembleTestCases;
|
|
41
40
|
function makeAfterHookSteps({ supportCodeLibrary, pickle, newId, }) {
|
|
42
|
-
return
|
|
41
|
+
return supportCodeLibrary.afterTestCaseHookDefinitions
|
|
42
|
+
.slice(0)
|
|
43
43
|
.reverse()
|
|
44
44
|
.filter((hookDefinition) => hookDefinition.appliesToTestCase(pickle))
|
|
45
45
|
.map((hookDefinition) => ({
|
|
@@ -80,7 +80,7 @@ function mapArgumentGroup(group) {
|
|
|
80
80
|
return {
|
|
81
81
|
start: group.start,
|
|
82
82
|
value: group.value,
|
|
83
|
-
children: value_checker_1.doesHaveValue(group.children)
|
|
83
|
+
children: (0, value_checker_1.doesHaveValue)(group.children)
|
|
84
84
|
? group.children.map((child) => mapArgumentGroup(child))
|
|
85
85
|
: undefined,
|
|
86
86
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"assemble_test_cases.js","sourceRoot":"","sources":["../../src/runtime/assemble_test_cases.ts"],"names":[],"mappings":";;;AAKA,oDAAgD;
|
|
1
|
+
{"version":3,"file":"assemble_test_cases.js","sourceRoot":"","sources":["../../src/runtime/assemble_test_cases.ts"],"names":[],"mappings":"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","sourcesContent":["import { EventEmitter } from 'events'\nimport * as messages from '@cucumber/messages'\nimport { IdGenerator } from '@cucumber/messages'\nimport { ISupportCodeLibrary } from '../support_code_library_builder/types'\nimport { Group } from '@cucumber/cucumber-expressions'\nimport { doesHaveValue } from '../value_checker'\n\nexport declare type IAssembledTestCases = Record<string, messages.TestCase>\n\nexport interface IAssembleTestCasesOptions {\n eventBroadcaster: EventEmitter\n newId: IdGenerator.NewId\n pickles: messages.Pickle[]\n supportCodeLibrary: ISupportCodeLibrary\n}\n\nexport async function assembleTestCases({\n eventBroadcaster,\n newId,\n pickles,\n supportCodeLibrary,\n}: IAssembleTestCasesOptions): Promise<IAssembledTestCases> {\n const result: IAssembledTestCases = {}\n for (const pickle of pickles) {\n const { id: pickleId } = pickle\n const testCaseId = newId()\n const fromBeforeHooks: messages.TestStep[] = makeBeforeHookSteps({\n supportCodeLibrary,\n pickle,\n newId,\n })\n const fromStepDefinitions: messages.TestStep[] = makeSteps({\n pickle,\n supportCodeLibrary,\n newId,\n })\n const fromAfterHooks: messages.TestStep[] = makeAfterHookSteps({\n supportCodeLibrary,\n pickle,\n newId,\n })\n const testCase: messages.TestCase = {\n pickleId,\n id: testCaseId,\n testSteps: [\n ...fromBeforeHooks,\n ...fromStepDefinitions,\n ...fromAfterHooks,\n ],\n }\n eventBroadcaster.emit('envelope', { testCase })\n result[pickleId] = testCase\n }\n return result\n}\n\nfunction makeAfterHookSteps({\n supportCodeLibrary,\n pickle,\n newId,\n}: {\n supportCodeLibrary: ISupportCodeLibrary\n pickle: messages.Pickle\n newId: IdGenerator.NewId\n}): messages.TestStep[] {\n return supportCodeLibrary.afterTestCaseHookDefinitions\n .slice(0)\n .reverse()\n .filter((hookDefinition) => hookDefinition.appliesToTestCase(pickle))\n .map((hookDefinition) => ({\n id: newId(),\n hookId: hookDefinition.id,\n }))\n}\n\nfunction makeBeforeHookSteps({\n supportCodeLibrary,\n pickle,\n newId,\n}: {\n supportCodeLibrary: ISupportCodeLibrary\n pickle: messages.Pickle\n newId: IdGenerator.NewId\n}): messages.TestStep[] {\n return supportCodeLibrary.beforeTestCaseHookDefinitions\n .filter((hookDefinition) => hookDefinition.appliesToTestCase(pickle))\n .map((hookDefinition) => ({\n id: newId(),\n hookId: hookDefinition.id,\n }))\n}\n\nfunction makeSteps({\n pickle,\n supportCodeLibrary,\n newId,\n}: {\n pickle: messages.Pickle\n supportCodeLibrary: ISupportCodeLibrary\n newId: () => string\n}): messages.TestStep[] {\n return pickle.steps.map((pickleStep) => {\n const stepDefinitions = supportCodeLibrary.stepDefinitions.filter(\n (stepDefinition) => stepDefinition.matchesStepName(pickleStep.text)\n )\n return {\n id: newId(),\n pickleStepId: pickleStep.id,\n stepDefinitionIds: stepDefinitions.map(\n (stepDefinition) => stepDefinition.id\n ),\n stepMatchArgumentsLists: stepDefinitions.map((stepDefinition) => {\n const result = stepDefinition.expression.match(pickleStep.text)\n return {\n stepMatchArguments: result.map((arg) => {\n return {\n group: mapArgumentGroup(arg.group),\n parameterTypeName: arg.parameterType.name,\n }\n }),\n }\n }),\n }\n })\n}\n\nfunction mapArgumentGroup(group: Group): messages.Group {\n return {\n start: group.start,\n value: group.value,\n children: doesHaveValue(group.children)\n ? group.children.map((child) => mapArgumentGroup(child))\n : undefined,\n }\n}\n"]}
|
|
@@ -34,19 +34,19 @@ class AttachmentManager {
|
|
|
34
34
|
}
|
|
35
35
|
create(data, mediaType, callback) {
|
|
36
36
|
if (Buffer.isBuffer(data)) {
|
|
37
|
-
if (value_checker_1.doesNotHaveValue(mediaType)) {
|
|
37
|
+
if ((0, value_checker_1.doesNotHaveValue)(mediaType)) {
|
|
38
38
|
throw Error('Buffer attachments must specify a media type');
|
|
39
39
|
}
|
|
40
40
|
this.createBufferAttachment(data, mediaType);
|
|
41
41
|
}
|
|
42
42
|
else if (is_stream_1.default.readable(data)) {
|
|
43
|
-
if (value_checker_1.doesNotHaveValue(mediaType)) {
|
|
43
|
+
if ((0, value_checker_1.doesNotHaveValue)(mediaType)) {
|
|
44
44
|
throw Error('Stream attachments must specify a media type');
|
|
45
45
|
}
|
|
46
46
|
return this.createStreamAttachment(data, mediaType, callback);
|
|
47
47
|
}
|
|
48
48
|
else if (typeof data === 'string') {
|
|
49
|
-
if (value_checker_1.doesNotHaveValue(mediaType)) {
|
|
49
|
+
if ((0, value_checker_1.doesNotHaveValue)(mediaType)) {
|
|
50
50
|
mediaType = 'text/plain';
|
|
51
51
|
}
|
|
52
52
|
if (mediaType.startsWith('base64:')) {
|
|
@@ -84,7 +84,7 @@ class AttachmentManager {
|
|
|
84
84
|
});
|
|
85
85
|
data.on('error', reject);
|
|
86
86
|
});
|
|
87
|
-
if (value_checker_1.doesHaveValue(callback)) {
|
|
87
|
+
if ((0, value_checker_1.doesHaveValue)(callback)) {
|
|
88
88
|
promise.then(callback, callback);
|
|
89
89
|
}
|
|
90
90
|
else {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/runtime/attachment_manager/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;AAAA,0DAAgC;AAEhC,6DAA8C;AAC9C,uDAAqE;AAoBrE,MAAqB,iBAAiB;IAGpC,YAAY,YAA6B;QACvC,IAAI,CAAC,YAAY,GAAG,YAAY,CAAA;IAClC,CAAC;IAED,GAAG,CAAC,IAAY;QACd,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,2BAA2B,CAAC,CAAA;IACvD,CAAC;IAED,MAAM,CACJ,IAAgC,EAChC,SAAkB,EAClB,QAAqB;QAErB,IAAI,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE;YACzB,IAAI,gCAAgB,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/runtime/attachment_manager/index.ts"],"names":[],"mappings":"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","sourcesContent":["import isStream from 'is-stream'\nimport { Readable } from 'stream'\nimport * as messages from '@cucumber/messages'\nimport { doesHaveValue, doesNotHaveValue } from '../../value_checker'\n\nexport interface IAttachmentMedia {\n encoding: messages.AttachmentContentEncoding\n contentType: string\n}\n\nexport interface IAttachment {\n data: string\n media: IAttachmentMedia\n}\n\nexport type IAttachFunction = (attachment: IAttachment) => void\nexport type ICreateAttachment = (\n data: Buffer | Readable | string,\n mediaType?: string,\n callback?: () => void\n) => void | Promise<void>\nexport type ICreateLog = (text: string) => void | Promise<void>\n\nexport default class AttachmentManager {\n private readonly onAttachment: IAttachFunction\n\n constructor(onAttachment: IAttachFunction) {\n this.onAttachment = onAttachment\n }\n\n log(text: string): void | Promise<void> {\n return this.create(text, 'text/x.cucumber.log+plain')\n }\n\n create(\n data: Buffer | Readable | string,\n mediaType?: string,\n callback?: () => void\n ): void | Promise<void> {\n if (Buffer.isBuffer(data)) {\n if (doesNotHaveValue(mediaType)) {\n throw Error('Buffer attachments must specify a media type')\n }\n this.createBufferAttachment(data, mediaType)\n } else if (isStream.readable(data)) {\n if (doesNotHaveValue(mediaType)) {\n throw Error('Stream attachments must specify a media type')\n }\n return this.createStreamAttachment(data, mediaType, callback)\n } else if (typeof data === 'string') {\n if (doesNotHaveValue(mediaType)) {\n mediaType = 'text/plain'\n }\n if (mediaType.startsWith('base64:')) {\n this.createStringAttachment(data, {\n encoding: messages.AttachmentContentEncoding.BASE64,\n contentType: mediaType.replace('base64:', ''),\n })\n } else {\n this.createStringAttachment(data, {\n encoding: messages.AttachmentContentEncoding.IDENTITY,\n contentType: mediaType,\n })\n }\n } else {\n throw Error(\n 'Invalid attachment data: must be a buffer, readable stream, or string'\n )\n }\n }\n\n createBufferAttachment(data: Buffer, mediaType: string): void {\n this.createStringAttachment(data.toString('base64'), {\n encoding: messages.AttachmentContentEncoding.BASE64,\n contentType: mediaType,\n })\n }\n\n createStreamAttachment(\n data: Readable,\n mediaType: string,\n callback: () => void\n ): void | Promise<void> {\n const promise = new Promise<void>((resolve, reject) => {\n const buffers: Uint8Array[] = []\n data.on('data', (chunk) => {\n buffers.push(chunk)\n })\n data.on('end', () => {\n this.createBufferAttachment(Buffer.concat(buffers), mediaType)\n resolve()\n })\n data.on('error', reject)\n })\n if (doesHaveValue(callback)) {\n promise.then(callback, callback)\n } else {\n return promise\n }\n }\n\n createStringAttachment(data: string, media: IAttachmentMedia): void {\n this.onAttachment({ data, media })\n }\n}\n"]}
|
package/lib/runtime/helpers.d.ts
CHANGED
|
@@ -3,3 +3,4 @@ import * as messages from '@cucumber/messages';
|
|
|
3
3
|
import { IRuntimeOptions } from '.';
|
|
4
4
|
export declare function getAmbiguousStepException(stepDefinitions: StepDefinition[]): string;
|
|
5
5
|
export declare function retriesForPickle(pickle: messages.Pickle, options: IRuntimeOptions): number;
|
|
6
|
+
export declare function shouldCauseFailure(status: messages.TestStepResultStatus, options: IRuntimeOptions): boolean;
|