@cucumber/cucumber 8.0.0-rc.2 → 8.0.0-rc.3

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 (174) hide show
  1. package/README.md +81 -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 +64 -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/{run → api}/formatters.d.ts +5 -3
  10. package/lib/{run → api}/formatters.js +13 -17
  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/{run → api}/index.js +10 -1
  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/{run → api}/paths.js +25 -9
  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/{run → api}/runtime.d.ts +8 -7
  34. package/lib/api/runtime.js +36 -0
  35. package/lib/api/runtime.js.map +1 -0
  36. package/lib/{run → api}/support.d.ts +4 -3
  37. package/lib/{run → api}/support.js +5 -10
  38. package/lib/api/support.js.map +1 -0
  39. package/lib/api/types.d.ts +168 -0
  40. package/lib/{run → api}/types.js +0 -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 -11
  44. package/lib/cli/helpers.js +19 -29
  45. package/lib/cli/helpers.js.map +1 -1
  46. package/lib/cli/index.d.ts +3 -1
  47. package/lib/cli/index.js +35 -19
  48. package/lib/cli/index.js.map +1 -1
  49. package/lib/cli/publish_banner.js +6 -6
  50. package/lib/cli/publish_banner.js.map +1 -1
  51. package/lib/cli/run.js +12 -3
  52. package/lib/cli/run.js.map +1 -1
  53. package/lib/cli/validate_node_engine_version.d.ts +7 -0
  54. package/lib/cli/validate_node_engine_version.js +20 -0
  55. package/lib/cli/validate_node_engine_version.js.map +1 -0
  56. package/lib/configuration/argv_parser.d.ts +20 -0
  57. package/lib/{cli → configuration}/argv_parser.js +44 -45
  58. package/lib/configuration/argv_parser.js.map +1 -0
  59. package/lib/configuration/check_schema.d.ts +2 -0
  60. package/lib/configuration/check_schema.js +56 -0
  61. package/lib/configuration/check_schema.js.map +1 -0
  62. package/lib/configuration/default_configuration.d.ts +2 -0
  63. package/lib/configuration/default_configuration.js +27 -0
  64. package/lib/configuration/default_configuration.js.map +1 -0
  65. package/lib/configuration/from_file.d.ts +2 -0
  66. package/lib/configuration/from_file.js +68 -0
  67. package/lib/configuration/from_file.js.map +1 -0
  68. package/lib/configuration/helpers.d.ts +1 -0
  69. package/lib/configuration/helpers.js +11 -0
  70. package/lib/configuration/helpers.js.map +1 -0
  71. package/lib/configuration/index.d.ts +6 -0
  72. package/lib/configuration/index.js +11 -0
  73. package/lib/configuration/index.js.map +1 -1
  74. package/lib/configuration/locate_file.d.ts +1 -0
  75. package/lib/configuration/locate_file.js +19 -0
  76. package/lib/configuration/locate_file.js.map +1 -0
  77. package/lib/configuration/merge_configurations.d.ts +2 -0
  78. package/lib/configuration/merge_configurations.js +48 -0
  79. package/lib/configuration/merge_configurations.js.map +1 -0
  80. package/lib/configuration/option_splitter.d.ts +3 -0
  81. package/lib/{cli → configuration}/option_splitter.js +2 -2
  82. package/lib/configuration/option_splitter.js.map +1 -0
  83. package/lib/configuration/types.d.ts +24 -28
  84. package/lib/configuration/types.js.map +1 -1
  85. package/lib/configuration/validate_configuration.d.ts +2 -0
  86. package/lib/configuration/validate_configuration.js +10 -0
  87. package/lib/configuration/validate_configuration.js.map +1 -0
  88. package/lib/formatter/builder.d.ts +2 -3
  89. package/lib/formatter/builder.js +8 -1
  90. package/lib/formatter/builder.js.map +1 -1
  91. package/lib/formatter/get_color_fns.js +15 -16
  92. package/lib/formatter/get_color_fns.js.map +1 -1
  93. package/lib/formatter/helpers/issue_helpers.d.ts +2 -2
  94. package/lib/formatter/helpers/issue_helpers.js +2 -2
  95. package/lib/formatter/helpers/issue_helpers.js.map +1 -1
  96. package/lib/formatter/helpers/test_case_attempt_formatter.d.ts +2 -2
  97. package/lib/formatter/helpers/test_case_attempt_formatter.js +9 -8
  98. package/lib/formatter/helpers/test_case_attempt_formatter.js.map +1 -1
  99. package/lib/formatter/helpers/test_case_attempt_parser.d.ts +1 -2
  100. package/lib/formatter/helpers/test_case_attempt_parser.js +1 -1
  101. package/lib/formatter/helpers/test_case_attempt_parser.js.map +1 -1
  102. package/lib/formatter/helpers/usage_helpers/index.d.ts +1 -2
  103. package/lib/formatter/helpers/usage_helpers/index.js +3 -3
  104. package/lib/formatter/helpers/usage_helpers/index.js.map +1 -1
  105. package/lib/formatter/index.d.ts +14 -2
  106. package/lib/formatter/index.js +2 -0
  107. package/lib/formatter/index.js.map +1 -1
  108. package/lib/formatter/json_formatter.js.map +1 -1
  109. package/lib/formatter/progress_bar_formatter.js +1 -1
  110. package/lib/formatter/progress_bar_formatter.js.map +1 -1
  111. package/lib/formatter/snippets_formatter.js +0 -1
  112. package/lib/formatter/snippets_formatter.js.map +1 -1
  113. package/lib/formatter/summary_formatter.js +1 -1
  114. package/lib/formatter/summary_formatter.js.map +1 -1
  115. package/lib/formatter/usage_formatter.js +0 -1
  116. package/lib/formatter/usage_formatter.js.map +1 -1
  117. package/lib/formatter/usage_json_formatter.js +0 -1
  118. package/lib/formatter/usage_json_formatter.js.map +1 -1
  119. package/lib/index.d.ts +2 -0
  120. package/lib/index.js +4 -1
  121. package/lib/index.js.map +1 -1
  122. package/lib/models/pickle_order.d.ts +1 -0
  123. package/lib/models/pickle_order.js +3 -0
  124. package/lib/models/pickle_order.js.map +1 -0
  125. package/lib/runtime/index.d.ts +3 -5
  126. package/lib/runtime/index.js +7 -36
  127. package/lib/runtime/index.js.map +1 -1
  128. package/lib/runtime/parallel/command_types.d.ts +3 -2
  129. package/lib/runtime/parallel/command_types.js.map +1 -1
  130. package/lib/runtime/parallel/coordinator.d.ts +27 -8
  131. package/lib/runtime/parallel/coordinator.js +66 -19
  132. package/lib/runtime/parallel/coordinator.js.map +1 -1
  133. package/lib/runtime/parallel/worker.d.ts +2 -4
  134. package/lib/runtime/parallel/worker.js +11 -34
  135. package/lib/runtime/parallel/worker.js.map +1 -1
  136. package/lib/runtime/run_test_run_hooks.d.ts +3 -0
  137. package/lib/runtime/run_test_run_hooks.js +28 -0
  138. package/lib/runtime/run_test_run_hooks.js.map +1 -0
  139. package/lib/support_code_library_builder/index.d.ts +4 -2
  140. package/lib/support_code_library_builder/index.js +25 -2
  141. package/lib/support_code_library_builder/index.js.map +1 -1
  142. package/lib/support_code_library_builder/parallel_can_assign_helpers.d.ts +2 -0
  143. package/lib/support_code_library_builder/parallel_can_assign_helpers.js +16 -0
  144. package/lib/support_code_library_builder/parallel_can_assign_helpers.js.map +1 -0
  145. package/lib/support_code_library_builder/types.d.ts +9 -0
  146. package/lib/support_code_library_builder/types.js.map +1 -1
  147. package/lib/version.d.ts +1 -1
  148. package/lib/version.js +1 -1
  149. package/lib/version.js.map +1 -1
  150. package/lib/wrapper.mjs +4 -0
  151. package/package.json +47 -28
  152. package/lib/cli/argv_parser.d.ts +0 -51
  153. package/lib/cli/argv_parser.js.map +0 -1
  154. package/lib/cli/configuration_builder.d.ts +0 -5
  155. package/lib/cli/configuration_builder.js +0 -71
  156. package/lib/cli/configuration_builder.js.map +0 -1
  157. package/lib/cli/option_splitter.d.ts +0 -4
  158. package/lib/cli/option_splitter.js.map +0 -1
  159. package/lib/cli/profile_loader.d.ts +0 -7
  160. package/lib/cli/profile_loader.js +0 -49
  161. package/lib/cli/profile_loader.js.map +0 -1
  162. package/lib/run/formatters.js.map +0 -1
  163. package/lib/run/index.d.ts +0 -2
  164. package/lib/run/index.js.map +0 -1
  165. package/lib/run/paths.d.ts +0 -6
  166. package/lib/run/paths.js.map +0 -1
  167. package/lib/run/runCucumber.d.ts +0 -3
  168. package/lib/run/runCucumber.js +0 -88
  169. package/lib/run/runCucumber.js.map +0 -1
  170. package/lib/run/runtime.js +0 -58
  171. package/lib/run/runtime.js.map +0 -1
  172. package/lib/run/support.js.map +0 -1
  173. package/lib/run/types.d.ts +0 -12
  174. package/lib/run/types.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 { 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 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 numberOfWorkers: number\n}\n\ninterface IWorker {\n closed: boolean\n process: ChildProcess\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 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 readonly numberOfWorkers: number\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 numberOfWorkers,\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.numberOfWorkers = numberOfWorkers\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 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 = 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"]}
@@ -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 || !(0, helpers_2.isJavaScript)(codePath)) {
41
- require(codePath);
42
- }
43
- else {
44
- await importer((0, 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
  }
@@ -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: (0, value_checker_1.valueOrDefault)(hookDefinition.options.timeout, this.supportCodeLibrary.defaultTimeout),
103
- });
104
- if ((0, value_checker_1.doesHaveValue)(error)) {
105
- const location = (0, 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":";;;;;AAAA,qDAAwD;AAOxD,mCAAqC;AACrC,kFAAuD;AACvD,sGAA0E;AAC1E,2EAAgD;AAChD,8EAAmD;AACnD,iDAAgD;AAIhD,uDAAmE;AAEnE,4CAAmD;AACnD,yCAAoC;AACpC,6BAAmC;AACnC,+CAAgD;AAEhD,8DAA8D;AAC9D,MAAM,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAA;AAC9C,MAAM,EAAE,IAAI,EAAE,GAAG,sBAAW,CAAA;AAK5B,MAAqB,MAAM;IAczB,YAAY,EACV,GAAG,EACH,IAAI,EACJ,EAAE,EACF,WAAW,GAMZ;QACC,IAAI,CAAC,EAAE,GAAG,EAAE,CAAA;QACZ,IAAI,CAAC,KAAK,GAAG,IAAI,EAAE,CAAA;QACnB,IAAI,CAAC,GAAG,GAAG,GAAG,CAAA;QACd,IAAI,CAAC,IAAI,GAAG,IAAI,CAAA;QAChB,IAAI,CAAC,WAAW,GAAG,WAAW,CAAA;QAC9B,IAAI,CAAC,gBAAgB,GAAG,IAAI,qBAAY,EAAE,CAAA;QAC1C,IAAI,CAAC,gBAAgB,GAAG,IAAI,4BAAgB,EAAE,CAAA;QAC9C,IAAI,CAAC,gBAAgB,CAAC,EAAE,CAAC,UAAU,EAAE,CAAC,QAA2B,EAAE,EAAE;YACnE,IAAI,CAAC,WAAW,CAAC;gBACf,YAAY,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC;aACvC,CAAC,CAAA;QACJ,CAAC,CAAC,CAAA;IACJ,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,EACf,iBAAiB,EACjB,0BAA0B,EAC1B,gBAAgB,EAChB,cAAc,EACd,OAAO,GACkB;QACzB,0BAA0B,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAA;QAC3D,sCAAyB,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,CAAA;QACrD,KAAK,MAAM,QAAQ,IAAI,gBAAgB,EAAE;YACvC,IAAI,0BAA0B,CAAC,MAAM,IAAI,CAAC,IAAA,sBAAY,EAAC,QAAQ,CAAC,EAAE;gBAChE,OAAO,CAAC,QAAQ,CAAC,CAAA;aAClB;iBAAM;gBACL,MAAM,QAAQ,CAAC,IAAA,mBAAa,EAAC,QAAQ,CAAC,CAAC,CAAA;aACxC;SACF;QACD,IAAI,CAAC,kBAAkB,GAAG,sCAAyB,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAA;QAE5E,IAAI,CAAC,eAAe,GAAG,OAAO,CAAC,eAAe,CAAA;QAC9C,IAAI,CAAC,OAAO,GAAG,OAAO,CAAA;QACtB,IAAI,CAAC,iBAAiB,GAAG,iBAAiB,CAAA;QAC1C,IAAI,IAAI,CAAC,iBAAiB,EAAE;YAC1B,IAAI,CAAC,gBAAgB,CAAC,MAAM,EAAE,CAAA;SAC/B;QACD,MAAM,IAAI,CAAC,eAAe,CACxB,IAAI,CAAC,kBAAkB,CAAC,4BAA4B,EACpD,aAAa,CACd,CAAA;QACD,IAAI,CAAC,WAAW,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAA;IACnC,CAAC;IAED,KAAK,CAAC,QAAQ;QACZ,MAAM,IAAI,CAAC,eAAe,CACxB,IAAI,CAAC,kBAAkB,CAAC,2BAA2B,EACnD,aAAa,CACd,CAAA;QACD,IAAI,IAAI,CAAC,iBAAiB,EAAE;YAC1B,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE,CAAA;SACjC;QACD,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACd,CAAC;IAED,KAAK,CAAC,cAAc,CAAC,OAAuB;QAC1C,IAAI,IAAA,6BAAa,EAAC,OAAO,CAAC,UAAU,CAAC,EAAE;YACrC,MAAM,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,UAAU,CAAC,CAAA;SAC1C;aAAM,IAAI,OAAO,CAAC,QAAQ,EAAE;YAC3B,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAA;SACtB;aAAM,IAAI,IAAA,6BAAa,EAAC,OAAO,CAAC,GAAG,CAAC,EAAE;YACrC,MAAM,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;SACpC;IACH,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,EAChB,eAAe,EACf,MAAM,EACN,QAAQ,EACR,OAAO,EACP,OAAO,EACP,IAAI,GACc;QAClB,MAAM,SAAS,GAAG,IAAI,gCAAoB,EAAE,CAAA;QAC5C,SAAS,CAAC,IAAI,CAAC,IAAA,oBAAQ,EAAC,OAAO,CAAC,CAAC,CAAA;QACjC,MAAM,cAAc,GAAG,IAAI,0BAAc,CAAC;YACxC,gBAAgB,EAAE,IAAI,CAAC,gBAAgB;YACvC,SAAS;YACT,eAAe;YACf,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,MAAM;YACN,QAAQ;YACR,OAAO;YACP,IAAI;YACJ,kBAAkB,EAAE,IAAI,CAAC,kBAAkB;YAC3C,eAAe,EAAE,IAAI,CAAC,eAAe;SACtC,CAAC,CAAA;QACF,MAAM,cAAc,CAAC,GAAG,EAAE,CAAA;QAC1B,IAAI,CAAC,WAAW,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAA;IACnC,CAAC;IAED,KAAK,CAAC,eAAe,CACnB,sBAA+C,EAC/C,IAAY;QAEZ,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE;YACvB,OAAM;SACP;QACD,KAAK,MAAM,cAAc,IAAI,sBAAsB,EAAE;YACnD,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,IAAI,CAAC,kBAAkB,CAAC,cAAc,CACvC;aACF,CAAC,CAAA;YACF,IAAI,IAAA,6BAAa,EAAC,KAAK,CAAC,EAAE;gBACxB,MAAM,QAAQ,GAAG,IAAA,wBAAc,EAAC,cAAc,CAAC,CAAA;gBAC/C,IAAI,CAAC,IAAI,CACP,CAAC,EACD,KAAK,EACL,GAAG,IAAI,2BAA2B,IAAI,CAAC,EAAE,sBAAsB,QAAQ,EAAE,CAC1E,CAAA;aACF;SACF;IACH,CAAC;CACF;AAhJD,yBAgJC","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"]}
@@ -4,7 +4,7 @@ import TestCaseHookDefinition from '../models/test_case_hook_definition';
4
4
  import TestStepHookDefinition from '../models/test_step_hook_definition';
5
5
  import TestRunHookDefinition from '../models/test_run_hook_definition';
6
6
  import StepDefinition from '../models/step_definition';
7
- import { DefineStepPattern, IDefineStepOptions, IDefineSupportCodeMethods, IDefineTestCaseHookOptions, IDefineTestStepHookOptions, IDefineTestRunHookOptions, IParameterTypeDefinition, ISupportCodeLibrary, TestCaseHookFunction, TestStepHookFunction } from './types';
7
+ import { DefineStepPattern, IDefineStepOptions, IDefineSupportCodeMethods, IDefineTestCaseHookOptions, IDefineTestStepHookOptions, IDefineTestRunHookOptions, IParameterTypeDefinition, ISupportCodeLibrary, TestCaseHookFunction, TestStepHookFunction, ISupportCodeCoordinates } from './types';
8
8
  import { ICanonicalSupportCodeIds } from '../runtime/parallel/command_types';
9
9
  interface ITestCaseHookDefinitionConfig {
10
10
  code: any;
@@ -27,6 +27,7 @@ interface ITestRunHookDefinitionConfig {
27
27
  export declare const builtinParameterTypes: string[];
28
28
  export declare class SupportCodeLibraryBuilder {
29
29
  readonly methods: IDefineSupportCodeMethods;
30
+ private originalCoordinates;
30
31
  private afterTestCaseHookDefinitionConfigs;
31
32
  private afterTestRunHookDefinitionConfigs;
32
33
  private afterTestStepHookDefinitionConfigs;
@@ -40,6 +41,7 @@ export declare class SupportCodeLibraryBuilder {
40
41
  private parameterTypeRegistry;
41
42
  private stepDefinitionConfigs;
42
43
  private World;
44
+ private parallelCanAssign;
43
45
  constructor();
44
46
  defineParameterType(options: IParameterTypeDefinition<any>): void;
45
47
  defineStep(pattern: DefineStepPattern, options: IDefineStepOptions | Function, code?: Function): void;
@@ -58,7 +60,7 @@ export declare class SupportCodeLibraryBuilder {
58
60
  undefinedParameterTypes: messages.UndefinedParameterType[];
59
61
  };
60
62
  finalize(canonicalIds?: ICanonicalSupportCodeIds): ISupportCodeLibrary;
61
- reset(cwd: string, newId: IdGenerator.NewId): void;
63
+ reset(cwd: string, newId: IdGenerator.NewId, originalCoordinates?: ISupportCodeCoordinates): void;
62
64
  }
63
65
  declare const _default: SupportCodeLibraryBuilder;
64
66
  export default _default;
@@ -16,7 +16,19 @@ const util_arity_1 = __importDefault(require("util-arity"));
16
16
  const cucumber_expressions_1 = require("@cucumber/cucumber-expressions");
17
17
  const value_checker_1 = require("../value_checker");
18
18
  const world_1 = __importDefault(require("./world"));
19
- exports.builtinParameterTypes = ['int', 'float', 'word', 'string', ''];
19
+ exports.builtinParameterTypes = [
20
+ 'bigdecimal',
21
+ 'biginteger',
22
+ 'byte',
23
+ 'double',
24
+ 'float',
25
+ 'int',
26
+ 'long',
27
+ 'short',
28
+ 'string',
29
+ 'word',
30
+ '',
31
+ ];
20
32
  class SupportCodeLibraryBuilder {
21
33
  constructor() {
22
34
  const defineStep = this.defineStep.bind(this);
@@ -39,6 +51,9 @@ class SupportCodeLibraryBuilder {
39
51
  setWorldConstructor: (fn) => {
40
52
  this.World = fn;
41
53
  },
54
+ setParallelCanAssign: (fn) => {
55
+ this.parallelCanAssign = fn;
56
+ },
42
57
  Then: defineStep,
43
58
  When: defineStep,
44
59
  };
@@ -234,6 +249,7 @@ class SupportCodeLibraryBuilder {
234
249
  finalize(canonicalIds) {
235
250
  const stepDefinitionsResult = this.buildStepDefinitions(canonicalIds === null || canonicalIds === void 0 ? void 0 : canonicalIds.stepDefinitionIds);
236
251
  return {
252
+ originalCoordinates: this.originalCoordinates,
237
253
  afterTestCaseHookDefinitions: this.buildTestCaseHookDefinitions(this.afterTestCaseHookDefinitionConfigs, canonicalIds === null || canonicalIds === void 0 ? void 0 : canonicalIds.afterTestCaseHookDefinitionIds),
238
254
  afterTestRunHookDefinitions: this.buildTestRunHookDefinitions(this.afterTestRunHookDefinitionConfigs),
239
255
  afterTestStepHookDefinitions: this.buildTestStepHookDefinitions(this.afterTestStepHookDefinitionConfigs),
@@ -245,11 +261,17 @@ class SupportCodeLibraryBuilder {
245
261
  undefinedParameterTypes: stepDefinitionsResult.undefinedParameterTypes,
246
262
  stepDefinitions: stepDefinitionsResult.stepDefinitions,
247
263
  World: this.World,
264
+ parallelCanAssign: this.parallelCanAssign,
248
265
  };
249
266
  }
250
- reset(cwd, newId) {
267
+ reset(cwd, newId, originalCoordinates = {
268
+ requireModules: [],
269
+ requirePaths: [],
270
+ importPaths: [],
271
+ }) {
251
272
  this.cwd = cwd;
252
273
  this.newId = newId;
274
+ this.originalCoordinates = originalCoordinates;
253
275
  this.afterTestCaseHookDefinitionConfigs = [];
254
276
  this.afterTestRunHookDefinitionConfigs = [];
255
277
  this.afterTestStepHookDefinitionConfigs = [];
@@ -260,6 +282,7 @@ class SupportCodeLibraryBuilder {
260
282
  this.defaultTimeout = 5000;
261
283
  this.parameterTypeRegistry = new cucumber_expressions_1.ParameterTypeRegistry();
262
284
  this.stepDefinitionConfigs = [];
285
+ this.parallelCanAssign = () => true;
263
286
  this.World = world_1.default;
264
287
  }
265
288
  }
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/support_code_library_builder/index.ts"],"names":[],"mappings":"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","sourcesContent":["import { buildParameterType } from './build_parameter_type'\nimport { getDefinitionLineAndUri } from './get_definition_line_and_uri'\nimport { IdGenerator } from '@cucumber/messages'\nimport * as messages from '@cucumber/messages'\nimport TestCaseHookDefinition from '../models/test_case_hook_definition'\nimport TestStepHookDefinition from '../models/test_step_hook_definition'\nimport TestRunHookDefinition from '../models/test_run_hook_definition'\nimport StepDefinition from '../models/step_definition'\nimport { formatLocation } from '../formatter/helpers'\nimport validateArguments from './validate_arguments'\nimport arity from 'util-arity'\n\nimport {\n CucumberExpression,\n ParameterTypeRegistry,\n RegularExpression,\n} from '@cucumber/cucumber-expressions'\nimport { doesHaveValue } from '../value_checker'\nimport {\n DefineStepPattern,\n IDefineStepOptions,\n IDefineSupportCodeMethods,\n IDefineTestCaseHookOptions,\n IDefineTestStepHookOptions,\n IDefineTestRunHookOptions,\n IParameterTypeDefinition,\n ISupportCodeLibrary,\n TestCaseHookFunction,\n TestStepHookFunction,\n} from './types'\nimport World from './world'\nimport { ICanonicalSupportCodeIds } from '../runtime/parallel/command_types'\n\ninterface IStepDefinitionConfig {\n code: any\n line: number\n options: any\n pattern: string | RegExp\n uri: string\n}\n\ninterface ITestCaseHookDefinitionConfig {\n code: any\n line: number\n options: any\n uri: string\n}\n\ninterface ITestStepHookDefinitionConfig {\n code: any\n line: number\n options: any\n uri: string\n}\n\ninterface ITestRunHookDefinitionConfig {\n code: any\n line: number\n options: any\n uri: string\n}\n\nexport const builtinParameterTypes = ['int', 'float', 'word', 'string', '']\n\nexport class SupportCodeLibraryBuilder {\n public readonly methods: IDefineSupportCodeMethods\n\n private afterTestCaseHookDefinitionConfigs: ITestCaseHookDefinitionConfig[]\n private afterTestRunHookDefinitionConfigs: ITestRunHookDefinitionConfig[]\n private afterTestStepHookDefinitionConfigs: ITestStepHookDefinitionConfig[]\n private beforeTestCaseHookDefinitionConfigs: ITestCaseHookDefinitionConfig[]\n private beforeTestRunHookDefinitionConfigs: ITestRunHookDefinitionConfig[]\n private beforeTestStepHookDefinitionConfigs: ITestStepHookDefinitionConfig[]\n private cwd: string\n private defaultTimeout: number\n private definitionFunctionWrapper: any\n private newId: IdGenerator.NewId\n private parameterTypeRegistry: ParameterTypeRegistry\n private stepDefinitionConfigs: IStepDefinitionConfig[]\n private World: any\n\n constructor() {\n const defineStep = this.defineStep.bind(this)\n this.methods = {\n After: this.defineTestCaseHook(\n () => this.afterTestCaseHookDefinitionConfigs\n ),\n AfterAll: this.defineTestRunHook(\n () => this.afterTestRunHookDefinitionConfigs\n ),\n AfterStep: this.defineTestStepHook(\n () => this.afterTestStepHookDefinitionConfigs\n ),\n Before: this.defineTestCaseHook(\n () => this.beforeTestCaseHookDefinitionConfigs\n ),\n BeforeAll: this.defineTestRunHook(\n () => this.beforeTestRunHookDefinitionConfigs\n ),\n BeforeStep: this.defineTestStepHook(\n () => this.beforeTestStepHookDefinitionConfigs\n ),\n defineParameterType: this.defineParameterType.bind(this),\n defineStep,\n Given: defineStep,\n setDefaultTimeout: (milliseconds) => {\n this.defaultTimeout = milliseconds\n },\n setDefinitionFunctionWrapper: (fn) => {\n this.definitionFunctionWrapper = fn\n },\n setWorldConstructor: (fn) => {\n this.World = fn\n },\n Then: defineStep,\n When: defineStep,\n }\n }\n\n defineParameterType(options: IParameterTypeDefinition<any>): void {\n const parameterType = buildParameterType(options)\n this.parameterTypeRegistry.defineParameterType(parameterType)\n }\n\n defineStep(\n pattern: DefineStepPattern,\n options: IDefineStepOptions | Function,\n code?: Function\n ): void {\n if (typeof options === 'function') {\n code = options\n options = {}\n }\n const { line, uri } = getDefinitionLineAndUri(this.cwd)\n validateArguments({\n args: { code, pattern, options },\n fnName: 'defineStep',\n location: formatLocation({ line, uri }),\n })\n this.stepDefinitionConfigs.push({\n code,\n line,\n options,\n pattern,\n uri,\n })\n }\n\n defineTestCaseHook(\n getCollection: () => ITestCaseHookDefinitionConfig[]\n ): <WorldType>(\n options:\n | string\n | IDefineTestCaseHookOptions\n | TestCaseHookFunction<WorldType>,\n code?: TestCaseHookFunction<WorldType>\n ) => void {\n return <WorldType>(\n options:\n | string\n | IDefineTestCaseHookOptions\n | TestCaseHookFunction<WorldType>,\n code?: TestCaseHookFunction<WorldType>\n ) => {\n if (typeof options === 'string') {\n options = { tags: options }\n } else if (typeof options === 'function') {\n code = options\n options = {}\n }\n const { line, uri } = getDefinitionLineAndUri(this.cwd)\n validateArguments({\n args: { code, options },\n fnName: 'defineTestCaseHook',\n location: formatLocation({ line, uri }),\n })\n getCollection().push({\n code,\n line,\n options,\n uri,\n })\n }\n }\n\n defineTestStepHook(\n getCollection: () => ITestStepHookDefinitionConfig[]\n ): <WorldType>(\n options:\n | string\n | IDefineTestStepHookOptions\n | TestStepHookFunction<WorldType>,\n code?: TestStepHookFunction<WorldType>\n ) => void {\n return <WorldType>(\n options:\n | string\n | IDefineTestStepHookOptions\n | TestStepHookFunction<WorldType>,\n code?: TestStepHookFunction<WorldType>\n ) => {\n if (typeof options === 'string') {\n options = { tags: options }\n } else if (typeof options === 'function') {\n code = options\n options = {}\n }\n const { line, uri } = getDefinitionLineAndUri(this.cwd)\n validateArguments({\n args: { code, options },\n fnName: 'defineTestStepHook',\n location: formatLocation({ line, uri }),\n })\n getCollection().push({\n code,\n line,\n options,\n uri,\n })\n }\n }\n\n defineTestRunHook(\n getCollection: () => ITestRunHookDefinitionConfig[]\n ): (options: IDefineTestRunHookOptions | Function, code?: Function) => void {\n return (options: IDefineTestRunHookOptions | Function, code?: Function) => {\n if (typeof options === 'function') {\n code = options\n options = {}\n }\n const { line, uri } = getDefinitionLineAndUri(this.cwd)\n validateArguments({\n args: { code, options },\n fnName: 'defineTestRunHook',\n location: formatLocation({ line, uri }),\n })\n getCollection().push({\n code,\n line,\n options,\n uri,\n })\n }\n }\n\n wrapCode({\n code,\n wrapperOptions,\n }: {\n code: Function\n wrapperOptions: any\n }): Function {\n if (doesHaveValue(this.definitionFunctionWrapper)) {\n const codeLength = code.length\n const wrappedCode = this.definitionFunctionWrapper(code, wrapperOptions)\n if (wrappedCode !== code) {\n return arity(codeLength, wrappedCode)\n }\n return wrappedCode\n }\n return code\n }\n\n buildTestCaseHookDefinitions(\n configs: ITestCaseHookDefinitionConfig[],\n canonicalIds?: string[]\n ): TestCaseHookDefinition[] {\n return configs.map(({ code, line, options, uri }, index) => {\n const wrappedCode = this.wrapCode({\n code,\n wrapperOptions: options.wrapperOptions,\n })\n return new TestCaseHookDefinition({\n code: wrappedCode,\n id: canonicalIds ? canonicalIds[index] : this.newId(),\n line,\n options,\n unwrappedCode: code,\n uri,\n })\n })\n }\n\n buildTestStepHookDefinitions(\n configs: ITestStepHookDefinitionConfig[]\n ): TestStepHookDefinition[] {\n return configs.map(({ code, line, options, uri }) => {\n const wrappedCode = this.wrapCode({\n code,\n wrapperOptions: options.wrapperOptions,\n })\n return new TestStepHookDefinition({\n code: wrappedCode,\n id: this.newId(),\n line,\n options,\n unwrappedCode: code,\n uri,\n })\n })\n }\n\n buildTestRunHookDefinitions(\n configs: ITestRunHookDefinitionConfig[]\n ): TestRunHookDefinition[] {\n return configs.map(({ code, line, options, uri }) => {\n const wrappedCode = this.wrapCode({\n code,\n wrapperOptions: options.wrapperOptions,\n })\n return new TestRunHookDefinition({\n code: wrappedCode,\n id: this.newId(),\n line,\n options,\n unwrappedCode: code,\n uri,\n })\n })\n }\n\n buildStepDefinitions(canonicalIds?: string[]): {\n stepDefinitions: StepDefinition[]\n undefinedParameterTypes: messages.UndefinedParameterType[]\n } {\n const stepDefinitions: StepDefinition[] = []\n const undefinedParameterTypes: messages.UndefinedParameterType[] = []\n this.stepDefinitionConfigs.forEach(\n ({ code, line, options, pattern, uri }, index) => {\n let expression\n if (typeof pattern === 'string') {\n try {\n expression = new CucumberExpression(\n pattern,\n this.parameterTypeRegistry\n )\n } catch (e) {\n if (doesHaveValue(e.undefinedParameterTypeName)) {\n undefinedParameterTypes.push({\n name: e.undefinedParameterTypeName,\n expression: pattern,\n })\n return\n }\n throw e\n }\n } else {\n expression = new RegularExpression(\n pattern,\n this.parameterTypeRegistry\n )\n }\n\n const wrappedCode = this.wrapCode({\n code,\n wrapperOptions: options.wrapperOptions,\n })\n stepDefinitions.push(\n new StepDefinition({\n code: wrappedCode,\n expression,\n id: canonicalIds ? canonicalIds[index] : this.newId(),\n line,\n options,\n pattern,\n unwrappedCode: code,\n uri,\n })\n )\n }\n )\n return { stepDefinitions, undefinedParameterTypes }\n }\n\n finalize(canonicalIds?: ICanonicalSupportCodeIds): ISupportCodeLibrary {\n const stepDefinitionsResult = this.buildStepDefinitions(\n canonicalIds?.stepDefinitionIds\n )\n return {\n afterTestCaseHookDefinitions: this.buildTestCaseHookDefinitions(\n this.afterTestCaseHookDefinitionConfigs,\n canonicalIds?.afterTestCaseHookDefinitionIds\n ),\n afterTestRunHookDefinitions: this.buildTestRunHookDefinitions(\n this.afterTestRunHookDefinitionConfigs\n ),\n afterTestStepHookDefinitions: this.buildTestStepHookDefinitions(\n this.afterTestStepHookDefinitionConfigs\n ),\n beforeTestCaseHookDefinitions: this.buildTestCaseHookDefinitions(\n this.beforeTestCaseHookDefinitionConfigs,\n canonicalIds?.beforeTestCaseHookDefinitionIds\n ),\n beforeTestRunHookDefinitions: this.buildTestRunHookDefinitions(\n this.beforeTestRunHookDefinitionConfigs\n ),\n beforeTestStepHookDefinitions: this.buildTestStepHookDefinitions(\n this.beforeTestStepHookDefinitionConfigs\n ),\n defaultTimeout: this.defaultTimeout,\n parameterTypeRegistry: this.parameterTypeRegistry,\n undefinedParameterTypes: stepDefinitionsResult.undefinedParameterTypes,\n stepDefinitions: stepDefinitionsResult.stepDefinitions,\n World: this.World,\n }\n }\n\n reset(cwd: string, newId: IdGenerator.NewId): void {\n this.cwd = cwd\n this.newId = newId\n this.afterTestCaseHookDefinitionConfigs = []\n this.afterTestRunHookDefinitionConfigs = []\n this.afterTestStepHookDefinitionConfigs = []\n this.beforeTestCaseHookDefinitionConfigs = []\n this.beforeTestRunHookDefinitionConfigs = []\n this.beforeTestStepHookDefinitionConfigs = []\n this.definitionFunctionWrapper = null\n this.defaultTimeout = 5000\n this.parameterTypeRegistry = new ParameterTypeRegistry()\n this.stepDefinitionConfigs = []\n this.World = World\n }\n}\n\nexport default new SupportCodeLibraryBuilder()\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/support_code_library_builder/index.ts"],"names":[],"mappings":"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","sourcesContent":["import { buildParameterType } from './build_parameter_type'\nimport { getDefinitionLineAndUri } from './get_definition_line_and_uri'\nimport { IdGenerator } from '@cucumber/messages'\nimport * as messages from '@cucumber/messages'\nimport TestCaseHookDefinition from '../models/test_case_hook_definition'\nimport TestStepHookDefinition from '../models/test_step_hook_definition'\nimport TestRunHookDefinition from '../models/test_run_hook_definition'\nimport StepDefinition from '../models/step_definition'\nimport { formatLocation } from '../formatter/helpers'\nimport validateArguments from './validate_arguments'\nimport arity from 'util-arity'\n\nimport {\n CucumberExpression,\n ParameterTypeRegistry,\n RegularExpression,\n} from '@cucumber/cucumber-expressions'\nimport { doesHaveValue } from '../value_checker'\nimport {\n DefineStepPattern,\n IDefineStepOptions,\n IDefineSupportCodeMethods,\n IDefineTestCaseHookOptions,\n IDefineTestStepHookOptions,\n IDefineTestRunHookOptions,\n IParameterTypeDefinition,\n ISupportCodeLibrary,\n TestCaseHookFunction,\n TestStepHookFunction,\n ParallelAssignmentValidator,\n ISupportCodeCoordinates,\n} from './types'\nimport World from './world'\nimport { ICanonicalSupportCodeIds } from '../runtime/parallel/command_types'\n\ninterface IStepDefinitionConfig {\n code: any\n line: number\n options: any\n pattern: string | RegExp\n uri: string\n}\n\ninterface ITestCaseHookDefinitionConfig {\n code: any\n line: number\n options: any\n uri: string\n}\n\ninterface ITestStepHookDefinitionConfig {\n code: any\n line: number\n options: any\n uri: string\n}\n\ninterface ITestRunHookDefinitionConfig {\n code: any\n line: number\n options: any\n uri: string\n}\n\nexport const builtinParameterTypes = [\n 'bigdecimal',\n 'biginteger',\n 'byte',\n 'double',\n 'float',\n 'int',\n 'long',\n 'short',\n 'string',\n 'word',\n '',\n]\n\nexport class SupportCodeLibraryBuilder {\n public readonly methods: IDefineSupportCodeMethods\n\n private originalCoordinates: ISupportCodeCoordinates\n private afterTestCaseHookDefinitionConfigs: ITestCaseHookDefinitionConfig[]\n private afterTestRunHookDefinitionConfigs: ITestRunHookDefinitionConfig[]\n private afterTestStepHookDefinitionConfigs: ITestStepHookDefinitionConfig[]\n private beforeTestCaseHookDefinitionConfigs: ITestCaseHookDefinitionConfig[]\n private beforeTestRunHookDefinitionConfigs: ITestRunHookDefinitionConfig[]\n private beforeTestStepHookDefinitionConfigs: ITestStepHookDefinitionConfig[]\n private cwd: string\n private defaultTimeout: number\n private definitionFunctionWrapper: any\n private newId: IdGenerator.NewId\n private parameterTypeRegistry: ParameterTypeRegistry\n private stepDefinitionConfigs: IStepDefinitionConfig[]\n private World: any\n private parallelCanAssign: ParallelAssignmentValidator\n\n constructor() {\n const defineStep = this.defineStep.bind(this)\n this.methods = {\n After: this.defineTestCaseHook(\n () => this.afterTestCaseHookDefinitionConfigs\n ),\n AfterAll: this.defineTestRunHook(\n () => this.afterTestRunHookDefinitionConfigs\n ),\n AfterStep: this.defineTestStepHook(\n () => this.afterTestStepHookDefinitionConfigs\n ),\n Before: this.defineTestCaseHook(\n () => this.beforeTestCaseHookDefinitionConfigs\n ),\n BeforeAll: this.defineTestRunHook(\n () => this.beforeTestRunHookDefinitionConfigs\n ),\n BeforeStep: this.defineTestStepHook(\n () => this.beforeTestStepHookDefinitionConfigs\n ),\n defineParameterType: this.defineParameterType.bind(this),\n defineStep,\n Given: defineStep,\n setDefaultTimeout: (milliseconds) => {\n this.defaultTimeout = milliseconds\n },\n setDefinitionFunctionWrapper: (fn) => {\n this.definitionFunctionWrapper = fn\n },\n setWorldConstructor: (fn) => {\n this.World = fn\n },\n setParallelCanAssign: (fn: ParallelAssignmentValidator): void => {\n this.parallelCanAssign = fn\n },\n Then: defineStep,\n When: defineStep,\n }\n }\n\n defineParameterType(options: IParameterTypeDefinition<any>): void {\n const parameterType = buildParameterType(options)\n this.parameterTypeRegistry.defineParameterType(parameterType)\n }\n\n defineStep(\n pattern: DefineStepPattern,\n options: IDefineStepOptions | Function,\n code?: Function\n ): void {\n if (typeof options === 'function') {\n code = options\n options = {}\n }\n const { line, uri } = getDefinitionLineAndUri(this.cwd)\n validateArguments({\n args: { code, pattern, options },\n fnName: 'defineStep',\n location: formatLocation({ line, uri }),\n })\n this.stepDefinitionConfigs.push({\n code,\n line,\n options,\n pattern,\n uri,\n })\n }\n\n defineTestCaseHook(\n getCollection: () => ITestCaseHookDefinitionConfig[]\n ): <WorldType>(\n options:\n | string\n | IDefineTestCaseHookOptions\n | TestCaseHookFunction<WorldType>,\n code?: TestCaseHookFunction<WorldType>\n ) => void {\n return <WorldType>(\n options:\n | string\n | IDefineTestCaseHookOptions\n | TestCaseHookFunction<WorldType>,\n code?: TestCaseHookFunction<WorldType>\n ) => {\n if (typeof options === 'string') {\n options = { tags: options }\n } else if (typeof options === 'function') {\n code = options\n options = {}\n }\n const { line, uri } = getDefinitionLineAndUri(this.cwd)\n validateArguments({\n args: { code, options },\n fnName: 'defineTestCaseHook',\n location: formatLocation({ line, uri }),\n })\n getCollection().push({\n code,\n line,\n options,\n uri,\n })\n }\n }\n\n defineTestStepHook(\n getCollection: () => ITestStepHookDefinitionConfig[]\n ): <WorldType>(\n options:\n | string\n | IDefineTestStepHookOptions\n | TestStepHookFunction<WorldType>,\n code?: TestStepHookFunction<WorldType>\n ) => void {\n return <WorldType>(\n options:\n | string\n | IDefineTestStepHookOptions\n | TestStepHookFunction<WorldType>,\n code?: TestStepHookFunction<WorldType>\n ) => {\n if (typeof options === 'string') {\n options = { tags: options }\n } else if (typeof options === 'function') {\n code = options\n options = {}\n }\n const { line, uri } = getDefinitionLineAndUri(this.cwd)\n validateArguments({\n args: { code, options },\n fnName: 'defineTestStepHook',\n location: formatLocation({ line, uri }),\n })\n getCollection().push({\n code,\n line,\n options,\n uri,\n })\n }\n }\n\n defineTestRunHook(\n getCollection: () => ITestRunHookDefinitionConfig[]\n ): (options: IDefineTestRunHookOptions | Function, code?: Function) => void {\n return (options: IDefineTestRunHookOptions | Function, code?: Function) => {\n if (typeof options === 'function') {\n code = options\n options = {}\n }\n const { line, uri } = getDefinitionLineAndUri(this.cwd)\n validateArguments({\n args: { code, options },\n fnName: 'defineTestRunHook',\n location: formatLocation({ line, uri }),\n })\n getCollection().push({\n code,\n line,\n options,\n uri,\n })\n }\n }\n\n wrapCode({\n code,\n wrapperOptions,\n }: {\n code: Function\n wrapperOptions: any\n }): Function {\n if (doesHaveValue(this.definitionFunctionWrapper)) {\n const codeLength = code.length\n const wrappedCode = this.definitionFunctionWrapper(code, wrapperOptions)\n if (wrappedCode !== code) {\n return arity(codeLength, wrappedCode)\n }\n return wrappedCode\n }\n return code\n }\n\n buildTestCaseHookDefinitions(\n configs: ITestCaseHookDefinitionConfig[],\n canonicalIds?: string[]\n ): TestCaseHookDefinition[] {\n return configs.map(({ code, line, options, uri }, index) => {\n const wrappedCode = this.wrapCode({\n code,\n wrapperOptions: options.wrapperOptions,\n })\n return new TestCaseHookDefinition({\n code: wrappedCode,\n id: canonicalIds ? canonicalIds[index] : this.newId(),\n line,\n options,\n unwrappedCode: code,\n uri,\n })\n })\n }\n\n buildTestStepHookDefinitions(\n configs: ITestStepHookDefinitionConfig[]\n ): TestStepHookDefinition[] {\n return configs.map(({ code, line, options, uri }) => {\n const wrappedCode = this.wrapCode({\n code,\n wrapperOptions: options.wrapperOptions,\n })\n return new TestStepHookDefinition({\n code: wrappedCode,\n id: this.newId(),\n line,\n options,\n unwrappedCode: code,\n uri,\n })\n })\n }\n\n buildTestRunHookDefinitions(\n configs: ITestRunHookDefinitionConfig[]\n ): TestRunHookDefinition[] {\n return configs.map(({ code, line, options, uri }) => {\n const wrappedCode = this.wrapCode({\n code,\n wrapperOptions: options.wrapperOptions,\n })\n return new TestRunHookDefinition({\n code: wrappedCode,\n id: this.newId(),\n line,\n options,\n unwrappedCode: code,\n uri,\n })\n })\n }\n\n buildStepDefinitions(canonicalIds?: string[]): {\n stepDefinitions: StepDefinition[]\n undefinedParameterTypes: messages.UndefinedParameterType[]\n } {\n const stepDefinitions: StepDefinition[] = []\n const undefinedParameterTypes: messages.UndefinedParameterType[] = []\n this.stepDefinitionConfigs.forEach(\n ({ code, line, options, pattern, uri }, index) => {\n let expression\n if (typeof pattern === 'string') {\n try {\n expression = new CucumberExpression(\n pattern,\n this.parameterTypeRegistry\n )\n } catch (e) {\n if (doesHaveValue(e.undefinedParameterTypeName)) {\n undefinedParameterTypes.push({\n name: e.undefinedParameterTypeName,\n expression: pattern,\n })\n return\n }\n throw e\n }\n } else {\n expression = new RegularExpression(\n pattern,\n this.parameterTypeRegistry\n )\n }\n\n const wrappedCode = this.wrapCode({\n code,\n wrapperOptions: options.wrapperOptions,\n })\n stepDefinitions.push(\n new StepDefinition({\n code: wrappedCode,\n expression,\n id: canonicalIds ? canonicalIds[index] : this.newId(),\n line,\n options,\n pattern,\n unwrappedCode: code,\n uri,\n })\n )\n }\n )\n return { stepDefinitions, undefinedParameterTypes }\n }\n\n finalize(canonicalIds?: ICanonicalSupportCodeIds): ISupportCodeLibrary {\n const stepDefinitionsResult = this.buildStepDefinitions(\n canonicalIds?.stepDefinitionIds\n )\n return {\n originalCoordinates: this.originalCoordinates,\n afterTestCaseHookDefinitions: this.buildTestCaseHookDefinitions(\n this.afterTestCaseHookDefinitionConfigs,\n canonicalIds?.afterTestCaseHookDefinitionIds\n ),\n afterTestRunHookDefinitions: this.buildTestRunHookDefinitions(\n this.afterTestRunHookDefinitionConfigs\n ),\n afterTestStepHookDefinitions: this.buildTestStepHookDefinitions(\n this.afterTestStepHookDefinitionConfigs\n ),\n beforeTestCaseHookDefinitions: this.buildTestCaseHookDefinitions(\n this.beforeTestCaseHookDefinitionConfigs,\n canonicalIds?.beforeTestCaseHookDefinitionIds\n ),\n beforeTestRunHookDefinitions: this.buildTestRunHookDefinitions(\n this.beforeTestRunHookDefinitionConfigs\n ),\n beforeTestStepHookDefinitions: this.buildTestStepHookDefinitions(\n this.beforeTestStepHookDefinitionConfigs\n ),\n defaultTimeout: this.defaultTimeout,\n parameterTypeRegistry: this.parameterTypeRegistry,\n undefinedParameterTypes: stepDefinitionsResult.undefinedParameterTypes,\n stepDefinitions: stepDefinitionsResult.stepDefinitions,\n World: this.World,\n parallelCanAssign: this.parallelCanAssign,\n }\n }\n\n reset(\n cwd: string,\n newId: IdGenerator.NewId,\n originalCoordinates: ISupportCodeCoordinates = {\n requireModules: [],\n requirePaths: [],\n importPaths: [],\n }\n ): void {\n this.cwd = cwd\n this.newId = newId\n this.originalCoordinates = originalCoordinates\n this.afterTestCaseHookDefinitionConfigs = []\n this.afterTestRunHookDefinitionConfigs = []\n this.afterTestStepHookDefinitionConfigs = []\n this.beforeTestCaseHookDefinitionConfigs = []\n this.beforeTestRunHookDefinitionConfigs = []\n this.beforeTestStepHookDefinitionConfigs = []\n this.definitionFunctionWrapper = null\n this.defaultTimeout = 5000\n this.parameterTypeRegistry = new ParameterTypeRegistry()\n this.stepDefinitionConfigs = []\n this.parallelCanAssign = () => true\n this.World = World\n }\n}\n\nexport default new SupportCodeLibraryBuilder()\n"]}
@@ -0,0 +1,2 @@
1
+ import { ParallelAssignmentValidator } from './types';
2
+ export declare function atMostOnePicklePerTag(tagNames: string[]): ParallelAssignmentValidator;
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.atMostOnePicklePerTag = void 0;
4
+ function hasTag(pickle, tagName) {
5
+ return pickle.tags.some((t) => t.name == tagName);
6
+ }
7
+ function atMostOnePicklePerTag(tagNames) {
8
+ return (inQuestion, inProgress) => {
9
+ return tagNames.every((tagName) => {
10
+ return (!hasTag(inQuestion, tagName) ||
11
+ inProgress.every((p) => !hasTag(p, tagName)));
12
+ });
13
+ };
14
+ }
15
+ exports.atMostOnePicklePerTag = atMostOnePicklePerTag;
16
+ //# sourceMappingURL=parallel_can_assign_helpers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parallel_can_assign_helpers.js","sourceRoot":"","sources":["../../src/support_code_library_builder/parallel_can_assign_helpers.ts"],"names":[],"mappings":";;;AAGA,SAAS,MAAM,CAAC,MAAuB,EAAE,OAAe;IACtD,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,IAAI,OAAO,CAAC,CAAA;AACnD,CAAC;AAED,SAAgB,qBAAqB,CACnC,QAAkB;IAElB,OAAO,CAAC,UAA2B,EAAE,UAA6B,EAAE,EAAE;QACpE,OAAO,QAAQ,CAAC,KAAK,CAAC,CAAC,OAAO,EAAE,EAAE;YAChC,OAAO,CACL,CAAC,MAAM,CAAC,UAAU,EAAE,OAAO,CAAC;gBAC5B,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAC7C,CAAA;QACH,CAAC,CAAC,CAAA;IACJ,CAAC,CAAA;AACH,CAAC;AAXD,sDAWC","sourcesContent":["import * as messages from '@cucumber/messages'\nimport { ParallelAssignmentValidator } from './types'\n\nfunction hasTag(pickle: messages.Pickle, tagName: string): boolean {\n return pickle.tags.some((t) => t.name == tagName)\n}\n\nexport function atMostOnePicklePerTag(\n tagNames: string[]\n): ParallelAssignmentValidator {\n return (inQuestion: messages.Pickle, inProgress: messages.Pickle[]) => {\n return tagNames.every((tagName) => {\n return (\n !hasTag(inQuestion, tagName) ||\n inProgress.every((p) => !hasTag(p, tagName))\n )\n })\n }\n}\n"]}
@@ -6,6 +6,7 @@ import StepDefinition from '../models/step_definition';
6
6
  import { ParameterTypeRegistry } from '@cucumber/cucumber-expressions';
7
7
  import { IWorld } from './world';
8
8
  export declare type DefineStepPattern = string | RegExp;
9
+ export declare type ParallelAssignmentValidator = (pickle: messages.Pickle, runningPickles: messages.Pickle[]) => boolean;
9
10
  export interface ITestCaseHookParameter {
10
11
  gherkinDocument: messages.GherkinDocument;
11
12
  pickle: messages.Pickle;
@@ -50,6 +51,7 @@ export interface IDefineSupportCodeMethods {
50
51
  defineStep: (<WorldType = IWorld>(pattern: DefineStepPattern, code: TestStepFunction<WorldType>) => void) & (<WorldType = IWorld>(pattern: DefineStepPattern, options: IDefineStepOptions, code: TestStepFunction<WorldType>) => void);
51
52
  setDefaultTimeout: (milliseconds: number) => void;
52
53
  setDefinitionFunctionWrapper: (fn: Function) => void;
54
+ setParallelCanAssign: (fn: ParallelAssignmentValidator) => void;
53
55
  setWorldConstructor: (fn: any) => void;
54
56
  After: (<WorldType = IWorld>(code: TestCaseHookFunction<WorldType>) => void) & (<WorldType = IWorld>(tags: string, code: TestCaseHookFunction<WorldType>) => void) & (<WorldType = IWorld>(options: IDefineTestCaseHookOptions, code: TestCaseHookFunction<WorldType>) => void);
55
57
  AfterStep: (<WorldType = IWorld>(code: TestStepHookFunction<WorldType>) => void) & (<WorldType = IWorld>(tags: string, code: TestStepHookFunction<WorldType>) => void) & (<WorldType = IWorld>(options: IDefineTestStepHookOptions, code: TestStepHookFunction<WorldType>) => void);
@@ -61,7 +63,13 @@ export interface IDefineSupportCodeMethods {
61
63
  Then: (<WorldType = IWorld>(pattern: DefineStepPattern, code: TestStepFunction<WorldType>) => void) & (<WorldType = IWorld>(pattern: DefineStepPattern, options: IDefineStepOptions, code: TestStepFunction<WorldType>) => void);
62
64
  When: (<WorldType = IWorld>(pattern: DefineStepPattern, code: TestStepFunction<WorldType>) => void) & (<WorldType = IWorld>(pattern: DefineStepPattern, options: IDefineStepOptions, code: TestStepFunction<WorldType>) => void);
63
65
  }
66
+ export interface ISupportCodeCoordinates {
67
+ requireModules: string[];
68
+ requirePaths: string[];
69
+ importPaths: string[];
70
+ }
64
71
  export interface ISupportCodeLibrary {
72
+ readonly originalCoordinates: ISupportCodeCoordinates;
65
73
  readonly afterTestCaseHookDefinitions: TestCaseHookDefinition[];
66
74
  readonly afterTestStepHookDefinitions: TestStepHookDefinition[];
67
75
  readonly afterTestRunHookDefinitions: TestRunHookDefinition[];
@@ -73,4 +81,5 @@ export interface ISupportCodeLibrary {
73
81
  readonly undefinedParameterTypes: messages.UndefinedParameterType[];
74
82
  readonly parameterTypeRegistry: ParameterTypeRegistry;
75
83
  readonly World: any;
84
+ readonly parallelCanAssign: ParallelAssignmentValidator;
76
85
  }
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/support_code_library_builder/types.ts"],"names":[],"mappings":"","sourcesContent":["import * as messages from '@cucumber/messages'\nimport TestCaseHookDefinition from '../models/test_case_hook_definition'\nimport TestStepHookDefinition from '../models/test_step_hook_definition'\nimport TestRunHookDefinition from '../models/test_run_hook_definition'\nimport StepDefinition from '../models/step_definition'\nimport { ParameterTypeRegistry } from '@cucumber/cucumber-expressions'\nimport { IWorld } from './world'\n\nexport type DefineStepPattern = string | RegExp\n\nexport interface ITestCaseHookParameter {\n gherkinDocument: messages.GherkinDocument\n pickle: messages.Pickle\n result?: messages.TestStepResult\n testCaseStartedId: string\n}\n\nexport interface ITestStepHookParameter {\n gherkinDocument: messages.GherkinDocument\n pickle: messages.Pickle\n pickleStep: messages.PickleStep\n result: messages.TestStepResult\n testCaseStartedId: string\n testStepId: string\n}\n\nexport type TestCaseHookFunction<WorldType> = (\n this: WorldType,\n arg: ITestCaseHookParameter\n) => any | Promise<any>\n\nexport type TestStepHookFunction<WorldType> = (\n this: WorldType,\n arg: ITestStepHookParameter\n) => void\n\nexport type TestStepFunction<WorldType> = (\n this: WorldType,\n ...args: any[]\n) => any | Promise<any>\n\nexport interface IDefineStepOptions {\n timeout?: number\n wrapperOptions?: any\n}\n\nexport interface IDefineTestCaseHookOptions {\n tags?: string\n timeout?: number\n}\n\nexport interface IDefineTestStepHookOptions {\n tags?: string\n timeout?: number\n}\n\nexport interface IDefineTestRunHookOptions {\n timeout?: number\n}\n\nexport interface IParameterTypeDefinition<T> {\n name: string\n regexp: readonly RegExp[] | readonly string[] | RegExp | string\n transformer: (...match: string[]) => T\n useForSnippets?: boolean\n preferForRegexpMatch?: boolean\n}\n\nexport interface IDefineSupportCodeMethods {\n defineParameterType: (options: IParameterTypeDefinition<any>) => void\n defineStep: (<WorldType = IWorld>(\n pattern: DefineStepPattern,\n code: TestStepFunction<WorldType>\n ) => void) &\n (<WorldType = IWorld>(\n pattern: DefineStepPattern,\n options: IDefineStepOptions,\n code: TestStepFunction<WorldType>\n ) => void)\n setDefaultTimeout: (milliseconds: number) => void\n setDefinitionFunctionWrapper: (fn: Function) => void\n setWorldConstructor: (fn: any) => void\n After: (<WorldType = IWorld>(code: TestCaseHookFunction<WorldType>) => void) &\n (<WorldType = IWorld>(\n tags: string,\n code: TestCaseHookFunction<WorldType>\n ) => void) &\n (<WorldType = IWorld>(\n options: IDefineTestCaseHookOptions,\n code: TestCaseHookFunction<WorldType>\n ) => void)\n AfterStep: (<WorldType = IWorld>(\n code: TestStepHookFunction<WorldType>\n ) => void) &\n (<WorldType = IWorld>(\n tags: string,\n code: TestStepHookFunction<WorldType>\n ) => void) &\n (<WorldType = IWorld>(\n options: IDefineTestStepHookOptions,\n code: TestStepHookFunction<WorldType>\n ) => void)\n AfterAll: ((code: Function) => void) &\n ((options: IDefineTestRunHookOptions, code: Function) => void)\n Before: (<WorldType = IWorld>(\n code: TestCaseHookFunction<WorldType>\n ) => void) &\n (<WorldType = IWorld>(\n tags: string,\n code: TestCaseHookFunction<WorldType>\n ) => void) &\n (<WorldType = IWorld>(\n options: IDefineTestCaseHookOptions,\n code: TestCaseHookFunction<WorldType>\n ) => void)\n BeforeStep: (<WorldType = IWorld>(\n code: TestStepHookFunction<WorldType>\n ) => void) &\n (<WorldType = IWorld>(\n tags: string,\n code: TestStepHookFunction<WorldType>\n ) => void) &\n (<WorldType = IWorld>(\n options: IDefineTestStepHookOptions,\n code: TestStepHookFunction<WorldType>\n ) => void)\n BeforeAll: ((code: Function) => void) &\n ((options: IDefineTestRunHookOptions, code: Function) => void)\n Given: (<WorldType = IWorld>(\n pattern: DefineStepPattern,\n code: TestStepFunction<WorldType>\n ) => void) &\n (<WorldType = IWorld>(\n pattern: DefineStepPattern,\n options: IDefineStepOptions,\n code: TestStepFunction<WorldType>\n ) => void)\n Then: (<WorldType = IWorld>(\n pattern: DefineStepPattern,\n code: TestStepFunction<WorldType>\n ) => void) &\n (<WorldType = IWorld>(\n pattern: DefineStepPattern,\n options: IDefineStepOptions,\n code: TestStepFunction<WorldType>\n ) => void)\n When: (<WorldType = IWorld>(\n pattern: DefineStepPattern,\n code: TestStepFunction<WorldType>\n ) => void) &\n (<WorldType = IWorld>(\n pattern: DefineStepPattern,\n options: IDefineStepOptions,\n code: TestStepFunction<WorldType>\n ) => void)\n}\n\nexport interface ISupportCodeLibrary {\n readonly afterTestCaseHookDefinitions: TestCaseHookDefinition[]\n readonly afterTestStepHookDefinitions: TestStepHookDefinition[]\n readonly afterTestRunHookDefinitions: TestRunHookDefinition[]\n readonly beforeTestCaseHookDefinitions: TestCaseHookDefinition[]\n readonly beforeTestStepHookDefinitions: TestStepHookDefinition[]\n readonly beforeTestRunHookDefinitions: TestRunHookDefinition[]\n readonly defaultTimeout: number\n readonly stepDefinitions: StepDefinition[]\n readonly undefinedParameterTypes: messages.UndefinedParameterType[]\n readonly parameterTypeRegistry: ParameterTypeRegistry\n readonly World: any\n}\n"]}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/support_code_library_builder/types.ts"],"names":[],"mappings":"","sourcesContent":["import * as messages from '@cucumber/messages'\nimport TestCaseHookDefinition from '../models/test_case_hook_definition'\nimport TestStepHookDefinition from '../models/test_step_hook_definition'\nimport TestRunHookDefinition from '../models/test_run_hook_definition'\nimport StepDefinition from '../models/step_definition'\nimport { ParameterTypeRegistry } from '@cucumber/cucumber-expressions'\nimport { IWorld } from './world'\n\nexport type DefineStepPattern = string | RegExp\nexport type ParallelAssignmentValidator = (\n pickle: messages.Pickle,\n runningPickles: messages.Pickle[]\n) => boolean\nexport interface ITestCaseHookParameter {\n gherkinDocument: messages.GherkinDocument\n pickle: messages.Pickle\n result?: messages.TestStepResult\n testCaseStartedId: string\n}\n\nexport interface ITestStepHookParameter {\n gherkinDocument: messages.GherkinDocument\n pickle: messages.Pickle\n pickleStep: messages.PickleStep\n result: messages.TestStepResult\n testCaseStartedId: string\n testStepId: string\n}\n\nexport type TestCaseHookFunction<WorldType> = (\n this: WorldType,\n arg: ITestCaseHookParameter\n) => any | Promise<any>\n\nexport type TestStepHookFunction<WorldType> = (\n this: WorldType,\n arg: ITestStepHookParameter\n) => void\n\nexport type TestStepFunction<WorldType> = (\n this: WorldType,\n ...args: any[]\n) => any | Promise<any>\n\nexport interface IDefineStepOptions {\n timeout?: number\n wrapperOptions?: any\n}\n\nexport interface IDefineTestCaseHookOptions {\n tags?: string\n timeout?: number\n}\n\nexport interface IDefineTestStepHookOptions {\n tags?: string\n timeout?: number\n}\n\nexport interface IDefineTestRunHookOptions {\n timeout?: number\n}\n\nexport interface IParameterTypeDefinition<T> {\n name: string\n regexp: readonly RegExp[] | readonly string[] | RegExp | string\n transformer: (...match: string[]) => T\n useForSnippets?: boolean\n preferForRegexpMatch?: boolean\n}\n\nexport interface IDefineSupportCodeMethods {\n defineParameterType: (options: IParameterTypeDefinition<any>) => void\n defineStep: (<WorldType = IWorld>(\n pattern: DefineStepPattern,\n code: TestStepFunction<WorldType>\n ) => void) &\n (<WorldType = IWorld>(\n pattern: DefineStepPattern,\n options: IDefineStepOptions,\n code: TestStepFunction<WorldType>\n ) => void)\n setDefaultTimeout: (milliseconds: number) => void\n setDefinitionFunctionWrapper: (fn: Function) => void\n setParallelCanAssign: (fn: ParallelAssignmentValidator) => void\n setWorldConstructor: (fn: any) => void\n After: (<WorldType = IWorld>(code: TestCaseHookFunction<WorldType>) => void) &\n (<WorldType = IWorld>(\n tags: string,\n code: TestCaseHookFunction<WorldType>\n ) => void) &\n (<WorldType = IWorld>(\n options: IDefineTestCaseHookOptions,\n code: TestCaseHookFunction<WorldType>\n ) => void)\n AfterStep: (<WorldType = IWorld>(\n code: TestStepHookFunction<WorldType>\n ) => void) &\n (<WorldType = IWorld>(\n tags: string,\n code: TestStepHookFunction<WorldType>\n ) => void) &\n (<WorldType = IWorld>(\n options: IDefineTestStepHookOptions,\n code: TestStepHookFunction<WorldType>\n ) => void)\n AfterAll: ((code: Function) => void) &\n ((options: IDefineTestRunHookOptions, code: Function) => void)\n Before: (<WorldType = IWorld>(\n code: TestCaseHookFunction<WorldType>\n ) => void) &\n (<WorldType = IWorld>(\n tags: string,\n code: TestCaseHookFunction<WorldType>\n ) => void) &\n (<WorldType = IWorld>(\n options: IDefineTestCaseHookOptions,\n code: TestCaseHookFunction<WorldType>\n ) => void)\n BeforeStep: (<WorldType = IWorld>(\n code: TestStepHookFunction<WorldType>\n ) => void) &\n (<WorldType = IWorld>(\n tags: string,\n code: TestStepHookFunction<WorldType>\n ) => void) &\n (<WorldType = IWorld>(\n options: IDefineTestStepHookOptions,\n code: TestStepHookFunction<WorldType>\n ) => void)\n BeforeAll: ((code: Function) => void) &\n ((options: IDefineTestRunHookOptions, code: Function) => void)\n Given: (<WorldType = IWorld>(\n pattern: DefineStepPattern,\n code: TestStepFunction<WorldType>\n ) => void) &\n (<WorldType = IWorld>(\n pattern: DefineStepPattern,\n options: IDefineStepOptions,\n code: TestStepFunction<WorldType>\n ) => void)\n Then: (<WorldType = IWorld>(\n pattern: DefineStepPattern,\n code: TestStepFunction<WorldType>\n ) => void) &\n (<WorldType = IWorld>(\n pattern: DefineStepPattern,\n options: IDefineStepOptions,\n code: TestStepFunction<WorldType>\n ) => void)\n When: (<WorldType = IWorld>(\n pattern: DefineStepPattern,\n code: TestStepFunction<WorldType>\n ) => void) &\n (<WorldType = IWorld>(\n pattern: DefineStepPattern,\n options: IDefineStepOptions,\n code: TestStepFunction<WorldType>\n ) => void)\n}\n\nexport interface ISupportCodeCoordinates {\n requireModules: string[]\n requirePaths: string[]\n importPaths: string[]\n}\n\nexport interface ISupportCodeLibrary {\n readonly originalCoordinates: ISupportCodeCoordinates\n readonly afterTestCaseHookDefinitions: TestCaseHookDefinition[]\n readonly afterTestStepHookDefinitions: TestStepHookDefinition[]\n readonly afterTestRunHookDefinitions: TestRunHookDefinition[]\n readonly beforeTestCaseHookDefinitions: TestCaseHookDefinition[]\n readonly beforeTestStepHookDefinitions: TestStepHookDefinition[]\n readonly beforeTestRunHookDefinitions: TestRunHookDefinition[]\n readonly defaultTimeout: number\n readonly stepDefinitions: StepDefinition[]\n readonly undefinedParameterTypes: messages.UndefinedParameterType[]\n readonly parameterTypeRegistry: ParameterTypeRegistry\n readonly World: any\n readonly parallelCanAssign: ParallelAssignmentValidator\n}\n"]}
package/lib/version.d.ts CHANGED
@@ -1 +1 @@
1
- export declare const version = "8.0.0-rc.2";
1
+ export declare const version = "8.0.0-rc.3";
package/lib/version.js CHANGED
@@ -2,5 +2,5 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.version = void 0;
4
4
  // generated by genversion
5
- exports.version = '8.0.0-rc.2';
5
+ exports.version = '8.0.0-rc.3';
6
6
  //# sourceMappingURL=version.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"version.js","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":";;;AAAA,0BAA0B;AACb,QAAA,OAAO,GAAG,YAAY,CAAA","sourcesContent":["// generated by genversion\nexport const version = '8.0.0-rc.2'\n"]}
1
+ {"version":3,"file":"version.js","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":";;;AAAA,0BAA0B;AACb,QAAA,OAAO,GAAG,YAAY,CAAA","sourcesContent":["// generated by genversion\nexport const version = '8.0.0-rc.3'\n"]}
package/lib/wrapper.mjs CHANGED
@@ -7,6 +7,8 @@ export const Runtime = cucumber.Runtime
7
7
  export const supportCodeLibraryBuilder = cucumber.supportCodeLibraryBuilder
8
8
  export const Status = cucumber.Status
9
9
  export const DataTable = cucumber.DataTable
10
+ export const TestCaseHookDefinition = cucumber.TestCaseHookDefinition
11
+ export const version = cucumber.version
10
12
 
11
13
  export const Formatter = cucumber.Formatter
12
14
  export const FormatterBuilder = cucumber.FormatterBuilder
@@ -36,3 +38,5 @@ export const When = cucumber.When
36
38
 
37
39
  export const World = cucumber.World
38
40
 
41
+ export const wrapPromiseWithTimeout = cucumber.wrapPromiseWithTimeout
42
+