@cucumber/cucumber 7.2.1 → 7.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (121) hide show
  1. package/CHANGELOG.md +28 -1
  2. package/lib/cli/configuration_builder.js +3 -3
  3. package/lib/cli/configuration_builder.js.map +1 -1
  4. package/lib/cli/helpers.js +40 -18
  5. package/lib/cli/helpers.js.map +1 -1
  6. package/lib/cli/index.js +23 -15
  7. package/lib/cli/index.js.map +1 -1
  8. package/lib/cli/profile_loader.d.ts +1 -2
  9. package/lib/cli/profile_loader.js.map +1 -1
  10. package/lib/formatter/get_color_fns.d.ts +2 -2
  11. package/lib/formatter/get_color_fns.js +7 -8
  12. package/lib/formatter/get_color_fns.js.map +1 -1
  13. package/lib/formatter/helpers/event_data_collector.d.ts +14 -17
  14. package/lib/formatter/helpers/event_data_collector.js +14 -8
  15. package/lib/formatter/helpers/event_data_collector.js.map +1 -1
  16. package/lib/formatter/helpers/gherkin_document_parser.d.ts +5 -6
  17. package/lib/formatter/helpers/gherkin_document_parser.js +1 -4
  18. package/lib/formatter/helpers/gherkin_document_parser.js.map +1 -1
  19. package/lib/formatter/helpers/issue_helpers.d.ts +6 -6
  20. package/lib/formatter/helpers/issue_helpers.js +5 -6
  21. package/lib/formatter/helpers/issue_helpers.js.map +1 -1
  22. package/lib/formatter/helpers/pickle_parser.d.ts +9 -10
  23. package/lib/formatter/helpers/pickle_parser.js.map +1 -1
  24. package/lib/formatter/helpers/step_argument_formatter.d.ts +2 -2
  25. package/lib/formatter/helpers/step_argument_formatter.js.map +1 -1
  26. package/lib/formatter/helpers/summary_helpers.d.ts +2 -2
  27. package/lib/formatter/helpers/summary_helpers.js +32 -14
  28. package/lib/formatter/helpers/summary_helpers.js.map +1 -1
  29. package/lib/formatter/helpers/test_case_attempt_formatter.js +33 -14
  30. package/lib/formatter/helpers/test_case_attempt_formatter.js.map +1 -1
  31. package/lib/formatter/helpers/test_case_attempt_parser.d.ts +5 -5
  32. package/lib/formatter/helpers/test_case_attempt_parser.js +27 -9
  33. package/lib/formatter/helpers/test_case_attempt_parser.js.map +1 -1
  34. package/lib/formatter/helpers/usage_helpers/index.d.ts +3 -3
  35. package/lib/formatter/helpers/usage_helpers/index.js +30 -13
  36. package/lib/formatter/helpers/usage_helpers/index.js.map +1 -1
  37. package/lib/formatter/html_formatter.js +1 -1
  38. package/lib/formatter/html_formatter.js.map +1 -1
  39. package/lib/formatter/json_formatter.d.ts +21 -27
  40. package/lib/formatter/json_formatter.js +50 -23
  41. package/lib/formatter/json_formatter.js.map +1 -1
  42. package/lib/formatter/message_formatter.js +1 -1
  43. package/lib/formatter/message_formatter.js.map +1 -1
  44. package/lib/formatter/progress_bar_formatter.d.ts +6 -6
  45. package/lib/formatter/progress_bar_formatter.js +3 -3
  46. package/lib/formatter/progress_bar_formatter.js.map +1 -1
  47. package/lib/formatter/progress_formatter.d.ts +2 -2
  48. package/lib/formatter/progress_formatter.js +29 -10
  49. package/lib/formatter/progress_formatter.js.map +1 -1
  50. package/lib/formatter/rerun_formatter.js +22 -4
  51. package/lib/formatter/rerun_formatter.js.map +1 -1
  52. package/lib/formatter/snippets_formatter.js +21 -2
  53. package/lib/formatter/snippets_formatter.js.map +1 -1
  54. package/lib/formatter/step_definition_snippet_builder/index.d.ts +3 -3
  55. package/lib/formatter/step_definition_snippet_builder/index.js.map +1 -1
  56. package/lib/formatter/step_definition_snippet_builder/javascript_snippet_syntax.js.map +1 -1
  57. package/lib/formatter/summary_formatter.d.ts +2 -2
  58. package/lib/formatter/summary_formatter.js.map +1 -1
  59. package/lib/formatter/usage_formatter.js +22 -3
  60. package/lib/formatter/usage_formatter.js.map +1 -1
  61. package/lib/formatter/usage_json_formatter.js.map +1 -1
  62. package/lib/index.d.ts +14 -12
  63. package/lib/index.js +3 -3
  64. package/lib/index.js.map +1 -1
  65. package/lib/models/data_table.d.ts +3 -4
  66. package/lib/models/data_table.js.map +1 -1
  67. package/lib/models/definition.d.ts +2 -2
  68. package/lib/models/definition.js.map +1 -1
  69. package/lib/models/test_case_hook_definition.d.ts +2 -2
  70. package/lib/models/test_case_hook_definition.js.map +1 -1
  71. package/lib/models/test_step_hook_definition.d.ts +2 -2
  72. package/lib/models/test_step_hook_definition.js.map +1 -1
  73. package/lib/pickle_filter.d.ts +9 -11
  74. package/lib/pickle_filter.js +4 -4
  75. package/lib/pickle_filter.js.map +1 -1
  76. package/lib/runtime/assemble_test_cases.d.ts +13 -0
  77. package/lib/runtime/assemble_test_cases.js +88 -0
  78. package/lib/runtime/assemble_test_cases.js.map +1 -0
  79. package/lib/runtime/attachment_manager/index.d.ts +2 -2
  80. package/lib/runtime/attachment_manager/index.js +23 -4
  81. package/lib/runtime/attachment_manager/index.js.map +1 -1
  82. package/lib/runtime/helpers.d.ts +2 -2
  83. package/lib/runtime/helpers.js.map +1 -1
  84. package/lib/runtime/index.d.ts +4 -3
  85. package/lib/runtime/index.js +31 -13
  86. package/lib/runtime/index.js.map +1 -1
  87. package/lib/runtime/parallel/command_types.d.ts +10 -9
  88. package/lib/runtime/parallel/command_types.js.map +1 -1
  89. package/lib/runtime/parallel/coordinator.d.ts +10 -9
  90. package/lib/runtime/parallel/coordinator.js +54 -43
  91. package/lib/runtime/parallel/coordinator.js.map +1 -1
  92. package/lib/runtime/parallel/worker.d.ts +2 -2
  93. package/lib/runtime/parallel/worker.js +8 -14
  94. package/lib/runtime/parallel/worker.js.map +1 -1
  95. package/lib/runtime/step_runner.d.ts +3 -3
  96. package/lib/runtime/step_runner.js +16 -12
  97. package/lib/runtime/step_runner.js.map +1 -1
  98. package/lib/runtime/stopwatch.d.ts +4 -4
  99. package/lib/runtime/stopwatch.js +21 -2
  100. package/lib/runtime/stopwatch.js.map +1 -1
  101. package/lib/runtime/{pickle_runner.d.ts → test_case_runner.d.ts} +16 -32
  102. package/lib/runtime/{pickle_runner.js → test_case_runner.js} +104 -147
  103. package/lib/runtime/test_case_runner.js.map +1 -0
  104. package/lib/step_arguments.d.ts +4 -4
  105. package/lib/step_arguments.js.map +1 -1
  106. package/lib/support_code_library_builder/index.d.ts +9 -7
  107. package/lib/support_code_library_builder/index.js +10 -10
  108. package/lib/support_code_library_builder/index.js.map +1 -1
  109. package/lib/support_code_library_builder/types.d.ts +20 -22
  110. package/lib/support_code_library_builder/types.js.map +1 -1
  111. package/lib/support_code_library_builder/validate_arguments.js.map +1 -1
  112. package/lib/support_code_library_builder/world.d.ts +7 -1
  113. package/lib/support_code_library_builder/world.js.map +1 -1
  114. package/lib/time.d.ts +2 -10
  115. package/lib/time.js +24 -48
  116. package/lib/time.js.map +1 -1
  117. package/package.json +33 -33
  118. package/lib/runtime/pickle_runner.js.map +0 -1
  119. package/lib/status.d.ts +0 -3
  120. package/lib/status.js +0 -5
  121. package/lib/status.js.map +0 -1
@@ -20,8 +20,8 @@ var __importStar = (this && this.__importStar) || function (mod) {
20
20
  };
21
21
  Object.defineProperty(exports, "__esModule", { value: true });
22
22
  const lodash_1 = __importStar(require("lodash"));
23
+ const messages = __importStar(require("@cucumber/messages"));
23
24
  const value_checker_1 = require("../../value_checker");
24
- const query_1 = require("@cucumber/query");
25
25
  class EventDataCollector {
26
26
  constructor(eventBroadcaster) {
27
27
  this.gherkinDocumentMap = {};
@@ -29,7 +29,6 @@ class EventDataCollector {
29
29
  this.testCaseMap = {};
30
30
  this.testCaseAttemptDataMap = {};
31
31
  this.undefinedParameterTypes = [];
32
- this.query = new query_1.Query();
33
32
  eventBroadcaster.on('envelope', this.parseEnvelope.bind(this));
34
33
  }
35
34
  getGherkinDocument(uri) {
@@ -58,7 +57,6 @@ class EventDataCollector {
58
57
  };
59
58
  }
60
59
  parseEnvelope(envelope) {
61
- this.query.update(envelope);
62
60
  if (value_checker_1.doesHaveValue(envelope.gherkinDocument)) {
63
61
  this.gherkinDocumentMap[envelope.gherkinDocument.uri] =
64
62
  envelope.gherkinDocument;
@@ -91,24 +89,32 @@ class EventDataCollector {
91
89
  testCaseId: testCaseStarted.testCaseId,
92
90
  stepAttachments: {},
93
91
  stepResults: {},
94
- worstTestStepResult: {},
92
+ worstTestStepResult: {
93
+ willBeRetried: false,
94
+ duration: { seconds: 0, nanos: 0 },
95
+ status: messages.TestStepResultStatus.UNKNOWN,
96
+ },
95
97
  };
96
98
  }
97
- storeAttachment({ testCaseStartedId, testStepId, body, mediaType, }) {
99
+ storeAttachment(attachment) {
100
+ const { testCaseStartedId, testStepId } = attachment;
101
+ // TODO: we shouldn't have to check if these properties have values - they are non-nullable
98
102
  if (value_checker_1.doesHaveValue(testCaseStartedId) && value_checker_1.doesHaveValue(testStepId)) {
99
103
  const { stepAttachments } = this.testCaseAttemptDataMap[testCaseStartedId];
100
104
  if (value_checker_1.doesNotHaveValue(stepAttachments[testStepId])) {
101
105
  stepAttachments[testStepId] = [];
102
106
  }
103
- stepAttachments[testStepId].push({ body, mediaType });
107
+ stepAttachments[testStepId].push(attachment);
104
108
  }
105
109
  }
106
110
  storeTestStepResult({ testCaseStartedId, testStepId, testStepResult, }) {
107
- this.testCaseAttemptDataMap[testCaseStartedId].stepResults[testStepId] = testStepResult;
111
+ this.testCaseAttemptDataMap[testCaseStartedId].stepResults[testStepId] =
112
+ testStepResult;
108
113
  }
109
114
  storeTestCaseResult({ testCaseStartedId }) {
110
115
  const stepResults = lodash_1.values(this.testCaseAttemptDataMap[testCaseStartedId].stepResults);
111
- this.testCaseAttemptDataMap[testCaseStartedId].worstTestStepResult = this.query.getWorstTestStepResult(stepResults);
116
+ this.testCaseAttemptDataMap[testCaseStartedId].worstTestStepResult =
117
+ messages.getWorstTestStepResult(stepResults);
112
118
  }
113
119
  }
114
120
  exports.default = EventDataCollector;
@@ -1 +1 @@
1
- {"version":3,"file":"event_data_collector.js","sourceRoot":"","sources":["../../../src/formatter/helpers/event_data_collector.ts"],"names":[],"mappings":"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","sourcesContent":["import _, { Dictionary, values } from 'lodash'\nimport { messages } from '@cucumber/messages'\nimport { doesHaveValue, doesNotHaveValue } from '../../value_checker'\nimport { EventEmitter } from 'events'\nimport { Query } from '@cucumber/query'\n\ninterface ITestCaseAttemptData {\n attempt: number\n testCaseId: string\n stepAttachments: Dictionary<messages.IAttachment[]>\n stepResults: Dictionary<messages.TestStepFinished.ITestStepResult>\n worstTestStepResult: messages.TestStepFinished.ITestStepResult\n}\n\nexport interface ITestCaseAttempt {\n attempt: number\n gherkinDocument: messages.IGherkinDocument\n pickle: messages.IPickle\n stepAttachments: Dictionary<messages.IAttachment[]>\n stepResults: Dictionary<messages.TestStepFinished.ITestStepResult>\n testCase: messages.ITestCase\n worstTestStepResult: messages.TestStepFinished.ITestStepResult\n}\n\nexport default class EventDataCollector {\n private gherkinDocumentMap: Dictionary<messages.IGherkinDocument> = {}\n private pickleMap: Dictionary<messages.IPickle> = {}\n private testCaseMap: Dictionary<messages.ITestCase> = {}\n private testCaseAttemptDataMap: Dictionary<ITestCaseAttemptData> = {}\n readonly undefinedParameterTypes: messages.IUndefinedParameterType[] = []\n readonly query = new Query()\n\n constructor(eventBroadcaster: EventEmitter) {\n eventBroadcaster.on('envelope', this.parseEnvelope.bind(this))\n }\n\n getGherkinDocument(uri: string): messages.IGherkinDocument {\n return this.gherkinDocumentMap[uri]\n }\n\n getPickle(pickleId: string): messages.IPickle {\n return this.pickleMap[pickleId]\n }\n\n getTestCaseAttempts(): ITestCaseAttempt[] {\n return _.keys(this.testCaseAttemptDataMap).map((testCaseStartedId) => {\n return this.getTestCaseAttempt(testCaseStartedId)\n })\n }\n\n getTestCaseAttempt(testCaseStartedId: string): ITestCaseAttempt {\n const testCaseAttemptData = this.testCaseAttemptDataMap[testCaseStartedId]\n const testCase = this.testCaseMap[testCaseAttemptData.testCaseId]\n const pickle = this.pickleMap[testCase.pickleId]\n return {\n gherkinDocument: this.gherkinDocumentMap[pickle.uri],\n pickle,\n testCase,\n attempt: testCaseAttemptData.attempt,\n stepAttachments: testCaseAttemptData.stepAttachments,\n stepResults: testCaseAttemptData.stepResults,\n worstTestStepResult: testCaseAttemptData.worstTestStepResult,\n }\n }\n\n parseEnvelope(envelope: messages.Envelope): void {\n this.query.update(envelope)\n if (doesHaveValue(envelope.gherkinDocument)) {\n this.gherkinDocumentMap[envelope.gherkinDocument.uri] =\n envelope.gherkinDocument\n } else if (doesHaveValue(envelope.pickle)) {\n this.pickleMap[envelope.pickle.id] = envelope.pickle\n } else if (doesHaveValue(envelope.undefinedParameterType)) {\n this.undefinedParameterTypes.push(envelope.undefinedParameterType)\n } else if (doesHaveValue(envelope.testCase)) {\n this.testCaseMap[envelope.testCase.id] = envelope.testCase\n } else if (doesHaveValue(envelope.testCaseStarted)) {\n this.initTestCaseAttempt(envelope.testCaseStarted)\n } else if (doesHaveValue(envelope.attachment)) {\n this.storeAttachment(envelope.attachment)\n } else if (doesHaveValue(envelope.testStepFinished)) {\n this.storeTestStepResult(envelope.testStepFinished)\n } else if (doesHaveValue(envelope.testCaseFinished)) {\n this.storeTestCaseResult(envelope.testCaseFinished)\n }\n }\n\n initTestCaseAttempt(testCaseStarted: messages.ITestCaseStarted): void {\n this.testCaseAttemptDataMap[testCaseStarted.id] = {\n attempt: testCaseStarted.attempt,\n testCaseId: testCaseStarted.testCaseId,\n stepAttachments: {},\n stepResults: {},\n worstTestStepResult: {},\n }\n }\n\n storeAttachment({\n testCaseStartedId,\n testStepId,\n body,\n mediaType,\n }: messages.IAttachment): void {\n if (doesHaveValue(testCaseStartedId) && doesHaveValue(testStepId)) {\n const { stepAttachments } = this.testCaseAttemptDataMap[testCaseStartedId]\n if (doesNotHaveValue(stepAttachments[testStepId])) {\n stepAttachments[testStepId] = []\n }\n stepAttachments[testStepId].push({ body, mediaType })\n }\n }\n\n storeTestStepResult({\n testCaseStartedId,\n testStepId,\n testStepResult,\n }: messages.ITestStepFinished): void {\n this.testCaseAttemptDataMap[testCaseStartedId].stepResults[\n testStepId\n ] = testStepResult\n }\n\n storeTestCaseResult({ testCaseStartedId }: messages.ITestCaseFinished): void {\n const stepResults = values(\n this.testCaseAttemptDataMap[testCaseStartedId].stepResults\n )\n this.testCaseAttemptDataMap[\n testCaseStartedId\n ].worstTestStepResult = this.query.getWorstTestStepResult(stepResults)\n }\n}\n"]}
1
+ {"version":3,"file":"event_data_collector.js","sourceRoot":"","sources":["../../../src/formatter/helpers/event_data_collector.ts"],"names":[],"mappings":"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","sourcesContent":["import _, { values } from 'lodash'\nimport * as messages from '@cucumber/messages'\nimport { doesHaveValue, doesNotHaveValue } from '../../value_checker'\nimport { EventEmitter } from 'events'\n\ninterface ITestCaseAttemptData {\n attempt: number\n testCaseId: string\n stepAttachments: Record<string, messages.Attachment[]>\n stepResults: Record<string, messages.TestStepResult>\n worstTestStepResult: messages.TestStepResult\n}\n\nexport interface ITestCaseAttempt {\n attempt: number\n gherkinDocument: messages.GherkinDocument\n pickle: messages.Pickle\n stepAttachments: Record<string, messages.Attachment[]>\n stepResults: Record<string, messages.TestStepResult>\n testCase: messages.TestCase\n worstTestStepResult: messages.TestStepResult\n}\n\nexport default class EventDataCollector {\n private gherkinDocumentMap: Record<string, messages.GherkinDocument> = {}\n private pickleMap: Record<string, messages.Pickle> = {}\n private testCaseMap: Record<string, messages.TestCase> = {}\n private testCaseAttemptDataMap: Record<string, ITestCaseAttemptData> = {}\n readonly undefinedParameterTypes: messages.UndefinedParameterType[] = []\n\n constructor(eventBroadcaster: EventEmitter) {\n eventBroadcaster.on('envelope', this.parseEnvelope.bind(this))\n }\n\n getGherkinDocument(uri: string): messages.GherkinDocument {\n return this.gherkinDocumentMap[uri]\n }\n\n getPickle(pickleId: string): messages.Pickle {\n return this.pickleMap[pickleId]\n }\n\n getTestCaseAttempts(): ITestCaseAttempt[] {\n return _.keys(this.testCaseAttemptDataMap).map((testCaseStartedId) => {\n return this.getTestCaseAttempt(testCaseStartedId)\n })\n }\n\n getTestCaseAttempt(testCaseStartedId: string): ITestCaseAttempt {\n const testCaseAttemptData = this.testCaseAttemptDataMap[testCaseStartedId]\n const testCase = this.testCaseMap[testCaseAttemptData.testCaseId]\n const pickle = this.pickleMap[testCase.pickleId]\n return {\n gherkinDocument: this.gherkinDocumentMap[pickle.uri],\n pickle,\n testCase,\n attempt: testCaseAttemptData.attempt,\n stepAttachments: testCaseAttemptData.stepAttachments,\n stepResults: testCaseAttemptData.stepResults,\n worstTestStepResult: testCaseAttemptData.worstTestStepResult,\n }\n }\n\n parseEnvelope(envelope: messages.Envelope): void {\n if (doesHaveValue(envelope.gherkinDocument)) {\n this.gherkinDocumentMap[envelope.gherkinDocument.uri] =\n envelope.gherkinDocument\n } else if (doesHaveValue(envelope.pickle)) {\n this.pickleMap[envelope.pickle.id] = envelope.pickle\n } else if (doesHaveValue(envelope.undefinedParameterType)) {\n this.undefinedParameterTypes.push(envelope.undefinedParameterType)\n } else if (doesHaveValue(envelope.testCase)) {\n this.testCaseMap[envelope.testCase.id] = envelope.testCase\n } else if (doesHaveValue(envelope.testCaseStarted)) {\n this.initTestCaseAttempt(envelope.testCaseStarted)\n } else if (doesHaveValue(envelope.attachment)) {\n this.storeAttachment(envelope.attachment)\n } else if (doesHaveValue(envelope.testStepFinished)) {\n this.storeTestStepResult(envelope.testStepFinished)\n } else if (doesHaveValue(envelope.testCaseFinished)) {\n this.storeTestCaseResult(envelope.testCaseFinished)\n }\n }\n\n private initTestCaseAttempt(testCaseStarted: messages.TestCaseStarted): void {\n this.testCaseAttemptDataMap[testCaseStarted.id] = {\n attempt: testCaseStarted.attempt,\n testCaseId: testCaseStarted.testCaseId,\n stepAttachments: {},\n stepResults: {},\n worstTestStepResult: {\n willBeRetried: false,\n duration: { seconds: 0, nanos: 0 },\n status: messages.TestStepResultStatus.UNKNOWN,\n },\n }\n }\n\n storeAttachment(attachment: messages.Attachment): void {\n const { testCaseStartedId, testStepId } = attachment\n // TODO: we shouldn't have to check if these properties have values - they are non-nullable\n if (doesHaveValue(testCaseStartedId) && doesHaveValue(testStepId)) {\n const { stepAttachments } = this.testCaseAttemptDataMap[testCaseStartedId]\n if (doesNotHaveValue(stepAttachments[testStepId])) {\n stepAttachments[testStepId] = []\n }\n stepAttachments[testStepId].push(attachment)\n }\n }\n\n storeTestStepResult({\n testCaseStartedId,\n testStepId,\n testStepResult,\n }: messages.TestStepFinished): void {\n this.testCaseAttemptDataMap[testCaseStartedId].stepResults[testStepId] =\n testStepResult\n }\n\n storeTestCaseResult({ testCaseStartedId }: messages.TestCaseFinished): void {\n const stepResults = values(\n this.testCaseAttemptDataMap[testCaseStartedId].stepResults\n )\n this.testCaseAttemptDataMap[testCaseStartedId].worstTestStepResult =\n messages.getWorstTestStepResult(stepResults)\n }\n}\n"]}
@@ -1,6 +1,5 @@
1
- import { Dictionary } from 'lodash';
2
- import { messages } from '@cucumber/messages';
3
- export declare function getGherkinStepMap(gherkinDocument: messages.IGherkinDocument): Dictionary<messages.GherkinDocument.Feature.IStep>;
4
- export declare function getGherkinScenarioMap(gherkinDocument: messages.IGherkinDocument): Dictionary<messages.GherkinDocument.Feature.IScenario>;
5
- export declare function getGherkinExampleRuleMap(gherkinDocument: messages.IGherkinDocument): Dictionary<messages.GherkinDocument.Feature.FeatureChild.IRule>;
6
- export declare function getGherkinScenarioLocationMap(gherkinDocument: messages.IGherkinDocument): Dictionary<messages.ILocation>;
1
+ import * as messages from '@cucumber/messages';
2
+ export declare function getGherkinStepMap(gherkinDocument: messages.GherkinDocument): Record<string, messages.Step>;
3
+ export declare function getGherkinScenarioMap(gherkinDocument: messages.GherkinDocument): Record<string, messages.Scenario>;
4
+ export declare function getGherkinExampleRuleMap(gherkinDocument: messages.GherkinDocument): Record<string, messages.Rule>;
5
+ export declare function getGherkinScenarioLocationMap(gherkinDocument: messages.GherkinDocument): Record<string, messages.Location>;
@@ -39,10 +39,7 @@ function getGherkinScenarioMap(gherkinDocument) {
39
39
  .flatten()
40
40
  .filter('scenario')
41
41
  .map('scenario')
42
- .map((scenario) => [
43
- scenario.id,
44
- scenario,
45
- ])
42
+ .map((scenario) => [scenario.id, scenario])
46
43
  .fromPairs()
47
44
  .value();
48
45
  }
@@ -1 +1 @@
1
- {"version":3,"file":"gherkin_document_parser.js","sourceRoot":"","sources":["../../../src/formatter/helpers/gherkin_document_parser.ts"],"names":[],"mappings":"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","sourcesContent":["import _, { Dictionary } from 'lodash'\nimport { messages } from '@cucumber/messages'\nimport { doesHaveValue } from '../../value_checker'\n\nexport function getGherkinStepMap(\n gherkinDocument: messages.IGherkinDocument\n): Dictionary<messages.GherkinDocument.Feature.IStep> {\n return _.chain(gherkinDocument.feature.children)\n .map(extractStepContainers)\n .flatten()\n .map('steps')\n .flatten()\n .map((step: messages.GherkinDocument.Feature.IStep) => [step.id, step])\n .fromPairs()\n .value()\n}\n\nfunction extractStepContainers(\n child: messages.GherkinDocument.Feature.IFeatureChild\n): Array<\n | messages.GherkinDocument.Feature.IScenario\n | messages.GherkinDocument.Feature.IBackground\n> {\n if (doesHaveValue(child.background)) {\n return [child.background]\n } else if (doesHaveValue(child.rule)) {\n return child.rule.children.map((ruleChild) =>\n doesHaveValue(ruleChild.background)\n ? ruleChild.background\n : ruleChild.scenario\n )\n }\n return [child.scenario]\n}\n\nexport function getGherkinScenarioMap(\n gherkinDocument: messages.IGherkinDocument\n): Dictionary<messages.GherkinDocument.Feature.IScenario> {\n return _.chain(gherkinDocument.feature.children)\n .map((child: messages.GherkinDocument.Feature.IFeatureChild) => {\n if (doesHaveValue(child.rule)) {\n return child.rule.children\n }\n return [child]\n })\n .flatten()\n .filter('scenario')\n .map('scenario')\n .map((scenario: messages.GherkinDocument.Feature.IScenario) => [\n scenario.id,\n scenario,\n ])\n .fromPairs()\n .value()\n}\n\nexport function getGherkinExampleRuleMap(\n gherkinDocument: messages.IGherkinDocument\n): Dictionary<messages.GherkinDocument.Feature.FeatureChild.IRule> {\n return _.chain(gherkinDocument.feature.children)\n .filter('rule')\n .map('rule')\n .map((rule) => {\n return rule.children\n .filter((child) => doesHaveValue(child.scenario))\n .map((child) => [child.scenario.id, rule])\n })\n .flatten()\n .fromPairs()\n .value()\n}\n\nexport function getGherkinScenarioLocationMap(\n gherkinDocument: messages.IGherkinDocument\n): Dictionary<messages.ILocation> {\n const locationMap: Dictionary<messages.ILocation> = {}\n const scenarioMap: Dictionary<messages.GherkinDocument.Feature.IScenario> = getGherkinScenarioMap(\n gherkinDocument\n )\n _.entries<messages.GherkinDocument.Feature.IScenario>(scenarioMap).forEach(\n ([id, scenario]) => {\n locationMap[id] = scenario.location\n if (doesHaveValue(scenario.examples)) {\n _.chain(scenario.examples)\n .map('tableBody')\n .flatten()\n .forEach((tableRow) => {\n locationMap[tableRow.id] = tableRow.location\n })\n .value()\n }\n }\n )\n return locationMap\n}\n"]}
1
+ {"version":3,"file":"gherkin_document_parser.js","sourceRoot":"","sources":["../../../src/formatter/helpers/gherkin_document_parser.ts"],"names":[],"mappings":"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","sourcesContent":["import _ from 'lodash'\nimport * as messages from '@cucumber/messages'\nimport { doesHaveValue } from '../../value_checker'\n\nexport function getGherkinStepMap(\n gherkinDocument: messages.GherkinDocument\n): Record<string, messages.Step> {\n return _.chain(gherkinDocument.feature.children)\n .map(extractStepContainers)\n .flatten()\n .map('steps')\n .flatten()\n .map((step: messages.Step) => [step.id, step])\n .fromPairs()\n .value()\n}\n\nfunction extractStepContainers(\n child: messages.FeatureChild\n): Array<messages.Scenario | messages.Background> {\n if (doesHaveValue(child.background)) {\n return [child.background]\n } else if (doesHaveValue(child.rule)) {\n return child.rule.children.map((ruleChild) =>\n doesHaveValue(ruleChild.background)\n ? ruleChild.background\n : ruleChild.scenario\n )\n }\n return [child.scenario]\n}\n\nexport function getGherkinScenarioMap(\n gherkinDocument: messages.GherkinDocument\n): Record<string, messages.Scenario> {\n return _.chain(gherkinDocument.feature.children)\n .map((child: messages.FeatureChild) => {\n if (doesHaveValue(child.rule)) {\n return child.rule.children\n }\n return [child]\n })\n .flatten()\n .filter('scenario')\n .map('scenario')\n .map((scenario: messages.Scenario) => [scenario.id, scenario])\n .fromPairs()\n .value()\n}\n\nexport function getGherkinExampleRuleMap(\n gherkinDocument: messages.GherkinDocument\n): Record<string, messages.Rule> {\n return _.chain(gherkinDocument.feature.children)\n .filter('rule')\n .map('rule')\n .map((rule) => {\n return rule.children\n .filter((child) => doesHaveValue(child.scenario))\n .map((child) => [child.scenario.id, rule])\n })\n .flatten()\n .fromPairs()\n .value()\n}\n\nexport function getGherkinScenarioLocationMap(\n gherkinDocument: messages.GherkinDocument\n): Record<string, messages.Location> {\n const locationMap: Record<string, messages.Location> = {}\n const scenarioMap: Record<string, messages.Scenario> =\n getGherkinScenarioMap(gherkinDocument)\n _.entries<messages.Scenario>(scenarioMap).forEach(([id, scenario]) => {\n locationMap[id] = scenario.location\n if (doesHaveValue(scenario.examples)) {\n _.chain(scenario.examples)\n .map('tableBody')\n .flatten()\n .forEach((tableRow) => {\n locationMap[tableRow.id] = tableRow.location\n })\n .value()\n }\n })\n return locationMap\n}\n"]}
@@ -1,11 +1,11 @@
1
- import { messages } from '@cucumber/messages';
1
+ import * as messages from '@cucumber/messages';
2
2
  import { IColorFns } from '../get_color_fns';
3
3
  import StepDefinitionSnippetBuilder from '../step_definition_snippet_builder';
4
4
  import { ISupportCodeLibrary } from '../../support_code_library_builder/types';
5
5
  import { ITestCaseAttempt } from './event_data_collector';
6
- export declare function isFailure(result: messages.TestStepFinished.ITestStepResult): boolean;
7
- export declare function isWarning(result: messages.TestStepFinished.ITestStepResult): boolean;
8
- export declare function isIssue(result: messages.TestStepFinished.ITestStepResult): boolean;
6
+ export declare function isFailure(result: messages.TestStepResult): boolean;
7
+ export declare function isWarning(result: messages.TestStepResult): boolean;
8
+ export declare function isIssue(result: messages.TestStepResult): boolean;
9
9
  export interface IFormatIssueRequest {
10
10
  colorFns: IColorFns;
11
11
  cwd: string;
@@ -15,5 +15,5 @@ export interface IFormatIssueRequest {
15
15
  supportCodeLibrary: ISupportCodeLibrary;
16
16
  }
17
17
  export declare function formatIssue({ colorFns, cwd, number, snippetBuilder, testCaseAttempt, supportCodeLibrary, }: IFormatIssueRequest): string;
18
- export declare function formatUndefinedParameterTypes(undefinedParameterTypes: messages.IUndefinedParameterType[]): string;
19
- export declare function formatUndefinedParameterType(parameterType: messages.IUndefinedParameterType): string;
18
+ export declare function formatUndefinedParameterTypes(undefinedParameterTypes: messages.UndefinedParameterType[]): string;
19
+ export declare function formatUndefinedParameterType(parameterType: messages.UndefinedParameterType): string;
@@ -5,17 +5,16 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.formatUndefinedParameterType = exports.formatUndefinedParameterTypes = exports.formatIssue = exports.isIssue = exports.isWarning = exports.isFailure = void 0;
7
7
  const indent_string_1 = __importDefault(require("indent-string"));
8
- const status_1 = __importDefault(require("../../status"));
9
8
  const test_case_attempt_formatter_1 = require("./test_case_attempt_formatter");
10
9
  function isFailure(result) {
11
- return (result.status === status_1.default.AMBIGUOUS ||
12
- result.status === status_1.default.UNDEFINED ||
13
- (result.status === status_1.default.FAILED && !result.willBeRetried));
10
+ return (result.status === 'AMBIGUOUS' ||
11
+ result.status === 'UNDEFINED' ||
12
+ (result.status === 'FAILED' && !result.willBeRetried));
14
13
  }
15
14
  exports.isFailure = isFailure;
16
15
  function isWarning(result) {
17
- return (result.status === status_1.default.PENDING ||
18
- (result.status === status_1.default.FAILED && result.willBeRetried));
16
+ return (result.status === 'PENDING' ||
17
+ (result.status === 'FAILED' && result.willBeRetried));
19
18
  }
20
19
  exports.isWarning = isWarning;
21
20
  function isIssue(result) {
@@ -1 +1 @@
1
- {"version":3,"file":"issue_helpers.js","sourceRoot":"","sources":["../../../src/formatter/helpers/issue_helpers.ts"],"names":[],"mappings":";;;;;;AAAA,kEAAwC;AACxC,0DAAiC;AACjC,+EAAqE;AAQrE,SAAgB,SAAS,CACvB,MAAiD;IAEjD,OAAO,CACL,MAAM,CAAC,MAAM,KAAK,gBAAM,CAAC,SAAS;QAClC,MAAM,CAAC,MAAM,KAAK,gBAAM,CAAC,SAAS;QAClC,CAAC,MAAM,CAAC,MAAM,KAAK,gBAAM,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,CAC3D,CAAA;AACH,CAAC;AARD,8BAQC;AAED,SAAgB,SAAS,CACvB,MAAiD;IAEjD,OAAO,CACL,MAAM,CAAC,MAAM,KAAK,gBAAM,CAAC,OAAO;QAChC,CAAC,MAAM,CAAC,MAAM,KAAK,gBAAM,CAAC,MAAM,IAAI,MAAM,CAAC,aAAa,CAAC,CAC1D,CAAA;AACH,CAAC;AAPD,8BAOC;AAED,SAAgB,OAAO,CACrB,MAAiD;IAEjD,OAAO,SAAS,CAAC,MAAM,CAAC,IAAI,SAAS,CAAC,MAAM,CAAC,CAAA;AAC/C,CAAC;AAJD,0BAIC;AAWD,SAAgB,WAAW,CAAC,EAC1B,QAAQ,EACR,GAAG,EACH,MAAM,EACN,cAAc,EACd,eAAe,EACf,kBAAkB,GACE;IACpB,MAAM,MAAM,GAAG,GAAG,MAAM,CAAC,QAAQ,EAAE,IAAI,CAAA;IACvC,MAAM,wBAAwB,GAAG,mDAAqB,CAAC;QACrD,QAAQ;QACR,GAAG;QACH,cAAc;QACd,eAAe;QACf,kBAAkB;KACnB,CAAC,CAAA;IACF,MAAM,KAAK,GAAG,wBAAwB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;IAClD,MAAM,YAAY,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;QAC7C,IAAI,KAAK,KAAK,CAAC,EAAE;YACf,OAAO,GAAG,MAAM,GAAG,IAAI,EAAE,CAAA;SAC1B;QACD,OAAO,uBAAY,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,CAAA;IAC1C,CAAC,CAAC,CAAA;IACF,OAAO,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;AAChC,CAAC;AAxBD,kCAwBC;AAED,SAAgB,6BAA6B,CAC3C,uBAA2D;IAE3D,MAAM,MAAM,GAAG,CAAC,gCAAgC,CAAC,CAAA;IACjD,MAAM,UAAU,GAAiD,EAAE,CAAA;IACnE,uBAAuB,CAAC,OAAO,CAAC,CAAC,aAAa,EAAE,EAAE;QAChD,UAAU,CAAC,aAAa,CAAC,IAAI,CAAC,GAAG,aAAa,CAAA;IAChD,CAAC,CAAC,CAAA;IACF,MAAM,CAAC,IAAI,CACT,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC;SACtB,GAAG,CACF,CAAC,aAAa,EAAE,EAAE,CAAC,KAAK,4BAA4B,CAAC,aAAa,CAAC,EAAE,CACtE;SACA,IAAI,CAAC,IAAI,CAAC,CACd,CAAA;IACD,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;IACnB,OAAO,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;AACxB,CAAC;AAjBD,sEAiBC;AAED,SAAgB,4BAA4B,CAC1C,aAA+C;IAE/C,OAAO,IAAI,aAAa,CAAC,IAAI,YAAY,aAAa,CAAC,UAAU,IAAI,CAAA;AACvE,CAAC;AAJD,oEAIC","sourcesContent":["import indentString from 'indent-string'\nimport Status from '../../status'\nimport { formatTestCaseAttempt } from './test_case_attempt_formatter'\nimport { messages } from '@cucumber/messages'\nimport { IColorFns } from '../get_color_fns'\nimport StepDefinitionSnippetBuilder from '../step_definition_snippet_builder'\nimport { ISupportCodeLibrary } from '../../support_code_library_builder/types'\nimport { ITestCaseAttempt } from './event_data_collector'\nimport { Dictionary } from 'lodash'\n\nexport function isFailure(\n result: messages.TestStepFinished.ITestStepResult\n): boolean {\n return (\n result.status === Status.AMBIGUOUS ||\n result.status === Status.UNDEFINED ||\n (result.status === Status.FAILED && !result.willBeRetried)\n )\n}\n\nexport function isWarning(\n result: messages.TestStepFinished.ITestStepResult\n): boolean {\n return (\n result.status === Status.PENDING ||\n (result.status === Status.FAILED && result.willBeRetried)\n )\n}\n\nexport function isIssue(\n result: messages.TestStepFinished.ITestStepResult\n): boolean {\n return isFailure(result) || isWarning(result)\n}\n\nexport interface IFormatIssueRequest {\n colorFns: IColorFns\n cwd: string\n number: number\n snippetBuilder: StepDefinitionSnippetBuilder\n testCaseAttempt: ITestCaseAttempt\n supportCodeLibrary: ISupportCodeLibrary\n}\n\nexport function formatIssue({\n colorFns,\n cwd,\n number,\n snippetBuilder,\n testCaseAttempt,\n supportCodeLibrary,\n}: IFormatIssueRequest): string {\n const prefix = `${number.toString()}) `\n const formattedTestCaseAttempt = formatTestCaseAttempt({\n colorFns,\n cwd,\n snippetBuilder,\n testCaseAttempt,\n supportCodeLibrary,\n })\n const lines = formattedTestCaseAttempt.split('\\n')\n const updatedLines = lines.map((line, index) => {\n if (index === 0) {\n return `${prefix}${line}`\n }\n return indentString(line, prefix.length)\n })\n return updatedLines.join('\\n')\n}\n\nexport function formatUndefinedParameterTypes(\n undefinedParameterTypes: messages.IUndefinedParameterType[]\n): string {\n const output = [`Undefined parameter types:\\n\\n`]\n const withLatest: Dictionary<messages.IUndefinedParameterType> = {}\n undefinedParameterTypes.forEach((parameterType) => {\n withLatest[parameterType.name] = parameterType\n })\n output.push(\n Object.values(withLatest)\n .map(\n (parameterType) => `- ${formatUndefinedParameterType(parameterType)}`\n )\n .join('\\n')\n )\n output.push('\\n\\n')\n return output.join('')\n}\n\nexport function formatUndefinedParameterType(\n parameterType: messages.IUndefinedParameterType\n): string {\n return `\"${parameterType.name}\" e.g. \\`${parameterType.expression}\\``\n}\n"]}
1
+ {"version":3,"file":"issue_helpers.js","sourceRoot":"","sources":["../../../src/formatter/helpers/issue_helpers.ts"],"names":[],"mappings":";;;;;;AAAA,kEAAwC;AACxC,+EAAqE;AAOrE,SAAgB,SAAS,CAAC,MAA+B;IACvD,OAAO,CACL,MAAM,CAAC,MAAM,KAAK,WAAW;QAC7B,MAAM,CAAC,MAAM,KAAK,WAAW;QAC7B,CAAC,MAAM,CAAC,MAAM,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,CACtD,CAAA;AACH,CAAC;AAND,8BAMC;AAED,SAAgB,SAAS,CAAC,MAA+B;IACvD,OAAO,CACL,MAAM,CAAC,MAAM,KAAK,SAAS;QAC3B,CAAC,MAAM,CAAC,MAAM,KAAK,QAAQ,IAAI,MAAM,CAAC,aAAa,CAAC,CACrD,CAAA;AACH,CAAC;AALD,8BAKC;AAED,SAAgB,OAAO,CAAC,MAA+B;IACrD,OAAO,SAAS,CAAC,MAAM,CAAC,IAAI,SAAS,CAAC,MAAM,CAAC,CAAA;AAC/C,CAAC;AAFD,0BAEC;AAWD,SAAgB,WAAW,CAAC,EAC1B,QAAQ,EACR,GAAG,EACH,MAAM,EACN,cAAc,EACd,eAAe,EACf,kBAAkB,GACE;IACpB,MAAM,MAAM,GAAG,GAAG,MAAM,CAAC,QAAQ,EAAE,IAAI,CAAA;IACvC,MAAM,wBAAwB,GAAG,mDAAqB,CAAC;QACrD,QAAQ;QACR,GAAG;QACH,cAAc;QACd,eAAe;QACf,kBAAkB;KACnB,CAAC,CAAA;IACF,MAAM,KAAK,GAAG,wBAAwB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;IAClD,MAAM,YAAY,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;QAC7C,IAAI,KAAK,KAAK,CAAC,EAAE;YACf,OAAO,GAAG,MAAM,GAAG,IAAI,EAAE,CAAA;SAC1B;QACD,OAAO,uBAAY,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,CAAA;IAC1C,CAAC,CAAC,CAAA;IACF,OAAO,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;AAChC,CAAC;AAxBD,kCAwBC;AAED,SAAgB,6BAA6B,CAC3C,uBAA0D;IAE1D,MAAM,MAAM,GAAG,CAAC,gCAAgC,CAAC,CAAA;IACjD,MAAM,UAAU,GAAoD,EAAE,CAAA;IACtE,uBAAuB,CAAC,OAAO,CAAC,CAAC,aAAa,EAAE,EAAE;QAChD,UAAU,CAAC,aAAa,CAAC,IAAI,CAAC,GAAG,aAAa,CAAA;IAChD,CAAC,CAAC,CAAA;IACF,MAAM,CAAC,IAAI,CACT,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC;SACtB,GAAG,CACF,CAAC,aAAa,EAAE,EAAE,CAAC,KAAK,4BAA4B,CAAC,aAAa,CAAC,EAAE,CACtE;SACA,IAAI,CAAC,IAAI,CAAC,CACd,CAAA;IACD,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;IACnB,OAAO,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;AACxB,CAAC;AAjBD,sEAiBC;AAED,SAAgB,4BAA4B,CAC1C,aAA8C;IAE9C,OAAO,IAAI,aAAa,CAAC,IAAI,YAAY,aAAa,CAAC,UAAU,IAAI,CAAA;AACvE,CAAC;AAJD,oEAIC","sourcesContent":["import indentString from 'indent-string'\nimport { formatTestCaseAttempt } from './test_case_attempt_formatter'\nimport * as messages from '@cucumber/messages'\nimport { IColorFns } from '../get_color_fns'\nimport StepDefinitionSnippetBuilder from '../step_definition_snippet_builder'\nimport { ISupportCodeLibrary } from '../../support_code_library_builder/types'\nimport { ITestCaseAttempt } from './event_data_collector'\n\nexport function isFailure(result: messages.TestStepResult): boolean {\n return (\n result.status === 'AMBIGUOUS' ||\n result.status === 'UNDEFINED' ||\n (result.status === 'FAILED' && !result.willBeRetried)\n )\n}\n\nexport function isWarning(result: messages.TestStepResult): boolean {\n return (\n result.status === 'PENDING' ||\n (result.status === 'FAILED' && result.willBeRetried)\n )\n}\n\nexport function isIssue(result: messages.TestStepResult): boolean {\n return isFailure(result) || isWarning(result)\n}\n\nexport interface IFormatIssueRequest {\n colorFns: IColorFns\n cwd: string\n number: number\n snippetBuilder: StepDefinitionSnippetBuilder\n testCaseAttempt: ITestCaseAttempt\n supportCodeLibrary: ISupportCodeLibrary\n}\n\nexport function formatIssue({\n colorFns,\n cwd,\n number,\n snippetBuilder,\n testCaseAttempt,\n supportCodeLibrary,\n}: IFormatIssueRequest): string {\n const prefix = `${number.toString()}) `\n const formattedTestCaseAttempt = formatTestCaseAttempt({\n colorFns,\n cwd,\n snippetBuilder,\n testCaseAttempt,\n supportCodeLibrary,\n })\n const lines = formattedTestCaseAttempt.split('\\n')\n const updatedLines = lines.map((line, index) => {\n if (index === 0) {\n return `${prefix}${line}`\n }\n return indentString(line, prefix.length)\n })\n return updatedLines.join('\\n')\n}\n\nexport function formatUndefinedParameterTypes(\n undefinedParameterTypes: messages.UndefinedParameterType[]\n): string {\n const output = [`Undefined parameter types:\\n\\n`]\n const withLatest: Record<string, messages.UndefinedParameterType> = {}\n undefinedParameterTypes.forEach((parameterType) => {\n withLatest[parameterType.name] = parameterType\n })\n output.push(\n Object.values(withLatest)\n .map(\n (parameterType) => `- ${formatUndefinedParameterType(parameterType)}`\n )\n .join('\\n')\n )\n output.push('\\n\\n')\n return output.join('')\n}\n\nexport function formatUndefinedParameterType(\n parameterType: messages.UndefinedParameterType\n): string {\n return `\"${parameterType.name}\" e.g. \\`${parameterType.expression}\\``\n}\n"]}
@@ -1,18 +1,17 @@
1
- import { Dictionary } from 'lodash';
2
- import { messages } from '@cucumber/messages';
1
+ import * as messages from '@cucumber/messages';
3
2
  export interface IGetPickleLocationRequest {
4
- gherkinDocument: messages.IGherkinDocument;
5
- pickle: messages.IPickle;
3
+ gherkinDocument: messages.GherkinDocument;
4
+ pickle: messages.Pickle;
6
5
  }
7
6
  export interface IGetStepKeywordRequest {
8
- pickleStep: messages.Pickle.IPickleStep;
9
- gherkinStepMap: Dictionary<messages.GherkinDocument.Feature.IStep>;
7
+ pickleStep: messages.PickleStep;
8
+ gherkinStepMap: Record<string, messages.Step>;
10
9
  }
11
10
  export interface IGetScenarioDescriptionRequest {
12
- pickle: messages.IPickle;
13
- gherkinScenarioMap: Dictionary<messages.GherkinDocument.Feature.IScenario>;
11
+ pickle: messages.Pickle;
12
+ gherkinScenarioMap: Record<string, messages.Scenario>;
14
13
  }
15
14
  export declare function getScenarioDescription({ pickle, gherkinScenarioMap, }: IGetScenarioDescriptionRequest): string;
16
15
  export declare function getStepKeyword({ pickleStep, gherkinStepMap, }: IGetStepKeywordRequest): string;
17
- export declare function getPickleStepMap(pickle: messages.IPickle): Dictionary<messages.Pickle.IPickleStep>;
18
- export declare function getPickleLocation({ gherkinDocument, pickle, }: IGetPickleLocationRequest): messages.ILocation;
16
+ export declare function getPickleStepMap(pickle: messages.Pickle): Record<string, messages.PickleStep>;
17
+ export declare function getPickleLocation({ gherkinDocument, pickle, }: IGetPickleLocationRequest): messages.Location;
@@ -1 +1 @@
1
- {"version":3,"file":"pickle_parser.js","sourceRoot":"","sources":["../../../src/formatter/helpers/pickle_parser.ts"],"names":[],"mappings":";;;;;;AAAA,oDAAsC;AACtC,uEAAyE;AAkBzE,SAAgB,sBAAsB,CAAC,EACrC,MAAM,EACN,kBAAkB,GACa;IAC/B,OAAO,gBAAC,CAAC,KAAK,CAAC,MAAM,CAAC,UAAU,CAAC;SAC9B,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,kBAAkB,CAAC,EAAE,CAAC,CAAC;SACnC,OAAO,EAAE;SACT,KAAK,EAAE;SACP,KAAK,EAAE,CAAC,WAAW,CAAA;AACxB,CAAC;AATD,wDASC;AAED,SAAgB,cAAc,CAAC,EAC7B,UAAU,EACV,cAAc,GACS;IACvB,OAAO,gBAAC,CAAC,KAAK,CAAC,UAAU,CAAC,UAAU,CAAC;SAClC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC;SAC/B,OAAO,EAAE;SACT,KAAK,EAAE;SACP,KAAK,EAAE,CAAC,OAAO,CAAA;AACpB,CAAC;AATD,wCASC;AAED,SAAgB,gBAAgB,CAC9B,MAAwB;IAExB,OAAO,gBAAC,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC;SACzB,GAAG,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,UAAU,CAAC,EAAE,EAAE,UAAU,CAAC,CAAC;SAChD,SAAS,EAAE;SACX,KAAK,EAAE,CAAA;AACZ,CAAC;AAPD,4CAOC;AAED,SAAgB,iBAAiB,CAAC,EAChC,eAAe,EACf,MAAM,GACoB;IAC1B,MAAM,0BAA0B,GAAG,uDAA6B,CAC9D,eAAe,CAChB,CAAA;IACD,OAAO,0BAA0B,CAAC,gBAAC,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAA;AAC9D,CAAC;AARD,8CAQC","sourcesContent":["import _, { Dictionary } from 'lodash'\nimport { getGherkinScenarioLocationMap } from './gherkin_document_parser'\nimport { messages } from '@cucumber/messages'\n\nexport interface IGetPickleLocationRequest {\n gherkinDocument: messages.IGherkinDocument\n pickle: messages.IPickle\n}\n\nexport interface IGetStepKeywordRequest {\n pickleStep: messages.Pickle.IPickleStep\n gherkinStepMap: Dictionary<messages.GherkinDocument.Feature.IStep>\n}\n\nexport interface IGetScenarioDescriptionRequest {\n pickle: messages.IPickle\n gherkinScenarioMap: Dictionary<messages.GherkinDocument.Feature.IScenario>\n}\n\nexport function getScenarioDescription({\n pickle,\n gherkinScenarioMap,\n}: IGetScenarioDescriptionRequest): string {\n return _.chain(pickle.astNodeIds)\n .map((id) => gherkinScenarioMap[id])\n .compact()\n .first()\n .value().description\n}\n\nexport function getStepKeyword({\n pickleStep,\n gherkinStepMap,\n}: IGetStepKeywordRequest): string {\n return _.chain(pickleStep.astNodeIds)\n .map((id) => gherkinStepMap[id])\n .compact()\n .first()\n .value().keyword\n}\n\nexport function getPickleStepMap(\n pickle: messages.IPickle\n): Dictionary<messages.Pickle.IPickleStep> {\n return _.chain(pickle.steps)\n .map((pickleStep) => [pickleStep.id, pickleStep])\n .fromPairs()\n .value()\n}\n\nexport function getPickleLocation({\n gherkinDocument,\n pickle,\n}: IGetPickleLocationRequest): messages.ILocation {\n const gherkinScenarioLocationMap = getGherkinScenarioLocationMap(\n gherkinDocument\n )\n return gherkinScenarioLocationMap[_.last(pickle.astNodeIds)]\n}\n"]}
1
+ {"version":3,"file":"pickle_parser.js","sourceRoot":"","sources":["../../../src/formatter/helpers/pickle_parser.ts"],"names":[],"mappings":";;;;;;AAAA,oDAAsB;AACtB,uEAAyE;AAkBzE,SAAgB,sBAAsB,CAAC,EACrC,MAAM,EACN,kBAAkB,GACa;IAC/B,OAAO,gBAAC,CAAC,KAAK,CAAC,MAAM,CAAC,UAAU,CAAC;SAC9B,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,kBAAkB,CAAC,EAAE,CAAC,CAAC;SACnC,OAAO,EAAE;SACT,KAAK,EAAE;SACP,KAAK,EAAE,CAAC,WAAW,CAAA;AACxB,CAAC;AATD,wDASC;AAED,SAAgB,cAAc,CAAC,EAC7B,UAAU,EACV,cAAc,GACS;IACvB,OAAO,gBAAC,CAAC,KAAK,CAAC,UAAU,CAAC,UAAU,CAAC;SAClC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC;SAC/B,OAAO,EAAE;SACT,KAAK,EAAE;SACP,KAAK,EAAE,CAAC,OAAO,CAAA;AACpB,CAAC;AATD,wCASC;AAED,SAAgB,gBAAgB,CAC9B,MAAuB;IAEvB,OAAO,gBAAC,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC;SACzB,GAAG,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,UAAU,CAAC,EAAE,EAAE,UAAU,CAAC,CAAC;SAChD,SAAS,EAAE;SACX,KAAK,EAAE,CAAA;AACZ,CAAC;AAPD,4CAOC;AAED,SAAgB,iBAAiB,CAAC,EAChC,eAAe,EACf,MAAM,GACoB;IAC1B,MAAM,0BAA0B,GAC9B,uDAA6B,CAAC,eAAe,CAAC,CAAA;IAChD,OAAO,0BAA0B,CAAC,gBAAC,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAA;AAC9D,CAAC;AAPD,8CAOC","sourcesContent":["import _ from 'lodash'\nimport { getGherkinScenarioLocationMap } from './gherkin_document_parser'\nimport * as messages from '@cucumber/messages'\n\nexport interface IGetPickleLocationRequest {\n gherkinDocument: messages.GherkinDocument\n pickle: messages.Pickle\n}\n\nexport interface IGetStepKeywordRequest {\n pickleStep: messages.PickleStep\n gherkinStepMap: Record<string, messages.Step>\n}\n\nexport interface IGetScenarioDescriptionRequest {\n pickle: messages.Pickle\n gherkinScenarioMap: Record<string, messages.Scenario>\n}\n\nexport function getScenarioDescription({\n pickle,\n gherkinScenarioMap,\n}: IGetScenarioDescriptionRequest): string {\n return _.chain(pickle.astNodeIds)\n .map((id) => gherkinScenarioMap[id])\n .compact()\n .first()\n .value().description\n}\n\nexport function getStepKeyword({\n pickleStep,\n gherkinStepMap,\n}: IGetStepKeywordRequest): string {\n return _.chain(pickleStep.astNodeIds)\n .map((id) => gherkinStepMap[id])\n .compact()\n .first()\n .value().keyword\n}\n\nexport function getPickleStepMap(\n pickle: messages.Pickle\n): Record<string, messages.PickleStep> {\n return _.chain(pickle.steps)\n .map((pickleStep) => [pickleStep.id, pickleStep])\n .fromPairs()\n .value()\n}\n\nexport function getPickleLocation({\n gherkinDocument,\n pickle,\n}: IGetPickleLocationRequest): messages.Location {\n const gherkinScenarioLocationMap =\n getGherkinScenarioLocationMap(gherkinDocument)\n return gherkinScenarioLocationMap[_.last(pickle.astNodeIds)]\n}\n"]}
@@ -1,2 +1,2 @@
1
- import { messages } from '@cucumber/messages';
2
- export declare function formatStepArgument(arg: messages.IPickleStepArgument): string;
1
+ import * as messages from '@cucumber/messages';
2
+ export declare function formatStepArgument(arg: messages.PickleStepArgument): string;
@@ -1 +1 @@
1
- {"version":3,"file":"step_argument_formatter.js","sourceRoot":"","sources":["../../../src/formatter/helpers/step_argument_formatter.ts"],"names":[],"mappings":";;;;;;AAAA,4DAA8B;AAC9B,yDAAwD;AAGxD,SAAS,eAAe,CACtB,SAAmD;IAEnD,MAAM,KAAK,GAAG,IAAI,oBAAK,CAAC;QACtB,KAAK,EAAE;YACL,MAAM,EAAE,EAAE;YACV,aAAa,EAAE,EAAE;YACjB,YAAY,EAAE,EAAE;YAChB,cAAc,EAAE,EAAE;YAClB,IAAI,EAAE,GAAG;YACT,UAAU,EAAE,EAAE;YACd,GAAG,EAAE,EAAE;YACP,SAAS,EAAE,EAAE;YACb,MAAM,EAAE,GAAG;YACX,KAAK,EAAE,GAAG;YACV,WAAW,EAAE,EAAE;YACf,GAAG,EAAE,EAAE;YACP,UAAU,EAAE,EAAE;YACd,SAAS,EAAE,EAAE;YACb,WAAW,EAAE,EAAE;SAChB;QACD,KAAK,EAAE;YACL,MAAM,EAAE,EAAE;YACV,cAAc,EAAE,CAAC;YACjB,eAAe,EAAE,CAAC;SACnB;KACF,CAAC,CAAA;IACF,MAAM,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CACtC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CACrB,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,CACxD,CACF,CAAA;IACD,KAAK,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAA;IACnB,OAAO,KAAK,CAAC,QAAQ,EAAE,CAAA;AACzB,CAAC;AAED,SAAS,eAAe,CACtB,SAAuD;IAEvD,OAAO,QAAQ,SAAS,CAAC,OAAO,OAAO,CAAA;AACzC,CAAC;AAED,SAAgB,kBAAkB,CAAC,GAAiC;IAClE,OAAO,kCAAiB,CAAC,GAAG,EAAE;QAC5B,SAAS,EAAE,eAAe;QAC1B,SAAS,EAAE,eAAe;KAC3B,CAAC,CAAA;AACJ,CAAC;AALD,gDAKC","sourcesContent":["import Table from 'cli-table3'\nimport { parseStepArgument } from '../../step_arguments'\nimport { messages } from '@cucumber/messages'\n\nfunction formatDataTable(\n dataTable: messages.PickleStepArgument.IPickleTable\n): string {\n const table = new Table({\n chars: {\n bottom: '',\n 'bottom-left': '',\n 'bottom-mid': '',\n 'bottom-right': '',\n left: '|',\n 'left-mid': '',\n mid: '',\n 'mid-mid': '',\n middle: '|',\n right: '|',\n 'right-mid': '',\n top: '',\n 'top-left': '',\n 'top-mid': '',\n 'top-right': '',\n },\n style: {\n border: [],\n 'padding-left': 1,\n 'padding-right': 1,\n },\n })\n const rows = dataTable.rows.map((row) =>\n row.cells.map((cell) =>\n cell.value.replace(/\\\\/g, '\\\\\\\\').replace(/\\n/g, '\\\\n')\n )\n )\n table.push(...rows)\n return table.toString()\n}\n\nfunction formatDocString(\n docString: messages.PickleStepArgument.IPickleDocString\n): string {\n return `\"\"\"\\n${docString.content}\\n\"\"\"`\n}\n\nexport function formatStepArgument(arg: messages.IPickleStepArgument): string {\n return parseStepArgument(arg, {\n dataTable: formatDataTable,\n docString: formatDocString,\n })\n}\n"]}
1
+ {"version":3,"file":"step_argument_formatter.js","sourceRoot":"","sources":["../../../src/formatter/helpers/step_argument_formatter.ts"],"names":[],"mappings":";;;;;;AAAA,4DAA8B;AAC9B,yDAAwD;AAGxD,SAAS,eAAe,CAAC,SAA+B;IACtD,MAAM,KAAK,GAAG,IAAI,oBAAK,CAAC;QACtB,KAAK,EAAE;YACL,MAAM,EAAE,EAAE;YACV,aAAa,EAAE,EAAE;YACjB,YAAY,EAAE,EAAE;YAChB,cAAc,EAAE,EAAE;YAClB,IAAI,EAAE,GAAG;YACT,UAAU,EAAE,EAAE;YACd,GAAG,EAAE,EAAE;YACP,SAAS,EAAE,EAAE;YACb,MAAM,EAAE,GAAG;YACX,KAAK,EAAE,GAAG;YACV,WAAW,EAAE,EAAE;YACf,GAAG,EAAE,EAAE;YACP,UAAU,EAAE,EAAE;YACd,SAAS,EAAE,EAAE;YACb,WAAW,EAAE,EAAE;SAChB;QACD,KAAK,EAAE;YACL,MAAM,EAAE,EAAE;YACV,cAAc,EAAE,CAAC;YACjB,eAAe,EAAE,CAAC;SACnB;KACF,CAAC,CAAA;IACF,MAAM,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CACtC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CACrB,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,CACxD,CACF,CAAA;IACD,KAAK,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAA;IACnB,OAAO,KAAK,CAAC,QAAQ,EAAE,CAAA;AACzB,CAAC;AAED,SAAS,eAAe,CAAC,SAAmC;IAC1D,OAAO,QAAQ,SAAS,CAAC,OAAO,OAAO,CAAA;AACzC,CAAC;AAED,SAAgB,kBAAkB,CAAC,GAAgC;IACjE,OAAO,kCAAiB,CAAC,GAAG,EAAE;QAC5B,SAAS,EAAE,eAAe;QAC1B,SAAS,EAAE,eAAe;KAC3B,CAAC,CAAA;AACJ,CAAC;AALD,gDAKC","sourcesContent":["import Table from 'cli-table3'\nimport { parseStepArgument } from '../../step_arguments'\nimport * as messages from '@cucumber/messages'\n\nfunction formatDataTable(dataTable: messages.PickleTable): string {\n const table = new Table({\n chars: {\n bottom: '',\n 'bottom-left': '',\n 'bottom-mid': '',\n 'bottom-right': '',\n left: '|',\n 'left-mid': '',\n mid: '',\n 'mid-mid': '',\n middle: '|',\n right: '|',\n 'right-mid': '',\n top: '',\n 'top-left': '',\n 'top-mid': '',\n 'top-right': '',\n },\n style: {\n border: [],\n 'padding-left': 1,\n 'padding-right': 1,\n },\n })\n const rows = dataTable.rows.map((row) =>\n row.cells.map((cell) =>\n cell.value.replace(/\\\\/g, '\\\\\\\\').replace(/\\n/g, '\\\\n')\n )\n )\n table.push(...rows)\n return table.toString()\n}\n\nfunction formatDocString(docString: messages.PickleDocString): string {\n return `\"\"\"\\n${docString.content}\\n\"\"\"`\n}\n\nexport function formatStepArgument(arg: messages.PickleStepArgument): string {\n return parseStepArgument(arg, {\n dataTable: formatDataTable,\n docString: formatDocString,\n })\n}\n"]}
@@ -1,9 +1,9 @@
1
1
  import { IColorFns } from '../get_color_fns';
2
2
  import { ITestCaseAttempt } from './event_data_collector';
3
- import { messages } from '@cucumber/messages';
3
+ import * as messages from '@cucumber/messages';
4
4
  export interface IFormatSummaryRequest {
5
5
  colorFns: IColorFns;
6
6
  testCaseAttempts: ITestCaseAttempt[];
7
- testRunDuration: messages.IDuration;
7
+ testRunDuration: messages.Duration;
8
8
  }
9
9
  export declare function formatSummary({ colorFns, testCaseAttempts, testRunDuration, }: IFormatSummaryRequest): string;
@@ -1,4 +1,23 @@
1
1
  "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
5
+ }) : (function(o, m, k, k2) {
6
+ if (k2 === undefined) k2 = k;
7
+ o[k2] = m[k];
8
+ }));
9
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
10
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
11
+ }) : function(o, v) {
12
+ o["default"] = v;
13
+ });
14
+ var __importStar = (this && this.__importStar) || function (mod) {
15
+ if (mod && mod.__esModule) return mod;
16
+ var result = {};
17
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
18
+ __setModuleDefault(result, mod);
19
+ return result;
20
+ };
2
21
  var __importDefault = (this && this.__importDefault) || function (mod) {
3
22
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
23
  };
@@ -6,29 +25,28 @@ Object.defineProperty(exports, "__esModule", { value: true });
6
25
  exports.formatSummary = void 0;
7
26
  const lodash_1 = __importDefault(require("lodash"));
8
27
  const duration_1 = __importDefault(require("duration"));
9
- const status_1 = __importDefault(require("../../status"));
10
- const time_1 = require("../../time");
11
- const messages_1 = require("@cucumber/messages");
28
+ const messages = __importStar(require("@cucumber/messages"));
29
+ const value_checker_1 = require("../../value_checker");
12
30
  const STATUS_REPORT_ORDER = [
13
- status_1.default.FAILED,
14
- status_1.default.AMBIGUOUS,
15
- status_1.default.UNDEFINED,
16
- status_1.default.PENDING,
17
- status_1.default.SKIPPED,
18
- status_1.default.PASSED,
31
+ messages.TestStepResultStatus.FAILED,
32
+ messages.TestStepResultStatus.AMBIGUOUS,
33
+ messages.TestStepResultStatus.UNDEFINED,
34
+ messages.TestStepResultStatus.PENDING,
35
+ messages.TestStepResultStatus.SKIPPED,
36
+ messages.TestStepResultStatus.PASSED,
19
37
  ];
20
38
  function formatSummary({ colorFns, testCaseAttempts, testRunDuration, }) {
21
39
  const testCaseResults = [];
22
40
  const testStepResults = [];
23
- let totalStepDuration = time_1.getZeroDuration();
41
+ let totalStepDuration = messages.TimeConversion.millisecondsToDuration(0);
24
42
  testCaseAttempts.forEach(({ testCase, worstTestStepResult, stepResults }) => {
25
43
  Object.values(stepResults).forEach((stepResult) => {
26
- totalStepDuration = time_1.addDurations(totalStepDuration, stepResult.duration);
44
+ totalStepDuration = messages.TimeConversion.addDurations(totalStepDuration, stepResult.duration);
27
45
  });
28
46
  if (!worstTestStepResult.willBeRetried) {
29
47
  testCaseResults.push(worstTestStepResult);
30
48
  lodash_1.default.each(testCase.testSteps, (testStep) => {
31
- if (testStep.pickleStepId !== '') {
49
+ if (value_checker_1.doesHaveValue(testStep.pickleStepId)) {
32
50
  testStepResults.push(stepResults[testStep.id]);
33
51
  }
34
52
  });
@@ -56,7 +74,7 @@ function getCountSummary({ colorFns, objects, type, }) {
56
74
  const details = [];
57
75
  STATUS_REPORT_ORDER.forEach((status) => {
58
76
  if (counts[status] > 0) {
59
- details.push(colorFns.forStatus(status)(`${counts[status].toString()} ${status_1.default[status].toLowerCase()}`));
77
+ details.push(colorFns.forStatus(status)(`${counts[status].toString()} ${status.toLowerCase()}`));
60
78
  }
61
79
  });
62
80
  text += ` (${details.join(', ')})`;
@@ -65,7 +83,7 @@ function getCountSummary({ colorFns, objects, type, }) {
65
83
  }
66
84
  function getDurationSummary(durationMsg) {
67
85
  const start = new Date(0);
68
- const end = new Date(messages_1.TimeConversion.durationToMilliseconds(durationMsg));
86
+ const end = new Date(messages.TimeConversion.durationToMilliseconds(durationMsg));
69
87
  const duration = new duration_1.default(start, end);
70
88
  // Use spaces in toString method for readability and to avoid %Ls which is a format
71
89
  return duration.toString('%Ms m %S . %L s').replace(/ /g, '');
@@ -1 +1 @@
1
- {"version":3,"file":"summary_helpers.js","sourceRoot":"","sources":["../../../src/formatter/helpers/summary_helpers.ts"],"names":[],"mappings":"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","sourcesContent":["import _ from 'lodash'\nimport Duration from 'duration'\nimport Status from '../../status'\nimport { addDurations, getZeroDuration } from '../../time'\nimport { IColorFns } from '../get_color_fns'\nimport { ITestCaseAttempt } from './event_data_collector'\nimport { messages, TimeConversion } from '@cucumber/messages'\n\nconst STATUS_REPORT_ORDER = [\n Status.FAILED,\n Status.AMBIGUOUS,\n Status.UNDEFINED,\n Status.PENDING,\n Status.SKIPPED,\n Status.PASSED,\n]\n\nexport interface IFormatSummaryRequest {\n colorFns: IColorFns\n testCaseAttempts: ITestCaseAttempt[]\n testRunDuration: messages.IDuration\n}\n\nexport function formatSummary({\n colorFns,\n testCaseAttempts,\n testRunDuration,\n}: IFormatSummaryRequest): string {\n const testCaseResults: messages.TestStepFinished.ITestStepResult[] = []\n const testStepResults: messages.TestStepFinished.ITestStepResult[] = []\n let totalStepDuration = getZeroDuration()\n testCaseAttempts.forEach(({ testCase, worstTestStepResult, stepResults }) => {\n Object.values(stepResults).forEach((stepResult) => {\n totalStepDuration = addDurations(totalStepDuration, stepResult.duration)\n })\n if (!worstTestStepResult.willBeRetried) {\n testCaseResults.push(worstTestStepResult)\n _.each(testCase.testSteps, (testStep) => {\n if (testStep.pickleStepId !== '') {\n testStepResults.push(stepResults[testStep.id])\n }\n })\n }\n })\n const scenarioSummary = getCountSummary({\n colorFns,\n objects: testCaseResults,\n type: 'scenario',\n })\n const stepSummary = getCountSummary({\n colorFns,\n objects: testStepResults,\n type: 'step',\n })\n const durationSummary = `${getDurationSummary(\n testRunDuration\n )} (executing steps: ${getDurationSummary(totalStepDuration)})\\n`\n return [scenarioSummary, stepSummary, durationSummary].join('\\n')\n}\n\ninterface IGetCountSummaryRequest {\n colorFns: IColorFns\n objects: messages.TestStepFinished.ITestStepResult[]\n type: string\n}\n\nfunction getCountSummary({\n colorFns,\n objects,\n type,\n}: IGetCountSummaryRequest): string {\n const counts = _.chain(objects).groupBy('status').mapValues('length').value()\n const total = _.chain(counts).values().sum().value()\n let text = `${total.toString()} ${type}${total === 1 ? '' : 's'}`\n if (total > 0) {\n const details: string[] = []\n STATUS_REPORT_ORDER.forEach((status) => {\n if (counts[status] > 0) {\n details.push(\n colorFns.forStatus(status)(\n `${counts[status].toString()} ${Status[status].toLowerCase()}`\n )\n )\n }\n })\n text += ` (${details.join(', ')})`\n }\n return text\n}\n\nfunction getDurationSummary(durationMsg: messages.IDuration): string {\n const start = new Date(0)\n const end = new Date(TimeConversion.durationToMilliseconds(durationMsg))\n const duration = new Duration(start, end)\n // Use spaces in toString method for readability and to avoid %Ls which is a format\n return duration.toString('%Ms m %S . %L s').replace(/ /g, '')\n}\n"]}
1
+ {"version":3,"file":"summary_helpers.js","sourceRoot":"","sources":["../../../src/formatter/helpers/summary_helpers.ts"],"names":[],"mappings":"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","sourcesContent":["import _ from 'lodash'\nimport Duration from 'duration'\nimport { IColorFns } from '../get_color_fns'\nimport { ITestCaseAttempt } from './event_data_collector'\nimport * as messages from '@cucumber/messages'\nimport { doesHaveValue } from '../../value_checker'\n\nconst STATUS_REPORT_ORDER = [\n messages.TestStepResultStatus.FAILED,\n messages.TestStepResultStatus.AMBIGUOUS,\n messages.TestStepResultStatus.UNDEFINED,\n messages.TestStepResultStatus.PENDING,\n messages.TestStepResultStatus.SKIPPED,\n messages.TestStepResultStatus.PASSED,\n]\n\nexport interface IFormatSummaryRequest {\n colorFns: IColorFns\n testCaseAttempts: ITestCaseAttempt[]\n testRunDuration: messages.Duration\n}\n\nexport function formatSummary({\n colorFns,\n testCaseAttempts,\n testRunDuration,\n}: IFormatSummaryRequest): string {\n const testCaseResults: messages.TestStepResult[] = []\n const testStepResults: messages.TestStepResult[] = []\n let totalStepDuration = messages.TimeConversion.millisecondsToDuration(0)\n testCaseAttempts.forEach(({ testCase, worstTestStepResult, stepResults }) => {\n Object.values(stepResults).forEach((stepResult) => {\n totalStepDuration = messages.TimeConversion.addDurations(\n totalStepDuration,\n stepResult.duration\n )\n })\n if (!worstTestStepResult.willBeRetried) {\n testCaseResults.push(worstTestStepResult)\n _.each(testCase.testSteps, (testStep) => {\n if (doesHaveValue(testStep.pickleStepId)) {\n testStepResults.push(stepResults[testStep.id])\n }\n })\n }\n })\n const scenarioSummary = getCountSummary({\n colorFns,\n objects: testCaseResults,\n type: 'scenario',\n })\n const stepSummary = getCountSummary({\n colorFns,\n objects: testStepResults,\n type: 'step',\n })\n const durationSummary = `${getDurationSummary(\n testRunDuration\n )} (executing steps: ${getDurationSummary(totalStepDuration)})\\n`\n return [scenarioSummary, stepSummary, durationSummary].join('\\n')\n}\n\ninterface IGetCountSummaryRequest {\n colorFns: IColorFns\n objects: messages.TestStepResult[]\n type: string\n}\n\nfunction getCountSummary({\n colorFns,\n objects,\n type,\n}: IGetCountSummaryRequest): string {\n const counts = _.chain(objects).groupBy('status').mapValues('length').value()\n const total = _.chain(counts).values().sum().value()\n let text = `${total.toString()} ${type}${total === 1 ? '' : 's'}`\n if (total > 0) {\n const details: string[] = []\n STATUS_REPORT_ORDER.forEach((status) => {\n if (counts[status] > 0) {\n details.push(\n colorFns.forStatus(status)(\n `${counts[status].toString()} ${status.toLowerCase()}`\n )\n )\n }\n })\n text += ` (${details.join(', ')})`\n }\n return text\n}\n\nfunction getDurationSummary(durationMsg: messages.Duration): string {\n const start = new Date(0)\n const end = new Date(\n messages.TimeConversion.durationToMilliseconds(durationMsg)\n )\n const duration = new Duration(start, end)\n // Use spaces in toString method for readability and to avoid %Ls which is a format\n return duration.toString('%Ms m %S . %L s').replace(/ /g, '')\n}\n"]}
@@ -1,32 +1,51 @@
1
1
  "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
5
+ }) : (function(o, m, k, k2) {
6
+ if (k2 === undefined) k2 = k;
7
+ o[k2] = m[k];
8
+ }));
9
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
10
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
11
+ }) : function(o, v) {
12
+ o["default"] = v;
13
+ });
14
+ var __importStar = (this && this.__importStar) || function (mod) {
15
+ if (mod && mod.__esModule) return mod;
16
+ var result = {};
17
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
18
+ __setModuleDefault(result, mod);
19
+ return result;
20
+ };
2
21
  var __importDefault = (this && this.__importDefault) || function (mod) {
3
22
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
23
  };
5
24
  Object.defineProperty(exports, "__esModule", { value: true });
6
25
  exports.formatTestCaseAttempt = void 0;
7
26
  const indent_string_1 = __importDefault(require("indent-string"));
8
- const status_1 = __importDefault(require("../../status"));
27
+ const messages = __importStar(require("@cucumber/messages"));
9
28
  const figures_1 = __importDefault(require("figures"));
10
29
  const location_helpers_1 = require("./location_helpers");
11
30
  const test_case_attempt_parser_1 = require("./test_case_attempt_parser");
12
31
  const step_argument_formatter_1 = require("./step_argument_formatter");
13
32
  const value_checker_1 = require("../../value_checker");
14
- const CHARACTERS = {
15
- [status_1.default.AMBIGUOUS]: figures_1.default.cross,
16
- [status_1.default.FAILED]: figures_1.default.cross,
17
- [status_1.default.PASSED]: figures_1.default.tick,
18
- [status_1.default.PENDING]: '?',
19
- [status_1.default.SKIPPED]: '-',
20
- [status_1.default.UNDEFINED]: '?',
21
- };
33
+ const CHARACTERS = new Map([
34
+ [messages.TestStepResultStatus.AMBIGUOUS, figures_1.default.cross],
35
+ [messages.TestStepResultStatus.FAILED, figures_1.default.cross],
36
+ [messages.TestStepResultStatus.PASSED, figures_1.default.tick],
37
+ [messages.TestStepResultStatus.PENDING, '?'],
38
+ [messages.TestStepResultStatus.SKIPPED, '-'],
39
+ [messages.TestStepResultStatus.UNDEFINED, '?'],
40
+ ]);
22
41
  function getStepMessage(testStep) {
23
42
  switch (testStep.result.status) {
24
- case status_1.default.AMBIGUOUS:
25
- case status_1.default.FAILED:
43
+ case messages.TestStepResultStatus.AMBIGUOUS:
44
+ case messages.TestStepResultStatus.FAILED:
26
45
  return testStep.result.message;
27
- case status_1.default.UNDEFINED:
46
+ case messages.TestStepResultStatus.UNDEFINED:
28
47
  return `${'Undefined. Implement with the following snippet:' + '\n\n'}${indent_string_1.default(testStep.snippet, 2)}\n`;
29
- case status_1.default.PENDING:
48
+ case messages.TestStepResultStatus.PENDING:
30
49
  return 'Pending';
31
50
  }
32
51
  return '';
@@ -35,7 +54,7 @@ function formatStep({ colorFns, testStep }) {
35
54
  const { result: { status }, actionLocation, attachments, } = testStep;
36
55
  const colorFn = colorFns.forStatus(status);
37
56
  const identifier = testStep.keyword + value_checker_1.valueOrDefault(testStep.text, '');
38
- let text = colorFn(`${CHARACTERS[status]} ${identifier}`);
57
+ let text = colorFn(`${CHARACTERS.get(status)} ${identifier}`);
39
58
  if (value_checker_1.doesHaveValue(actionLocation)) {
40
59
  text += ` # ${colorFns.location(location_helpers_1.formatLocation(actionLocation))}`;
41
60
  }
@@ -1 +1 @@
1
- {"version":3,"file":"test_case_attempt_formatter.js","sourceRoot":"","sources":["../../../src/formatter/helpers/test_case_attempt_formatter.ts"],"names":[],"mappings":"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","sourcesContent":["import indentString from 'indent-string'\nimport Status from '../../status'\nimport figures from 'figures'\nimport { formatLocation } from './location_helpers'\nimport {\n IParsedTestStep,\n parseTestCaseAttempt,\n} from './test_case_attempt_parser'\nimport { formatStepArgument } from './step_argument_formatter'\nimport { IColorFns } from '../get_color_fns'\nimport { doesHaveValue, valueOrDefault } from '../../value_checker'\nimport { ITestCaseAttempt } from './event_data_collector'\nimport StepDefinitionSnippetBuilder from '../step_definition_snippet_builder'\nimport { ISupportCodeLibrary } from '../../support_code_library_builder/types'\n\nconst CHARACTERS: { [status: number]: string } = {\n [Status.AMBIGUOUS]: figures.cross,\n [Status.FAILED]: figures.cross,\n [Status.PASSED]: figures.tick,\n [Status.PENDING]: '?',\n [Status.SKIPPED]: '-',\n [Status.UNDEFINED]: '?',\n}\n\nfunction getStepMessage(testStep: IParsedTestStep): string {\n switch (testStep.result.status) {\n case Status.AMBIGUOUS:\n case Status.FAILED:\n return testStep.result.message\n case Status.UNDEFINED:\n return `${\n 'Undefined. Implement with the following snippet:' + '\\n\\n'\n }${indentString(testStep.snippet, 2)}\\n`\n case Status.PENDING:\n return 'Pending'\n }\n return ''\n}\n\ninterface IFormatStepRequest {\n colorFns: IColorFns\n testStep: IParsedTestStep\n}\n\nfunction formatStep({ colorFns, testStep }: IFormatStepRequest): string {\n const {\n result: { status },\n actionLocation,\n attachments,\n } = testStep\n const colorFn = colorFns.forStatus(status)\n const identifier = testStep.keyword + valueOrDefault(testStep.text, '')\n let text = colorFn(`${CHARACTERS[status]} ${identifier}`)\n if (doesHaveValue(actionLocation)) {\n text += ` # ${colorFns.location(formatLocation(actionLocation))}`\n }\n text += '\\n'\n if (doesHaveValue(testStep.argument)) {\n const argumentsText = formatStepArgument(testStep.argument)\n text += indentString(`${colorFn(argumentsText)}\\n`, 4)\n }\n attachments.forEach(({ body, mediaType }) => {\n const message = mediaType === 'text/plain' ? `: ${body}` : ''\n text += indentString(`Attachment (${mediaType})${message}\\n`, 4)\n })\n const message = getStepMessage(testStep)\n if (message !== '') {\n text += `${indentString(colorFn(message), 4)}\\n`\n }\n return text\n}\n\nexport interface IFormatTestCaseAttemptRequest {\n colorFns: IColorFns\n cwd: string\n testCaseAttempt: ITestCaseAttempt\n snippetBuilder: StepDefinitionSnippetBuilder\n supportCodeLibrary: ISupportCodeLibrary\n}\n\nexport function formatTestCaseAttempt({\n colorFns,\n cwd,\n snippetBuilder,\n supportCodeLibrary,\n testCaseAttempt,\n}: IFormatTestCaseAttemptRequest): string {\n const parsed = parseTestCaseAttempt({\n cwd,\n snippetBuilder,\n testCaseAttempt,\n supportCodeLibrary,\n })\n let text = `Scenario: ${parsed.testCase.name}`\n text += getAttemptText(\n parsed.testCase.attempt,\n parsed.testCase.worstTestStepResult.willBeRetried\n )\n text += ` # ${colorFns.location(\n formatLocation(parsed.testCase.sourceLocation)\n )}\\n`\n parsed.testSteps.forEach((testStep) => {\n text += formatStep({ colorFns, testStep })\n })\n return `${text}\\n`\n}\n\nfunction getAttemptText(attempt: number, willBeRetried: boolean): string {\n if (attempt > 0 || willBeRetried) {\n const numberStr = (attempt + 1).toString()\n const retriedStr = willBeRetried ? ', retried' : ''\n return ` (attempt ${numberStr}${retriedStr})`\n }\n return ''\n}\n"]}
1
+ {"version":3,"file":"test_case_attempt_formatter.js","sourceRoot":"","sources":["../../../src/formatter/helpers/test_case_attempt_formatter.ts"],"names":[],"mappings":"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","sourcesContent":["import indentString from 'indent-string'\nimport * as messages from '@cucumber/messages'\nimport figures from 'figures'\nimport { formatLocation } from './location_helpers'\nimport {\n IParsedTestStep,\n parseTestCaseAttempt,\n} from './test_case_attempt_parser'\nimport { formatStepArgument } from './step_argument_formatter'\nimport { IColorFns } from '../get_color_fns'\nimport { doesHaveValue, valueOrDefault } from '../../value_checker'\nimport { ITestCaseAttempt } from './event_data_collector'\nimport StepDefinitionSnippetBuilder from '../step_definition_snippet_builder'\nimport { ISupportCodeLibrary } from '../../support_code_library_builder/types'\n\nconst CHARACTERS: Map<messages.TestStepResultStatus, string> = new Map([\n [messages.TestStepResultStatus.AMBIGUOUS, figures.cross],\n [messages.TestStepResultStatus.FAILED, figures.cross],\n [messages.TestStepResultStatus.PASSED, figures.tick],\n [messages.TestStepResultStatus.PENDING, '?'],\n [messages.TestStepResultStatus.SKIPPED, '-'],\n [messages.TestStepResultStatus.UNDEFINED, '?'],\n])\n\nfunction getStepMessage(testStep: IParsedTestStep): string {\n switch (testStep.result.status) {\n case messages.TestStepResultStatus.AMBIGUOUS:\n case messages.TestStepResultStatus.FAILED:\n return testStep.result.message\n case messages.TestStepResultStatus.UNDEFINED:\n return `${\n 'Undefined. Implement with the following snippet:' + '\\n\\n'\n }${indentString(testStep.snippet, 2)}\\n`\n case messages.TestStepResultStatus.PENDING:\n return 'Pending'\n }\n return ''\n}\n\ninterface IFormatStepRequest {\n colorFns: IColorFns\n testStep: IParsedTestStep\n}\n\nfunction formatStep({ colorFns, testStep }: IFormatStepRequest): string {\n const {\n result: { status },\n actionLocation,\n attachments,\n } = testStep\n const colorFn = colorFns.forStatus(status)\n const identifier = testStep.keyword + valueOrDefault(testStep.text, '')\n let text = colorFn(`${CHARACTERS.get(status)} ${identifier}`)\n if (doesHaveValue(actionLocation)) {\n text += ` # ${colorFns.location(formatLocation(actionLocation))}`\n }\n text += '\\n'\n if (doesHaveValue(testStep.argument)) {\n const argumentsText = formatStepArgument(testStep.argument)\n text += indentString(`${colorFn(argumentsText)}\\n`, 4)\n }\n attachments.forEach(({ body, mediaType }) => {\n const message = mediaType === 'text/plain' ? `: ${body}` : ''\n text += indentString(`Attachment (${mediaType})${message}\\n`, 4)\n })\n const message = getStepMessage(testStep)\n if (message !== '') {\n text += `${indentString(colorFn(message), 4)}\\n`\n }\n return text\n}\n\nexport interface IFormatTestCaseAttemptRequest {\n colorFns: IColorFns\n cwd: string\n testCaseAttempt: ITestCaseAttempt\n snippetBuilder: StepDefinitionSnippetBuilder\n supportCodeLibrary: ISupportCodeLibrary\n}\n\nexport function formatTestCaseAttempt({\n colorFns,\n cwd,\n snippetBuilder,\n supportCodeLibrary,\n testCaseAttempt,\n}: IFormatTestCaseAttemptRequest): string {\n const parsed = parseTestCaseAttempt({\n cwd,\n snippetBuilder,\n testCaseAttempt,\n supportCodeLibrary,\n })\n let text = `Scenario: ${parsed.testCase.name}`\n text += getAttemptText(\n parsed.testCase.attempt,\n parsed.testCase.worstTestStepResult.willBeRetried\n )\n text += ` # ${colorFns.location(\n formatLocation(parsed.testCase.sourceLocation)\n )}\\n`\n parsed.testSteps.forEach((testStep) => {\n text += formatStep({ colorFns, testStep })\n })\n return `${text}\\n`\n}\n\nfunction getAttemptText(attempt: number, willBeRetried: boolean): string {\n if (attempt > 0 || willBeRetried) {\n const numberStr = (attempt + 1).toString()\n const retriedStr = willBeRetried ? ', retried' : ''\n return ` (attempt ${numberStr}${retriedStr})`\n }\n return ''\n}\n"]}
@@ -1,14 +1,14 @@
1
- import { messages } from '@cucumber/messages';
1
+ import * as messages from '@cucumber/messages';
2
2
  import { ITestCaseAttempt } from './event_data_collector';
3
3
  import StepDefinitionSnippetBuilder from '../step_definition_snippet_builder';
4
4
  import { ISupportCodeLibrary } from '../../support_code_library_builder/types';
5
5
  import { ILineAndUri } from '../../types';
6
6
  export interface IParsedTestStep {
7
7
  actionLocation?: ILineAndUri;
8
- argument?: messages.IPickleStepArgument;
9
- attachments: messages.IAttachment[];
8
+ argument?: messages.PickleStepArgument;
9
+ attachments: messages.Attachment[];
10
10
  keyword: string;
11
- result: messages.TestStepFinished.ITestStepResult;
11
+ result: messages.TestStepResult;
12
12
  snippet?: string;
13
13
  sourceLocation?: ILineAndUri;
14
14
  text?: string;
@@ -17,7 +17,7 @@ export interface IParsedTestCase {
17
17
  attempt: number;
18
18
  name: string;
19
19
  sourceLocation?: ILineAndUri;
20
- worstTestStepResult: messages.TestStepFinished.ITestStepResult;
20
+ worstTestStepResult: messages.TestStepResult;
21
21
  }
22
22
  export interface IParsedTestCaseAttempt {
23
23
  testCase: IParsedTestCase;