@dev-blinq/cucumber-js 1.0.11 → 1.0.12-stage

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.
Files changed (257) hide show
  1. package/bin/cucumber-js +0 -0
  2. package/bin/cucumber.js +0 -0
  3. package/bin/download-install.js +126 -0
  4. package/lib/api/console_logger.d.ts +12 -12
  5. package/lib/api/console_logger.js +23 -23
  6. package/lib/api/convert_configuration.d.ts +4 -4
  7. package/lib/api/convert_configuration.js +65 -64
  8. package/lib/api/convert_configuration.js.map +1 -1
  9. package/lib/api/environment.d.ts +2 -2
  10. package/lib/api/environment.js +13 -13
  11. package/lib/api/formatters.d.ts +20 -20
  12. package/lib/api/formatters.js +60 -60
  13. package/lib/api/gherkin.d.ts +21 -21
  14. package/lib/api/gherkin.js +140 -99
  15. package/lib/api/gherkin.js.map +1 -1
  16. package/lib/api/index.d.ts +12 -12
  17. package/lib/api/index.js +27 -27
  18. package/lib/api/load_configuration.d.ts +9 -9
  19. package/lib/api/load_configuration.js +40 -40
  20. package/lib/api/load_sources.d.ts +9 -9
  21. package/lib/api/load_sources.js +52 -52
  22. package/lib/api/load_support.d.ts +10 -10
  23. package/lib/api/load_support.js +29 -29
  24. package/lib/api/paths.d.ts +8 -8
  25. package/lib/api/paths.js +101 -101
  26. package/lib/api/plugins.d.ts +4 -4
  27. package/lib/api/plugins.js +18 -18
  28. package/lib/api/run_cucumber.d.ts +11 -11
  29. package/lib/api/run_cucumber.js +114 -114
  30. package/lib/api/run_cucumber.js.map +1 -1
  31. package/lib/api/runtime.d.ts +21 -21
  32. package/lib/api/runtime.js +35 -35
  33. package/lib/api/support.d.ts +9 -9
  34. package/lib/api/support.js +25 -25
  35. package/lib/api/test_helpers.d.ts +3 -3
  36. package/lib/api/test_helpers.js +30 -30
  37. package/lib/api/types.d.ts +177 -175
  38. package/lib/api/types.js +2 -2
  39. package/lib/api/types.js.map +1 -1
  40. package/lib/cli/helpers.d.ts +39 -37
  41. package/lib/cli/helpers.js +223 -202
  42. package/lib/cli/helpers.js.map +1 -1
  43. package/lib/cli/i18n.d.ts +2 -2
  44. package/lib/cli/i18n.js +69 -69
  45. package/lib/cli/index.d.ts +21 -21
  46. package/lib/cli/index.js +63 -58
  47. package/lib/cli/index.js.map +1 -1
  48. package/lib/cli/install_validator.d.ts +1 -1
  49. package/lib/cli/install_validator.js +13 -13
  50. package/lib/cli/run.d.ts +1 -1
  51. package/lib/cli/run.js +43 -43
  52. package/lib/cli/validate_node_engine_version.d.ts +10 -10
  53. package/lib/cli/validate_node_engine_version.js +23 -23
  54. package/lib/configuration/argv_parser.d.ts +20 -20
  55. package/lib/configuration/argv_parser.js +102 -100
  56. package/lib/configuration/argv_parser.js.map +1 -1
  57. package/lib/configuration/check_schema.d.ts +2 -2
  58. package/lib/configuration/check_schema.js +59 -59
  59. package/lib/configuration/default_configuration.d.ts +2 -2
  60. package/lib/configuration/default_configuration.js +28 -26
  61. package/lib/configuration/default_configuration.js.map +1 -1
  62. package/lib/configuration/from_file.d.ts +3 -3
  63. package/lib/configuration/from_file.js +84 -84
  64. package/lib/configuration/helpers.d.ts +1 -1
  65. package/lib/configuration/helpers.js +10 -10
  66. package/lib/configuration/index.d.ts +7 -7
  67. package/lib/configuration/index.js +28 -28
  68. package/lib/configuration/locate_file.d.ts +1 -1
  69. package/lib/configuration/locate_file.js +20 -20
  70. package/lib/configuration/merge_configurations.d.ts +2 -2
  71. package/lib/configuration/merge_configurations.js +47 -47
  72. package/lib/configuration/option_splitter.d.ts +3 -3
  73. package/lib/configuration/option_splitter.js +22 -22
  74. package/lib/configuration/types.d.ts +30 -28
  75. package/lib/configuration/types.js +2 -2
  76. package/lib/configuration/types.js.map +1 -1
  77. package/lib/configuration/validate_configuration.d.ts +3 -3
  78. package/lib/configuration/validate_configuration.js +12 -12
  79. package/lib/filter_stack_trace.d.ts +3 -3
  80. package/lib/filter_stack_trace.js +37 -37
  81. package/lib/formatter/builder.d.ts +37 -37
  82. package/lib/formatter/builder.js +100 -100
  83. package/lib/formatter/bvt_analysis_formatter.d.ts +18 -0
  84. package/lib/formatter/bvt_analysis_formatter.js +193 -0
  85. package/lib/formatter/bvt_analysis_formatter.js.map +1 -0
  86. package/lib/formatter/feature_data_format.d.ts +23 -14
  87. package/lib/formatter/feature_data_format.js +136 -80
  88. package/lib/formatter/feature_data_format.js.map +1 -1
  89. package/lib/formatter/fixtures/typescript.d.ts +2 -2
  90. package/lib/formatter/fixtures/typescript.js +5 -5
  91. package/lib/formatter/get_color_fns.d.ts +15 -15
  92. package/lib/formatter/get_color_fns.js +55 -55
  93. package/lib/formatter/helpers/duration_helpers.d.ts +2 -2
  94. package/lib/formatter/helpers/duration_helpers.js +8 -8
  95. package/lib/formatter/helpers/event_data_collector.d.ts +30 -30
  96. package/lib/formatter/helpers/event_data_collector.js +125 -125
  97. package/lib/formatter/helpers/formatters.d.ts +6 -6
  98. package/lib/formatter/helpers/formatters.js +44 -44
  99. package/lib/formatter/helpers/formatters.js.map +1 -1
  100. package/lib/formatter/helpers/gherkin_document_parser.d.ts +5 -5
  101. package/lib/formatter/helpers/gherkin_document_parser.js +65 -65
  102. package/lib/formatter/helpers/index.d.ts +10 -10
  103. package/lib/formatter/helpers/index.js +51 -51
  104. package/lib/formatter/helpers/issue_helpers.d.ts +19 -19
  105. package/lib/formatter/helpers/issue_helpers.js +58 -58
  106. package/lib/formatter/helpers/keyword_type.d.ts +11 -11
  107. package/lib/formatter/helpers/keyword_type.js +31 -31
  108. package/lib/formatter/helpers/location_helpers.d.ts +2 -2
  109. package/lib/formatter/helpers/location_helpers.js +16 -16
  110. package/lib/formatter/helpers/pickle_parser.d.ts +17 -17
  111. package/lib/formatter/helpers/pickle_parser.js +27 -27
  112. package/lib/formatter/helpers/report_generator.d.ts +110 -91
  113. package/lib/formatter/helpers/report_generator.js +348 -247
  114. package/lib/formatter/helpers/report_generator.js.map +1 -1
  115. package/lib/formatter/helpers/step_argument_formatter.d.ts +2 -2
  116. package/lib/formatter/helpers/step_argument_formatter.js +47 -47
  117. package/lib/formatter/helpers/summary_helpers.d.ts +9 -9
  118. package/lib/formatter/helpers/summary_helpers.js +95 -95
  119. package/lib/formatter/helpers/test_case_attempt_formatter.d.ts +12 -12
  120. package/lib/formatter/helpers/test_case_attempt_formatter.js +113 -113
  121. package/lib/formatter/helpers/test_case_attempt_parser.d.ts +32 -32
  122. package/lib/formatter/helpers/test_case_attempt_parser.js +134 -134
  123. package/lib/formatter/helpers/upload_serivce.d.ts +13 -9
  124. package/lib/formatter/helpers/upload_serivce.js +103 -46
  125. package/lib/formatter/helpers/upload_serivce.js.map +1 -1
  126. package/lib/formatter/helpers/uploader.d.ts +11 -0
  127. package/lib/formatter/helpers/uploader.js +78 -0
  128. package/lib/formatter/helpers/uploader.js.map +1 -0
  129. package/lib/formatter/helpers/usage_helpers/index.d.ts +23 -23
  130. package/lib/formatter/helpers/usage_helpers/index.js +110 -110
  131. package/lib/formatter/html_formatter.d.ts +7 -7
  132. package/lib/formatter/html_formatter.js +29 -29
  133. package/lib/formatter/index.d.ts +53 -53
  134. package/lib/formatter/index.js +20 -20
  135. package/lib/formatter/json_formatter.d.ts +78 -78
  136. package/lib/formatter/json_formatter.js +229 -229
  137. package/lib/formatter/junit_formatter.d.ts +17 -17
  138. package/lib/formatter/junit_formatter.js +180 -180
  139. package/lib/formatter/message_formatter.d.ts +5 -5
  140. package/lib/formatter/message_formatter.js +14 -14
  141. package/lib/formatter/progress_bar_formatter.d.ts +18 -18
  142. package/lib/formatter/progress_bar_formatter.js +98 -98
  143. package/lib/formatter/progress_formatter.d.ts +9 -9
  144. package/lib/formatter/progress_formatter.js +58 -58
  145. package/lib/formatter/rerun_formatter.d.ts +13 -13
  146. package/lib/formatter/rerun_formatter.js +79 -79
  147. package/lib/formatter/snippets_formatter.d.ts +6 -6
  148. package/lib/formatter/snippets_formatter.js +60 -60
  149. package/lib/formatter/step_definition_snippet_builder/index.d.ts +20 -20
  150. package/lib/formatter/step_definition_snippet_builder/index.js +45 -45
  151. package/lib/formatter/step_definition_snippet_builder/javascript_snippet_syntax.d.ts +7 -7
  152. package/lib/formatter/step_definition_snippet_builder/javascript_snippet_syntax.js +45 -45
  153. package/lib/formatter/step_definition_snippet_builder/snippet_syntax.d.ts +16 -16
  154. package/lib/formatter/step_definition_snippet_builder/snippet_syntax.js +10 -10
  155. package/lib/formatter/summary_formatter.d.ts +14 -14
  156. package/lib/formatter/summary_formatter.js +67 -67
  157. package/lib/formatter/usage_formatter.d.ts +6 -6
  158. package/lib/formatter/usage_formatter.js +97 -97
  159. package/lib/formatter/usage_json_formatter.d.ts +7 -7
  160. package/lib/formatter/usage_json_formatter.js +33 -33
  161. package/lib/index.d.ts +58 -58
  162. package/lib/index.js +108 -108
  163. package/lib/logger.d.ts +5 -5
  164. package/lib/logger.js +2 -2
  165. package/lib/models/data_table.d.ts +10 -10
  166. package/lib/models/data_table.js +45 -45
  167. package/lib/models/definition.d.ts +55 -55
  168. package/lib/models/definition.js +21 -21
  169. package/lib/models/gherkin_step_keyword.d.ts +1 -1
  170. package/lib/models/gherkin_step_keyword.js +2 -2
  171. package/lib/models/pickle_order.d.ts +1 -1
  172. package/lib/models/pickle_order.js +2 -2
  173. package/lib/models/step_definition.d.ts +11 -11
  174. package/lib/models/step_definition.js +36 -36
  175. package/lib/models/test_case_hook_definition.d.ts +10 -10
  176. package/lib/models/test_case_hook_definition.js +26 -26
  177. package/lib/models/test_run_hook_definition.d.ts +3 -3
  178. package/lib/models/test_run_hook_definition.js +9 -9
  179. package/lib/models/test_step_hook_definition.d.ts +9 -9
  180. package/lib/models/test_step_hook_definition.js +25 -25
  181. package/lib/pickle_filter.d.ts +42 -42
  182. package/lib/pickle_filter.js +98 -98
  183. package/lib/plugin/index.d.ts +2 -2
  184. package/lib/plugin/index.js +18 -18
  185. package/lib/plugin/plugin_manager.d.ts +13 -13
  186. package/lib/plugin/plugin_manager.js +35 -35
  187. package/lib/plugin/types.d.ts +14 -14
  188. package/lib/plugin/types.js +2 -2
  189. package/lib/publish/http_stream.d.ts +30 -30
  190. package/lib/publish/http_stream.js +111 -111
  191. package/lib/publish/index.d.ts +2 -2
  192. package/lib/publish/index.js +4 -4
  193. package/lib/publish/publish_plugin.d.ts +2 -2
  194. package/lib/publish/publish_plugin.js +47 -47
  195. package/lib/runtime/assemble_test_cases.d.ts +13 -13
  196. package/lib/runtime/assemble_test_cases.js +87 -87
  197. package/lib/runtime/attachment_manager/index.d.ts +33 -33
  198. package/lib/runtime/attachment_manager/index.js +118 -118
  199. package/lib/runtime/format_error.d.ts +2 -2
  200. package/lib/runtime/format_error.js +35 -35
  201. package/lib/runtime/helpers.d.ts +6 -6
  202. package/lib/runtime/helpers.js +100 -100
  203. package/lib/runtime/index.d.ts +40 -40
  204. package/lib/runtime/index.js +75 -75
  205. package/lib/runtime/parallel/command_types.d.ts +32 -32
  206. package/lib/runtime/parallel/command_types.js +2 -2
  207. package/lib/runtime/parallel/coordinator.d.ts +72 -72
  208. package/lib/runtime/parallel/coordinator.js +221 -221
  209. package/lib/runtime/parallel/run_worker.d.ts +1 -1
  210. package/lib/runtime/parallel/run_worker.js +28 -28
  211. package/lib/runtime/parallel/worker.d.ts +26 -26
  212. package/lib/runtime/parallel/worker.js +86 -86
  213. package/lib/runtime/run_test_run_hooks.d.ts +3 -3
  214. package/lib/runtime/run_test_run_hooks.js +27 -27
  215. package/lib/runtime/step_runner.d.ts +16 -16
  216. package/lib/runtime/step_runner.js +87 -87
  217. package/lib/runtime/stopwatch.d.ts +12 -12
  218. package/lib/runtime/stopwatch.js +33 -33
  219. package/lib/runtime/test_case_runner.d.ts +54 -54
  220. package/lib/runtime/test_case_runner.js +267 -267
  221. package/lib/step_arguments.d.ts +6 -6
  222. package/lib/step_arguments.js +18 -18
  223. package/lib/support_code_library_builder/build_parameter_type.d.ts +3 -3
  224. package/lib/support_code_library_builder/build_parameter_type.js +12 -12
  225. package/lib/support_code_library_builder/get_definition_line_and_uri.d.ts +3 -3
  226. package/lib/support_code_library_builder/get_definition_line_and_uri.js +28 -28
  227. package/lib/support_code_library_builder/index.d.ts +74 -74
  228. package/lib/support_code_library_builder/index.js +296 -296
  229. package/lib/support_code_library_builder/parallel_can_assign_helpers.d.ts +2 -2
  230. package/lib/support_code_library_builder/parallel_can_assign_helpers.js +15 -15
  231. package/lib/support_code_library_builder/sourced_parameter_type_registry.d.ts +7 -7
  232. package/lib/support_code_library_builder/sourced_parameter_type_registry.js +18 -18
  233. package/lib/support_code_library_builder/types.d.ts +88 -88
  234. package/lib/support_code_library_builder/types.js +2 -2
  235. package/lib/support_code_library_builder/validate_arguments.d.ts +12 -12
  236. package/lib/support_code_library_builder/validate_arguments.js +72 -72
  237. package/lib/support_code_library_builder/world.d.ts +18 -18
  238. package/lib/support_code_library_builder/world.js +10 -10
  239. package/lib/time.d.ts +18 -18
  240. package/lib/time.js +60 -60
  241. package/lib/try_require.d.ts +7 -7
  242. package/lib/try_require.js +22 -22
  243. package/lib/types/index.d.ts +4 -4
  244. package/lib/types/index.js +2 -2
  245. package/lib/uncaught_exception_manager.d.ts +7 -7
  246. package/lib/uncaught_exception_manager.js +11 -11
  247. package/lib/user_code_runner.d.ts +14 -14
  248. package/lib/user_code_runner.js +81 -81
  249. package/lib/value_checker.d.ts +3 -3
  250. package/lib/value_checker.js +18 -18
  251. package/lib/version.d.ts +1 -1
  252. package/lib/version.js +5 -5
  253. package/lib/version.js.map +1 -1
  254. package/package.json +4 -2
  255. package/lib/formatter/bvt_formatter.d.ts +0 -9
  256. package/lib/formatter/bvt_formatter.js +0 -63
  257. package/lib/formatter/bvt_formatter.js.map +0 -1
@@ -1,268 +1,268 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
- Object.defineProperty(o, "default", { enumerable: true, value: v });
15
- }) : function(o, v) {
16
- o["default"] = v;
17
- });
18
- var __importStar = (this && this.__importStar) || function (mod) {
19
- if (mod && mod.__esModule) return mod;
20
- var result = {};
21
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
- __setModuleDefault(result, mod);
23
- return result;
24
- };
25
- var __importDefault = (this && this.__importDefault) || function (mod) {
26
- return (mod && mod.__esModule) ? mod : { "default": mod };
27
- };
28
- Object.defineProperty(exports, "__esModule", { value: true });
29
- const helpers_1 = require("./helpers");
30
- const attachment_manager_1 = __importDefault(require("./attachment_manager"));
31
- const step_runner_1 = __importDefault(require("./step_runner"));
32
- const messages = __importStar(require("@cucumber/messages"));
33
- const messages_1 = require("@cucumber/messages");
34
- const value_checker_1 = require("../value_checker");
35
- class TestCaseRunner {
36
- constructor({ eventBroadcaster, stopwatch, gherkinDocument, newId, pickle, testCase, retries = 0, skip, filterStackTraces, supportCodeLibrary, worldParameters, }) {
37
- this.attachmentManager = new attachment_manager_1.default(({ data, media, fileName }) => {
38
- if ((0, value_checker_1.doesNotHaveValue)(this.currentTestStepId)) {
39
- throw new Error('Cannot attach when a step/hook is not running. Ensure your step/hook waits for the attach to finish.');
40
- }
41
- const attachment = {
42
- attachment: {
43
- body: data,
44
- contentEncoding: media.encoding,
45
- mediaType: media.contentType,
46
- fileName,
47
- testCaseStartedId: this.currentTestCaseStartedId,
48
- testStepId: this.currentTestStepId,
49
- },
50
- };
51
- this.eventBroadcaster.emit('envelope', attachment);
52
- });
53
- this.eventBroadcaster = eventBroadcaster;
54
- this.stopwatch = stopwatch;
55
- this.gherkinDocument = gherkinDocument;
56
- this.maxAttempts = 1 + (skip ? 0 : retries);
57
- this.newId = newId;
58
- this.pickle = pickle;
59
- this.testCase = testCase;
60
- this.skip = skip;
61
- this.filterStackTraces = filterStackTraces;
62
- this.supportCodeLibrary = supportCodeLibrary;
63
- this.worldParameters = worldParameters;
64
- this.resetTestProgressData();
65
- }
66
- resetTestProgressData() {
67
- this.world = new this.supportCodeLibrary.World({
68
- attach: this.attachmentManager.create.bind(this.attachmentManager),
69
- log: this.attachmentManager.log.bind(this.attachmentManager),
70
- parameters: this.worldParameters,
71
- });
72
- this.testStepResults = [];
73
- }
74
- getBeforeStepHookDefinitions() {
75
- return this.supportCodeLibrary.beforeTestStepHookDefinitions.filter((hookDefinition) => hookDefinition.appliesToTestCase(this.pickle));
76
- }
77
- getAfterStepHookDefinitions() {
78
- return this.supportCodeLibrary.afterTestStepHookDefinitions
79
- .slice(0)
80
- .reverse()
81
- .filter((hookDefinition) => hookDefinition.appliesToTestCase(this.pickle));
82
- }
83
- getWorstStepResult() {
84
- if (this.testStepResults.length === 0) {
85
- return {
86
- status: this.skip
87
- ? messages.TestStepResultStatus.SKIPPED
88
- : messages.TestStepResultStatus.PASSED,
89
- duration: messages.TimeConversion.millisecondsToDuration(0),
90
- };
91
- }
92
- return (0, messages_1.getWorstTestStepResult)(this.testStepResults);
93
- }
94
- async invokeStep(step, stepDefinition, hookParameter) {
95
- return await step_runner_1.default.run({
96
- defaultTimeout: this.supportCodeLibrary.defaultTimeout,
97
- filterStackTraces: this.filterStackTraces,
98
- hookParameter,
99
- step,
100
- stepDefinition,
101
- world: this.world,
102
- });
103
- }
104
- isSkippingSteps() {
105
- return (this.getWorstStepResult().status !== messages.TestStepResultStatus.PASSED);
106
- }
107
- shouldSkipHook(isBeforeHook) {
108
- return this.skip || (this.isSkippingSteps() && isBeforeHook);
109
- }
110
- async aroundTestStep(testStepId, runStepFn) {
111
- const testStepStarted = {
112
- testStepStarted: {
113
- testCaseStartedId: this.currentTestCaseStartedId,
114
- testStepId,
115
- timestamp: this.stopwatch.timestamp(),
116
- },
117
- };
118
- this.eventBroadcaster.emit('envelope', testStepStarted);
119
- this.currentTestStepId = testStepId;
120
- const testStepResult = await runStepFn();
121
- this.currentTestStepId = null;
122
- this.testStepResults.push(testStepResult);
123
- const testStepFinished = {
124
- testStepFinished: {
125
- testCaseStartedId: this.currentTestCaseStartedId,
126
- testStepId,
127
- testStepResult,
128
- timestamp: this.stopwatch.timestamp(),
129
- },
130
- };
131
- this.eventBroadcaster.emit('envelope', testStepFinished);
132
- }
133
- async run() {
134
- for (let attempt = 0; attempt < this.maxAttempts; attempt++) {
135
- const moreAttemptsRemaining = attempt + 1 < this.maxAttempts;
136
- const willBeRetried = await this.runAttempt(attempt, moreAttemptsRemaining);
137
- if (!willBeRetried) {
138
- break;
139
- }
140
- this.resetTestProgressData();
141
- }
142
- return this.getWorstStepResult().status;
143
- }
144
- async runAttempt(attempt, moreAttemptsRemaining) {
145
- this.currentTestCaseStartedId = this.newId();
146
- const testCaseStarted = {
147
- testCaseStarted: {
148
- attempt,
149
- testCaseId: this.testCase.id,
150
- id: this.currentTestCaseStartedId,
151
- timestamp: this.stopwatch.timestamp(),
152
- },
153
- };
154
- this.eventBroadcaster.emit('envelope', testCaseStarted);
155
- // used to determine whether a hook is a Before or After
156
- let didWeRunStepsYet = false;
157
- for (const testStep of this.testCase.testSteps) {
158
- await this.aroundTestStep(testStep.id, async () => {
159
- if ((0, value_checker_1.doesHaveValue)(testStep.hookId)) {
160
- const hookParameter = {
161
- gherkinDocument: this.gherkinDocument,
162
- pickle: this.pickle,
163
- testCaseStartedId: this.currentTestCaseStartedId,
164
- };
165
- if (didWeRunStepsYet) {
166
- hookParameter.result = this.getWorstStepResult();
167
- hookParameter.willBeRetried =
168
- this.getWorstStepResult().status ===
169
- messages.TestStepResultStatus.FAILED && moreAttemptsRemaining;
170
- }
171
- return await this.runHook(findHookDefinition(testStep.hookId, this.supportCodeLibrary), hookParameter, !didWeRunStepsYet);
172
- }
173
- else {
174
- const pickleStep = this.pickle.steps.find((pickleStep) => pickleStep.id === testStep.pickleStepId);
175
- const testStepResult = await this.runStep(pickleStep, testStep);
176
- didWeRunStepsYet = true;
177
- return testStepResult;
178
- }
179
- });
180
- }
181
- const willBeRetried = this.getWorstStepResult().status ===
182
- messages.TestStepResultStatus.FAILED && moreAttemptsRemaining;
183
- const testCaseFinished = {
184
- testCaseFinished: {
185
- testCaseStartedId: this.currentTestCaseStartedId,
186
- timestamp: this.stopwatch.timestamp(),
187
- willBeRetried,
188
- },
189
- };
190
- this.eventBroadcaster.emit('envelope', testCaseFinished);
191
- return willBeRetried;
192
- }
193
- async runHook(hookDefinition, hookParameter, isBeforeHook) {
194
- if (this.shouldSkipHook(isBeforeHook)) {
195
- return {
196
- status: messages.TestStepResultStatus.SKIPPED,
197
- duration: messages.TimeConversion.millisecondsToDuration(0),
198
- };
199
- }
200
- return await this.invokeStep(null, hookDefinition, hookParameter);
201
- }
202
- async runStepHooks(stepHooks, pickleStep, stepResult) {
203
- const stepHooksResult = [];
204
- const hookParameter = {
205
- gherkinDocument: this.gherkinDocument,
206
- pickle: this.pickle,
207
- pickleStep,
208
- testCaseStartedId: this.currentTestCaseStartedId,
209
- testStepId: this.currentTestStepId,
210
- result: stepResult,
211
- };
212
- for (const stepHookDefinition of stepHooks) {
213
- stepHooksResult.push(await this.invokeStep(null, stepHookDefinition, hookParameter));
214
- }
215
- return stepHooksResult;
216
- }
217
- async runStep(pickleStep, testStep) {
218
- const stepDefinitions = testStep.stepDefinitionIds.map((stepDefinitionId) => {
219
- return findStepDefinition(stepDefinitionId, this.supportCodeLibrary);
220
- });
221
- if (stepDefinitions.length === 0) {
222
- return {
223
- status: messages.TestStepResultStatus.UNDEFINED,
224
- duration: messages.TimeConversion.millisecondsToDuration(0),
225
- };
226
- }
227
- else if (stepDefinitions.length > 1) {
228
- return {
229
- message: (0, helpers_1.getAmbiguousStepException)(stepDefinitions),
230
- status: messages.TestStepResultStatus.AMBIGUOUS,
231
- duration: messages.TimeConversion.millisecondsToDuration(0),
232
- };
233
- }
234
- else if (this.isSkippingSteps()) {
235
- return {
236
- status: messages.TestStepResultStatus.SKIPPED,
237
- duration: messages.TimeConversion.millisecondsToDuration(0),
238
- };
239
- }
240
- let stepResult;
241
- let stepResults = await this.runStepHooks(this.getBeforeStepHookDefinitions(), pickleStep);
242
- if ((0, messages_1.getWorstTestStepResult)(stepResults).status !==
243
- messages.TestStepResultStatus.FAILED) {
244
- stepResult = await this.invokeStep(pickleStep, stepDefinitions[0]);
245
- stepResults.push(stepResult);
246
- }
247
- const afterStepHookResults = await this.runStepHooks(this.getAfterStepHookDefinitions(), pickleStep, stepResult);
248
- stepResults = stepResults.concat(afterStepHookResults);
249
- const finalStepResult = (0, messages_1.getWorstTestStepResult)(stepResults);
250
- let finalDuration = messages.TimeConversion.millisecondsToDuration(0);
251
- for (const result of stepResults) {
252
- finalDuration = messages.TimeConversion.addDurations(finalDuration, result.duration);
253
- }
254
- finalStepResult.duration = finalDuration;
255
- return finalStepResult;
256
- }
257
- }
258
- exports.default = TestCaseRunner;
259
- function findHookDefinition(id, supportCodeLibrary) {
260
- return [
261
- ...supportCodeLibrary.beforeTestCaseHookDefinitions,
262
- ...supportCodeLibrary.afterTestCaseHookDefinitions,
263
- ].find((definition) => definition.id === id);
264
- }
265
- function findStepDefinition(id, supportCodeLibrary) {
266
- return supportCodeLibrary.stepDefinitions.find((definition) => definition.id === id);
267
- }
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ var __importDefault = (this && this.__importDefault) || function (mod) {
26
+ return (mod && mod.__esModule) ? mod : { "default": mod };
27
+ };
28
+ Object.defineProperty(exports, "__esModule", { value: true });
29
+ const helpers_1 = require("./helpers");
30
+ const attachment_manager_1 = __importDefault(require("./attachment_manager"));
31
+ const step_runner_1 = __importDefault(require("./step_runner"));
32
+ const messages = __importStar(require("@cucumber/messages"));
33
+ const messages_1 = require("@cucumber/messages");
34
+ const value_checker_1 = require("../value_checker");
35
+ class TestCaseRunner {
36
+ constructor({ eventBroadcaster, stopwatch, gherkinDocument, newId, pickle, testCase, retries = 0, skip, filterStackTraces, supportCodeLibrary, worldParameters, }) {
37
+ this.attachmentManager = new attachment_manager_1.default(({ data, media, fileName }) => {
38
+ if ((0, value_checker_1.doesNotHaveValue)(this.currentTestStepId)) {
39
+ throw new Error('Cannot attach when a step/hook is not running. Ensure your step/hook waits for the attach to finish.');
40
+ }
41
+ const attachment = {
42
+ attachment: {
43
+ body: data,
44
+ contentEncoding: media.encoding,
45
+ mediaType: media.contentType,
46
+ fileName,
47
+ testCaseStartedId: this.currentTestCaseStartedId,
48
+ testStepId: this.currentTestStepId,
49
+ },
50
+ };
51
+ this.eventBroadcaster.emit('envelope', attachment);
52
+ });
53
+ this.eventBroadcaster = eventBroadcaster;
54
+ this.stopwatch = stopwatch;
55
+ this.gherkinDocument = gherkinDocument;
56
+ this.maxAttempts = 1 + (skip ? 0 : retries);
57
+ this.newId = newId;
58
+ this.pickle = pickle;
59
+ this.testCase = testCase;
60
+ this.skip = skip;
61
+ this.filterStackTraces = filterStackTraces;
62
+ this.supportCodeLibrary = supportCodeLibrary;
63
+ this.worldParameters = worldParameters;
64
+ this.resetTestProgressData();
65
+ }
66
+ resetTestProgressData() {
67
+ this.world = new this.supportCodeLibrary.World({
68
+ attach: this.attachmentManager.create.bind(this.attachmentManager),
69
+ log: this.attachmentManager.log.bind(this.attachmentManager),
70
+ parameters: this.worldParameters,
71
+ });
72
+ this.testStepResults = [];
73
+ }
74
+ getBeforeStepHookDefinitions() {
75
+ return this.supportCodeLibrary.beforeTestStepHookDefinitions.filter((hookDefinition) => hookDefinition.appliesToTestCase(this.pickle));
76
+ }
77
+ getAfterStepHookDefinitions() {
78
+ return this.supportCodeLibrary.afterTestStepHookDefinitions
79
+ .slice(0)
80
+ .reverse()
81
+ .filter((hookDefinition) => hookDefinition.appliesToTestCase(this.pickle));
82
+ }
83
+ getWorstStepResult() {
84
+ if (this.testStepResults.length === 0) {
85
+ return {
86
+ status: this.skip
87
+ ? messages.TestStepResultStatus.SKIPPED
88
+ : messages.TestStepResultStatus.PASSED,
89
+ duration: messages.TimeConversion.millisecondsToDuration(0),
90
+ };
91
+ }
92
+ return (0, messages_1.getWorstTestStepResult)(this.testStepResults);
93
+ }
94
+ async invokeStep(step, stepDefinition, hookParameter) {
95
+ return await step_runner_1.default.run({
96
+ defaultTimeout: this.supportCodeLibrary.defaultTimeout,
97
+ filterStackTraces: this.filterStackTraces,
98
+ hookParameter,
99
+ step,
100
+ stepDefinition,
101
+ world: this.world,
102
+ });
103
+ }
104
+ isSkippingSteps() {
105
+ return (this.getWorstStepResult().status !== messages.TestStepResultStatus.PASSED);
106
+ }
107
+ shouldSkipHook(isBeforeHook) {
108
+ return this.skip || (this.isSkippingSteps() && isBeforeHook);
109
+ }
110
+ async aroundTestStep(testStepId, runStepFn) {
111
+ const testStepStarted = {
112
+ testStepStarted: {
113
+ testCaseStartedId: this.currentTestCaseStartedId,
114
+ testStepId,
115
+ timestamp: this.stopwatch.timestamp(),
116
+ },
117
+ };
118
+ this.eventBroadcaster.emit('envelope', testStepStarted);
119
+ this.currentTestStepId = testStepId;
120
+ const testStepResult = await runStepFn();
121
+ this.currentTestStepId = null;
122
+ this.testStepResults.push(testStepResult);
123
+ const testStepFinished = {
124
+ testStepFinished: {
125
+ testCaseStartedId: this.currentTestCaseStartedId,
126
+ testStepId,
127
+ testStepResult,
128
+ timestamp: this.stopwatch.timestamp(),
129
+ },
130
+ };
131
+ this.eventBroadcaster.emit('envelope', testStepFinished);
132
+ }
133
+ async run() {
134
+ for (let attempt = 0; attempt < this.maxAttempts; attempt++) {
135
+ const moreAttemptsRemaining = attempt + 1 < this.maxAttempts;
136
+ const willBeRetried = await this.runAttempt(attempt, moreAttemptsRemaining);
137
+ if (!willBeRetried) {
138
+ break;
139
+ }
140
+ this.resetTestProgressData();
141
+ }
142
+ return this.getWorstStepResult().status;
143
+ }
144
+ async runAttempt(attempt, moreAttemptsRemaining) {
145
+ this.currentTestCaseStartedId = this.newId();
146
+ const testCaseStarted = {
147
+ testCaseStarted: {
148
+ attempt,
149
+ testCaseId: this.testCase.id,
150
+ id: this.currentTestCaseStartedId,
151
+ timestamp: this.stopwatch.timestamp(),
152
+ },
153
+ };
154
+ this.eventBroadcaster.emit('envelope', testCaseStarted);
155
+ // used to determine whether a hook is a Before or After
156
+ let didWeRunStepsYet = false;
157
+ for (const testStep of this.testCase.testSteps) {
158
+ await this.aroundTestStep(testStep.id, async () => {
159
+ if ((0, value_checker_1.doesHaveValue)(testStep.hookId)) {
160
+ const hookParameter = {
161
+ gherkinDocument: this.gherkinDocument,
162
+ pickle: this.pickle,
163
+ testCaseStartedId: this.currentTestCaseStartedId,
164
+ };
165
+ if (didWeRunStepsYet) {
166
+ hookParameter.result = this.getWorstStepResult();
167
+ hookParameter.willBeRetried =
168
+ this.getWorstStepResult().status ===
169
+ messages.TestStepResultStatus.FAILED && moreAttemptsRemaining;
170
+ }
171
+ return await this.runHook(findHookDefinition(testStep.hookId, this.supportCodeLibrary), hookParameter, !didWeRunStepsYet);
172
+ }
173
+ else {
174
+ const pickleStep = this.pickle.steps.find((pickleStep) => pickleStep.id === testStep.pickleStepId);
175
+ const testStepResult = await this.runStep(pickleStep, testStep);
176
+ didWeRunStepsYet = true;
177
+ return testStepResult;
178
+ }
179
+ });
180
+ }
181
+ const willBeRetried = this.getWorstStepResult().status ===
182
+ messages.TestStepResultStatus.FAILED && moreAttemptsRemaining;
183
+ const testCaseFinished = {
184
+ testCaseFinished: {
185
+ testCaseStartedId: this.currentTestCaseStartedId,
186
+ timestamp: this.stopwatch.timestamp(),
187
+ willBeRetried,
188
+ },
189
+ };
190
+ this.eventBroadcaster.emit('envelope', testCaseFinished);
191
+ return willBeRetried;
192
+ }
193
+ async runHook(hookDefinition, hookParameter, isBeforeHook) {
194
+ if (this.shouldSkipHook(isBeforeHook)) {
195
+ return {
196
+ status: messages.TestStepResultStatus.SKIPPED,
197
+ duration: messages.TimeConversion.millisecondsToDuration(0),
198
+ };
199
+ }
200
+ return await this.invokeStep(null, hookDefinition, hookParameter);
201
+ }
202
+ async runStepHooks(stepHooks, pickleStep, stepResult) {
203
+ const stepHooksResult = [];
204
+ const hookParameter = {
205
+ gherkinDocument: this.gherkinDocument,
206
+ pickle: this.pickle,
207
+ pickleStep,
208
+ testCaseStartedId: this.currentTestCaseStartedId,
209
+ testStepId: this.currentTestStepId,
210
+ result: stepResult,
211
+ };
212
+ for (const stepHookDefinition of stepHooks) {
213
+ stepHooksResult.push(await this.invokeStep(null, stepHookDefinition, hookParameter));
214
+ }
215
+ return stepHooksResult;
216
+ }
217
+ async runStep(pickleStep, testStep) {
218
+ const stepDefinitions = testStep.stepDefinitionIds.map((stepDefinitionId) => {
219
+ return findStepDefinition(stepDefinitionId, this.supportCodeLibrary);
220
+ });
221
+ if (stepDefinitions.length === 0) {
222
+ return {
223
+ status: messages.TestStepResultStatus.UNDEFINED,
224
+ duration: messages.TimeConversion.millisecondsToDuration(0),
225
+ };
226
+ }
227
+ else if (stepDefinitions.length > 1) {
228
+ return {
229
+ message: (0, helpers_1.getAmbiguousStepException)(stepDefinitions),
230
+ status: messages.TestStepResultStatus.AMBIGUOUS,
231
+ duration: messages.TimeConversion.millisecondsToDuration(0),
232
+ };
233
+ }
234
+ else if (this.isSkippingSteps()) {
235
+ return {
236
+ status: messages.TestStepResultStatus.SKIPPED,
237
+ duration: messages.TimeConversion.millisecondsToDuration(0),
238
+ };
239
+ }
240
+ let stepResult;
241
+ let stepResults = await this.runStepHooks(this.getBeforeStepHookDefinitions(), pickleStep);
242
+ if ((0, messages_1.getWorstTestStepResult)(stepResults).status !==
243
+ messages.TestStepResultStatus.FAILED) {
244
+ stepResult = await this.invokeStep(pickleStep, stepDefinitions[0]);
245
+ stepResults.push(stepResult);
246
+ }
247
+ const afterStepHookResults = await this.runStepHooks(this.getAfterStepHookDefinitions(), pickleStep, stepResult);
248
+ stepResults = stepResults.concat(afterStepHookResults);
249
+ const finalStepResult = (0, messages_1.getWorstTestStepResult)(stepResults);
250
+ let finalDuration = messages.TimeConversion.millisecondsToDuration(0);
251
+ for (const result of stepResults) {
252
+ finalDuration = messages.TimeConversion.addDurations(finalDuration, result.duration);
253
+ }
254
+ finalStepResult.duration = finalDuration;
255
+ return finalStepResult;
256
+ }
257
+ }
258
+ exports.default = TestCaseRunner;
259
+ function findHookDefinition(id, supportCodeLibrary) {
260
+ return [
261
+ ...supportCodeLibrary.beforeTestCaseHookDefinitions,
262
+ ...supportCodeLibrary.afterTestCaseHookDefinitions,
263
+ ].find((definition) => definition.id === id);
264
+ }
265
+ function findStepDefinition(id, supportCodeLibrary) {
266
+ return supportCodeLibrary.stepDefinitions.find((definition) => definition.id === id);
267
+ }
268
268
  //# sourceMappingURL=test_case_runner.js.map
@@ -1,6 +1,6 @@
1
- import * as messages from '@cucumber/messages';
2
- export interface IPickleStepArgumentFunctionMap<T> {
3
- dataTable: (arg: messages.PickleTable) => T;
4
- docString: (arg: messages.PickleDocString) => T;
5
- }
6
- export declare function parseStepArgument<T>(arg: messages.PickleStepArgument, mapping: IPickleStepArgumentFunctionMap<T>): T;
1
+ import * as messages from '@cucumber/messages';
2
+ export interface IPickleStepArgumentFunctionMap<T> {
3
+ dataTable: (arg: messages.PickleTable) => T;
4
+ docString: (arg: messages.PickleDocString) => T;
5
+ }
6
+ export declare function parseStepArgument<T>(arg: messages.PickleStepArgument, mapping: IPickleStepArgumentFunctionMap<T>): T;
@@ -1,19 +1,19 @@
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.parseStepArgument = void 0;
7
- const util_1 = __importDefault(require("util"));
8
- const value_checker_1 = require("./value_checker");
9
- function parseStepArgument(arg, mapping) {
10
- if ((0, value_checker_1.doesHaveValue)(arg.dataTable)) {
11
- return mapping.dataTable(arg.dataTable);
12
- }
13
- else if ((0, value_checker_1.doesHaveValue)(arg.docString)) {
14
- return mapping.docString(arg.docString);
15
- }
16
- throw new Error(`Unknown step argument: ${util_1.default.inspect(arg)}`);
17
- }
18
- exports.parseStepArgument = parseStepArgument;
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.parseStepArgument = void 0;
7
+ const util_1 = __importDefault(require("util"));
8
+ const value_checker_1 = require("./value_checker");
9
+ function parseStepArgument(arg, mapping) {
10
+ if ((0, value_checker_1.doesHaveValue)(arg.dataTable)) {
11
+ return mapping.dataTable(arg.dataTable);
12
+ }
13
+ else if ((0, value_checker_1.doesHaveValue)(arg.docString)) {
14
+ return mapping.docString(arg.docString);
15
+ }
16
+ throw new Error(`Unknown step argument: ${util_1.default.inspect(arg)}`);
17
+ }
18
+ exports.parseStepArgument = parseStepArgument;
19
19
  //# sourceMappingURL=step_arguments.js.map
@@ -1,3 +1,3 @@
1
- import { ParameterType } from '@cucumber/cucumber-expressions';
2
- import { IParameterTypeDefinition } from './types';
3
- export declare function buildParameterType({ name, regexp, transformer, useForSnippets, preferForRegexpMatch, }: IParameterTypeDefinition<any>): ParameterType<any>;
1
+ import { ParameterType } from '@cucumber/cucumber-expressions';
2
+ import { IParameterTypeDefinition } from './types';
3
+ export declare function buildParameterType({ name, regexp, transformer, useForSnippets, preferForRegexpMatch, }: IParameterTypeDefinition<any>): ParameterType<any>;
@@ -1,13 +1,13 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.buildParameterType = void 0;
4
- const cucumber_expressions_1 = require("@cucumber/cucumber-expressions");
5
- function buildParameterType({ name, regexp, transformer, useForSnippets, preferForRegexpMatch, }) {
6
- if (typeof useForSnippets !== 'boolean')
7
- useForSnippets = true;
8
- if (typeof preferForRegexpMatch !== 'boolean')
9
- preferForRegexpMatch = false;
10
- return new cucumber_expressions_1.ParameterType(name, regexp, null, transformer, useForSnippets, preferForRegexpMatch);
11
- }
12
- exports.buildParameterType = buildParameterType;
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.buildParameterType = void 0;
4
+ const cucumber_expressions_1 = require("@cucumber/cucumber-expressions");
5
+ function buildParameterType({ name, regexp, transformer, useForSnippets, preferForRegexpMatch, }) {
6
+ if (typeof useForSnippets !== 'boolean')
7
+ useForSnippets = true;
8
+ if (typeof preferForRegexpMatch !== 'boolean')
9
+ preferForRegexpMatch = false;
10
+ return new cucumber_expressions_1.ParameterType(name, regexp, null, transformer, useForSnippets, preferForRegexpMatch);
11
+ }
12
+ exports.buildParameterType = buildParameterType;
13
13
  //# sourceMappingURL=build_parameter_type.js.map
@@ -1,3 +1,3 @@
1
- import { isFileNameInCucumber } from '../filter_stack_trace';
2
- import { ILineAndUri } from '../types';
3
- export declare function getDefinitionLineAndUri(cwd: string, isExcluded?: typeof isFileNameInCucumber): ILineAndUri;
1
+ import { isFileNameInCucumber } from '../filter_stack_trace';
2
+ import { ILineAndUri } from '../types';
3
+ export declare function getDefinitionLineAndUri(cwd: string, isExcluded?: typeof isFileNameInCucumber): ILineAndUri;