@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
|
@@ -3,39 +3,46 @@ 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
|
-
const lodash_1 = __importDefault(require("lodash"));
|
|
7
6
|
const fs_1 = __importDefault(require("mz/fs"));
|
|
8
7
|
const path_1 = __importDefault(require("path"));
|
|
9
8
|
const string_argv_1 = __importDefault(require("string-argv"));
|
|
10
9
|
const value_checker_1 = require("../value_checker");
|
|
10
|
+
const DEFAULT_FILENAMES = ['cucumber.cjs', 'cucumber.js'];
|
|
11
11
|
class ProfileLoader {
|
|
12
12
|
constructor(directory) {
|
|
13
13
|
this.directory = directory;
|
|
14
14
|
}
|
|
15
|
-
async getDefinitions() {
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
if (!exists) {
|
|
19
|
-
return {};
|
|
15
|
+
async getDefinitions(configFile) {
|
|
16
|
+
if (configFile) {
|
|
17
|
+
return this.loadFile(configFile);
|
|
20
18
|
}
|
|
21
|
-
const
|
|
19
|
+
const defaultFile = DEFAULT_FILENAMES.find((filename) => fs_1.default.existsSync(path_1.default.join(this.directory, filename)));
|
|
20
|
+
if (defaultFile) {
|
|
21
|
+
return this.loadFile(defaultFile);
|
|
22
|
+
}
|
|
23
|
+
return {};
|
|
24
|
+
}
|
|
25
|
+
loadFile(configFile) {
|
|
26
|
+
const definitionsFilePath = path_1.default.join(this.directory, configFile);
|
|
27
|
+
// eslint-disable-next-line @typescript-eslint/no-var-requires
|
|
28
|
+
const definitions = require(definitionsFilePath);
|
|
22
29
|
if (typeof definitions !== 'object') {
|
|
23
30
|
throw new Error(`${definitionsFilePath} does not export an object`);
|
|
24
31
|
}
|
|
25
32
|
return definitions;
|
|
26
33
|
}
|
|
27
|
-
async getArgv(profiles) {
|
|
28
|
-
const definitions = await this.getDefinitions();
|
|
29
|
-
if (profiles.length === 0 && value_checker_1.doesHaveValue(definitions.default)) {
|
|
34
|
+
async getArgv(profiles, configFile) {
|
|
35
|
+
const definitions = await this.getDefinitions(configFile);
|
|
36
|
+
if (profiles.length === 0 && (0, value_checker_1.doesHaveValue)(definitions.default)) {
|
|
30
37
|
profiles = ['default'];
|
|
31
38
|
}
|
|
32
39
|
const argvs = profiles.map((profile) => {
|
|
33
|
-
if (value_checker_1.doesNotHaveValue(definitions[profile])) {
|
|
40
|
+
if ((0, value_checker_1.doesNotHaveValue)(definitions[profile])) {
|
|
34
41
|
throw new Error(`Undefined profile: ${profile}`);
|
|
35
42
|
}
|
|
36
|
-
return string_argv_1.default(definitions[profile]);
|
|
43
|
+
return (0, string_argv_1.default)(definitions[profile]);
|
|
37
44
|
});
|
|
38
|
-
return
|
|
45
|
+
return argvs.flat();
|
|
39
46
|
}
|
|
40
47
|
}
|
|
41
48
|
exports.default = ProfileLoader;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"profile_loader.js","sourceRoot":"","sources":["../../src/cli/profile_loader.ts"],"names":[],"mappings":";;;;;AAAA
|
|
1
|
+
{"version":3,"file":"profile_loader.js","sourceRoot":"","sources":["../../src/cli/profile_loader.ts"],"names":[],"mappings":";;;;;AAAA,+CAAsB;AACtB,gDAAuB;AACvB,8DAAoC;AACpC,oDAAkE;AAElE,MAAM,iBAAiB,GAAG,CAAC,cAAc,EAAE,aAAa,CAAC,CAAA;AAEzD,MAAqB,aAAa;IAChC,YAA6B,SAAiB;QAAjB,cAAS,GAAT,SAAS,CAAQ;IAAG,CAAC;IAElD,KAAK,CAAC,cAAc,CAAC,UAAmB;QACtC,IAAI,UAAU,EAAE;YACd,OAAO,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAA;SACjC;QAED,MAAM,WAAW,GAAG,iBAAiB,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,EAAE,CACtD,YAAE,CAAC,UAAU,CAAC,cAAI,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC,CACnD,CAAA;QAED,IAAI,WAAW,EAAE;YACf,OAAO,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAA;SAClC;QAED,OAAO,EAAE,CAAA;IACX,CAAC;IAED,QAAQ,CAAC,UAAkB;QACzB,MAAM,mBAAmB,GAAW,cAAI,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,UAAU,CAAC,CAAA;QACzE,8DAA8D;QAC9D,MAAM,WAAW,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAAA;QAChD,IAAI,OAAO,WAAW,KAAK,QAAQ,EAAE;YACnC,MAAM,IAAI,KAAK,CAAC,GAAG,mBAAmB,4BAA4B,CAAC,CAAA;SACpE;QACD,OAAO,WAAW,CAAA;IACpB,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,QAAkB,EAAE,UAAmB;QACnD,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,CAAA;QACzD,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,IAAI,IAAA,6BAAa,EAAC,WAAW,CAAC,OAAO,CAAC,EAAE;YAC/D,QAAQ,GAAG,CAAC,SAAS,CAAC,CAAA;SACvB;QACD,MAAM,KAAK,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE;YACrC,IAAI,IAAA,gCAAgB,EAAC,WAAW,CAAC,OAAO,CAAC,CAAC,EAAE;gBAC1C,MAAM,IAAI,KAAK,CAAC,sBAAsB,OAAO,EAAE,CAAC,CAAA;aACjD;YACD,OAAO,IAAA,qBAAU,EAAC,WAAW,CAAC,OAAO,CAAC,CAAC,CAAA;QACzC,CAAC,CAAC,CAAA;QACF,OAAO,KAAK,CAAC,IAAI,EAAE,CAAA;IACrB,CAAC;CACF;AA1CD,gCA0CC","sourcesContent":["import fs from 'mz/fs'\nimport path from 'path'\nimport stringArgv from 'string-argv'\nimport { doesHaveValue, doesNotHaveValue } from '../value_checker'\n\nconst DEFAULT_FILENAMES = ['cucumber.cjs', 'cucumber.js']\n\nexport default class ProfileLoader {\n constructor(private readonly directory: string) {}\n\n async getDefinitions(configFile?: string): Promise<Record<string, string>> {\n if (configFile) {\n return this.loadFile(configFile)\n }\n\n const defaultFile = DEFAULT_FILENAMES.find((filename) =>\n fs.existsSync(path.join(this.directory, filename))\n )\n\n if (defaultFile) {\n return this.loadFile(defaultFile)\n }\n\n return {}\n }\n\n loadFile(configFile: string): Record<string, string> {\n const definitionsFilePath: string = path.join(this.directory, configFile)\n // eslint-disable-next-line @typescript-eslint/no-var-requires\n const definitions = require(definitionsFilePath)\n if (typeof definitions !== 'object') {\n throw new Error(`${definitionsFilePath} does not export an object`)\n }\n return definitions\n }\n\n async getArgv(profiles: string[], configFile?: string): Promise<string[]> {\n const definitions = await this.getDefinitions(configFile)\n if (profiles.length === 0 && doesHaveValue(definitions.default)) {\n profiles = ['default']\n }\n const argvs = profiles.map((profile) => {\n if (doesNotHaveValue(definitions[profile])) {\n throw new Error(`Undefined profile: ${profile}`)\n }\n return stringArgv(definitions[profile])\n })\n return argvs.flat()\n }\n}\n"]}
|
|
@@ -8,7 +8,7 @@ const cli_table3_1 = __importDefault(require("cli-table3"));
|
|
|
8
8
|
const underlineBoldCyan = (x) => safe_1.default.underline(safe_1.default.bold(safe_1.default.cyan(x)));
|
|
9
9
|
const formattedReportUrl = underlineBoldCyan('https://reports.cucumber.io');
|
|
10
10
|
const formattedEnv = safe_1.default.cyan('CUCUMBER_PUBLISH_ENABLED') + '=' + safe_1.default.cyan('true');
|
|
11
|
-
const formattedMoreInfoUrl = underlineBoldCyan('https://
|
|
11
|
+
const formattedMoreInfoUrl = underlineBoldCyan('https://cucumber.io/docs/cucumber/environment-variables/');
|
|
12
12
|
const text = `\
|
|
13
13
|
Share your Cucumber Report with your team at ${formattedReportUrl}
|
|
14
14
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"publish_banner.js","sourceRoot":"","sources":["../../src/cli/publish_banner.ts"],"names":[],"mappings":";;;;;AAAA,uDAAgC;AAChC,4DAA8B;AAE9B,MAAM,iBAAiB,GAAG,CAAC,CAAS,EAAU,EAAE,CAC9C,cAAM,CAAC,SAAS,CAAC,cAAM,CAAC,IAAI,CAAC,cAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;AAE/C,MAAM,kBAAkB,GAAG,iBAAiB,CAAC,6BAA6B,CAAC,CAAA;AAC3E,MAAM,YAAY,GAChB,cAAM,CAAC,IAAI,CAAC,0BAA0B,CAAC,GAAG,GAAG,GAAG,cAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;AACrE,MAAM,oBAAoB,GAAG,iBAAiB,CAC5C,
|
|
1
|
+
{"version":3,"file":"publish_banner.js","sourceRoot":"","sources":["../../src/cli/publish_banner.ts"],"names":[],"mappings":";;;;;AAAA,uDAAgC;AAChC,4DAA8B;AAE9B,MAAM,iBAAiB,GAAG,CAAC,CAAS,EAAU,EAAE,CAC9C,cAAM,CAAC,SAAS,CAAC,cAAM,CAAC,IAAI,CAAC,cAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;AAE/C,MAAM,kBAAkB,GAAG,iBAAiB,CAAC,6BAA6B,CAAC,CAAA;AAC3E,MAAM,YAAY,GAChB,cAAM,CAAC,IAAI,CAAC,0BAA0B,CAAC,GAAG,GAAG,GAAG,cAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;AACrE,MAAM,oBAAoB,GAAG,iBAAiB,CAC5C,0DAA0D,CAC3D,CAAA;AAED,MAAM,IAAI,GAAG;+CACkC,kBAAkB;;0BAEvC,cAAM,CAAC,IAAI,CAAC,WAAW,CAAC;0BACxB,YAAY;;sBAEhB,oBAAoB;;4CAEE,cAAM,CAAC,IAAI,CAAC,eAAe,CAAC;EACtE,cAAM,CAAC,IAAI,CAAC,iDAAiD,CAAC,EAAE,CAAA;AAElE,MAAM,KAAK,GAAG,IAAI,oBAAK,CAAC;IACtB,KAAK,EAAE;QACL,IAAI,EAAE,EAAE;QACR,MAAM,EAAE,CAAC,OAAO,CAAC;KAClB;CACF,CAAC,CAAA;AAEF,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAA;AAElB,kBAAe,KAAK,CAAC,QAAQ,EAAE,CAAA","sourcesContent":["import colors from 'colors/safe'\nimport Table from 'cli-table3'\n\nconst underlineBoldCyan = (x: string): string =>\n colors.underline(colors.bold(colors.cyan(x)))\n\nconst formattedReportUrl = underlineBoldCyan('https://reports.cucumber.io')\nconst formattedEnv =\n colors.cyan('CUCUMBER_PUBLISH_ENABLED') + '=' + colors.cyan('true')\nconst formattedMoreInfoUrl = underlineBoldCyan(\n 'https://cucumber.io/docs/cucumber/environment-variables/'\n)\n\nconst text = `\\\nShare your Cucumber Report with your team at ${formattedReportUrl}\n\nCommand line option: ${colors.cyan('--publish')}\nEnvironment variable: ${formattedEnv}\n\nMore information at ${formattedMoreInfoUrl}\n\nTo disable this message, add this to your ${colors.bold('./cucumber.js')}: \n${colors.bold(\"module.exports = { default: '--publish-quiet' }\")}`\n\nconst table = new Table({\n style: {\n head: [],\n border: ['green'],\n },\n})\n\ntable.push([text])\n\nexport default table.toString()\n"]}
|
package/lib/cli/run.js
CHANGED
|
@@ -14,11 +14,11 @@ function displayPublishAdvertisementBanner() {
|
|
|
14
14
|
console.error(publish_banner_1.default);
|
|
15
15
|
}
|
|
16
16
|
async function run() {
|
|
17
|
-
const cwd = process.cwd();
|
|
18
17
|
const cli = new _1.default({
|
|
19
18
|
argv: process.argv,
|
|
20
|
-
cwd,
|
|
19
|
+
cwd: process.cwd(),
|
|
21
20
|
stdout: process.stdout,
|
|
21
|
+
env: process.env,
|
|
22
22
|
});
|
|
23
23
|
let result;
|
|
24
24
|
try {
|
|
@@ -27,8 +27,7 @@ async function run() {
|
|
|
27
27
|
catch (error) {
|
|
28
28
|
exitWithError(error);
|
|
29
29
|
}
|
|
30
|
-
|
|
31
|
-
if (!config.publishing && !config.suppressPublishAdvertisement) {
|
|
30
|
+
if (result.shouldAdvertisePublish) {
|
|
32
31
|
displayPublishAdvertisementBanner();
|
|
33
32
|
}
|
|
34
33
|
const exitCode = result.success ? 0 : 1;
|
package/lib/cli/run.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run.js","sourceRoot":"","sources":["../../src/cli/run.ts"],"names":[],"mappings":";;;;;AAAA,0CAAuC;AACvC,oDAA2B;AAC3B,sEAA4C;AAE5C,SAAS,aAAa,CAAC,KAAY;IACjC,OAAO,CAAC,KAAK,CAAC,gBAAM,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAA,CAAC,iCAAiC;IACxE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;AACjB,CAAC;AAED,SAAS,iCAAiC;IACxC,OAAO,CAAC,KAAK,CAAC,wBAAa,CAAC,CAAA;AAC9B,CAAC;AAEc,KAAK,UAAU,GAAG;IAC/B,MAAM,GAAG,GAAG,
|
|
1
|
+
{"version":3,"file":"run.js","sourceRoot":"","sources":["../../src/cli/run.ts"],"names":[],"mappings":";;;;;AAAA,0CAAuC;AACvC,oDAA2B;AAC3B,sEAA4C;AAE5C,SAAS,aAAa,CAAC,KAAY;IACjC,OAAO,CAAC,KAAK,CAAC,gBAAM,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAA,CAAC,iCAAiC;IACxE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;AACjB,CAAC;AAED,SAAS,iCAAiC;IACxC,OAAO,CAAC,KAAK,CAAC,wBAAa,CAAC,CAAA;AAC9B,CAAC;AAEc,KAAK,UAAU,GAAG;IAC/B,MAAM,GAAG,GAAG,IAAI,UAAG,CAAC;QAClB,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE;QAClB,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,GAAG,EAAE,OAAO,CAAC,GAAG;KACjB,CAAC,CAAA;IAEF,IAAI,MAAqB,CAAA;IACzB,IAAI;QACF,MAAM,GAAG,MAAM,GAAG,CAAC,GAAG,EAAE,CAAA;KACzB;IAAC,OAAO,KAAK,EAAE;QACd,aAAa,CAAC,KAAK,CAAC,CAAA;KACrB;IAED,IAAI,MAAM,CAAC,sBAAsB,EAAE;QACjC,iCAAiC,EAAE,CAAA;KACpC;IAED,MAAM,QAAQ,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;IACvC,IAAI,MAAM,CAAC,qBAAqB,EAAE;QAChC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;KACvB;SAAM;QACL,OAAO,CAAC,QAAQ,GAAG,QAAQ,CAAA;KAC5B;AACH,CAAC;AAzBD,sBAyBC","sourcesContent":["import Cli, { ICliRunResult } from './'\nimport VError from 'verror'\nimport publishBanner from './publish_banner'\n\nfunction exitWithError(error: Error): void {\n console.error(VError.fullStack(error)) // eslint-disable-line no-console\n process.exit(1)\n}\n\nfunction displayPublishAdvertisementBanner(): void {\n console.error(publishBanner)\n}\n\nexport default async function run(): Promise<void> {\n const cli = new Cli({\n argv: process.argv,\n cwd: process.cwd(),\n stdout: process.stdout,\n env: process.env,\n })\n\n let result: ICliRunResult\n try {\n result = await cli.run()\n } catch (error) {\n exitWithError(error)\n }\n\n if (result.shouldAdvertisePublish) {\n displayPublishAdvertisementBanner()\n }\n\n const exitCode = result.success ? 0 : 1\n if (result.shouldExitImmediately) {\n process.exit(exitCode)\n } else {\n process.exitCode = exitCode\n }\n}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './types';
|
|
@@ -0,0 +1,14 @@
|
|
|
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("./types"), exports);
|
|
14
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/configuration/index.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,0CAAuB","sourcesContent":["export * from './types'\n"]}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { IRuntimeOptions } from '../runtime';
|
|
2
|
+
import { IParsedArgvFormatOptions } from '../cli/argv_parser';
|
|
3
|
+
import { PickleOrder } from '../cli/helpers';
|
|
4
|
+
export interface IRunConfiguration {
|
|
5
|
+
sources: {
|
|
6
|
+
defaultDialect?: string;
|
|
7
|
+
paths?: string[];
|
|
8
|
+
names?: string[];
|
|
9
|
+
tagExpression?: string;
|
|
10
|
+
order?: PickleOrder;
|
|
11
|
+
};
|
|
12
|
+
support: {
|
|
13
|
+
transpileWith: string[];
|
|
14
|
+
paths: string[];
|
|
15
|
+
};
|
|
16
|
+
runtime?: Partial<IRuntimeOptions> & {
|
|
17
|
+
parallel?: number;
|
|
18
|
+
};
|
|
19
|
+
formats?: IFormatterConfiguration;
|
|
20
|
+
}
|
|
21
|
+
export interface IFormatterConfiguration {
|
|
22
|
+
stdout?: string;
|
|
23
|
+
files?: Record<string, string>;
|
|
24
|
+
publish?: {
|
|
25
|
+
url?: string;
|
|
26
|
+
token?: string;
|
|
27
|
+
} | false;
|
|
28
|
+
options?: IParsedArgvFormatOptions;
|
|
29
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/configuration/types.ts"],"names":[],"mappings":"","sourcesContent":["import { IRuntimeOptions } from '../runtime'\nimport { IParsedArgvFormatOptions } from '../cli/argv_parser'\nimport { PickleOrder } from '../cli/helpers'\n\nexport interface IRunConfiguration {\n sources: {\n defaultDialect?: string\n paths?: string[]\n names?: string[]\n tagExpression?: string\n order?: PickleOrder\n }\n support: {\n transpileWith: string[]\n paths: string[]\n }\n runtime?: Partial<IRuntimeOptions> & { parallel?: number }\n formats?: IFormatterConfiguration\n}\n\nexport interface IFormatterConfiguration {\n stdout?: string\n files?: Record<string, string>\n publish?:\n | {\n url?: string\n token?: string\n }\n | false\n options?: IParsedArgvFormatOptions\n}\n"]}
|
|
@@ -24,9 +24,10 @@ export interface IBuildOptions {
|
|
|
24
24
|
supportCodeLibrary: ISupportCodeLibrary;
|
|
25
25
|
}
|
|
26
26
|
declare const FormatterBuilder: {
|
|
27
|
-
build(type: string, options: IBuildOptions): Formatter
|
|
28
|
-
getConstructorByType(type: string, cwd: string): typeof Formatter
|
|
29
|
-
getStepDefinitionSnippetBuilder({ cwd, snippetInterface, snippetSyntax, supportCodeLibrary, }: IGetStepDefinitionSnippetBuilderOptions): StepDefinitionSnippetBuilder
|
|
30
|
-
|
|
27
|
+
build(type: string, options: IBuildOptions): Promise<Formatter>;
|
|
28
|
+
getConstructorByType(type: string, cwd: string): Promise<typeof Formatter>;
|
|
29
|
+
getStepDefinitionSnippetBuilder({ cwd, snippetInterface, snippetSyntax, supportCodeLibrary, }: IGetStepDefinitionSnippetBuilderOptions): Promise<StepDefinitionSnippetBuilder>;
|
|
30
|
+
loadCustomClass(type: 'formatter' | 'syntax', descriptor: string, cwd: string): Promise<any>;
|
|
31
|
+
resolveConstructor(ImportedCode: any): any;
|
|
31
32
|
};
|
|
32
33
|
export default FormatterBuilder;
|
package/lib/formatter/builder.js
CHANGED
|
@@ -5,84 +5,70 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
const get_color_fns_1 = __importDefault(require("./get_color_fns"));
|
|
7
7
|
const javascript_snippet_syntax_1 = __importDefault(require("./step_definition_snippet_builder/javascript_snippet_syntax"));
|
|
8
|
-
const json_formatter_1 = __importDefault(require("./json_formatter"));
|
|
9
|
-
const message_formatter_1 = __importDefault(require("./message_formatter"));
|
|
10
8
|
const path_1 = __importDefault(require("path"));
|
|
11
|
-
const progress_bar_formatter_1 = __importDefault(require("./progress_bar_formatter"));
|
|
12
|
-
const progress_formatter_1 = __importDefault(require("./progress_formatter"));
|
|
13
|
-
const rerun_formatter_1 = __importDefault(require("./rerun_formatter"));
|
|
14
|
-
const snippets_formatter_1 = __importDefault(require("./snippets_formatter"));
|
|
15
9
|
const step_definition_snippet_builder_1 = __importDefault(require("./step_definition_snippet_builder"));
|
|
16
|
-
const summary_formatter_1 = __importDefault(require("./summary_formatter"));
|
|
17
|
-
const usage_formatter_1 = __importDefault(require("./usage_formatter"));
|
|
18
|
-
const usage_json_formatter_1 = __importDefault(require("./usage_json_formatter"));
|
|
19
10
|
const value_checker_1 = require("../value_checker");
|
|
20
11
|
const snippet_syntax_1 = require("./step_definition_snippet_builder/snippet_syntax");
|
|
21
|
-
const
|
|
22
|
-
const
|
|
12
|
+
const url_1 = require("url");
|
|
13
|
+
const formatters_1 = __importDefault(require("./helpers/formatters"));
|
|
14
|
+
// eslint-disable-next-line @typescript-eslint/no-var-requires
|
|
15
|
+
const { importer } = require('../importer');
|
|
23
16
|
const FormatterBuilder = {
|
|
24
|
-
build(type, options) {
|
|
25
|
-
const FormatterConstructor = FormatterBuilder.getConstructorByType(type, options.cwd);
|
|
26
|
-
const colorFns = get_color_fns_1.default(options.parsedArgvOptions.colorsEnabled);
|
|
27
|
-
const snippetBuilder = FormatterBuilder.getStepDefinitionSnippetBuilder({
|
|
17
|
+
async build(type, options) {
|
|
18
|
+
const FormatterConstructor = await FormatterBuilder.getConstructorByType(type, options.cwd);
|
|
19
|
+
const colorFns = (0, get_color_fns_1.default)(options.parsedArgvOptions.colorsEnabled);
|
|
20
|
+
const snippetBuilder = await FormatterBuilder.getStepDefinitionSnippetBuilder({
|
|
28
21
|
cwd: options.cwd,
|
|
29
22
|
snippetInterface: options.parsedArgvOptions.snippetInterface,
|
|
30
23
|
snippetSyntax: options.parsedArgvOptions.snippetSyntax,
|
|
31
24
|
supportCodeLibrary: options.supportCodeLibrary,
|
|
32
25
|
});
|
|
33
|
-
return new FormatterConstructor(
|
|
34
|
-
|
|
26
|
+
return new FormatterConstructor({
|
|
27
|
+
colorFns,
|
|
28
|
+
snippetBuilder,
|
|
29
|
+
...options,
|
|
30
|
+
});
|
|
35
31
|
},
|
|
36
|
-
getConstructorByType(type, cwd) {
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
return message_formatter_1.default;
|
|
42
|
-
case 'html':
|
|
43
|
-
return html_formatter_1.default;
|
|
44
|
-
case 'progress':
|
|
45
|
-
return progress_formatter_1.default;
|
|
46
|
-
case 'progress-bar':
|
|
47
|
-
return progress_bar_formatter_1.default;
|
|
48
|
-
case 'rerun':
|
|
49
|
-
return rerun_formatter_1.default;
|
|
50
|
-
case 'snippets':
|
|
51
|
-
return snippets_formatter_1.default;
|
|
52
|
-
case 'summary':
|
|
53
|
-
return summary_formatter_1.default;
|
|
54
|
-
case 'usage':
|
|
55
|
-
return usage_formatter_1.default;
|
|
56
|
-
case 'usage-json':
|
|
57
|
-
return usage_json_formatter_1.default;
|
|
58
|
-
default:
|
|
59
|
-
return FormatterBuilder.loadCustomFormatter(type, cwd);
|
|
60
|
-
}
|
|
32
|
+
async getConstructorByType(type, cwd) {
|
|
33
|
+
const formatters = formatters_1.default.getFormatters();
|
|
34
|
+
return formatters[type]
|
|
35
|
+
? formatters[type]
|
|
36
|
+
: await FormatterBuilder.loadCustomClass('formatter', type, cwd);
|
|
61
37
|
},
|
|
62
|
-
getStepDefinitionSnippetBuilder({ cwd, snippetInterface, snippetSyntax, supportCodeLibrary, }) {
|
|
63
|
-
if (value_checker_1.doesNotHaveValue(snippetInterface)) {
|
|
38
|
+
async getStepDefinitionSnippetBuilder({ cwd, snippetInterface, snippetSyntax, supportCodeLibrary, }) {
|
|
39
|
+
if ((0, value_checker_1.doesNotHaveValue)(snippetInterface)) {
|
|
64
40
|
snippetInterface = snippet_syntax_1.SnippetInterface.Synchronous;
|
|
65
41
|
}
|
|
66
42
|
let Syntax = javascript_snippet_syntax_1.default;
|
|
67
|
-
if (value_checker_1.doesHaveValue(snippetSyntax)) {
|
|
68
|
-
|
|
69
|
-
Syntax = require(fullSyntaxPath); // eslint-disable-line @typescript-eslint/no-var-requires
|
|
43
|
+
if ((0, value_checker_1.doesHaveValue)(snippetSyntax)) {
|
|
44
|
+
Syntax = await FormatterBuilder.loadCustomClass('syntax', snippetSyntax, cwd);
|
|
70
45
|
}
|
|
71
46
|
return new step_definition_snippet_builder_1.default({
|
|
72
47
|
snippetSyntax: new Syntax(snippetInterface),
|
|
73
48
|
parameterTypeRegistry: supportCodeLibrary.parameterTypeRegistry,
|
|
74
49
|
});
|
|
75
50
|
},
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
51
|
+
async loadCustomClass(type, descriptor, cwd) {
|
|
52
|
+
let CustomClass = descriptor.startsWith(`.`)
|
|
53
|
+
? await importer((0, url_1.pathToFileURL)(path_1.default.resolve(cwd, descriptor)))
|
|
54
|
+
: await importer(descriptor);
|
|
55
|
+
CustomClass = FormatterBuilder.resolveConstructor(CustomClass);
|
|
56
|
+
if ((0, value_checker_1.doesHaveValue)(CustomClass)) {
|
|
57
|
+
return CustomClass;
|
|
58
|
+
}
|
|
59
|
+
else {
|
|
60
|
+
throw new Error(`Custom ${type} (${descriptor}) does not export a function/class`);
|
|
61
|
+
}
|
|
62
|
+
},
|
|
63
|
+
resolveConstructor(ImportedCode) {
|
|
64
|
+
if (typeof ImportedCode === 'function') {
|
|
65
|
+
return ImportedCode;
|
|
80
66
|
}
|
|
81
|
-
else if (value_checker_1.doesHaveValue(
|
|
82
|
-
typeof
|
|
83
|
-
return
|
|
67
|
+
else if ((0, value_checker_1.doesHaveValue)(ImportedCode) &&
|
|
68
|
+
typeof ImportedCode.default === 'function') {
|
|
69
|
+
return ImportedCode.default;
|
|
84
70
|
}
|
|
85
|
-
|
|
71
|
+
return null;
|
|
86
72
|
},
|
|
87
73
|
};
|
|
88
74
|
exports.default = FormatterBuilder;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"builder.js","sourceRoot":"","sources":["../../src/formatter/builder.ts"],"names":[],"mappings":";;;;;AAAA,oEAAyC;AACzC,4HAAiG;AACjG,
|
|
1
|
+
{"version":3,"file":"builder.js","sourceRoot":"","sources":["../../src/formatter/builder.ts"],"names":[],"mappings":"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","sourcesContent":["import getColorFns from './get_color_fns'\nimport JavascriptSnippetSyntax from './step_definition_snippet_builder/javascript_snippet_syntax'\nimport path from 'path'\nimport StepDefinitionSnippetBuilder from './step_definition_snippet_builder'\nimport { ISupportCodeLibrary } from '../support_code_library_builder/types'\nimport Formatter, { IFormatterCleanupFn, IFormatterLogFn } from '.'\nimport { doesHaveValue, doesNotHaveValue } from '../value_checker'\nimport { EventEmitter } from 'events'\nimport EventDataCollector from './helpers/event_data_collector'\nimport { Writable as WritableStream } from 'stream'\nimport { IParsedArgvFormatOptions } from '../cli/argv_parser'\nimport { SnippetInterface } from './step_definition_snippet_builder/snippet_syntax'\nimport { pathToFileURL } from 'url'\nimport Formatters from './helpers/formatters'\n// eslint-disable-next-line @typescript-eslint/no-var-requires\nconst { importer } = require('../importer')\n\ninterface IGetStepDefinitionSnippetBuilderOptions {\n cwd: string\n snippetInterface?: SnippetInterface\n snippetSyntax?: string\n supportCodeLibrary: ISupportCodeLibrary\n}\n\nexport interface IBuildOptions {\n cwd: string\n eventBroadcaster: EventEmitter\n eventDataCollector: EventDataCollector\n log: IFormatterLogFn\n parsedArgvOptions: IParsedArgvFormatOptions\n stream: WritableStream\n cleanup: IFormatterCleanupFn\n supportCodeLibrary: ISupportCodeLibrary\n}\n\nconst FormatterBuilder = {\n async build(type: string, options: IBuildOptions): Promise<Formatter> {\n const FormatterConstructor = await FormatterBuilder.getConstructorByType(\n type,\n options.cwd\n )\n const colorFns = getColorFns(options.parsedArgvOptions.colorsEnabled)\n const snippetBuilder =\n await FormatterBuilder.getStepDefinitionSnippetBuilder({\n cwd: options.cwd,\n snippetInterface: options.parsedArgvOptions.snippetInterface,\n snippetSyntax: options.parsedArgvOptions.snippetSyntax,\n supportCodeLibrary: options.supportCodeLibrary,\n })\n return new FormatterConstructor({\n colorFns,\n snippetBuilder,\n ...options,\n })\n },\n\n async getConstructorByType(\n type: string,\n cwd: string\n ): Promise<typeof Formatter> {\n const formatters: Record<string, typeof Formatter> =\n Formatters.getFormatters()\n\n return formatters[type]\n ? formatters[type]\n : await FormatterBuilder.loadCustomClass('formatter', type, cwd)\n },\n\n async getStepDefinitionSnippetBuilder({\n cwd,\n snippetInterface,\n snippetSyntax,\n supportCodeLibrary,\n }: IGetStepDefinitionSnippetBuilderOptions) {\n if (doesNotHaveValue(snippetInterface)) {\n snippetInterface = SnippetInterface.Synchronous\n }\n let Syntax = JavascriptSnippetSyntax\n if (doesHaveValue(snippetSyntax)) {\n Syntax = await FormatterBuilder.loadCustomClass(\n 'syntax',\n snippetSyntax,\n cwd\n )\n }\n return new StepDefinitionSnippetBuilder({\n snippetSyntax: new Syntax(snippetInterface),\n parameterTypeRegistry: supportCodeLibrary.parameterTypeRegistry,\n })\n },\n\n async loadCustomClass(\n type: 'formatter' | 'syntax',\n descriptor: string,\n cwd: string\n ) {\n let CustomClass = descriptor.startsWith(`.`)\n ? await importer(pathToFileURL(path.resolve(cwd, descriptor)))\n : await importer(descriptor)\n CustomClass = FormatterBuilder.resolveConstructor(CustomClass)\n if (doesHaveValue(CustomClass)) {\n return CustomClass\n } else {\n throw new Error(\n `Custom ${type} (${descriptor}) does not export a function/class`\n )\n }\n },\n\n resolveConstructor(ImportedCode: any) {\n if (typeof ImportedCode === 'function') {\n return ImportedCode\n } else if (\n doesHaveValue(ImportedCode) &&\n typeof ImportedCode.default === 'function'\n ) {\n return ImportedCode.default\n }\n return null\n },\n}\n\nexport default FormatterBuilder\n"]}
|
|
@@ -4,5 +4,9 @@ export interface IColorFns {
|
|
|
4
4
|
forStatus: (status: TestStepResultStatus) => IColorFn;
|
|
5
5
|
location: IColorFn;
|
|
6
6
|
tag: IColorFn;
|
|
7
|
+
diffAdded: IColorFn;
|
|
8
|
+
diffRemoved: IColorFn;
|
|
9
|
+
errorMessage: IColorFn;
|
|
10
|
+
errorStack: IColorFn;
|
|
7
11
|
}
|
|
8
12
|
export default function getColorFns(enabled: boolean): IColorFns;
|
|
@@ -3,7 +3,6 @@ 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
|
-
const lodash_1 = __importDefault(require("lodash"));
|
|
7
6
|
const safe_1 = __importDefault(require("colors/safe"));
|
|
8
7
|
safe_1.default.enable();
|
|
9
8
|
function getColorFns(enabled) {
|
|
@@ -22,15 +21,23 @@ function getColorFns(enabled) {
|
|
|
22
21
|
},
|
|
23
22
|
location: safe_1.default.gray.bind(safe_1.default),
|
|
24
23
|
tag: safe_1.default.cyan.bind(safe_1.default),
|
|
24
|
+
diffAdded: safe_1.default.green.bind(safe_1.default),
|
|
25
|
+
diffRemoved: safe_1.default.red.bind(safe_1.default),
|
|
26
|
+
errorMessage: safe_1.default.red.bind(safe_1.default),
|
|
27
|
+
errorStack: safe_1.default.grey.bind(safe_1.default),
|
|
25
28
|
};
|
|
26
29
|
}
|
|
27
30
|
else {
|
|
28
31
|
return {
|
|
29
32
|
forStatus(status) {
|
|
30
|
-
return
|
|
33
|
+
return (x) => x;
|
|
31
34
|
},
|
|
32
|
-
location:
|
|
33
|
-
tag:
|
|
35
|
+
location: (x) => x,
|
|
36
|
+
tag: (x) => x,
|
|
37
|
+
diffAdded: (x) => x,
|
|
38
|
+
diffRemoved: (x) => x,
|
|
39
|
+
errorMessage: (x) => x,
|
|
40
|
+
errorStack: (x) => x,
|
|
34
41
|
};
|
|
35
42
|
}
|
|
36
43
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"get_color_fns.js","sourceRoot":"","sources":["../../src/formatter/get_color_fns.ts"],"names":[],"mappings":";;;;;AAAA,
|
|
1
|
+
{"version":3,"file":"get_color_fns.js","sourceRoot":"","sources":["../../src/formatter/get_color_fns.ts"],"names":[],"mappings":";;;;;AAAA,uDAAgC;AAGhC,cAAM,CAAC,MAAM,EAAE,CAAA;AAcf,SAAwB,WAAW,CAAC,OAAgB;IAClD,IAAI,OAAO,EAAE;QACX,OAAO;YACL,SAAS,CAAC,MAA4B;gBACpC,OAAO;oBACL,SAAS,EAAE,cAAM,CAAC,GAAG,CAAC,IAAI,CAAC,cAAM,CAAC;oBAClC,MAAM,EAAE,cAAM,CAAC,GAAG,CAAC,IAAI,CAAC,cAAM,CAAC;oBAC/B,MAAM,EAAE,cAAM,CAAC,KAAK,CAAC,IAAI,CAAC,cAAM,CAAC;oBACjC,OAAO,EAAE,cAAM,CAAC,MAAM,CAAC,IAAI,CAAC,cAAM,CAAC;oBACnC,OAAO,EAAE,cAAM,CAAC,IAAI,CAAC,IAAI,CAAC,cAAM,CAAC;oBACjC,SAAS,EAAE,cAAM,CAAC,MAAM,CAAC,IAAI,CAAC,cAAM,CAAC;oBACrC,OAAO,EAAE,cAAM,CAAC,MAAM,CAAC,IAAI,CAAC,cAAM,CAAC;iBACpC,CAAC,MAAM,CAAC,CAAA;YACX,CAAC;YACD,QAAQ,EAAE,cAAM,CAAC,IAAI,CAAC,IAAI,CAAC,cAAM,CAAC;YAClC,GAAG,EAAE,cAAM,CAAC,IAAI,CAAC,IAAI,CAAC,cAAM,CAAC;YAC7B,SAAS,EAAE,cAAM,CAAC,KAAK,CAAC,IAAI,CAAC,cAAM,CAAC;YACpC,WAAW,EAAE,cAAM,CAAC,GAAG,CAAC,IAAI,CAAC,cAAM,CAAC;YACpC,YAAY,EAAE,cAAM,CAAC,GAAG,CAAC,IAAI,CAAC,cAAM,CAAC;YACrC,UAAU,EAAE,cAAM,CAAC,IAAI,CAAC,IAAI,CAAC,cAAM,CAAC;SACrC,CAAA;KACF;SAAM;QACL,OAAO;YACL,SAAS,CAAC,MAA4B;gBACpC,OAAO,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAA;YACjB,CAAC;YACD,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YAClB,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACb,SAAS,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACnB,WAAW,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACrB,YAAY,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACtB,UAAU,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;SACrB,CAAA;KACF;AACH,CAAC;AAlCD,8BAkCC","sourcesContent":["import colors from 'colors/safe'\nimport { TestStepResultStatus } from '@cucumber/messages'\n\ncolors.enable()\n\nexport type IColorFn = (text: string) => string\n\nexport interface IColorFns {\n forStatus: (status: TestStepResultStatus) => IColorFn\n location: IColorFn\n tag: IColorFn\n diffAdded: IColorFn\n diffRemoved: IColorFn\n errorMessage: IColorFn\n errorStack: IColorFn\n}\n\nexport default function getColorFns(enabled: boolean): IColorFns {\n if (enabled) {\n return {\n forStatus(status: TestStepResultStatus) {\n return {\n AMBIGUOUS: colors.red.bind(colors),\n FAILED: colors.red.bind(colors),\n PASSED: colors.green.bind(colors),\n PENDING: colors.yellow.bind(colors),\n SKIPPED: colors.cyan.bind(colors),\n UNDEFINED: colors.yellow.bind(colors),\n UNKNOWN: colors.yellow.bind(colors),\n }[status]\n },\n location: colors.gray.bind(colors),\n tag: colors.cyan.bind(colors),\n diffAdded: colors.green.bind(colors),\n diffRemoved: colors.red.bind(colors),\n errorMessage: colors.red.bind(colors),\n errorStack: colors.grey.bind(colors),\n }\n } else {\n return {\n forStatus(status: TestStepResultStatus) {\n return (x) => x\n },\n location: (x) => x,\n tag: (x) => x,\n diffAdded: (x) => x,\n diffRemoved: (x) => x,\n errorMessage: (x) => x,\n errorStack: (x) => x,\n }\n }\n}\n"]}
|
|
@@ -3,6 +3,7 @@ import * as messages from '@cucumber/messages';
|
|
|
3
3
|
import { EventEmitter } from 'events';
|
|
4
4
|
export interface ITestCaseAttempt {
|
|
5
5
|
attempt: number;
|
|
6
|
+
willBeRetried: boolean;
|
|
6
7
|
gherkinDocument: messages.GherkinDocument;
|
|
7
8
|
pickle: messages.Pickle;
|
|
8
9
|
stepAttachments: Record<string, messages.Attachment[]>;
|
|
@@ -25,5 +26,5 @@ export default class EventDataCollector {
|
|
|
25
26
|
private initTestCaseAttempt;
|
|
26
27
|
storeAttachment(attachment: messages.Attachment): void;
|
|
27
28
|
storeTestStepResult({ testCaseStartedId, testStepId, testStepResult, }: messages.TestStepFinished): void;
|
|
28
|
-
storeTestCaseResult({ testCaseStartedId }: messages.TestCaseFinished): void;
|
|
29
|
+
storeTestCaseResult({ testCaseStartedId, willBeRetried, }: messages.TestCaseFinished): void;
|
|
29
30
|
}
|
|
@@ -19,7 +19,6 @@ var __importStar = (this && this.__importStar) || function (mod) {
|
|
|
19
19
|
return result;
|
|
20
20
|
};
|
|
21
21
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
22
|
-
const lodash_1 = __importStar(require("lodash"));
|
|
23
22
|
const messages = __importStar(require("@cucumber/messages"));
|
|
24
23
|
const value_checker_1 = require("../../value_checker");
|
|
25
24
|
class EventDataCollector {
|
|
@@ -38,7 +37,7 @@ class EventDataCollector {
|
|
|
38
37
|
return this.pickleMap[pickleId];
|
|
39
38
|
}
|
|
40
39
|
getTestCaseAttempts() {
|
|
41
|
-
return
|
|
40
|
+
return Object.keys(this.testCaseAttemptDataMap).map((testCaseStartedId) => {
|
|
42
41
|
return this.getTestCaseAttempt(testCaseStartedId);
|
|
43
42
|
});
|
|
44
43
|
}
|
|
@@ -51,46 +50,47 @@ class EventDataCollector {
|
|
|
51
50
|
pickle,
|
|
52
51
|
testCase,
|
|
53
52
|
attempt: testCaseAttemptData.attempt,
|
|
53
|
+
willBeRetried: testCaseAttemptData.willBeRetried,
|
|
54
54
|
stepAttachments: testCaseAttemptData.stepAttachments,
|
|
55
55
|
stepResults: testCaseAttemptData.stepResults,
|
|
56
56
|
worstTestStepResult: testCaseAttemptData.worstTestStepResult,
|
|
57
57
|
};
|
|
58
58
|
}
|
|
59
59
|
parseEnvelope(envelope) {
|
|
60
|
-
if (value_checker_1.doesHaveValue(envelope.gherkinDocument)) {
|
|
60
|
+
if ((0, value_checker_1.doesHaveValue)(envelope.gherkinDocument)) {
|
|
61
61
|
this.gherkinDocumentMap[envelope.gherkinDocument.uri] =
|
|
62
62
|
envelope.gherkinDocument;
|
|
63
63
|
}
|
|
64
|
-
else if (value_checker_1.doesHaveValue(envelope.pickle)) {
|
|
64
|
+
else if ((0, value_checker_1.doesHaveValue)(envelope.pickle)) {
|
|
65
65
|
this.pickleMap[envelope.pickle.id] = envelope.pickle;
|
|
66
66
|
}
|
|
67
|
-
else if (value_checker_1.doesHaveValue(envelope.undefinedParameterType)) {
|
|
67
|
+
else if ((0, value_checker_1.doesHaveValue)(envelope.undefinedParameterType)) {
|
|
68
68
|
this.undefinedParameterTypes.push(envelope.undefinedParameterType);
|
|
69
69
|
}
|
|
70
|
-
else if (value_checker_1.doesHaveValue(envelope.testCase)) {
|
|
70
|
+
else if ((0, value_checker_1.doesHaveValue)(envelope.testCase)) {
|
|
71
71
|
this.testCaseMap[envelope.testCase.id] = envelope.testCase;
|
|
72
72
|
}
|
|
73
|
-
else if (value_checker_1.doesHaveValue(envelope.testCaseStarted)) {
|
|
73
|
+
else if ((0, value_checker_1.doesHaveValue)(envelope.testCaseStarted)) {
|
|
74
74
|
this.initTestCaseAttempt(envelope.testCaseStarted);
|
|
75
75
|
}
|
|
76
|
-
else if (value_checker_1.doesHaveValue(envelope.attachment)) {
|
|
76
|
+
else if ((0, value_checker_1.doesHaveValue)(envelope.attachment)) {
|
|
77
77
|
this.storeAttachment(envelope.attachment);
|
|
78
78
|
}
|
|
79
|
-
else if (value_checker_1.doesHaveValue(envelope.testStepFinished)) {
|
|
79
|
+
else if ((0, value_checker_1.doesHaveValue)(envelope.testStepFinished)) {
|
|
80
80
|
this.storeTestStepResult(envelope.testStepFinished);
|
|
81
81
|
}
|
|
82
|
-
else if (value_checker_1.doesHaveValue(envelope.testCaseFinished)) {
|
|
82
|
+
else if ((0, value_checker_1.doesHaveValue)(envelope.testCaseFinished)) {
|
|
83
83
|
this.storeTestCaseResult(envelope.testCaseFinished);
|
|
84
84
|
}
|
|
85
85
|
}
|
|
86
86
|
initTestCaseAttempt(testCaseStarted) {
|
|
87
87
|
this.testCaseAttemptDataMap[testCaseStarted.id] = {
|
|
88
88
|
attempt: testCaseStarted.attempt,
|
|
89
|
+
willBeRetried: false,
|
|
89
90
|
testCaseId: testCaseStarted.testCaseId,
|
|
90
91
|
stepAttachments: {},
|
|
91
92
|
stepResults: {},
|
|
92
93
|
worstTestStepResult: {
|
|
93
|
-
willBeRetried: false,
|
|
94
94
|
duration: { seconds: 0, nanos: 0 },
|
|
95
95
|
status: messages.TestStepResultStatus.UNKNOWN,
|
|
96
96
|
},
|
|
@@ -99,9 +99,9 @@ class EventDataCollector {
|
|
|
99
99
|
storeAttachment(attachment) {
|
|
100
100
|
const { testCaseStartedId, testStepId } = attachment;
|
|
101
101
|
// TODO: we shouldn't have to check if these properties have values - they are non-nullable
|
|
102
|
-
if (value_checker_1.doesHaveValue(testCaseStartedId) && value_checker_1.doesHaveValue(testStepId)) {
|
|
102
|
+
if ((0, value_checker_1.doesHaveValue)(testCaseStartedId) && (0, value_checker_1.doesHaveValue)(testStepId)) {
|
|
103
103
|
const { stepAttachments } = this.testCaseAttemptDataMap[testCaseStartedId];
|
|
104
|
-
if (value_checker_1.doesNotHaveValue(stepAttachments[testStepId])) {
|
|
104
|
+
if ((0, value_checker_1.doesNotHaveValue)(stepAttachments[testStepId])) {
|
|
105
105
|
stepAttachments[testStepId] = [];
|
|
106
106
|
}
|
|
107
107
|
stepAttachments[testStepId].push(attachment);
|
|
@@ -111,10 +111,11 @@ class EventDataCollector {
|
|
|
111
111
|
this.testCaseAttemptDataMap[testCaseStartedId].stepResults[testStepId] =
|
|
112
112
|
testStepResult;
|
|
113
113
|
}
|
|
114
|
-
storeTestCaseResult({ testCaseStartedId }) {
|
|
115
|
-
const stepResults =
|
|
114
|
+
storeTestCaseResult({ testCaseStartedId, willBeRetried, }) {
|
|
115
|
+
const stepResults = Object.values(this.testCaseAttemptDataMap[testCaseStartedId].stepResults);
|
|
116
116
|
this.testCaseAttemptDataMap[testCaseStartedId].worstTestStepResult =
|
|
117
117
|
messages.getWorstTestStepResult(stepResults);
|
|
118
|
+
this.testCaseAttemptDataMap[testCaseStartedId].willBeRetried = willBeRetried;
|
|
118
119
|
}
|
|
119
120
|
}
|
|
120
121
|
exports.default = EventDataCollector;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"event_data_collector.js","sourceRoot":"","sources":["../../../src/formatter/helpers/event_data_collector.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;AAAA,
|
|
1
|
+
{"version":3,"file":"event_data_collector.js","sourceRoot":"","sources":["../../../src/formatter/helpers/event_data_collector.ts"],"names":[],"mappings":"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","sourcesContent":["import * as messages from '@cucumber/messages'\nimport { doesHaveValue, doesNotHaveValue } from '../../value_checker'\nimport { EventEmitter } from 'events'\n\ninterface ITestCaseAttemptData {\n attempt: number\n willBeRetried: boolean\n testCaseId: string\n stepAttachments: Record<string, messages.Attachment[]>\n stepResults: Record<string, messages.TestStepResult>\n worstTestStepResult: messages.TestStepResult\n}\n\nexport interface ITestCaseAttempt {\n attempt: number\n willBeRetried: boolean\n gherkinDocument: messages.GherkinDocument\n pickle: messages.Pickle\n stepAttachments: Record<string, messages.Attachment[]>\n stepResults: Record<string, messages.TestStepResult>\n testCase: messages.TestCase\n worstTestStepResult: messages.TestStepResult\n}\n\nexport default class EventDataCollector {\n private gherkinDocumentMap: Record<string, messages.GherkinDocument> = {}\n private pickleMap: Record<string, messages.Pickle> = {}\n private testCaseMap: Record<string, messages.TestCase> = {}\n private testCaseAttemptDataMap: Record<string, ITestCaseAttemptData> = {}\n readonly undefinedParameterTypes: messages.UndefinedParameterType[] = []\n\n constructor(eventBroadcaster: EventEmitter) {\n eventBroadcaster.on('envelope', this.parseEnvelope.bind(this))\n }\n\n getGherkinDocument(uri: string): messages.GherkinDocument {\n return this.gherkinDocumentMap[uri]\n }\n\n getPickle(pickleId: string): messages.Pickle {\n return this.pickleMap[pickleId]\n }\n\n getTestCaseAttempts(): ITestCaseAttempt[] {\n return Object.keys(this.testCaseAttemptDataMap).map((testCaseStartedId) => {\n return this.getTestCaseAttempt(testCaseStartedId)\n })\n }\n\n getTestCaseAttempt(testCaseStartedId: string): ITestCaseAttempt {\n const testCaseAttemptData = this.testCaseAttemptDataMap[testCaseStartedId]\n const testCase = this.testCaseMap[testCaseAttemptData.testCaseId]\n const pickle = this.pickleMap[testCase.pickleId]\n return {\n gherkinDocument: this.gherkinDocumentMap[pickle.uri],\n pickle,\n testCase,\n attempt: testCaseAttemptData.attempt,\n willBeRetried: testCaseAttemptData.willBeRetried,\n stepAttachments: testCaseAttemptData.stepAttachments,\n stepResults: testCaseAttemptData.stepResults,\n worstTestStepResult: testCaseAttemptData.worstTestStepResult,\n }\n }\n\n parseEnvelope(envelope: messages.Envelope): void {\n if (doesHaveValue(envelope.gherkinDocument)) {\n this.gherkinDocumentMap[envelope.gherkinDocument.uri] =\n envelope.gherkinDocument\n } else if (doesHaveValue(envelope.pickle)) {\n this.pickleMap[envelope.pickle.id] = envelope.pickle\n } else if (doesHaveValue(envelope.undefinedParameterType)) {\n this.undefinedParameterTypes.push(envelope.undefinedParameterType)\n } else if (doesHaveValue(envelope.testCase)) {\n this.testCaseMap[envelope.testCase.id] = envelope.testCase\n } else if (doesHaveValue(envelope.testCaseStarted)) {\n this.initTestCaseAttempt(envelope.testCaseStarted)\n } else if (doesHaveValue(envelope.attachment)) {\n this.storeAttachment(envelope.attachment)\n } else if (doesHaveValue(envelope.testStepFinished)) {\n this.storeTestStepResult(envelope.testStepFinished)\n } else if (doesHaveValue(envelope.testCaseFinished)) {\n this.storeTestCaseResult(envelope.testCaseFinished)\n }\n }\n\n private initTestCaseAttempt(testCaseStarted: messages.TestCaseStarted): void {\n this.testCaseAttemptDataMap[testCaseStarted.id] = {\n attempt: testCaseStarted.attempt,\n willBeRetried: false,\n testCaseId: testCaseStarted.testCaseId,\n stepAttachments: {},\n stepResults: {},\n worstTestStepResult: {\n duration: { seconds: 0, nanos: 0 },\n status: messages.TestStepResultStatus.UNKNOWN,\n },\n }\n }\n\n storeAttachment(attachment: messages.Attachment): void {\n const { testCaseStartedId, testStepId } = attachment\n // TODO: we shouldn't have to check if these properties have values - they are non-nullable\n if (doesHaveValue(testCaseStartedId) && doesHaveValue(testStepId)) {\n const { stepAttachments } = this.testCaseAttemptDataMap[testCaseStartedId]\n if (doesNotHaveValue(stepAttachments[testStepId])) {\n stepAttachments[testStepId] = []\n }\n stepAttachments[testStepId].push(attachment)\n }\n }\n\n storeTestStepResult({\n testCaseStartedId,\n testStepId,\n testStepResult,\n }: messages.TestStepFinished): void {\n this.testCaseAttemptDataMap[testCaseStartedId].stepResults[testStepId] =\n testStepResult\n }\n\n storeTestCaseResult({\n testCaseStartedId,\n willBeRetried,\n }: messages.TestCaseFinished): void {\n const stepResults = Object.values(\n this.testCaseAttemptDataMap[testCaseStartedId].stepResults\n )\n this.testCaseAttemptDataMap[testCaseStartedId].worstTestStepResult =\n messages.getWorstTestStepResult(stepResults)\n this.testCaseAttemptDataMap[testCaseStartedId].willBeRetried = willBeRetried\n }\n}\n"]}
|