@cucumber/cucumber 8.0.0-rc.1 → 8.0.0

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 (233) hide show
  1. package/README.md +83 -51
  2. package/api/index.d.ts +6 -0
  3. package/lib/api/convert_configuration.d.ts +4 -0
  4. package/lib/api/convert_configuration.js +65 -0
  5. package/lib/api/convert_configuration.js.map +1 -0
  6. package/lib/api/environment.d.ts +2 -0
  7. package/lib/api/environment.js +13 -0
  8. package/lib/api/environment.js.map +1 -0
  9. package/lib/api/formatters.d.ts +16 -0
  10. package/lib/api/formatters.js +72 -0
  11. package/lib/api/formatters.js.map +1 -0
  12. package/lib/api/gherkin.d.ts +21 -0
  13. package/lib/api/gherkin.js +65 -0
  14. package/lib/api/gherkin.js.map +1 -0
  15. package/lib/api/index.d.ts +11 -0
  16. package/lib/api/index.js +28 -0
  17. package/lib/api/index.js.map +1 -0
  18. package/lib/api/load_configuration.d.ts +9 -0
  19. package/lib/api/load_configuration.js +32 -0
  20. package/lib/api/load_configuration.js.map +1 -0
  21. package/lib/api/load_sources.d.ts +9 -0
  22. package/lib/api/load_sources.js +53 -0
  23. package/lib/api/load_sources.js.map +1 -0
  24. package/lib/api/load_support.d.ts +10 -0
  25. package/lib/api/load_support.js +28 -0
  26. package/lib/api/load_support.js.map +1 -0
  27. package/lib/api/paths.d.ts +7 -0
  28. package/lib/api/paths.js +99 -0
  29. package/lib/api/paths.js.map +1 -0
  30. package/lib/api/run_cucumber.d.ts +11 -0
  31. package/lib/api/run_cucumber.js +108 -0
  32. package/lib/api/run_cucumber.js.map +1 -0
  33. package/lib/api/runtime.d.ts +20 -0
  34. package/lib/api/runtime.js +36 -0
  35. package/lib/api/runtime.js.map +1 -0
  36. package/lib/api/support.d.ts +9 -0
  37. package/lib/api/support.js +21 -0
  38. package/lib/api/support.js.map +1 -0
  39. package/lib/api/types.d.ts +168 -0
  40. package/lib/api/types.js +3 -0
  41. package/lib/api/types.js.map +1 -0
  42. package/lib/api/wrapper.mjs +6 -0
  43. package/lib/cli/helpers.d.ts +16 -10
  44. package/lib/cli/helpers.js +54 -38
  45. package/lib/cli/helpers.js.map +1 -1
  46. package/lib/cli/i18n.js +1 -1
  47. package/lib/cli/i18n.js.map +1 -1
  48. package/lib/cli/index.d.ts +6 -23
  49. package/lib/cli/index.js +38 -195
  50. package/lib/cli/index.js.map +1 -1
  51. package/lib/cli/install_validator.js +1 -1
  52. package/lib/cli/install_validator.js.map +1 -1
  53. package/lib/cli/publish_banner.js +6 -6
  54. package/lib/cli/publish_banner.js.map +1 -1
  55. package/lib/cli/run.js +15 -7
  56. package/lib/cli/run.js.map +1 -1
  57. package/lib/cli/validate_node_engine_version.d.ts +10 -0
  58. package/lib/cli/validate_node_engine_version.js +24 -0
  59. package/lib/cli/validate_node_engine_version.js.map +1 -0
  60. package/lib/configuration/argv_parser.d.ts +20 -0
  61. package/lib/{cli → configuration}/argv_parser.js +47 -44
  62. package/lib/configuration/argv_parser.js.map +1 -0
  63. package/lib/configuration/check_schema.d.ts +2 -0
  64. package/lib/configuration/check_schema.js +60 -0
  65. package/lib/configuration/check_schema.js.map +1 -0
  66. package/lib/configuration/default_configuration.d.ts +2 -0
  67. package/lib/configuration/default_configuration.js +27 -0
  68. package/lib/configuration/default_configuration.js.map +1 -0
  69. package/lib/configuration/from_file.d.ts +2 -0
  70. package/lib/configuration/from_file.js +68 -0
  71. package/lib/configuration/from_file.js.map +1 -0
  72. package/lib/configuration/helpers.d.ts +1 -0
  73. package/lib/configuration/helpers.js +11 -0
  74. package/lib/configuration/helpers.js.map +1 -0
  75. package/lib/configuration/index.d.ts +7 -0
  76. package/lib/configuration/index.js +29 -0
  77. package/lib/configuration/index.js.map +1 -0
  78. package/lib/configuration/locate_file.d.ts +1 -0
  79. package/lib/configuration/locate_file.js +19 -0
  80. package/lib/configuration/locate_file.js.map +1 -0
  81. package/lib/configuration/merge_configurations.d.ts +2 -0
  82. package/lib/configuration/merge_configurations.js +48 -0
  83. package/lib/configuration/merge_configurations.js.map +1 -0
  84. package/lib/configuration/option_splitter.d.ts +3 -0
  85. package/lib/{cli → configuration}/option_splitter.js +4 -3
  86. package/lib/configuration/option_splitter.js.map +1 -0
  87. package/lib/configuration/types.d.ts +25 -0
  88. package/lib/configuration/types.js +3 -0
  89. package/lib/configuration/types.js.map +1 -0
  90. package/lib/configuration/validate_configuration.d.ts +2 -0
  91. package/lib/configuration/validate_configuration.js +10 -0
  92. package/lib/configuration/validate_configuration.js.map +1 -0
  93. package/lib/formatter/builder.d.ts +3 -3
  94. package/lib/formatter/builder.js +34 -8
  95. package/lib/formatter/builder.js.map +1 -1
  96. package/lib/formatter/fixtures/typescript.d.ts +2 -0
  97. package/lib/formatter/fixtures/typescript.js +6 -0
  98. package/lib/formatter/fixtures/typescript.js.map +1 -0
  99. package/lib/formatter/get_color_fns.js +15 -16
  100. package/lib/formatter/get_color_fns.js.map +1 -1
  101. package/lib/formatter/helpers/event_data_collector.js +15 -11
  102. package/lib/formatter/helpers/event_data_collector.js.map +1 -1
  103. package/lib/formatter/helpers/gherkin_document_parser.js +6 -6
  104. package/lib/formatter/helpers/gherkin_document_parser.js.map +1 -1
  105. package/lib/formatter/helpers/index.js +5 -1
  106. package/lib/formatter/helpers/index.js.map +1 -1
  107. package/lib/formatter/helpers/issue_helpers.d.ts +2 -2
  108. package/lib/formatter/helpers/issue_helpers.js +4 -4
  109. package/lib/formatter/helpers/issue_helpers.js.map +1 -1
  110. package/lib/formatter/helpers/keyword_type.js +1 -1
  111. package/lib/formatter/helpers/keyword_type.js.map +1 -1
  112. package/lib/formatter/helpers/location_helpers.js +1 -1
  113. package/lib/formatter/helpers/location_helpers.js.map +1 -1
  114. package/lib/formatter/helpers/pickle_parser.js +1 -1
  115. package/lib/formatter/helpers/pickle_parser.js.map +1 -1
  116. package/lib/formatter/helpers/step_argument_formatter.js +1 -1
  117. package/lib/formatter/helpers/step_argument_formatter.js.map +1 -1
  118. package/lib/formatter/helpers/summary_helpers.js +6 -2
  119. package/lib/formatter/helpers/summary_helpers.js.map +1 -1
  120. package/lib/formatter/helpers/test_case_attempt_formatter.d.ts +2 -2
  121. package/lib/formatter/helpers/test_case_attempt_formatter.js +24 -19
  122. package/lib/formatter/helpers/test_case_attempt_formatter.js.map +1 -1
  123. package/lib/formatter/helpers/test_case_attempt_parser.d.ts +1 -2
  124. package/lib/formatter/helpers/test_case_attempt_parser.js +19 -15
  125. package/lib/formatter/helpers/test_case_attempt_parser.js.map +1 -1
  126. package/lib/formatter/helpers/usage_helpers/index.d.ts +1 -2
  127. package/lib/formatter/helpers/usage_helpers/index.js +13 -9
  128. package/lib/formatter/helpers/usage_helpers/index.js.map +1 -1
  129. package/lib/formatter/html_formatter.js +4 -4
  130. package/lib/formatter/html_formatter.js.map +1 -1
  131. package/lib/formatter/http_stream.js +6 -6
  132. package/lib/formatter/http_stream.js.map +1 -1
  133. package/lib/formatter/index.d.ts +14 -2
  134. package/lib/formatter/index.js +2 -0
  135. package/lib/formatter/index.js.map +1 -1
  136. package/lib/formatter/json_formatter.js +18 -14
  137. package/lib/formatter/json_formatter.js.map +1 -1
  138. package/lib/formatter/progress_bar_formatter.js +16 -16
  139. package/lib/formatter/progress_bar_formatter.js.map +1 -1
  140. package/lib/formatter/progress_formatter.js +7 -3
  141. package/lib/formatter/progress_formatter.js.map +1 -1
  142. package/lib/formatter/publish.d.ts +1 -0
  143. package/lib/formatter/publish.js +5 -0
  144. package/lib/formatter/publish.js.map +1 -0
  145. package/lib/formatter/rerun_formatter.js +10 -6
  146. package/lib/formatter/rerun_formatter.js.map +1 -1
  147. package/lib/formatter/snippets_formatter.js +7 -4
  148. package/lib/formatter/snippets_formatter.js.map +1 -1
  149. package/lib/formatter/step_definition_snippet_builder/index.js +2 -2
  150. package/lib/formatter/step_definition_snippet_builder/index.js.map +1 -1
  151. package/lib/formatter/summary_formatter.js +9 -9
  152. package/lib/formatter/summary_formatter.js.map +1 -1
  153. package/lib/formatter/usage_formatter.js +11 -8
  154. package/lib/formatter/usage_formatter.js.map +1 -1
  155. package/lib/formatter/usage_json_formatter.js +2 -3
  156. package/lib/formatter/usage_json_formatter.js.map +1 -1
  157. package/lib/index.d.ts +5 -0
  158. package/lib/index.js +13 -2
  159. package/lib/index.js.map +1 -1
  160. package/lib/models/pickle_order.d.ts +1 -0
  161. package/lib/models/pickle_order.js +3 -0
  162. package/lib/models/pickle_order.js.map +1 -0
  163. package/lib/models/step_definition.js +3 -3
  164. package/lib/models/step_definition.js.map +1 -1
  165. package/lib/pickle_filter.js +8 -8
  166. package/lib/pickle_filter.js.map +1 -1
  167. package/lib/runtime/assemble_test_cases.js +1 -1
  168. package/lib/runtime/assemble_test_cases.js.map +1 -1
  169. package/lib/runtime/attachment_manager/index.js +9 -5
  170. package/lib/runtime/attachment_manager/index.js.map +1 -1
  171. package/lib/runtime/helpers.js +11 -4
  172. package/lib/runtime/helpers.js.map +1 -1
  173. package/lib/runtime/index.d.ts +7 -5
  174. package/lib/runtime/index.js +8 -27
  175. package/lib/runtime/index.js.map +1 -1
  176. package/lib/runtime/parallel/command_types.d.ts +3 -2
  177. package/lib/runtime/parallel/command_types.js.map +1 -1
  178. package/lib/runtime/parallel/coordinator.d.ts +32 -11
  179. package/lib/runtime/parallel/coordinator.js +80 -28
  180. package/lib/runtime/parallel/coordinator.js.map +1 -1
  181. package/lib/runtime/parallel/run_worker.js +1 -1
  182. package/lib/runtime/parallel/run_worker.js.map +1 -1
  183. package/lib/runtime/parallel/worker.d.ts +2 -4
  184. package/lib/runtime/parallel/worker.js +14 -37
  185. package/lib/runtime/parallel/worker.js.map +1 -1
  186. package/lib/runtime/run_test_run_hooks.d.ts +3 -0
  187. package/lib/runtime/run_test_run_hooks.js +28 -0
  188. package/lib/runtime/run_test_run_hooks.js.map +1 -0
  189. package/lib/runtime/step_runner.js +9 -5
  190. package/lib/runtime/step_runner.js.map +1 -1
  191. package/lib/runtime/stopwatch.js +9 -5
  192. package/lib/runtime/stopwatch.js.map +1 -1
  193. package/lib/runtime/test_case_runner.js +11 -7
  194. package/lib/runtime/test_case_runner.js.map +1 -1
  195. package/lib/stack_trace_filter.js +2 -2
  196. package/lib/stack_trace_filter.js.map +1 -1
  197. package/lib/step_arguments.js +2 -2
  198. package/lib/step_arguments.js.map +1 -1
  199. package/lib/support_code_library_builder/{build_helpers.d.ts → build_parameter_type.d.ts} +0 -2
  200. package/lib/support_code_library_builder/build_parameter_type.js +13 -0
  201. package/lib/support_code_library_builder/build_parameter_type.js.map +1 -0
  202. package/lib/support_code_library_builder/get_definition_line_and_uri.d.ts +3 -0
  203. package/lib/support_code_library_builder/get_definition_line_and_uri.js +30 -0
  204. package/lib/support_code_library_builder/get_definition_line_and_uri.js.map +1 -0
  205. package/lib/support_code_library_builder/index.d.ts +4 -2
  206. package/lib/support_code_library_builder/index.js +43 -19
  207. package/lib/support_code_library_builder/index.js.map +1 -1
  208. package/lib/support_code_library_builder/parallel_can_assign_helpers.d.ts +2 -0
  209. package/lib/support_code_library_builder/parallel_can_assign_helpers.js +16 -0
  210. package/lib/support_code_library_builder/parallel_can_assign_helpers.js.map +1 -0
  211. package/lib/support_code_library_builder/types.d.ts +9 -0
  212. package/lib/support_code_library_builder/types.js.map +1 -1
  213. package/lib/time.js +5 -1
  214. package/lib/time.js.map +1 -1
  215. package/lib/user_code_runner.js +4 -4
  216. package/lib/user_code_runner.js.map +1 -1
  217. package/lib/version.d.ts +1 -0
  218. package/lib/version.js +6 -0
  219. package/lib/version.js.map +1 -0
  220. package/lib/wrapper.mjs +5 -1
  221. package/package.json +72 -49
  222. package/lib/cli/argv_parser.d.ts +0 -50
  223. package/lib/cli/argv_parser.js.map +0 -1
  224. package/lib/cli/configuration_builder.d.ts +0 -45
  225. package/lib/cli/configuration_builder.js +0 -159
  226. package/lib/cli/configuration_builder.js.map +0 -1
  227. package/lib/cli/option_splitter.d.ts +0 -4
  228. package/lib/cli/option_splitter.js.map +0 -1
  229. package/lib/cli/profile_loader.d.ts +0 -7
  230. package/lib/cli/profile_loader.js +0 -49
  231. package/lib/cli/profile_loader.js.map +0 -1
  232. package/lib/support_code_library_builder/build_helpers.js +0 -45
  233. package/lib/support_code_library_builder/build_helpers.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"coordinator.js","sourceRoot":"","sources":["../../../src/runtime/parallel/coordinator.ts"],"names":[],"mappings":"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","sourcesContent":["import { ChildProcess, fork } from 'child_process'\nimport path from 'path'\nimport { retriesForPickle, shouldCauseFailure } from '../helpers'\nimport * as messages from '@cucumber/messages'\nimport { EventEmitter } from 'events'\nimport { EventDataCollector } from '../../formatter/helpers'\nimport { IRuntimeOptions } from '..'\nimport { ISupportCodeLibrary } from '../../support_code_library_builder/types'\nimport { ICoordinatorReport, IWorkerCommand } from './command_types'\nimport { doesHaveValue } from '../../value_checker'\nimport { ITestRunStopwatch, RealTestRunStopwatch } from '../stopwatch'\nimport { assembleTestCases, IAssembledTestCases } from '../assemble_test_cases'\nimport { IdGenerator } from '@cucumber/messages'\n\nconst runWorkerPath = path.resolve(__dirname, 'run_worker.js')\n\nexport interface INewCoordinatorOptions {\n cwd: string\n eventBroadcaster: EventEmitter\n eventDataCollector: EventDataCollector\n options: IRuntimeOptions\n newId: IdGenerator.NewId\n pickleIds: string[]\n supportCodeLibrary: ISupportCodeLibrary\n supportCodePaths: string[]\n supportCodeRequiredModules: string[]\n}\n\ninterface IWorker {\n closed: boolean\n process: ChildProcess\n}\n\nexport default class Coordinator {\n private readonly cwd: string\n private readonly eventBroadcaster: EventEmitter\n private readonly eventDataCollector: EventDataCollector\n private readonly stopwatch: ITestRunStopwatch\n private onFinish: (success: boolean) => void\n private nextPickleIdIndex: number\n private readonly options: IRuntimeOptions\n private readonly newId: IdGenerator.NewId\n private readonly pickleIds: string[]\n private assembledTestCases: IAssembledTestCases\n private workers: Record<string, IWorker>\n private readonly supportCodeLibrary: ISupportCodeLibrary\n private readonly supportCodePaths: string[]\n private readonly supportCodeRequiredModules: string[]\n private success: boolean\n\n constructor({\n cwd,\n eventBroadcaster,\n eventDataCollector,\n pickleIds,\n options,\n newId,\n supportCodeLibrary,\n supportCodePaths,\n supportCodeRequiredModules,\n }: INewCoordinatorOptions) {\n this.cwd = cwd\n this.eventBroadcaster = eventBroadcaster\n this.eventDataCollector = eventDataCollector\n this.stopwatch = new RealTestRunStopwatch()\n this.options = options\n this.newId = newId\n this.supportCodeLibrary = supportCodeLibrary\n this.supportCodePaths = supportCodePaths\n this.supportCodeRequiredModules = supportCodeRequiredModules\n this.pickleIds = pickleIds\n this.nextPickleIdIndex = 0\n this.success = true\n this.workers = {}\n }\n\n parseWorkerMessage(worker: IWorker, message: ICoordinatorReport): void {\n if (message.ready) {\n this.giveWork(worker)\n } else if (doesHaveValue(message.jsonEnvelope)) {\n const envelope = messages.parseEnvelope(message.jsonEnvelope)\n this.eventBroadcaster.emit('envelope', envelope)\n if (doesHaveValue(envelope.testCaseFinished)) {\n this.parseTestCaseResult(envelope.testCaseFinished)\n }\n } else {\n throw new Error(\n `Unexpected message from worker: ${JSON.stringify(message)}`\n )\n }\n }\n\n startWorker(id: string, total: number): void {\n const workerProcess = fork(runWorkerPath, [], {\n cwd: this.cwd,\n env: {\n ...process.env,\n CUCUMBER_PARALLEL: 'true',\n CUCUMBER_TOTAL_WORKERS: total.toString(),\n CUCUMBER_WORKER_ID: id,\n },\n stdio: ['inherit', 'inherit', 'inherit', 'ipc'],\n })\n const worker = { closed: false, process: workerProcess }\n this.workers[id] = worker\n worker.process.on('message', (message: ICoordinatorReport) => {\n this.parseWorkerMessage(worker, message)\n })\n worker.process.on('close', (exitCode) => {\n worker.closed = true\n this.onWorkerProcessClose(exitCode)\n })\n const initializeCommand: IWorkerCommand = {\n initialize: {\n filterStacktraces: this.options.filterStacktraces,\n supportCodePaths: this.supportCodePaths,\n supportCodeRequiredModules: this.supportCodeRequiredModules,\n supportCodeIds: {\n stepDefinitionIds: this.supportCodeLibrary.stepDefinitions.map(\n (s) => s.id\n ),\n beforeTestCaseHookDefinitionIds:\n this.supportCodeLibrary.beforeTestCaseHookDefinitions.map(\n (h) => h.id\n ),\n afterTestCaseHookDefinitionIds:\n this.supportCodeLibrary.afterTestCaseHookDefinitions.map(\n (h) => h.id\n ),\n },\n options: this.options,\n },\n }\n worker.process.send(initializeCommand)\n }\n\n onWorkerProcessClose(exitCode: number): void {\n const success = exitCode === 0\n if (!success) {\n this.success = false\n }\n if (Object.values(this.workers).every((x) => x.closed)) {\n const envelope: messages.Envelope = {\n testRunFinished: {\n timestamp: this.stopwatch.timestamp(),\n success,\n },\n }\n this.eventBroadcaster.emit('envelope', envelope)\n this.onFinish(this.success)\n }\n }\n\n parseTestCaseResult(testCaseFinished: messages.TestCaseFinished): void {\n const { worstTestStepResult } = this.eventDataCollector.getTestCaseAttempt(\n testCaseFinished.testCaseStartedId\n )\n if (\n !testCaseFinished.willBeRetried &&\n shouldCauseFailure(worstTestStepResult.status, this.options)\n ) {\n this.success = false\n }\n }\n\n async run(numberOfWorkers: number): Promise<boolean> {\n const envelope: messages.Envelope = {\n testRunStarted: {\n timestamp: this.stopwatch.timestamp(),\n },\n }\n this.eventBroadcaster.emit('envelope', envelope)\n this.stopwatch.start()\n this.assembledTestCases = await assembleTestCases({\n eventBroadcaster: this.eventBroadcaster,\n newId: this.newId,\n pickles: this.pickleIds.map((pickleId) =>\n this.eventDataCollector.getPickle(pickleId)\n ),\n supportCodeLibrary: this.supportCodeLibrary,\n })\n return await new Promise<boolean>((resolve) => {\n for (let i = 0; i <= numberOfWorkers; i++) {\n this.startWorker(i.toString(), numberOfWorkers)\n }\n this.onFinish = resolve\n })\n }\n\n giveWork(worker: IWorker): void {\n if (this.nextPickleIdIndex === this.pickleIds.length) {\n const finalizeCommand: IWorkerCommand = { finalize: true }\n worker.process.send(finalizeCommand)\n return\n }\n const pickleId = this.pickleIds[this.nextPickleIdIndex]\n this.nextPickleIdIndex += 1\n const pickle = this.eventDataCollector.getPickle(pickleId)\n const testCase = this.assembledTestCases[pickleId]\n const gherkinDocument = this.eventDataCollector.getGherkinDocument(\n pickle.uri\n )\n const retries = retriesForPickle(pickle, this.options)\n const skip = this.options.dryRun || (this.options.failFast && !this.success)\n const runCommand: IWorkerCommand = {\n run: {\n retries,\n skip,\n elapsed: this.stopwatch.duration().nanos(),\n pickle,\n testCase,\n gherkinDocument,\n },\n }\n worker.process.send(runCommand)\n }\n}\n"]}
1
+ {"version":3,"file":"coordinator.js","sourceRoot":"","sources":["../../../src/runtime/parallel/coordinator.ts"],"names":[],"mappings":"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","sourcesContent":["import { ChildProcess, fork } from 'child_process'\nimport path from 'path'\nimport { retriesForPickle, shouldCauseFailure } from '../helpers'\nimport * as messages from '@cucumber/messages'\nimport { EventEmitter } from 'events'\nimport { EventDataCollector } from '../../formatter/helpers'\nimport { IRuntime, IRuntimeOptions } from '..'\nimport { ISupportCodeLibrary } from '../../support_code_library_builder/types'\nimport { ICoordinatorReport, IWorkerCommand } from './command_types'\nimport { doesHaveValue } from '../../value_checker'\nimport { ITestRunStopwatch, RealTestRunStopwatch } from '../stopwatch'\nimport { assembleTestCases, IAssembledTestCases } from '../assemble_test_cases'\nimport { IdGenerator } from '@cucumber/messages'\n\nconst runWorkerPath = path.resolve(__dirname, 'run_worker.js')\n\nexport interface INewCoordinatorOptions {\n cwd: string\n logger: Console\n eventBroadcaster: EventEmitter\n eventDataCollector: EventDataCollector\n options: IRuntimeOptions\n newId: IdGenerator.NewId\n pickleIds: string[]\n supportCodeLibrary: ISupportCodeLibrary\n requireModules: string[]\n requirePaths: string[]\n importPaths: string[]\n numberOfWorkers: number\n}\n\nconst enum WorkerState {\n 'idle',\n 'closed',\n 'running',\n 'new',\n}\n\ninterface IWorker {\n state: WorkerState\n process: ChildProcess\n id: string\n}\n\ninterface IPicklePlacement {\n index: number\n pickle: messages.Pickle\n}\n\nexport default class Coordinator implements IRuntime {\n private readonly cwd: string\n private readonly eventBroadcaster: EventEmitter\n private readonly eventDataCollector: EventDataCollector\n private readonly stopwatch: ITestRunStopwatch\n private onFinish: (success: boolean) => void\n private readonly options: IRuntimeOptions\n private readonly newId: IdGenerator.NewId\n private readonly pickleIds: string[]\n private assembledTestCases: IAssembledTestCases\n private inProgressPickles: Record<string, messages.Pickle>\n private workers: Record<string, IWorker>\n private readonly supportCodeLibrary: ISupportCodeLibrary\n private readonly requireModules: string[]\n private readonly requirePaths: string[]\n private readonly importPaths: string[]\n private readonly numberOfWorkers: number\n private readonly logger: Console\n private success: boolean\n private idleInterventions: number\n\n constructor({\n cwd,\n logger,\n eventBroadcaster,\n eventDataCollector,\n pickleIds,\n options,\n newId,\n supportCodeLibrary,\n requireModules,\n requirePaths,\n importPaths,\n numberOfWorkers,\n }: INewCoordinatorOptions) {\n this.cwd = cwd\n this.logger = logger\n this.eventBroadcaster = eventBroadcaster\n this.eventDataCollector = eventDataCollector\n this.stopwatch = new RealTestRunStopwatch()\n this.options = options\n this.newId = newId\n this.supportCodeLibrary = supportCodeLibrary\n this.requireModules = requireModules\n this.requirePaths = requirePaths\n this.importPaths = importPaths\n this.pickleIds = Array.from(pickleIds)\n this.numberOfWorkers = numberOfWorkers\n this.success = true\n this.workers = {}\n this.inProgressPickles = {}\n this.idleInterventions = 0\n }\n\n parseWorkerMessage(worker: IWorker, message: ICoordinatorReport): void {\n if (message.ready) {\n worker.state = WorkerState.idle\n this.awakenWorkers(worker)\n } else if (doesHaveValue(message.jsonEnvelope)) {\n const envelope = messages.parseEnvelope(message.jsonEnvelope)\n this.eventBroadcaster.emit('envelope', envelope)\n if (doesHaveValue(envelope.testCaseFinished)) {\n delete this.inProgressPickles[worker.id]\n this.parseTestCaseResult(envelope.testCaseFinished)\n }\n } else {\n throw new Error(\n `Unexpected message from worker: ${JSON.stringify(message)}`\n )\n }\n }\n\n awakenWorkers(triggeringWorker: IWorker): void {\n Object.values(this.workers).forEach((worker) => {\n if (worker.state === WorkerState.idle) {\n this.giveWork(worker)\n }\n return worker.state !== WorkerState.idle\n })\n\n if (\n Object.keys(this.inProgressPickles).length == 0 &&\n this.pickleIds.length > 0\n ) {\n this.giveWork(triggeringWorker, true)\n this.idleInterventions++\n }\n }\n\n startWorker(id: string, total: number): void {\n const workerProcess = fork(runWorkerPath, [], {\n cwd: this.cwd,\n env: {\n ...process.env,\n CUCUMBER_PARALLEL: 'true',\n CUCUMBER_TOTAL_WORKERS: total.toString(),\n CUCUMBER_WORKER_ID: id,\n },\n stdio: ['inherit', 'inherit', 'inherit', 'ipc'],\n })\n const worker = { state: WorkerState.new, process: workerProcess, id }\n this.workers[id] = worker\n worker.process.on('message', (message: ICoordinatorReport) => {\n this.parseWorkerMessage(worker, message)\n })\n worker.process.on('close', (exitCode) => {\n worker.state = WorkerState.closed\n this.onWorkerProcessClose(exitCode)\n })\n const initializeCommand: IWorkerCommand = {\n initialize: {\n filterStacktraces: this.options.filterStacktraces,\n requireModules: this.requireModules,\n requirePaths: this.requirePaths,\n importPaths: this.importPaths,\n supportCodeIds: {\n stepDefinitionIds: this.supportCodeLibrary.stepDefinitions.map(\n (s) => s.id\n ),\n beforeTestCaseHookDefinitionIds:\n this.supportCodeLibrary.beforeTestCaseHookDefinitions.map(\n (h) => h.id\n ),\n afterTestCaseHookDefinitionIds:\n this.supportCodeLibrary.afterTestCaseHookDefinitions.map(\n (h) => h.id\n ),\n },\n options: this.options,\n },\n }\n worker.process.send(initializeCommand)\n }\n\n onWorkerProcessClose(exitCode: number): void {\n const success = exitCode === 0\n if (!success) {\n this.success = false\n }\n\n if (\n Object.values(this.workers).every((x) => x.state === WorkerState.closed)\n ) {\n const envelope: messages.Envelope = {\n testRunFinished: {\n timestamp: this.stopwatch.timestamp(),\n success,\n },\n }\n this.eventBroadcaster.emit('envelope', envelope)\n this.onFinish(this.success)\n }\n }\n\n parseTestCaseResult(testCaseFinished: messages.TestCaseFinished): void {\n const { worstTestStepResult } = this.eventDataCollector.getTestCaseAttempt(\n testCaseFinished.testCaseStartedId\n )\n if (\n !testCaseFinished.willBeRetried &&\n shouldCauseFailure(worstTestStepResult.status, this.options)\n ) {\n this.success = false\n }\n }\n\n async start(): Promise<boolean> {\n const envelope: messages.Envelope = {\n testRunStarted: {\n timestamp: this.stopwatch.timestamp(),\n },\n }\n this.eventBroadcaster.emit('envelope', envelope)\n this.stopwatch.start()\n this.assembledTestCases = await assembleTestCases({\n eventBroadcaster: this.eventBroadcaster,\n newId: this.newId,\n pickles: this.pickleIds.map((pickleId) =>\n this.eventDataCollector.getPickle(pickleId)\n ),\n supportCodeLibrary: this.supportCodeLibrary,\n })\n return await new Promise<boolean>((resolve) => {\n for (let i = 0; i < this.numberOfWorkers; i++) {\n this.startWorker(i.toString(), this.numberOfWorkers)\n }\n this.onFinish = (status) => {\n if (this.idleInterventions > 0) {\n this.logger.warn(\n `WARNING: All workers went idle ${this.idleInterventions} time(s). Consider revising handler passed to setParallelCanAssign.`\n )\n }\n\n resolve(status)\n }\n })\n }\n\n nextPicklePlacement(): IPicklePlacement {\n for (let index = 0; index < this.pickleIds.length; index++) {\n const placement = this.placementAt(index)\n if (\n this.supportCodeLibrary.parallelCanAssign(\n placement.pickle,\n Object.values(this.inProgressPickles)\n )\n ) {\n return placement\n }\n }\n\n return null\n }\n\n placementAt(index: number): IPicklePlacement {\n return {\n index,\n pickle: this.eventDataCollector.getPickle(this.pickleIds[index]),\n }\n }\n\n giveWork(worker: IWorker, force: boolean = false): void {\n if (this.pickleIds.length < 1) {\n const finalizeCommand: IWorkerCommand = { finalize: true }\n worker.state = WorkerState.running\n worker.process.send(finalizeCommand)\n return\n }\n\n const picklePlacement = force\n ? this.placementAt(0)\n : this.nextPicklePlacement()\n\n if (picklePlacement === null) {\n return\n }\n\n const { index: nextPickleIndex, pickle } = picklePlacement\n\n this.pickleIds.splice(nextPickleIndex, 1)\n this.inProgressPickles[worker.id] = pickle\n const testCase = this.assembledTestCases[pickle.id]\n const gherkinDocument = this.eventDataCollector.getGherkinDocument(\n pickle.uri\n )\n const retries = retriesForPickle(pickle, this.options)\n const skip = this.options.dryRun || (this.options.failFast && !this.success)\n const runCommand: IWorkerCommand = {\n run: {\n retries,\n skip,\n elapsed: this.stopwatch.duration().nanos(),\n pickle,\n testCase,\n gherkinDocument,\n },\n }\n worker.state = WorkerState.running\n worker.process.send(runCommand)\n }\n}\n"]}
@@ -8,7 +8,7 @@ const verror_1 = __importDefault(require("verror"));
8
8
  const value_checker_1 = require("../../value_checker");
9
9
  function run() {
10
10
  const exit = (exitCode, error, message) => {
11
- if (value_checker_1.doesHaveValue(error)) {
11
+ if ((0, value_checker_1.doesHaveValue)(error)) {
12
12
  console.error(verror_1.default.fullStack(new verror_1.default(error, message))); // eslint-disable-line no-console
13
13
  }
14
14
  process.exit(exitCode);
@@ -1 +1 @@
1
- {"version":3,"file":"run_worker.js","sourceRoot":"","sources":["../../../src/runtime/parallel/run_worker.ts"],"names":[],"mappings":";;;;;AAAA,sDAA6B;AAC7B,oDAA2B;AAC3B,uDAAmD;AAEnD,SAAS,GAAG;IACV,MAAM,IAAI,GAAG,CAAC,QAAgB,EAAE,KAAa,EAAE,OAAgB,EAAQ,EAAE;QACvE,IAAI,6BAAa,CAAC,KAAK,CAAC,EAAE;YACxB,OAAO,CAAC,KAAK,CAAC,gBAAM,CAAC,SAAS,CAAC,IAAI,gBAAM,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC,CAAA,CAAC,iCAAiC;SAC9F;QACD,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;IACxB,CAAC,CAAA;IACD,MAAM,MAAM,GAAG,IAAI,gBAAM,CAAC;QACxB,EAAE,EAAE,OAAO,CAAC,GAAG,CAAC,kBAAkB;QAClC,WAAW,EAAE,CAAC,OAAY,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC;QACpD,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE;QAClB,IAAI;KACL,CAAC,CAAA;IACF,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC,CAAM,EAAQ,EAAE;QACrC,MAAM;aACH,cAAc,CAAC,CAAC,CAAC;aACjB,KAAK,CAAC,CAAC,KAAY,EAAE,EAAE,CACtB,IAAI,CAAC,CAAC,EAAE,KAAK,EAAE,2CAA2C,CAAC,CAC5D,CAAA;IACL,CAAC,CAAC,CAAA;AACJ,CAAC;AAED,GAAG,EAAE,CAAA","sourcesContent":["import Worker from './worker'\nimport VError from 'verror'\nimport { doesHaveValue } from '../../value_checker'\n\nfunction run(): void {\n const exit = (exitCode: number, error?: Error, message?: string): void => {\n if (doesHaveValue(error)) {\n console.error(VError.fullStack(new VError(error, message))) // eslint-disable-line no-console\n }\n process.exit(exitCode)\n }\n const worker = new Worker({\n id: process.env.CUCUMBER_WORKER_ID,\n sendMessage: (message: any) => process.send(message),\n cwd: process.cwd(),\n exit,\n })\n process.on('message', (m: any): void => {\n worker\n .receiveMessage(m)\n .catch((error: Error) =>\n exit(1, error, 'Unexpected error on worker.receiveMessage')\n )\n })\n}\n\nrun()\n"]}
1
+ {"version":3,"file":"run_worker.js","sourceRoot":"","sources":["../../../src/runtime/parallel/run_worker.ts"],"names":[],"mappings":";;;;;AAAA,sDAA6B;AAC7B,oDAA2B;AAC3B,uDAAmD;AAEnD,SAAS,GAAG;IACV,MAAM,IAAI,GAAG,CAAC,QAAgB,EAAE,KAAa,EAAE,OAAgB,EAAQ,EAAE;QACvE,IAAI,IAAA,6BAAa,EAAC,KAAK,CAAC,EAAE;YACxB,OAAO,CAAC,KAAK,CAAC,gBAAM,CAAC,SAAS,CAAC,IAAI,gBAAM,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC,CAAA,CAAC,iCAAiC;SAC9F;QACD,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;IACxB,CAAC,CAAA;IACD,MAAM,MAAM,GAAG,IAAI,gBAAM,CAAC;QACxB,EAAE,EAAE,OAAO,CAAC,GAAG,CAAC,kBAAkB;QAClC,WAAW,EAAE,CAAC,OAAY,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC;QACpD,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE;QAClB,IAAI;KACL,CAAC,CAAA;IACF,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC,CAAM,EAAQ,EAAE;QACrC,MAAM;aACH,cAAc,CAAC,CAAC,CAAC;aACjB,KAAK,CAAC,CAAC,KAAY,EAAE,EAAE,CACtB,IAAI,CAAC,CAAC,EAAE,KAAK,EAAE,2CAA2C,CAAC,CAC5D,CAAA;IACL,CAAC,CAAC,CAAA;AACJ,CAAC;AAED,GAAG,EAAE,CAAA","sourcesContent":["import Worker from './worker'\nimport VError from 'verror'\nimport { doesHaveValue } from '../../value_checker'\n\nfunction run(): void {\n const exit = (exitCode: number, error?: Error, message?: string): void => {\n if (doesHaveValue(error)) {\n console.error(VError.fullStack(new VError(error, message))) // eslint-disable-line no-console\n }\n process.exit(exitCode)\n }\n const worker = new Worker({\n id: process.env.CUCUMBER_WORKER_ID,\n sendMessage: (message: any) => process.send(message),\n cwd: process.cwd(),\n exit,\n })\n process.on('message', (m: any): void => {\n worker\n .receiveMessage(m)\n .catch((error: Error) =>\n exit(1, error, 'Unexpected error on worker.receiveMessage')\n )\n })\n}\n\nrun()\n"]}
@@ -1,5 +1,4 @@
1
1
  import { ICoordinatorReport, IWorkerCommand, IWorkerCommandInitialize, IWorkerCommandRun } from './command_types';
2
- import TestRunHookDefinition from '../../models/test_run_hook_definition';
3
2
  declare type IExitFunction = (exitCode: number, error?: Error, message?: string) => void;
4
3
  declare type IMessageSender = (command: ICoordinatorReport) => void;
5
4
  export default class Worker {
@@ -13,17 +12,16 @@ export default class Worker {
13
12
  private readonly stackTraceFilter;
14
13
  private supportCodeLibrary;
15
14
  private worldParameters;
16
- private options;
15
+ private runTestRunHooks;
17
16
  constructor({ cwd, exit, id, sendMessage, }: {
18
17
  cwd: string;
19
18
  exit: IExitFunction;
20
19
  id: string;
21
20
  sendMessage: IMessageSender;
22
21
  });
23
- initialize({ filterStacktraces, supportCodeRequiredModules, supportCodePaths, supportCodeIds, options, }: IWorkerCommandInitialize): Promise<void>;
22
+ initialize({ filterStacktraces, requireModules, requirePaths, importPaths, supportCodeIds, options, }: IWorkerCommandInitialize): Promise<void>;
24
23
  finalize(): Promise<void>;
25
24
  receiveMessage(message: IWorkerCommand): Promise<void>;
26
25
  runTestCase({ gherkinDocument, pickle, testCase, elapsed, retries, skip, }: IWorkerCommandRun): Promise<void>;
27
- runTestRunHooks(testRunHookDefinitions: TestRunHookDefinition[], name: string): Promise<void>;
28
26
  }
29
27
  export {};
@@ -3,18 +3,16 @@ 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 helpers_1 = require("../../formatter/helpers");
6
+ const messages_1 = require("@cucumber/messages");
7
+ const durations_1 = require("durations");
7
8
  const events_1 = require("events");
9
+ const url_1 = require("url");
8
10
  const stack_trace_filter_1 = __importDefault(require("../../stack_trace_filter"));
9
11
  const support_code_library_builder_1 = __importDefault(require("../../support_code_library_builder"));
10
- const test_case_runner_1 = __importDefault(require("../test_case_runner"));
11
- const user_code_runner_1 = __importDefault(require("../../user_code_runner"));
12
- const messages_1 = require("@cucumber/messages");
13
12
  const value_checker_1 = require("../../value_checker");
13
+ const run_test_run_hooks_1 = require("../run_test_run_hooks");
14
14
  const stopwatch_1 = require("../stopwatch");
15
- const durations_1 = require("durations");
16
- const url_1 = require("url");
17
- const helpers_2 = require("../../cli/helpers");
15
+ const test_case_runner_1 = __importDefault(require("../test_case_runner"));
18
16
  // eslint-disable-next-line @typescript-eslint/no-var-requires
19
17
  const { importer } = require('../../importer');
20
18
  const { uuid } = messages_1.IdGenerator;
@@ -33,24 +31,20 @@ class Worker {
33
31
  });
34
32
  });
35
33
  }
36
- async initialize({ filterStacktraces, supportCodeRequiredModules, supportCodePaths, supportCodeIds, options, }) {
37
- supportCodeRequiredModules.map((module) => require(module));
34
+ async initialize({ filterStacktraces, requireModules, requirePaths, importPaths, supportCodeIds, options, }) {
38
35
  support_code_library_builder_1.default.reset(this.cwd, this.newId);
39
- for (const codePath of supportCodePaths) {
40
- if (supportCodeRequiredModules.length || !helpers_2.isJavaScript(codePath)) {
41
- require(codePath);
42
- }
43
- else {
44
- await importer(url_1.pathToFileURL(codePath));
45
- }
36
+ requireModules.map((module) => require(module));
37
+ requirePaths.map((module) => require(module));
38
+ for (const path of importPaths) {
39
+ await importer((0, url_1.pathToFileURL)(path));
46
40
  }
47
41
  this.supportCodeLibrary = support_code_library_builder_1.default.finalize(supportCodeIds);
48
42
  this.worldParameters = options.worldParameters;
49
- this.options = options;
50
43
  this.filterStacktraces = filterStacktraces;
51
44
  if (this.filterStacktraces) {
52
45
  this.stackTraceFilter.filter();
53
46
  }
47
+ this.runTestRunHooks = (0, run_test_run_hooks_1.makeRunTestRunHooks)(options.dryRun, this.supportCodeLibrary.defaultTimeout, (name, location) => `${name} hook errored on worker ${this.id}, process exiting: ${location}`);
54
48
  await this.runTestRunHooks(this.supportCodeLibrary.beforeTestRunHookDefinitions, 'a BeforeAll');
55
49
  this.sendMessage({ ready: true });
56
50
  }
@@ -62,19 +56,19 @@ class Worker {
62
56
  this.exit(0);
63
57
  }
64
58
  async receiveMessage(message) {
65
- if (value_checker_1.doesHaveValue(message.initialize)) {
59
+ if ((0, value_checker_1.doesHaveValue)(message.initialize)) {
66
60
  await this.initialize(message.initialize);
67
61
  }
68
62
  else if (message.finalize) {
69
63
  await this.finalize();
70
64
  }
71
- else if (value_checker_1.doesHaveValue(message.run)) {
65
+ else if ((0, value_checker_1.doesHaveValue)(message.run)) {
72
66
  await this.runTestCase(message.run);
73
67
  }
74
68
  }
75
69
  async runTestCase({ gherkinDocument, pickle, testCase, elapsed, retries, skip, }) {
76
70
  const stopwatch = new stopwatch_1.RealTestRunStopwatch();
77
- stopwatch.from(durations_1.duration(elapsed));
71
+ stopwatch.from((0, durations_1.duration)(elapsed));
78
72
  const testCaseRunner = new test_case_runner_1.default({
79
73
  eventBroadcaster: this.eventBroadcaster,
80
74
  stopwatch,
@@ -90,23 +84,6 @@ class Worker {
90
84
  await testCaseRunner.run();
91
85
  this.sendMessage({ ready: true });
92
86
  }
93
- async runTestRunHooks(testRunHookDefinitions, name) {
94
- if (this.options.dryRun) {
95
- return;
96
- }
97
- for (const hookDefinition of testRunHookDefinitions) {
98
- const { error } = await user_code_runner_1.default.run({
99
- argsArray: [],
100
- fn: hookDefinition.code,
101
- thisArg: null,
102
- timeoutInMilliseconds: value_checker_1.valueOrDefault(hookDefinition.options.timeout, this.supportCodeLibrary.defaultTimeout),
103
- });
104
- if (value_checker_1.doesHaveValue(error)) {
105
- const location = helpers_1.formatLocation(hookDefinition);
106
- this.exit(1, error, `${name} hook errored on worker ${this.id}, process exiting: ${location}`);
107
- }
108
- }
109
- }
110
87
  }
111
88
  exports.default = Worker;
112
89
  //# sourceMappingURL=worker.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"worker.js","sourceRoot":"","sources":["../../../src/runtime/parallel/worker.ts"],"names":[],"mappings":"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","sourcesContent":["import { formatLocation } from '../../formatter/helpers'\nimport {\n ICoordinatorReport,\n IWorkerCommand,\n IWorkerCommandInitialize,\n IWorkerCommandRun,\n} from './command_types'\nimport { EventEmitter } from 'events'\nimport StackTraceFilter from '../../stack_trace_filter'\nimport supportCodeLibraryBuilder from '../../support_code_library_builder'\nimport TestCaseRunner from '../test_case_runner'\nimport UserCodeRunner from '../../user_code_runner'\nimport { IdGenerator } from '@cucumber/messages'\nimport * as messages from '@cucumber/messages'\nimport TestRunHookDefinition from '../../models/test_run_hook_definition'\nimport { ISupportCodeLibrary } from '../../support_code_library_builder/types'\nimport { doesHaveValue, valueOrDefault } from '../../value_checker'\nimport { IRuntimeOptions } from '../index'\nimport { RealTestRunStopwatch } from '../stopwatch'\nimport { duration } from 'durations'\nimport { pathToFileURL } from 'url'\nimport { isJavaScript } from '../../cli/helpers'\n\n// eslint-disable-next-line @typescript-eslint/no-var-requires\nconst { importer } = require('../../importer')\nconst { uuid } = IdGenerator\n\ntype IExitFunction = (exitCode: number, error?: Error, message?: string) => void\ntype IMessageSender = (command: ICoordinatorReport) => void\n\nexport default class Worker {\n private readonly cwd: string\n private readonly exit: IExitFunction\n\n private readonly id: string\n private readonly eventBroadcaster: EventEmitter\n private filterStacktraces: boolean\n private readonly newId: IdGenerator.NewId\n private readonly sendMessage: IMessageSender\n private readonly stackTraceFilter: StackTraceFilter\n private supportCodeLibrary: ISupportCodeLibrary\n private worldParameters: any\n private options: IRuntimeOptions\n\n constructor({\n cwd,\n exit,\n id,\n sendMessage,\n }: {\n cwd: string\n exit: IExitFunction\n id: string\n sendMessage: IMessageSender\n }) {\n this.id = id\n this.newId = uuid()\n this.cwd = cwd\n this.exit = exit\n this.sendMessage = sendMessage\n this.eventBroadcaster = new EventEmitter()\n this.stackTraceFilter = new StackTraceFilter()\n this.eventBroadcaster.on('envelope', (envelope: messages.Envelope) => {\n this.sendMessage({\n jsonEnvelope: JSON.stringify(envelope),\n })\n })\n }\n\n async initialize({\n filterStacktraces,\n supportCodeRequiredModules,\n supportCodePaths,\n supportCodeIds,\n options,\n }: IWorkerCommandInitialize): Promise<void> {\n supportCodeRequiredModules.map((module) => require(module))\n supportCodeLibraryBuilder.reset(this.cwd, this.newId)\n for (const codePath of supportCodePaths) {\n if (supportCodeRequiredModules.length || !isJavaScript(codePath)) {\n require(codePath)\n } else {\n await importer(pathToFileURL(codePath))\n }\n }\n this.supportCodeLibrary = supportCodeLibraryBuilder.finalize(supportCodeIds)\n\n this.worldParameters = options.worldParameters\n this.options = options\n this.filterStacktraces = filterStacktraces\n if (this.filterStacktraces) {\n this.stackTraceFilter.filter()\n }\n await this.runTestRunHooks(\n this.supportCodeLibrary.beforeTestRunHookDefinitions,\n 'a BeforeAll'\n )\n this.sendMessage({ ready: true })\n }\n\n async finalize(): Promise<void> {\n await this.runTestRunHooks(\n this.supportCodeLibrary.afterTestRunHookDefinitions,\n 'an AfterAll'\n )\n if (this.filterStacktraces) {\n this.stackTraceFilter.unfilter()\n }\n this.exit(0)\n }\n\n async receiveMessage(message: IWorkerCommand): Promise<void> {\n if (doesHaveValue(message.initialize)) {\n await this.initialize(message.initialize)\n } else if (message.finalize) {\n await this.finalize()\n } else if (doesHaveValue(message.run)) {\n await this.runTestCase(message.run)\n }\n }\n\n async runTestCase({\n gherkinDocument,\n pickle,\n testCase,\n elapsed,\n retries,\n skip,\n }: IWorkerCommandRun): Promise<void> {\n const stopwatch = new RealTestRunStopwatch()\n stopwatch.from(duration(elapsed))\n const testCaseRunner = new TestCaseRunner({\n eventBroadcaster: this.eventBroadcaster,\n stopwatch,\n gherkinDocument,\n newId: this.newId,\n pickle,\n testCase,\n retries,\n skip,\n supportCodeLibrary: this.supportCodeLibrary,\n worldParameters: this.worldParameters,\n })\n await testCaseRunner.run()\n this.sendMessage({ ready: true })\n }\n\n async runTestRunHooks(\n testRunHookDefinitions: TestRunHookDefinition[],\n name: string\n ): Promise<void> {\n if (this.options.dryRun) {\n return\n }\n for (const hookDefinition of testRunHookDefinitions) {\n const { error } = await UserCodeRunner.run({\n argsArray: [],\n fn: hookDefinition.code,\n thisArg: null,\n timeoutInMilliseconds: valueOrDefault(\n hookDefinition.options.timeout,\n this.supportCodeLibrary.defaultTimeout\n ),\n })\n if (doesHaveValue(error)) {\n const location = formatLocation(hookDefinition)\n this.exit(\n 1,\n error,\n `${name} hook errored on worker ${this.id}, process exiting: ${location}`\n )\n }\n }\n }\n}\n"]}
1
+ {"version":3,"file":"worker.js","sourceRoot":"","sources":["../../../src/runtime/parallel/worker.ts"],"names":[],"mappings":"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","sourcesContent":["import * as messages from '@cucumber/messages'\nimport { IdGenerator } from '@cucumber/messages'\nimport { duration } from 'durations'\nimport { EventEmitter } from 'events'\nimport { pathToFileURL } from 'url'\nimport StackTraceFilter from '../../stack_trace_filter'\nimport supportCodeLibraryBuilder from '../../support_code_library_builder'\nimport { ISupportCodeLibrary } from '../../support_code_library_builder/types'\nimport { doesHaveValue } from '../../value_checker'\nimport { makeRunTestRunHooks, RunsTestRunHooks } from '../run_test_run_hooks'\nimport { RealTestRunStopwatch } from '../stopwatch'\nimport TestCaseRunner from '../test_case_runner'\nimport {\n ICoordinatorReport,\n IWorkerCommand,\n IWorkerCommandInitialize,\n IWorkerCommandRun,\n} from './command_types'\n\n// eslint-disable-next-line @typescript-eslint/no-var-requires\nconst { importer } = require('../../importer')\nconst { uuid } = IdGenerator\n\ntype IExitFunction = (exitCode: number, error?: Error, message?: string) => void\ntype IMessageSender = (command: ICoordinatorReport) => void\n\nexport default class Worker {\n private readonly cwd: string\n private readonly exit: IExitFunction\n\n private readonly id: string\n private readonly eventBroadcaster: EventEmitter\n private filterStacktraces: boolean\n private readonly newId: IdGenerator.NewId\n private readonly sendMessage: IMessageSender\n private readonly stackTraceFilter: StackTraceFilter\n private supportCodeLibrary: ISupportCodeLibrary\n private worldParameters: any\n private runTestRunHooks: RunsTestRunHooks\n\n constructor({\n cwd,\n exit,\n id,\n sendMessage,\n }: {\n cwd: string\n exit: IExitFunction\n id: string\n sendMessage: IMessageSender\n }) {\n this.id = id\n this.newId = uuid()\n this.cwd = cwd\n this.exit = exit\n this.sendMessage = sendMessage\n this.eventBroadcaster = new EventEmitter()\n this.stackTraceFilter = new StackTraceFilter()\n this.eventBroadcaster.on('envelope', (envelope: messages.Envelope) => {\n this.sendMessage({\n jsonEnvelope: JSON.stringify(envelope),\n })\n })\n }\n\n async initialize({\n filterStacktraces,\n requireModules,\n requirePaths,\n importPaths,\n supportCodeIds,\n options,\n }: IWorkerCommandInitialize): Promise<void> {\n supportCodeLibraryBuilder.reset(this.cwd, this.newId)\n requireModules.map((module) => require(module))\n requirePaths.map((module) => require(module))\n for (const path of importPaths) {\n await importer(pathToFileURL(path))\n }\n this.supportCodeLibrary = supportCodeLibraryBuilder.finalize(supportCodeIds)\n\n this.worldParameters = options.worldParameters\n this.filterStacktraces = filterStacktraces\n if (this.filterStacktraces) {\n this.stackTraceFilter.filter()\n }\n this.runTestRunHooks = makeRunTestRunHooks(\n options.dryRun,\n this.supportCodeLibrary.defaultTimeout,\n (name, location) =>\n `${name} hook errored on worker ${this.id}, process exiting: ${location}`\n )\n await this.runTestRunHooks(\n this.supportCodeLibrary.beforeTestRunHookDefinitions,\n 'a BeforeAll'\n )\n this.sendMessage({ ready: true })\n }\n\n async finalize(): Promise<void> {\n await this.runTestRunHooks(\n this.supportCodeLibrary.afterTestRunHookDefinitions,\n 'an AfterAll'\n )\n if (this.filterStacktraces) {\n this.stackTraceFilter.unfilter()\n }\n this.exit(0)\n }\n\n async receiveMessage(message: IWorkerCommand): Promise<void> {\n if (doesHaveValue(message.initialize)) {\n await this.initialize(message.initialize)\n } else if (message.finalize) {\n await this.finalize()\n } else if (doesHaveValue(message.run)) {\n await this.runTestCase(message.run)\n }\n }\n\n async runTestCase({\n gherkinDocument,\n pickle,\n testCase,\n elapsed,\n retries,\n skip,\n }: IWorkerCommandRun): Promise<void> {\n const stopwatch = new RealTestRunStopwatch()\n stopwatch.from(duration(elapsed))\n const testCaseRunner = new TestCaseRunner({\n eventBroadcaster: this.eventBroadcaster,\n stopwatch,\n gherkinDocument,\n newId: this.newId,\n pickle,\n testCase,\n retries,\n skip,\n supportCodeLibrary: this.supportCodeLibrary,\n worldParameters: this.worldParameters,\n })\n await testCaseRunner.run()\n this.sendMessage({ ready: true })\n }\n}\n"]}
@@ -0,0 +1,3 @@
1
+ import TestRunHookDefinition from '../models/test_run_hook_definition';
2
+ export declare type RunsTestRunHooks = (definitions: TestRunHookDefinition[], name: string) => Promise<void>;
3
+ export declare const makeRunTestRunHooks: (dryRun: boolean, defaultTimeout: number, errorMessage: (name: string, location: string) => string) => RunsTestRunHooks;
@@ -0,0 +1,28 @@
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.makeRunTestRunHooks = void 0;
7
+ const user_code_runner_1 = __importDefault(require("../user_code_runner"));
8
+ const verror_1 = __importDefault(require("verror"));
9
+ const helpers_1 = require("../formatter/helpers");
10
+ const value_checker_1 = require("../value_checker");
11
+ const makeRunTestRunHooks = (dryRun, defaultTimeout, errorMessage) => dryRun
12
+ ? async () => { }
13
+ : async (definitions, name) => {
14
+ for (const hookDefinition of definitions) {
15
+ const { error } = await user_code_runner_1.default.run({
16
+ argsArray: [],
17
+ fn: hookDefinition.code,
18
+ thisArg: null,
19
+ timeoutInMilliseconds: (0, value_checker_1.valueOrDefault)(hookDefinition.options.timeout, defaultTimeout),
20
+ });
21
+ if ((0, value_checker_1.doesHaveValue)(error)) {
22
+ const location = (0, helpers_1.formatLocation)(hookDefinition);
23
+ throw new verror_1.default(error, errorMessage(name, location));
24
+ }
25
+ }
26
+ };
27
+ exports.makeRunTestRunHooks = makeRunTestRunHooks;
28
+ //# sourceMappingURL=run_test_run_hooks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run_test_run_hooks.js","sourceRoot":"","sources":["../../src/runtime/run_test_run_hooks.ts"],"names":[],"mappings":";;;;;;AAAA,2EAAgD;AAChD,oDAA2B;AAC3B,kDAAqD;AACrD,oDAAgE;AAQzD,MAAM,mBAAmB,GAAG,CACjC,MAAe,EACf,cAAsB,EACtB,YAAwD,EACtC,EAAE,CACpB,MAAM;IACJ,CAAC,CAAC,KAAK,IAAI,EAAE,GAAE,CAAC;IAChB,CAAC,CAAC,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,EAAE;QAC1B,KAAK,MAAM,cAAc,IAAI,WAAW,EAAE;YACxC,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,0BAAc,CAAC,GAAG,CAAC;gBACzC,SAAS,EAAE,EAAE;gBACb,EAAE,EAAE,cAAc,CAAC,IAAI;gBACvB,OAAO,EAAE,IAAI;gBACb,qBAAqB,EAAE,IAAA,8BAAc,EACnC,cAAc,CAAC,OAAO,CAAC,OAAO,EAC9B,cAAc,CACf;aACF,CAAC,CAAA;YACF,IAAI,IAAA,6BAAa,EAAC,KAAK,CAAC,EAAE;gBACxB,MAAM,QAAQ,GAAG,IAAA,wBAAc,EAAC,cAAc,CAAC,CAAA;gBAC/C,MAAM,IAAI,gBAAM,CAAC,KAAK,EAAE,YAAY,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAA;aACtD;SACF;IACH,CAAC,CAAA;AAvBM,QAAA,mBAAmB,uBAuBzB","sourcesContent":["import UserCodeRunner from '../user_code_runner'\nimport VError from 'verror'\nimport { formatLocation } from '../formatter/helpers'\nimport { doesHaveValue, valueOrDefault } from '../value_checker'\nimport TestRunHookDefinition from '../models/test_run_hook_definition'\n\nexport type RunsTestRunHooks = (\n definitions: TestRunHookDefinition[],\n name: string\n) => Promise<void>\n\nexport const makeRunTestRunHooks = (\n dryRun: boolean,\n defaultTimeout: number,\n errorMessage: (name: string, location: string) => string\n): RunsTestRunHooks =>\n dryRun\n ? async () => {}\n : async (definitions, name) => {\n for (const hookDefinition of definitions) {\n const { error } = await UserCodeRunner.run({\n argsArray: [],\n fn: hookDefinition.code,\n thisArg: null,\n timeoutInMilliseconds: valueOrDefault(\n hookDefinition.options.timeout,\n defaultTimeout\n ),\n })\n if (doesHaveValue(error)) {\n const location = formatLocation(hookDefinition)\n throw new VError(error, errorMessage(name, location))\n }\n }\n }\n"]}
@@ -1,7 +1,11 @@
1
1
  "use strict";
2
2
  var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
3
  if (k2 === undefined) k2 = k;
4
- Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[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);
5
9
  }) : (function(o, m, k, k2) {
6
10
  if (k2 === undefined) k2 = k;
7
11
  o[k2] = m[k];
@@ -42,8 +46,8 @@ async function run({ defaultTimeout, hookParameter, step, stepDefinition, world,
42
46
  catch (err) {
43
47
  error = err;
44
48
  }
45
- if (value_checker_1.doesNotHaveValue(error)) {
46
- const timeoutInMilliseconds = value_checker_1.valueOrDefault(stepDefinition.options.timeout, defaultTimeout);
49
+ if ((0, value_checker_1.doesNotHaveValue)(error)) {
50
+ const timeoutInMilliseconds = (0, value_checker_1.valueOrDefault)(stepDefinition.options.timeout, defaultTimeout);
47
51
  if (invocationData.validCodeLengths.includes(stepDefinition.code.length)) {
48
52
  const data = await user_code_runner_1.default.run({
49
53
  argsArray: invocationData.parameters,
@@ -67,8 +71,8 @@ async function run({ defaultTimeout, hookParameter, step, stepDefinition, world,
67
71
  else if (result === 'pending') {
68
72
  status = messages.TestStepResultStatus.PENDING;
69
73
  }
70
- else if (value_checker_1.doesHaveValue(error)) {
71
- message = assertion_error_formatter_1.format(error);
74
+ else if ((0, value_checker_1.doesHaveValue)(error)) {
75
+ message = (0, assertion_error_formatter_1.format)(error);
72
76
  status = messages.TestStepResultStatus.FAILED;
73
77
  }
74
78
  else {
@@ -1 +1 @@
1
- {"version":3,"file":"step_runner.js","sourceRoot":"","sources":["../../src/runtime/step_runner.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAAA,mDAA0B;AAC1B,2EAAgD;AAChD,6DAA8C;AAC9C,yEAAkD;AAGlD,oDAIyB;AAEzB,MAAM,EAAE,WAAW,EAAE,SAAS,EAAE,GAAG,cAAI,CAAA;AAUhC,KAAK,UAAU,GAAG,CAAC,EACxB,cAAc,EACd,aAAa,EACb,IAAI,EACJ,cAAc,EACd,KAAK,GACO;IACZ,WAAW,EAAE,CAAA;IACb,IAAI,KAAU,EAAE,MAAW,EAAE,cAA0C,CAAA;IAEvE,IAAI;QACF,cAAc,GAAG,MAAM,cAAc,CAAC,uBAAuB,CAAC;YAC5D,aAAa;YACb,IAAI;YACJ,KAAK;SACN,CAAC,CAAA;KACH;IAAC,OAAO,GAAG,EAAE;QACZ,KAAK,GAAG,GAAG,CAAA;KACZ;IAED,IAAI,gCAAgB,CAAC,KAAK,CAAC,EAAE;QAC3B,MAAM,qBAAqB,GAAG,8BAAc,CAC1C,cAAc,CAAC,OAAO,CAAC,OAAO,EAC9B,cAAc,CACf,CAAA;QAED,IAAI,cAAc,CAAC,gBAAgB,CAAC,QAAQ,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE;YACxE,MAAM,IAAI,GAAG,MAAM,0BAAc,CAAC,GAAG,CAAC;gBACpC,SAAS,EAAE,cAAc,CAAC,UAAU;gBACpC,EAAE,EAAE,cAAc,CAAC,IAAI;gBACvB,OAAO,EAAE,KAAK;gBACd,qBAAqB;aACtB,CAAC,CAAA;YACF,KAAK,GAAG,IAAI,CAAC,KAAK,CAAA;YAClB,MAAM,GAAG,IAAI,CAAC,MAAM,CAAA;SACrB;aAAM;YACL,KAAK,GAAG,cAAc,CAAC,2BAA2B,EAAE,CAAA;SACrD;KACF;IAED,MAAM,QAAQ,GAAG,QAAQ,CAAC,cAAc,CAAC,sBAAsB,CAAC,SAAS,EAAE,CAAC,CAAA;IAC5E,IAAI,MAAqC,CAAA;IACzC,IAAI,OAAe,CAAA;IACnB,IAAI,MAAM,KAAK,SAAS,EAAE;QACxB,MAAM,GAAG,QAAQ,CAAC,oBAAoB,CAAC,OAAO,CAAA;KAC/C;SAAM,IAAI,MAAM,KAAK,SAAS,EAAE;QAC/B,MAAM,GAAG,QAAQ,CAAC,oBAAoB,CAAC,OAAO,CAAA;KAC/C;SAAM,IAAI,6BAAa,CAAC,KAAK,CAAC,EAAE;QAC/B,OAAO,GAAG,kCAAM,CAAC,KAAK,CAAC,CAAA;QACvB,MAAM,GAAG,QAAQ,CAAC,oBAAoB,CAAC,MAAM,CAAA;KAC9C;SAAM;QACL,MAAM,GAAG,QAAQ,CAAC,oBAAoB,CAAC,MAAM,CAAA;KAC9C;IAED,OAAO;QACL,QAAQ;QACR,MAAM;QACN,OAAO;KACR,CAAA;AACH,CAAC;AA3DD,kBA2DC;AAED,kBAAe,EAAE,GAAG,EAAE,CAAA","sourcesContent":["import Time from '../time'\nimport UserCodeRunner from '../user_code_runner'\nimport * as messages from '@cucumber/messages'\nimport { format } from 'assertion-error-formatter'\nimport { ITestCaseHookParameter } from '../support_code_library_builder/types'\nimport { IDefinition, IGetInvocationDataResponse } from '../models/definition'\nimport {\n doesHaveValue,\n doesNotHaveValue,\n valueOrDefault,\n} from '../value_checker'\n\nconst { beginTiming, endTiming } = Time\n\nexport interface IRunOptions {\n defaultTimeout: number\n hookParameter: ITestCaseHookParameter\n step: messages.PickleStep\n stepDefinition: IDefinition\n world: any\n}\n\nexport async function run({\n defaultTimeout,\n hookParameter,\n step,\n stepDefinition,\n world,\n}: IRunOptions): Promise<messages.TestStepResult> {\n beginTiming()\n let error: any, result: any, invocationData: IGetInvocationDataResponse\n\n try {\n invocationData = await stepDefinition.getInvocationParameters({\n hookParameter,\n step,\n world,\n })\n } catch (err) {\n error = err\n }\n\n if (doesNotHaveValue(error)) {\n const timeoutInMilliseconds = valueOrDefault(\n stepDefinition.options.timeout,\n defaultTimeout\n )\n\n if (invocationData.validCodeLengths.includes(stepDefinition.code.length)) {\n const data = await UserCodeRunner.run({\n argsArray: invocationData.parameters,\n fn: stepDefinition.code,\n thisArg: world,\n timeoutInMilliseconds,\n })\n error = data.error\n result = data.result\n } else {\n error = invocationData.getInvalidCodeLengthMessage()\n }\n }\n\n const duration = messages.TimeConversion.millisecondsToDuration(endTiming())\n let status: messages.TestStepResultStatus\n let message: string\n if (result === 'skipped') {\n status = messages.TestStepResultStatus.SKIPPED\n } else if (result === 'pending') {\n status = messages.TestStepResultStatus.PENDING\n } else if (doesHaveValue(error)) {\n message = format(error)\n status = messages.TestStepResultStatus.FAILED\n } else {\n status = messages.TestStepResultStatus.PASSED\n }\n\n return {\n duration,\n status,\n message,\n }\n}\n\nexport default { run }\n"]}
1
+ {"version":3,"file":"step_runner.js","sourceRoot":"","sources":["../../src/runtime/step_runner.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,mDAA0B;AAC1B,2EAAgD;AAChD,6DAA8C;AAC9C,yEAAkD;AAGlD,oDAIyB;AAEzB,MAAM,EAAE,WAAW,EAAE,SAAS,EAAE,GAAG,cAAI,CAAA;AAUhC,KAAK,UAAU,GAAG,CAAC,EACxB,cAAc,EACd,aAAa,EACb,IAAI,EACJ,cAAc,EACd,KAAK,GACO;IACZ,WAAW,EAAE,CAAA;IACb,IAAI,KAAU,EAAE,MAAW,EAAE,cAA0C,CAAA;IAEvE,IAAI;QACF,cAAc,GAAG,MAAM,cAAc,CAAC,uBAAuB,CAAC;YAC5D,aAAa;YACb,IAAI;YACJ,KAAK;SACN,CAAC,CAAA;KACH;IAAC,OAAO,GAAG,EAAE;QACZ,KAAK,GAAG,GAAG,CAAA;KACZ;IAED,IAAI,IAAA,gCAAgB,EAAC,KAAK,CAAC,EAAE;QAC3B,MAAM,qBAAqB,GAAG,IAAA,8BAAc,EAC1C,cAAc,CAAC,OAAO,CAAC,OAAO,EAC9B,cAAc,CACf,CAAA;QAED,IAAI,cAAc,CAAC,gBAAgB,CAAC,QAAQ,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE;YACxE,MAAM,IAAI,GAAG,MAAM,0BAAc,CAAC,GAAG,CAAC;gBACpC,SAAS,EAAE,cAAc,CAAC,UAAU;gBACpC,EAAE,EAAE,cAAc,CAAC,IAAI;gBACvB,OAAO,EAAE,KAAK;gBACd,qBAAqB;aACtB,CAAC,CAAA;YACF,KAAK,GAAG,IAAI,CAAC,KAAK,CAAA;YAClB,MAAM,GAAG,IAAI,CAAC,MAAM,CAAA;SACrB;aAAM;YACL,KAAK,GAAG,cAAc,CAAC,2BAA2B,EAAE,CAAA;SACrD;KACF;IAED,MAAM,QAAQ,GAAG,QAAQ,CAAC,cAAc,CAAC,sBAAsB,CAAC,SAAS,EAAE,CAAC,CAAA;IAC5E,IAAI,MAAqC,CAAA;IACzC,IAAI,OAAe,CAAA;IACnB,IAAI,MAAM,KAAK,SAAS,EAAE;QACxB,MAAM,GAAG,QAAQ,CAAC,oBAAoB,CAAC,OAAO,CAAA;KAC/C;SAAM,IAAI,MAAM,KAAK,SAAS,EAAE;QAC/B,MAAM,GAAG,QAAQ,CAAC,oBAAoB,CAAC,OAAO,CAAA;KAC/C;SAAM,IAAI,IAAA,6BAAa,EAAC,KAAK,CAAC,EAAE;QAC/B,OAAO,GAAG,IAAA,kCAAM,EAAC,KAAK,CAAC,CAAA;QACvB,MAAM,GAAG,QAAQ,CAAC,oBAAoB,CAAC,MAAM,CAAA;KAC9C;SAAM;QACL,MAAM,GAAG,QAAQ,CAAC,oBAAoB,CAAC,MAAM,CAAA;KAC9C;IAED,OAAO;QACL,QAAQ;QACR,MAAM;QACN,OAAO;KACR,CAAA;AACH,CAAC;AA3DD,kBA2DC;AAED,kBAAe,EAAE,GAAG,EAAE,CAAA","sourcesContent":["import Time from '../time'\nimport UserCodeRunner from '../user_code_runner'\nimport * as messages from '@cucumber/messages'\nimport { format } from 'assertion-error-formatter'\nimport { ITestCaseHookParameter } from '../support_code_library_builder/types'\nimport { IDefinition, IGetInvocationDataResponse } from '../models/definition'\nimport {\n doesHaveValue,\n doesNotHaveValue,\n valueOrDefault,\n} from '../value_checker'\n\nconst { beginTiming, endTiming } = Time\n\nexport interface IRunOptions {\n defaultTimeout: number\n hookParameter: ITestCaseHookParameter\n step: messages.PickleStep\n stepDefinition: IDefinition\n world: any\n}\n\nexport async function run({\n defaultTimeout,\n hookParameter,\n step,\n stepDefinition,\n world,\n}: IRunOptions): Promise<messages.TestStepResult> {\n beginTiming()\n let error: any, result: any, invocationData: IGetInvocationDataResponse\n\n try {\n invocationData = await stepDefinition.getInvocationParameters({\n hookParameter,\n step,\n world,\n })\n } catch (err) {\n error = err\n }\n\n if (doesNotHaveValue(error)) {\n const timeoutInMilliseconds = valueOrDefault(\n stepDefinition.options.timeout,\n defaultTimeout\n )\n\n if (invocationData.validCodeLengths.includes(stepDefinition.code.length)) {\n const data = await UserCodeRunner.run({\n argsArray: invocationData.parameters,\n fn: stepDefinition.code,\n thisArg: world,\n timeoutInMilliseconds,\n })\n error = data.error\n result = data.result\n } else {\n error = invocationData.getInvalidCodeLengthMessage()\n }\n }\n\n const duration = messages.TimeConversion.millisecondsToDuration(endTiming())\n let status: messages.TestStepResultStatus\n let message: string\n if (result === 'skipped') {\n status = messages.TestStepResultStatus.SKIPPED\n } else if (result === 'pending') {\n status = messages.TestStepResultStatus.PENDING\n } else if (doesHaveValue(error)) {\n message = format(error)\n status = messages.TestStepResultStatus.FAILED\n } else {\n status = messages.TestStepResultStatus.PASSED\n }\n\n return {\n duration,\n status,\n message,\n }\n}\n\nexport default { run }\n"]}
@@ -1,7 +1,11 @@
1
1
  "use strict";
2
2
  var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
3
  if (k2 === undefined) k2 = k;
4
- Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[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);
5
9
  }) : (function(o, m, k, k2) {
6
10
  if (k2 === undefined) k2 = k;
7
11
  o[k2] = m[k];
@@ -24,7 +28,7 @@ const messages = __importStar(require("@cucumber/messages"));
24
28
  const durations_1 = require("durations");
25
29
  class RealTestRunStopwatch {
26
30
  constructor() {
27
- this.stopwatch = durations_1.stopwatch();
31
+ this.stopwatch = (0, durations_1.stopwatch)();
28
32
  this.base = null;
29
33
  }
30
34
  from(duration) {
@@ -42,7 +46,7 @@ class RealTestRunStopwatch {
42
46
  duration() {
43
47
  const current = this.stopwatch.duration();
44
48
  if (this.base !== null) {
45
- return durations_1.duration(this.base.nanos() + current.nanos());
49
+ return (0, durations_1.duration)(this.base.nanos() + current.nanos());
46
50
  }
47
51
  return current;
48
52
  }
@@ -67,9 +71,9 @@ class PredictableTestRunStopwatch {
67
71
  return this;
68
72
  }
69
73
  duration() {
70
- const current = durations_1.duration(this.count * 1000000);
74
+ const current = (0, durations_1.duration)(this.count * 1000000);
71
75
  if (this.base !== null) {
72
- return durations_1.duration(this.base.nanos() + current.nanos());
76
+ return (0, durations_1.duration)(this.base.nanos() + current.nanos());
73
77
  }
74
78
  return current;
75
79
  }
@@ -1 +1 @@
1
- {"version":3,"file":"stopwatch.js","sourceRoot":"","sources":["../../src/runtime/stopwatch.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;AAAA,6DAA8C;AAC9C,yCAAoE;AAUpE,MAAa,oBAAoB;IAAjC;QACmB,cAAS,GAAc,qBAAS,EAAE,CAAA;QAC3C,SAAI,GAAa,IAAI,CAAA;IA4B/B,CAAC;IA1BC,IAAI,CAAC,QAAkB;QACrB,IAAI,CAAC,IAAI,GAAG,QAAQ,CAAA;QACpB,OAAO,IAAI,CAAA;IACb,CAAC;IAED,KAAK;QACH,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAA;QACtB,OAAO,IAAI,CAAA;IACb,CAAC;IAED,IAAI;QACF,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAA;QACrB,OAAO,IAAI,CAAA;IACb,CAAC;IAED,QAAQ;QACN,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAA;QACzC,IAAI,IAAI,CAAC,IAAI,KAAK,IAAI,EAAE;YACtB,OAAO,oBAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC,CAAA;SACrD;QACD,OAAO,OAAO,CAAA;IAChB,CAAC;IAED,SAAS;QACP,OAAO,QAAQ,CAAC,cAAc,CAAC,iCAAiC,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAA;IAC9E,CAAC;CACF;AA9BD,oDA8BC;AAED,MAAa,2BAA2B;IAAxC;QACU,UAAK,GAAG,CAAC,CAAA;QACT,SAAI,GAAa,IAAI,CAAA;IAsC/B,CAAC;IApCC,IAAI,CAAC,QAAkB;QACrB,IAAI,CAAC,IAAI,GAAG,QAAQ,CAAA;QACpB,OAAO,IAAI,CAAA;IACb,CAAC;IAED,KAAK;QACH,OAAO,IAAI,CAAA;IACb,CAAC;IAED,IAAI;QACF,OAAO,IAAI,CAAA;IACb,CAAC;IAED,QAAQ;QACN,MAAM,OAAO,GAAG,oBAAQ,CAAC,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,CAAA;QAC9C,IAAI,IAAI,CAAC,IAAI,KAAK,IAAI,EAAE;YACtB,OAAO,oBAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC,CAAA;SACrD;QACD,OAAO,OAAO,CAAA;IAChB,CAAC;IAED,SAAS;QACP,MAAM,aAAa,GAAG,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAA;QAC9D,IAAI,CAAC,KAAK,EAAE,CAAA;QACZ,OAAO,aAAa,CAAA;IACtB,CAAC;IAED,kFAAkF;IAC1E,kBAAkB,CAAC,QAAkB;QAC3C,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAA;QAC9C,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,OAAO,EAAE,GAAG,OAAO,CAAC,GAAG,UAAU,CAAC,CAAA;QACrE,OAAO;YACL,OAAO;YACP,KAAK;SACN,CAAA;IACH,CAAC;CACF;AAxCD,kEAwCC","sourcesContent":["import * as messages from '@cucumber/messages'\nimport { stopwatch, Stopwatch, duration, Duration } from 'durations'\n\nexport interface ITestRunStopwatch {\n from: (duration: Duration) => ITestRunStopwatch\n start: () => ITestRunStopwatch\n stop: () => ITestRunStopwatch\n duration: () => Duration\n timestamp: () => messages.Timestamp\n}\n\nexport class RealTestRunStopwatch implements ITestRunStopwatch {\n private readonly stopwatch: Stopwatch = stopwatch()\n private base: Duration = null\n\n from(duration: Duration): ITestRunStopwatch {\n this.base = duration\n return this\n }\n\n start(): ITestRunStopwatch {\n this.stopwatch.start()\n return this\n }\n\n stop(): ITestRunStopwatch {\n this.stopwatch.stop()\n return this\n }\n\n duration(): Duration {\n const current = this.stopwatch.duration()\n if (this.base !== null) {\n return duration(this.base.nanos() + current.nanos())\n }\n return current\n }\n\n timestamp(): messages.Timestamp {\n return messages.TimeConversion.millisecondsSinceEpochToTimestamp(Date.now())\n }\n}\n\nexport class PredictableTestRunStopwatch implements ITestRunStopwatch {\n private count = 0\n private base: Duration = null\n\n from(duration: Duration): ITestRunStopwatch {\n this.base = duration\n return this\n }\n\n start(): ITestRunStopwatch {\n return this\n }\n\n stop(): ITestRunStopwatch {\n return this\n }\n\n duration(): Duration {\n const current = duration(this.count * 1000000)\n if (this.base !== null) {\n return duration(this.base.nanos() + current.nanos())\n }\n return current\n }\n\n timestamp(): messages.Timestamp {\n const fakeTimestamp = this.convertToTimestamp(this.duration())\n this.count++\n return fakeTimestamp\n }\n\n // TODO: Remove. It's impossible to convert timestamps to durations and vice-versa\n private convertToTimestamp(duration: Duration): messages.Timestamp {\n const seconds = Math.floor(duration.seconds())\n const nanos = Math.floor((duration.seconds() - seconds) * 1000000000)\n return {\n seconds,\n nanos,\n }\n }\n}\n"]}
1
+ {"version":3,"file":"stopwatch.js","sourceRoot":"","sources":["../../src/runtime/stopwatch.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,6DAA8C;AAC9C,yCAAoE;AAUpE,MAAa,oBAAoB;IAAjC;QACmB,cAAS,GAAc,IAAA,qBAAS,GAAE,CAAA;QAC3C,SAAI,GAAa,IAAI,CAAA;IA4B/B,CAAC;IA1BC,IAAI,CAAC,QAAkB;QACrB,IAAI,CAAC,IAAI,GAAG,QAAQ,CAAA;QACpB,OAAO,IAAI,CAAA;IACb,CAAC;IAED,KAAK;QACH,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAA;QACtB,OAAO,IAAI,CAAA;IACb,CAAC;IAED,IAAI;QACF,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAA;QACrB,OAAO,IAAI,CAAA;IACb,CAAC;IAED,QAAQ;QACN,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAA;QACzC,IAAI,IAAI,CAAC,IAAI,KAAK,IAAI,EAAE;YACtB,OAAO,IAAA,oBAAQ,EAAC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC,CAAA;SACrD;QACD,OAAO,OAAO,CAAA;IAChB,CAAC;IAED,SAAS;QACP,OAAO,QAAQ,CAAC,cAAc,CAAC,iCAAiC,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAA;IAC9E,CAAC;CACF;AA9BD,oDA8BC;AAED,MAAa,2BAA2B;IAAxC;QACU,UAAK,GAAG,CAAC,CAAA;QACT,SAAI,GAAa,IAAI,CAAA;IAsC/B,CAAC;IApCC,IAAI,CAAC,QAAkB;QACrB,IAAI,CAAC,IAAI,GAAG,QAAQ,CAAA;QACpB,OAAO,IAAI,CAAA;IACb,CAAC;IAED,KAAK;QACH,OAAO,IAAI,CAAA;IACb,CAAC;IAED,IAAI;QACF,OAAO,IAAI,CAAA;IACb,CAAC;IAED,QAAQ;QACN,MAAM,OAAO,GAAG,IAAA,oBAAQ,EAAC,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,CAAA;QAC9C,IAAI,IAAI,CAAC,IAAI,KAAK,IAAI,EAAE;YACtB,OAAO,IAAA,oBAAQ,EAAC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC,CAAA;SACrD;QACD,OAAO,OAAO,CAAA;IAChB,CAAC;IAED,SAAS;QACP,MAAM,aAAa,GAAG,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAA;QAC9D,IAAI,CAAC,KAAK,EAAE,CAAA;QACZ,OAAO,aAAa,CAAA;IACtB,CAAC;IAED,kFAAkF;IAC1E,kBAAkB,CAAC,QAAkB;QAC3C,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAA;QAC9C,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,OAAO,EAAE,GAAG,OAAO,CAAC,GAAG,UAAU,CAAC,CAAA;QACrE,OAAO;YACL,OAAO;YACP,KAAK;SACN,CAAA;IACH,CAAC;CACF;AAxCD,kEAwCC","sourcesContent":["import * as messages from '@cucumber/messages'\nimport { stopwatch, Stopwatch, duration, Duration } from 'durations'\n\nexport interface ITestRunStopwatch {\n from: (duration: Duration) => ITestRunStopwatch\n start: () => ITestRunStopwatch\n stop: () => ITestRunStopwatch\n duration: () => Duration\n timestamp: () => messages.Timestamp\n}\n\nexport class RealTestRunStopwatch implements ITestRunStopwatch {\n private readonly stopwatch: Stopwatch = stopwatch()\n private base: Duration = null\n\n from(duration: Duration): ITestRunStopwatch {\n this.base = duration\n return this\n }\n\n start(): ITestRunStopwatch {\n this.stopwatch.start()\n return this\n }\n\n stop(): ITestRunStopwatch {\n this.stopwatch.stop()\n return this\n }\n\n duration(): Duration {\n const current = this.stopwatch.duration()\n if (this.base !== null) {\n return duration(this.base.nanos() + current.nanos())\n }\n return current\n }\n\n timestamp(): messages.Timestamp {\n return messages.TimeConversion.millisecondsSinceEpochToTimestamp(Date.now())\n }\n}\n\nexport class PredictableTestRunStopwatch implements ITestRunStopwatch {\n private count = 0\n private base: Duration = null\n\n from(duration: Duration): ITestRunStopwatch {\n this.base = duration\n return this\n }\n\n start(): ITestRunStopwatch {\n return this\n }\n\n stop(): ITestRunStopwatch {\n return this\n }\n\n duration(): Duration {\n const current = duration(this.count * 1000000)\n if (this.base !== null) {\n return duration(this.base.nanos() + current.nanos())\n }\n return current\n }\n\n timestamp(): messages.Timestamp {\n const fakeTimestamp = this.convertToTimestamp(this.duration())\n this.count++\n return fakeTimestamp\n }\n\n // TODO: Remove. It's impossible to convert timestamps to durations and vice-versa\n private convertToTimestamp(duration: Duration): messages.Timestamp {\n const seconds = Math.floor(duration.seconds())\n const nanos = Math.floor((duration.seconds() - seconds) * 1000000000)\n return {\n seconds,\n nanos,\n }\n }\n}\n"]}
@@ -1,7 +1,11 @@
1
1
  "use strict";
2
2
  var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
3
  if (k2 === undefined) k2 = k;
4
- Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[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);
5
9
  }) : (function(o, m, k, k2) {
6
10
  if (k2 === undefined) k2 = k;
7
11
  o[k2] = m[k];
@@ -31,7 +35,7 @@ const value_checker_1 = require("../value_checker");
31
35
  class TestCaseRunner {
32
36
  constructor({ eventBroadcaster, stopwatch, gherkinDocument, newId, pickle, testCase, retries = 0, skip, supportCodeLibrary, worldParameters, }) {
33
37
  this.attachmentManager = new attachment_manager_1.default(({ data, media }) => {
34
- if (value_checker_1.doesNotHaveValue(this.currentTestStepId)) {
38
+ if ((0, value_checker_1.doesNotHaveValue)(this.currentTestStepId)) {
35
39
  throw new Error('Cannot attach when a step/hook is not running. Ensure your step/hook waits for the attach to finish.');
36
40
  }
37
41
  const attachment = {
@@ -83,7 +87,7 @@ class TestCaseRunner {
83
87
  duration: messages.TimeConversion.millisecondsToDuration(0),
84
88
  };
85
89
  }
86
- return messages_1.getWorstTestStepResult(this.testStepResults);
90
+ return (0, messages_1.getWorstTestStepResult)(this.testStepResults);
87
91
  }
88
92
  async invokeStep(step, stepDefinition, hookParameter) {
89
93
  return await step_runner_1.default.run({
@@ -139,7 +143,7 @@ class TestCaseRunner {
139
143
  let didWeRunStepsYet = false;
140
144
  for (const testStep of this.testCase.testSteps) {
141
145
  await this.aroundTestStep(testStep.id, async () => {
142
- if (value_checker_1.doesHaveValue(testStep.hookId)) {
146
+ if ((0, value_checker_1.doesHaveValue)(testStep.hookId)) {
143
147
  const hookParameter = {
144
148
  gherkinDocument: this.gherkinDocument,
145
149
  pickle: this.pickle,
@@ -211,7 +215,7 @@ class TestCaseRunner {
211
215
  }
212
216
  else if (stepDefinitions.length > 1) {
213
217
  return {
214
- message: helpers_1.getAmbiguousStepException(stepDefinitions),
218
+ message: (0, helpers_1.getAmbiguousStepException)(stepDefinitions),
215
219
  status: messages.TestStepResultStatus.AMBIGUOUS,
216
220
  duration: messages.TimeConversion.millisecondsToDuration(0),
217
221
  };
@@ -224,14 +228,14 @@ class TestCaseRunner {
224
228
  }
225
229
  let stepResult;
226
230
  let stepResults = await this.runStepHooks(this.getBeforeStepHookDefinitions(), pickleStep);
227
- if (messages_1.getWorstTestStepResult(stepResults).status !==
231
+ if ((0, messages_1.getWorstTestStepResult)(stepResults).status !==
228
232
  messages.TestStepResultStatus.FAILED) {
229
233
  stepResult = await this.invokeStep(pickleStep, stepDefinitions[0]);
230
234
  stepResults.push(stepResult);
231
235
  }
232
236
  const afterStepHookResults = await this.runStepHooks(this.getAfterStepHookDefinitions(), pickleStep, stepResult);
233
237
  stepResults = stepResults.concat(afterStepHookResults);
234
- const finalStepResult = messages_1.getWorstTestStepResult(stepResults);
238
+ const finalStepResult = (0, messages_1.getWorstTestStepResult)(stepResults);
235
239
  let finalDuration = messages.TimeConversion.millisecondsToDuration(0);
236
240
  for (const result of stepResults) {
237
241
  finalDuration = messages.TimeConversion.addDurations(finalDuration, result.duration);
@@ -1 +1 @@
1
- {"version":3,"file":"test_case_runner.js","sourceRoot":"","sources":["../../src/runtime/test_case_runner.ts"],"names":[],"mappings":"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","sourcesContent":["import { getAmbiguousStepException } from './helpers'\nimport AttachmentManager from './attachment_manager'\nimport StepRunner from './step_runner'\nimport * as messages from '@cucumber/messages'\nimport { getWorstTestStepResult, IdGenerator } from '@cucumber/messages'\nimport { EventEmitter } from 'events'\nimport {\n ISupportCodeLibrary,\n ITestCaseHookParameter,\n ITestStepHookParameter,\n} from '../support_code_library_builder/types'\nimport TestCaseHookDefinition from '../models/test_case_hook_definition'\nimport TestStepHookDefinition from '../models/test_step_hook_definition'\nimport { IDefinition } from '../models/definition'\nimport { doesHaveValue, doesNotHaveValue } from '../value_checker'\nimport { ITestRunStopwatch } from './stopwatch'\nimport StepDefinition from '../models/step_definition'\n\nexport interface INewTestCaseRunnerOptions {\n eventBroadcaster: EventEmitter\n stopwatch: ITestRunStopwatch\n gherkinDocument: messages.GherkinDocument\n newId: IdGenerator.NewId\n pickle: messages.Pickle\n testCase: messages.TestCase\n retries: number\n skip: boolean\n supportCodeLibrary: ISupportCodeLibrary\n worldParameters: any\n}\n\nexport default class TestCaseRunner {\n private readonly attachmentManager: AttachmentManager\n private currentTestCaseStartedId: string\n private currentTestStepId: string\n private readonly eventBroadcaster: EventEmitter\n private readonly stopwatch: ITestRunStopwatch\n private readonly gherkinDocument: messages.GherkinDocument\n private readonly newId: IdGenerator.NewId\n private readonly pickle: messages.Pickle\n private readonly testCase: messages.TestCase\n private readonly maxAttempts: number\n private readonly skip: boolean\n private readonly supportCodeLibrary: ISupportCodeLibrary\n private testStepResults: messages.TestStepResult[]\n private world: any\n private readonly worldParameters: any\n\n constructor({\n eventBroadcaster,\n stopwatch,\n gherkinDocument,\n newId,\n pickle,\n testCase,\n retries = 0,\n skip,\n supportCodeLibrary,\n worldParameters,\n }: INewTestCaseRunnerOptions) {\n this.attachmentManager = new AttachmentManager(({ data, media }) => {\n if (doesNotHaveValue(this.currentTestStepId)) {\n throw new Error(\n 'Cannot attach when a step/hook is not running. Ensure your step/hook waits for the attach to finish.'\n )\n }\n const attachment: messages.Envelope = {\n attachment: {\n body: data,\n contentEncoding: media.encoding,\n mediaType: media.contentType,\n testCaseStartedId: this.currentTestCaseStartedId,\n testStepId: this.currentTestStepId,\n },\n }\n this.eventBroadcaster.emit('envelope', attachment)\n })\n this.eventBroadcaster = eventBroadcaster\n this.stopwatch = stopwatch\n this.gherkinDocument = gherkinDocument\n this.maxAttempts = 1 + (skip ? 0 : retries)\n this.newId = newId\n this.pickle = pickle\n this.testCase = testCase\n this.skip = skip\n this.supportCodeLibrary = supportCodeLibrary\n this.worldParameters = worldParameters\n this.resetTestProgressData()\n }\n\n resetTestProgressData(): void {\n this.world = new this.supportCodeLibrary.World({\n attach: this.attachmentManager.create.bind(this.attachmentManager),\n log: this.attachmentManager.log.bind(this.attachmentManager),\n parameters: this.worldParameters,\n })\n this.testStepResults = []\n }\n\n getBeforeStepHookDefinitions(): TestStepHookDefinition[] {\n return this.supportCodeLibrary.beforeTestStepHookDefinitions.filter(\n (hookDefinition) => hookDefinition.appliesToTestCase(this.pickle)\n )\n }\n\n getAfterStepHookDefinitions(): TestStepHookDefinition[] {\n return this.supportCodeLibrary.afterTestStepHookDefinitions\n .slice(0)\n .reverse()\n .filter((hookDefinition) => hookDefinition.appliesToTestCase(this.pickle))\n }\n\n getWorstStepResult(): messages.TestStepResult {\n if (this.testStepResults.length === 0) {\n return {\n status: this.skip\n ? messages.TestStepResultStatus.SKIPPED\n : messages.TestStepResultStatus.PASSED,\n duration: messages.TimeConversion.millisecondsToDuration(0),\n }\n }\n return getWorstTestStepResult(this.testStepResults)\n }\n\n async invokeStep(\n step: messages.PickleStep,\n stepDefinition: IDefinition,\n hookParameter?: any\n ): Promise<messages.TestStepResult> {\n return await StepRunner.run({\n defaultTimeout: this.supportCodeLibrary.defaultTimeout,\n hookParameter,\n step,\n stepDefinition,\n world: this.world,\n })\n }\n\n isSkippingSteps(): boolean {\n return (\n this.getWorstStepResult().status !== messages.TestStepResultStatus.PASSED\n )\n }\n\n shouldSkipHook(isBeforeHook: boolean): boolean {\n return this.skip || (this.isSkippingSteps() && isBeforeHook)\n }\n\n async aroundTestStep(\n testStepId: string,\n runStepFn: () => Promise<messages.TestStepResult>\n ): Promise<void> {\n const testStepStarted: messages.Envelope = {\n testStepStarted: {\n testCaseStartedId: this.currentTestCaseStartedId,\n testStepId,\n timestamp: this.stopwatch.timestamp(),\n },\n }\n this.eventBroadcaster.emit('envelope', testStepStarted)\n this.currentTestStepId = testStepId\n const testStepResult = await runStepFn()\n this.currentTestStepId = null\n this.testStepResults.push(testStepResult)\n const testStepFinished: messages.Envelope = {\n testStepFinished: {\n testCaseStartedId: this.currentTestCaseStartedId,\n testStepId,\n testStepResult,\n timestamp: this.stopwatch.timestamp(),\n },\n }\n this.eventBroadcaster.emit('envelope', testStepFinished)\n }\n\n async run(): Promise<messages.TestStepResultStatus> {\n for (let attempt = 0; attempt < this.maxAttempts; attempt++) {\n this.currentTestCaseStartedId = this.newId()\n const testCaseStarted: messages.Envelope = {\n testCaseStarted: {\n attempt,\n testCaseId: this.testCase.id,\n id: this.currentTestCaseStartedId,\n timestamp: this.stopwatch.timestamp(),\n },\n }\n this.eventBroadcaster.emit('envelope', testCaseStarted)\n // used to determine whether a hook is a Before or After\n let didWeRunStepsYet = false\n for (const testStep of this.testCase.testSteps) {\n await this.aroundTestStep(testStep.id, async () => {\n if (doesHaveValue(testStep.hookId)) {\n const hookParameter: ITestCaseHookParameter = {\n gherkinDocument: this.gherkinDocument,\n pickle: this.pickle,\n testCaseStartedId: this.currentTestCaseStartedId,\n }\n if (didWeRunStepsYet) {\n hookParameter.result = this.getWorstStepResult()\n }\n return await this.runHook(\n findHookDefinition(testStep.hookId, this.supportCodeLibrary),\n hookParameter,\n !didWeRunStepsYet\n )\n } else {\n const pickleStep = this.pickle.steps.find(\n (pickleStep) => pickleStep.id === testStep.pickleStepId\n )\n const testStepResult = await this.runStep(pickleStep, testStep)\n didWeRunStepsYet = true\n return testStepResult\n }\n })\n }\n const willBeRetried =\n this.getWorstStepResult().status ===\n messages.TestStepResultStatus.FAILED && attempt + 1 < this.maxAttempts\n const testCaseFinished: messages.Envelope = {\n testCaseFinished: {\n testCaseStartedId: this.currentTestCaseStartedId,\n timestamp: this.stopwatch.timestamp(),\n willBeRetried,\n },\n }\n this.eventBroadcaster.emit('envelope', testCaseFinished)\n if (!willBeRetried) {\n break\n }\n this.resetTestProgressData()\n }\n return this.getWorstStepResult().status\n }\n\n async runHook(\n hookDefinition: TestCaseHookDefinition,\n hookParameter: ITestCaseHookParameter,\n isBeforeHook: boolean\n ): Promise<messages.TestStepResult> {\n if (this.shouldSkipHook(isBeforeHook)) {\n return {\n status: messages.TestStepResultStatus.SKIPPED,\n duration: messages.TimeConversion.millisecondsToDuration(0),\n }\n }\n return await this.invokeStep(null, hookDefinition, hookParameter)\n }\n\n async runStepHooks(\n stepHooks: TestStepHookDefinition[],\n pickleStep: messages.PickleStep,\n stepResult?: messages.TestStepResult\n ): Promise<messages.TestStepResult[]> {\n const stepHooksResult = []\n const hookParameter: ITestStepHookParameter = {\n gherkinDocument: this.gherkinDocument,\n pickle: this.pickle,\n pickleStep,\n testCaseStartedId: this.currentTestCaseStartedId,\n testStepId: this.currentTestStepId,\n result: stepResult,\n }\n for (const stepHookDefinition of stepHooks) {\n stepHooksResult.push(\n await this.invokeStep(null, stepHookDefinition, hookParameter)\n )\n }\n return stepHooksResult\n }\n\n async runStep(\n pickleStep: messages.PickleStep,\n testStep: messages.TestStep\n ): Promise<messages.TestStepResult> {\n const stepDefinitions = testStep.stepDefinitionIds.map(\n (stepDefinitionId) => {\n return findStepDefinition(stepDefinitionId, this.supportCodeLibrary)\n }\n )\n if (stepDefinitions.length === 0) {\n return {\n status: messages.TestStepResultStatus.UNDEFINED,\n duration: messages.TimeConversion.millisecondsToDuration(0),\n }\n } else if (stepDefinitions.length > 1) {\n return {\n message: getAmbiguousStepException(stepDefinitions),\n status: messages.TestStepResultStatus.AMBIGUOUS,\n duration: messages.TimeConversion.millisecondsToDuration(0),\n }\n } else if (this.isSkippingSteps()) {\n return {\n status: messages.TestStepResultStatus.SKIPPED,\n duration: messages.TimeConversion.millisecondsToDuration(0),\n }\n }\n\n let stepResult\n let stepResults = await this.runStepHooks(\n this.getBeforeStepHookDefinitions(),\n pickleStep\n )\n if (\n getWorstTestStepResult(stepResults).status !==\n messages.TestStepResultStatus.FAILED\n ) {\n stepResult = await this.invokeStep(pickleStep, stepDefinitions[0])\n stepResults.push(stepResult)\n }\n const afterStepHookResults = await this.runStepHooks(\n this.getAfterStepHookDefinitions(),\n pickleStep,\n stepResult\n )\n stepResults = stepResults.concat(afterStepHookResults)\n\n const finalStepResult = getWorstTestStepResult(stepResults)\n let finalDuration = messages.TimeConversion.millisecondsToDuration(0)\n for (const result of stepResults) {\n finalDuration = messages.TimeConversion.addDurations(\n finalDuration,\n result.duration\n )\n }\n finalStepResult.duration = finalDuration\n return finalStepResult\n }\n}\n\nfunction findHookDefinition(\n id: string,\n supportCodeLibrary: ISupportCodeLibrary\n): TestCaseHookDefinition {\n return [\n ...supportCodeLibrary.beforeTestCaseHookDefinitions,\n ...supportCodeLibrary.afterTestCaseHookDefinitions,\n ].find((definition) => definition.id === id)\n}\n\nfunction findStepDefinition(\n id: string,\n supportCodeLibrary: ISupportCodeLibrary\n): StepDefinition {\n return supportCodeLibrary.stepDefinitions.find(\n (definition) => definition.id === id\n )\n}\n"]}
1
+ {"version":3,"file":"test_case_runner.js","sourceRoot":"","sources":["../../src/runtime/test_case_runner.ts"],"names":[],"mappings":"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","sourcesContent":["import { getAmbiguousStepException } from './helpers'\nimport AttachmentManager from './attachment_manager'\nimport StepRunner from './step_runner'\nimport * as messages from '@cucumber/messages'\nimport { getWorstTestStepResult, IdGenerator } from '@cucumber/messages'\nimport { EventEmitter } from 'events'\nimport {\n ISupportCodeLibrary,\n ITestCaseHookParameter,\n ITestStepHookParameter,\n} from '../support_code_library_builder/types'\nimport TestCaseHookDefinition from '../models/test_case_hook_definition'\nimport TestStepHookDefinition from '../models/test_step_hook_definition'\nimport { IDefinition } from '../models/definition'\nimport { doesHaveValue, doesNotHaveValue } from '../value_checker'\nimport { ITestRunStopwatch } from './stopwatch'\nimport StepDefinition from '../models/step_definition'\n\nexport interface INewTestCaseRunnerOptions {\n eventBroadcaster: EventEmitter\n stopwatch: ITestRunStopwatch\n gherkinDocument: messages.GherkinDocument\n newId: IdGenerator.NewId\n pickle: messages.Pickle\n testCase: messages.TestCase\n retries: number\n skip: boolean\n supportCodeLibrary: ISupportCodeLibrary\n worldParameters: any\n}\n\nexport default class TestCaseRunner {\n private readonly attachmentManager: AttachmentManager\n private currentTestCaseStartedId: string\n private currentTestStepId: string\n private readonly eventBroadcaster: EventEmitter\n private readonly stopwatch: ITestRunStopwatch\n private readonly gherkinDocument: messages.GherkinDocument\n private readonly newId: IdGenerator.NewId\n private readonly pickle: messages.Pickle\n private readonly testCase: messages.TestCase\n private readonly maxAttempts: number\n private readonly skip: boolean\n private readonly supportCodeLibrary: ISupportCodeLibrary\n private testStepResults: messages.TestStepResult[]\n private world: any\n private readonly worldParameters: any\n\n constructor({\n eventBroadcaster,\n stopwatch,\n gherkinDocument,\n newId,\n pickle,\n testCase,\n retries = 0,\n skip,\n supportCodeLibrary,\n worldParameters,\n }: INewTestCaseRunnerOptions) {\n this.attachmentManager = new AttachmentManager(({ data, media }) => {\n if (doesNotHaveValue(this.currentTestStepId)) {\n throw new Error(\n 'Cannot attach when a step/hook is not running. Ensure your step/hook waits for the attach to finish.'\n )\n }\n const attachment: messages.Envelope = {\n attachment: {\n body: data,\n contentEncoding: media.encoding,\n mediaType: media.contentType,\n testCaseStartedId: this.currentTestCaseStartedId,\n testStepId: this.currentTestStepId,\n },\n }\n this.eventBroadcaster.emit('envelope', attachment)\n })\n this.eventBroadcaster = eventBroadcaster\n this.stopwatch = stopwatch\n this.gherkinDocument = gherkinDocument\n this.maxAttempts = 1 + (skip ? 0 : retries)\n this.newId = newId\n this.pickle = pickle\n this.testCase = testCase\n this.skip = skip\n this.supportCodeLibrary = supportCodeLibrary\n this.worldParameters = worldParameters\n this.resetTestProgressData()\n }\n\n resetTestProgressData(): void {\n this.world = new this.supportCodeLibrary.World({\n attach: this.attachmentManager.create.bind(this.attachmentManager),\n log: this.attachmentManager.log.bind(this.attachmentManager),\n parameters: this.worldParameters,\n })\n this.testStepResults = []\n }\n\n getBeforeStepHookDefinitions(): TestStepHookDefinition[] {\n return this.supportCodeLibrary.beforeTestStepHookDefinitions.filter(\n (hookDefinition) => hookDefinition.appliesToTestCase(this.pickle)\n )\n }\n\n getAfterStepHookDefinitions(): TestStepHookDefinition[] {\n return this.supportCodeLibrary.afterTestStepHookDefinitions\n .slice(0)\n .reverse()\n .filter((hookDefinition) => hookDefinition.appliesToTestCase(this.pickle))\n }\n\n getWorstStepResult(): messages.TestStepResult {\n if (this.testStepResults.length === 0) {\n return {\n status: this.skip\n ? messages.TestStepResultStatus.SKIPPED\n : messages.TestStepResultStatus.PASSED,\n duration: messages.TimeConversion.millisecondsToDuration(0),\n }\n }\n return getWorstTestStepResult(this.testStepResults)\n }\n\n async invokeStep(\n step: messages.PickleStep,\n stepDefinition: IDefinition,\n hookParameter?: any\n ): Promise<messages.TestStepResult> {\n return await StepRunner.run({\n defaultTimeout: this.supportCodeLibrary.defaultTimeout,\n hookParameter,\n step,\n stepDefinition,\n world: this.world,\n })\n }\n\n isSkippingSteps(): boolean {\n return (\n this.getWorstStepResult().status !== messages.TestStepResultStatus.PASSED\n )\n }\n\n shouldSkipHook(isBeforeHook: boolean): boolean {\n return this.skip || (this.isSkippingSteps() && isBeforeHook)\n }\n\n async aroundTestStep(\n testStepId: string,\n runStepFn: () => Promise<messages.TestStepResult>\n ): Promise<void> {\n const testStepStarted: messages.Envelope = {\n testStepStarted: {\n testCaseStartedId: this.currentTestCaseStartedId,\n testStepId,\n timestamp: this.stopwatch.timestamp(),\n },\n }\n this.eventBroadcaster.emit('envelope', testStepStarted)\n this.currentTestStepId = testStepId\n const testStepResult = await runStepFn()\n this.currentTestStepId = null\n this.testStepResults.push(testStepResult)\n const testStepFinished: messages.Envelope = {\n testStepFinished: {\n testCaseStartedId: this.currentTestCaseStartedId,\n testStepId,\n testStepResult,\n timestamp: this.stopwatch.timestamp(),\n },\n }\n this.eventBroadcaster.emit('envelope', testStepFinished)\n }\n\n async run(): Promise<messages.TestStepResultStatus> {\n for (let attempt = 0; attempt < this.maxAttempts; attempt++) {\n this.currentTestCaseStartedId = this.newId()\n const testCaseStarted: messages.Envelope = {\n testCaseStarted: {\n attempt,\n testCaseId: this.testCase.id,\n id: this.currentTestCaseStartedId,\n timestamp: this.stopwatch.timestamp(),\n },\n }\n this.eventBroadcaster.emit('envelope', testCaseStarted)\n // used to determine whether a hook is a Before or After\n let didWeRunStepsYet = false\n for (const testStep of this.testCase.testSteps) {\n await this.aroundTestStep(testStep.id, async () => {\n if (doesHaveValue(testStep.hookId)) {\n const hookParameter: ITestCaseHookParameter = {\n gherkinDocument: this.gherkinDocument,\n pickle: this.pickle,\n testCaseStartedId: this.currentTestCaseStartedId,\n }\n if (didWeRunStepsYet) {\n hookParameter.result = this.getWorstStepResult()\n }\n return await this.runHook(\n findHookDefinition(testStep.hookId, this.supportCodeLibrary),\n hookParameter,\n !didWeRunStepsYet\n )\n } else {\n const pickleStep = this.pickle.steps.find(\n (pickleStep) => pickleStep.id === testStep.pickleStepId\n )\n const testStepResult = await this.runStep(pickleStep, testStep)\n didWeRunStepsYet = true\n return testStepResult\n }\n })\n }\n const willBeRetried =\n this.getWorstStepResult().status ===\n messages.TestStepResultStatus.FAILED && attempt + 1 < this.maxAttempts\n const testCaseFinished: messages.Envelope = {\n testCaseFinished: {\n testCaseStartedId: this.currentTestCaseStartedId,\n timestamp: this.stopwatch.timestamp(),\n willBeRetried,\n },\n }\n this.eventBroadcaster.emit('envelope', testCaseFinished)\n if (!willBeRetried) {\n break\n }\n this.resetTestProgressData()\n }\n return this.getWorstStepResult().status\n }\n\n async runHook(\n hookDefinition: TestCaseHookDefinition,\n hookParameter: ITestCaseHookParameter,\n isBeforeHook: boolean\n ): Promise<messages.TestStepResult> {\n if (this.shouldSkipHook(isBeforeHook)) {\n return {\n status: messages.TestStepResultStatus.SKIPPED,\n duration: messages.TimeConversion.millisecondsToDuration(0),\n }\n }\n return await this.invokeStep(null, hookDefinition, hookParameter)\n }\n\n async runStepHooks(\n stepHooks: TestStepHookDefinition[],\n pickleStep: messages.PickleStep,\n stepResult?: messages.TestStepResult\n ): Promise<messages.TestStepResult[]> {\n const stepHooksResult = []\n const hookParameter: ITestStepHookParameter = {\n gherkinDocument: this.gherkinDocument,\n pickle: this.pickle,\n pickleStep,\n testCaseStartedId: this.currentTestCaseStartedId,\n testStepId: this.currentTestStepId,\n result: stepResult,\n }\n for (const stepHookDefinition of stepHooks) {\n stepHooksResult.push(\n await this.invokeStep(null, stepHookDefinition, hookParameter)\n )\n }\n return stepHooksResult\n }\n\n async runStep(\n pickleStep: messages.PickleStep,\n testStep: messages.TestStep\n ): Promise<messages.TestStepResult> {\n const stepDefinitions = testStep.stepDefinitionIds.map(\n (stepDefinitionId) => {\n return findStepDefinition(stepDefinitionId, this.supportCodeLibrary)\n }\n )\n if (stepDefinitions.length === 0) {\n return {\n status: messages.TestStepResultStatus.UNDEFINED,\n duration: messages.TimeConversion.millisecondsToDuration(0),\n }\n } else if (stepDefinitions.length > 1) {\n return {\n message: getAmbiguousStepException(stepDefinitions),\n status: messages.TestStepResultStatus.AMBIGUOUS,\n duration: messages.TimeConversion.millisecondsToDuration(0),\n }\n } else if (this.isSkippingSteps()) {\n return {\n status: messages.TestStepResultStatus.SKIPPED,\n duration: messages.TimeConversion.millisecondsToDuration(0),\n }\n }\n\n let stepResult\n let stepResults = await this.runStepHooks(\n this.getBeforeStepHookDefinitions(),\n pickleStep\n )\n if (\n getWorstTestStepResult(stepResults).status !==\n messages.TestStepResultStatus.FAILED\n ) {\n stepResult = await this.invokeStep(pickleStep, stepDefinitions[0])\n stepResults.push(stepResult)\n }\n const afterStepHookResults = await this.runStepHooks(\n this.getAfterStepHookDefinitions(),\n pickleStep,\n stepResult\n )\n stepResults = stepResults.concat(afterStepHookResults)\n\n const finalStepResult = getWorstTestStepResult(stepResults)\n let finalDuration = messages.TimeConversion.millisecondsToDuration(0)\n for (const result of stepResults) {\n finalDuration = messages.TimeConversion.addDurations(\n finalDuration,\n result.duration\n )\n }\n finalStepResult.duration = finalDuration\n return finalStepResult\n }\n}\n\nfunction findHookDefinition(\n id: string,\n supportCodeLibrary: ISupportCodeLibrary\n): TestCaseHookDefinition {\n return [\n ...supportCodeLibrary.beforeTestCaseHookDefinitions,\n ...supportCodeLibrary.afterTestCaseHookDefinitions,\n ].find((definition) => definition.id === id)\n}\n\nfunction findStepDefinition(\n id: string,\n supportCodeLibrary: ISupportCodeLibrary\n): StepDefinition {\n return supportCodeLibrary.stepDefinitions.find(\n (definition) => definition.id === id\n )\n}\n"]}
@@ -31,11 +31,11 @@ class StackTraceFilter {
31
31
  return (filteredFrames.length > 0 && this.isFrameInCucumber(filteredFrames[0]));
32
32
  }
33
33
  isFrameInCucumber(frame) {
34
- const fileName = value_checker_1.valueOrDefault(frame.getFileName(), '');
34
+ const fileName = (0, value_checker_1.valueOrDefault)(frame.getFileName(), '');
35
35
  return isFileNameInCucumber(fileName);
36
36
  }
37
37
  isFrameInNode(frame) {
38
- const fileName = value_checker_1.valueOrDefault(frame.getFileName(), '');
38
+ const fileName = (0, value_checker_1.valueOrDefault)(frame.getFileName(), '');
39
39
  return !fileName.includes(path_1.default.sep);
40
40
  }
41
41
  unfilter() {