@cucumber/cucumber 7.1.0 → 7.3.1

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 (124) hide show
  1. package/CHANGELOG.md +56 -1
  2. package/README.md +2 -1
  3. package/lib/cli/configuration_builder.js +4 -3
  4. package/lib/cli/configuration_builder.js.map +1 -1
  5. package/lib/cli/helpers.js +40 -18
  6. package/lib/cli/helpers.js.map +1 -1
  7. package/lib/cli/index.js +23 -15
  8. package/lib/cli/index.js.map +1 -1
  9. package/lib/cli/profile_loader.d.ts +1 -2
  10. package/lib/cli/profile_loader.js.map +1 -1
  11. package/lib/cli/publish_banner.js +1 -1
  12. package/lib/cli/publish_banner.js.map +1 -1
  13. package/lib/formatter/get_color_fns.d.ts +6 -2
  14. package/lib/formatter/get_color_fns.js +18 -12
  15. package/lib/formatter/get_color_fns.js.map +1 -1
  16. package/lib/formatter/helpers/event_data_collector.d.ts +14 -17
  17. package/lib/formatter/helpers/event_data_collector.js +14 -8
  18. package/lib/formatter/helpers/event_data_collector.js.map +1 -1
  19. package/lib/formatter/helpers/gherkin_document_parser.d.ts +5 -6
  20. package/lib/formatter/helpers/gherkin_document_parser.js +1 -4
  21. package/lib/formatter/helpers/gherkin_document_parser.js.map +1 -1
  22. package/lib/formatter/helpers/issue_helpers.d.ts +6 -6
  23. package/lib/formatter/helpers/issue_helpers.js +5 -6
  24. package/lib/formatter/helpers/issue_helpers.js.map +1 -1
  25. package/lib/formatter/helpers/pickle_parser.d.ts +9 -10
  26. package/lib/formatter/helpers/pickle_parser.js.map +1 -1
  27. package/lib/formatter/helpers/step_argument_formatter.d.ts +2 -2
  28. package/lib/formatter/helpers/step_argument_formatter.js.map +1 -1
  29. package/lib/formatter/helpers/summary_helpers.d.ts +2 -2
  30. package/lib/formatter/helpers/summary_helpers.js +32 -14
  31. package/lib/formatter/helpers/summary_helpers.js.map +1 -1
  32. package/lib/formatter/helpers/test_case_attempt_formatter.js +33 -14
  33. package/lib/formatter/helpers/test_case_attempt_formatter.js.map +1 -1
  34. package/lib/formatter/helpers/test_case_attempt_parser.d.ts +5 -5
  35. package/lib/formatter/helpers/test_case_attempt_parser.js +27 -9
  36. package/lib/formatter/helpers/test_case_attempt_parser.js.map +1 -1
  37. package/lib/formatter/helpers/usage_helpers/index.d.ts +3 -3
  38. package/lib/formatter/helpers/usage_helpers/index.js +30 -13
  39. package/lib/formatter/helpers/usage_helpers/index.js.map +1 -1
  40. package/lib/formatter/html_formatter.js +1 -1
  41. package/lib/formatter/html_formatter.js.map +1 -1
  42. package/lib/formatter/json_formatter.d.ts +21 -27
  43. package/lib/formatter/json_formatter.js +50 -23
  44. package/lib/formatter/json_formatter.js.map +1 -1
  45. package/lib/formatter/message_formatter.js +1 -1
  46. package/lib/formatter/message_formatter.js.map +1 -1
  47. package/lib/formatter/progress_bar_formatter.d.ts +6 -6
  48. package/lib/formatter/progress_bar_formatter.js +3 -3
  49. package/lib/formatter/progress_bar_formatter.js.map +1 -1
  50. package/lib/formatter/progress_formatter.d.ts +2 -2
  51. package/lib/formatter/progress_formatter.js +29 -10
  52. package/lib/formatter/progress_formatter.js.map +1 -1
  53. package/lib/formatter/rerun_formatter.js +22 -4
  54. package/lib/formatter/rerun_formatter.js.map +1 -1
  55. package/lib/formatter/snippets_formatter.js +21 -2
  56. package/lib/formatter/snippets_formatter.js.map +1 -1
  57. package/lib/formatter/step_definition_snippet_builder/index.d.ts +3 -3
  58. package/lib/formatter/step_definition_snippet_builder/index.js.map +1 -1
  59. package/lib/formatter/step_definition_snippet_builder/javascript_snippet_syntax.js.map +1 -1
  60. package/lib/formatter/summary_formatter.d.ts +2 -2
  61. package/lib/formatter/summary_formatter.js.map +1 -1
  62. package/lib/formatter/usage_formatter.js +22 -3
  63. package/lib/formatter/usage_formatter.js.map +1 -1
  64. package/lib/formatter/usage_json_formatter.js.map +1 -1
  65. package/lib/index.d.ts +14 -12
  66. package/lib/index.js +3 -3
  67. package/lib/index.js.map +1 -1
  68. package/lib/models/data_table.d.ts +3 -4
  69. package/lib/models/data_table.js.map +1 -1
  70. package/lib/models/definition.d.ts +2 -2
  71. package/lib/models/definition.js.map +1 -1
  72. package/lib/models/test_case_hook_definition.d.ts +2 -2
  73. package/lib/models/test_case_hook_definition.js.map +1 -1
  74. package/lib/models/test_step_hook_definition.d.ts +2 -2
  75. package/lib/models/test_step_hook_definition.js.map +1 -1
  76. package/lib/pickle_filter.d.ts +9 -11
  77. package/lib/pickle_filter.js +4 -4
  78. package/lib/pickle_filter.js.map +1 -1
  79. package/lib/runtime/assemble_test_cases.d.ts +13 -0
  80. package/lib/runtime/assemble_test_cases.js +88 -0
  81. package/lib/runtime/assemble_test_cases.js.map +1 -0
  82. package/lib/runtime/attachment_manager/index.d.ts +2 -2
  83. package/lib/runtime/attachment_manager/index.js +23 -4
  84. package/lib/runtime/attachment_manager/index.js.map +1 -1
  85. package/lib/runtime/helpers.d.ts +2 -2
  86. package/lib/runtime/helpers.js.map +1 -1
  87. package/lib/runtime/index.d.ts +4 -3
  88. package/lib/runtime/index.js +31 -13
  89. package/lib/runtime/index.js.map +1 -1
  90. package/lib/runtime/parallel/command_types.d.ts +10 -9
  91. package/lib/runtime/parallel/command_types.js.map +1 -1
  92. package/lib/runtime/parallel/coordinator.d.ts +10 -9
  93. package/lib/runtime/parallel/coordinator.js +54 -43
  94. package/lib/runtime/parallel/coordinator.js.map +1 -1
  95. package/lib/runtime/parallel/worker.d.ts +2 -2
  96. package/lib/runtime/parallel/worker.js +8 -14
  97. package/lib/runtime/parallel/worker.js.map +1 -1
  98. package/lib/runtime/step_runner.d.ts +3 -3
  99. package/lib/runtime/step_runner.js +16 -12
  100. package/lib/runtime/step_runner.js.map +1 -1
  101. package/lib/runtime/stopwatch.d.ts +4 -4
  102. package/lib/runtime/stopwatch.js +21 -2
  103. package/lib/runtime/stopwatch.js.map +1 -1
  104. package/lib/runtime/{pickle_runner.d.ts → test_case_runner.d.ts} +16 -32
  105. package/lib/runtime/{pickle_runner.js → test_case_runner.js} +104 -147
  106. package/lib/runtime/test_case_runner.js.map +1 -0
  107. package/lib/step_arguments.d.ts +4 -4
  108. package/lib/step_arguments.js.map +1 -1
  109. package/lib/support_code_library_builder/index.d.ts +9 -7
  110. package/lib/support_code_library_builder/index.js +11 -10
  111. package/lib/support_code_library_builder/index.js.map +1 -1
  112. package/lib/support_code_library_builder/types.d.ts +21 -23
  113. package/lib/support_code_library_builder/types.js.map +1 -1
  114. package/lib/support_code_library_builder/validate_arguments.js.map +1 -1
  115. package/lib/support_code_library_builder/world.d.ts +7 -1
  116. package/lib/support_code_library_builder/world.js.map +1 -1
  117. package/lib/time.d.ts +2 -10
  118. package/lib/time.js +24 -48
  119. package/lib/time.js.map +1 -1
  120. package/package.json +33 -33
  121. package/lib/runtime/pickle_runner.js.map +0 -1
  122. package/lib/status.d.ts +0 -3
  123. package/lib/status.js +0 -5
  124. package/lib/status.js.map +0 -1
@@ -3,35 +3,41 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- const lodash_1 = __importDefault(require("lodash"));
7
6
  const safe_1 = __importDefault(require("colors/safe"));
8
- const status_1 = __importDefault(require("../status"));
9
7
  safe_1.default.enable();
10
8
  function getColorFns(enabled) {
11
9
  if (enabled) {
12
10
  return {
13
11
  forStatus(status) {
14
12
  return {
15
- [status_1.default.AMBIGUOUS]: safe_1.default.red.bind(safe_1.default),
16
- [status_1.default.FAILED]: safe_1.default.red.bind(safe_1.default),
17
- [status_1.default.PASSED]: safe_1.default.green.bind(safe_1.default),
18
- [status_1.default.PENDING]: safe_1.default.yellow.bind(safe_1.default),
19
- [status_1.default.SKIPPED]: safe_1.default.cyan.bind(safe_1.default),
20
- [status_1.default.UNDEFINED]: safe_1.default.yellow.bind(safe_1.default),
21
- [status_1.default.UNKNOWN]: safe_1.default.yellow.bind(safe_1.default),
13
+ AMBIGUOUS: safe_1.default.red.bind(safe_1.default),
14
+ FAILED: safe_1.default.red.bind(safe_1.default),
15
+ PASSED: safe_1.default.green.bind(safe_1.default),
16
+ PENDING: safe_1.default.yellow.bind(safe_1.default),
17
+ SKIPPED: safe_1.default.cyan.bind(safe_1.default),
18
+ UNDEFINED: safe_1.default.yellow.bind(safe_1.default),
19
+ UNKNOWN: safe_1.default.yellow.bind(safe_1.default),
22
20
  }[status];
23
21
  },
24
22
  location: safe_1.default.gray.bind(safe_1.default),
25
23
  tag: safe_1.default.cyan.bind(safe_1.default),
24
+ diffAdded: safe_1.default.green.bind(safe_1.default),
25
+ diffRemoved: safe_1.default.red.bind(safe_1.default),
26
+ errorMessage: safe_1.default.red.bind(safe_1.default),
27
+ errorStack: safe_1.default.grey.bind(safe_1.default),
26
28
  };
27
29
  }
28
30
  else {
29
31
  return {
30
32
  forStatus(status) {
31
- return lodash_1.default.identity;
33
+ return (x) => x;
32
34
  },
33
- location: lodash_1.default.identity,
34
- tag: lodash_1.default.identity,
35
+ location: (x) => x,
36
+ tag: (x) => x,
37
+ diffAdded: (x) => x,
38
+ diffRemoved: (x) => x,
39
+ errorMessage: (x) => x,
40
+ errorStack: (x) => x,
35
41
  };
36
42
  }
37
43
  }
@@ -1 +1 @@
1
- {"version":3,"file":"get_color_fns.js","sourceRoot":"","sources":["../../src/formatter/get_color_fns.ts"],"names":[],"mappings":";;;;;AAAA,oDAAsB;AACtB,uDAAgC;AAChC,uDAA8B;AAG9B,cAAM,CAAC,MAAM,EAAE,CAAA;AAYf,SAAwB,WAAW,CAAC,OAAgB;IAClD,IAAI,OAAO,EAAE;QACX,OAAO;YACL,SAAS,CAAC,MAAuD;gBAC/D,OAAO;oBACL,CAAC,gBAAM,CAAC,SAAS,CAAC,EAAE,cAAM,CAAC,GAAG,CAAC,IAAI,CAAC,cAAM,CAAC;oBAC3C,CAAC,gBAAM,CAAC,MAAM,CAAC,EAAE,cAAM,CAAC,GAAG,CAAC,IAAI,CAAC,cAAM,CAAC;oBACxC,CAAC,gBAAM,CAAC,MAAM,CAAC,EAAE,cAAM,CAAC,KAAK,CAAC,IAAI,CAAC,cAAM,CAAC;oBAC1C,CAAC,gBAAM,CAAC,OAAO,CAAC,EAAE,cAAM,CAAC,MAAM,CAAC,IAAI,CAAC,cAAM,CAAC;oBAC5C,CAAC,gBAAM,CAAC,OAAO,CAAC,EAAE,cAAM,CAAC,IAAI,CAAC,IAAI,CAAC,cAAM,CAAC;oBAC1C,CAAC,gBAAM,CAAC,SAAS,CAAC,EAAE,cAAM,CAAC,MAAM,CAAC,IAAI,CAAC,cAAM,CAAC;oBAC9C,CAAC,gBAAM,CAAC,OAAO,CAAC,EAAE,cAAM,CAAC,MAAM,CAAC,IAAI,CAAC,cAAM,CAAC;iBAC7C,CAAC,MAAM,CAAC,CAAA;YACX,CAAC;YACD,QAAQ,EAAE,cAAM,CAAC,IAAI,CAAC,IAAI,CAAC,cAAM,CAAC;YAClC,GAAG,EAAE,cAAM,CAAC,IAAI,CAAC,IAAI,CAAC,cAAM,CAAC;SAC9B,CAAA;KACF;SAAM;QACL,OAAO;YACL,SAAS,CAAC,MAAuD;gBAC/D,OAAO,gBAAC,CAAC,QAAQ,CAAA;YACnB,CAAC;YACD,QAAQ,EAAE,gBAAC,CAAC,QAAQ;YACpB,GAAG,EAAE,gBAAC,CAAC,QAAQ;SAChB,CAAA;KACF;AACH,CAAC;AA1BD,8BA0BC","sourcesContent":["import _ from 'lodash'\nimport colors from 'colors/safe'\nimport Status from '../status'\nimport { messages } from '@cucumber/messages'\n\ncolors.enable()\n\nexport type IColorFn = (text: string) => string\n\nexport interface IColorFns {\n forStatus: (\n status: messages.TestStepFinished.TestStepResult.Status\n ) => IColorFn\n location: IColorFn\n tag: IColorFn\n}\n\nexport default function getColorFns(enabled: boolean): IColorFns {\n if (enabled) {\n return {\n forStatus(status: messages.TestStepFinished.TestStepResult.Status) {\n return {\n [Status.AMBIGUOUS]: colors.red.bind(colors),\n [Status.FAILED]: colors.red.bind(colors),\n [Status.PASSED]: colors.green.bind(colors),\n [Status.PENDING]: colors.yellow.bind(colors),\n [Status.SKIPPED]: colors.cyan.bind(colors),\n [Status.UNDEFINED]: colors.yellow.bind(colors),\n [Status.UNKNOWN]: colors.yellow.bind(colors),\n }[status]\n },\n location: colors.gray.bind(colors),\n tag: colors.cyan.bind(colors),\n }\n } else {\n return {\n forStatus(status: messages.TestStepFinished.TestStepResult.Status) {\n return _.identity\n },\n location: _.identity,\n tag: _.identity,\n }\n }\n}\n"]}
1
+ {"version":3,"file":"get_color_fns.js","sourceRoot":"","sources":["../../src/formatter/get_color_fns.ts"],"names":[],"mappings":";;;;;AAAA,uDAAgC;AAGhC,cAAM,CAAC,MAAM,EAAE,CAAA;AAcf,SAAwB,WAAW,CAAC,OAAgB;IAClD,IAAI,OAAO,EAAE;QACX,OAAO;YACL,SAAS,CAAC,MAA4B;gBACpC,OAAO;oBACL,SAAS,EAAE,cAAM,CAAC,GAAG,CAAC,IAAI,CAAC,cAAM,CAAC;oBAClC,MAAM,EAAE,cAAM,CAAC,GAAG,CAAC,IAAI,CAAC,cAAM,CAAC;oBAC/B,MAAM,EAAE,cAAM,CAAC,KAAK,CAAC,IAAI,CAAC,cAAM,CAAC;oBACjC,OAAO,EAAE,cAAM,CAAC,MAAM,CAAC,IAAI,CAAC,cAAM,CAAC;oBACnC,OAAO,EAAE,cAAM,CAAC,IAAI,CAAC,IAAI,CAAC,cAAM,CAAC;oBACjC,SAAS,EAAE,cAAM,CAAC,MAAM,CAAC,IAAI,CAAC,cAAM,CAAC;oBACrC,OAAO,EAAE,cAAM,CAAC,MAAM,CAAC,IAAI,CAAC,cAAM,CAAC;iBACpC,CAAC,MAAM,CAAC,CAAA;YACX,CAAC;YACD,QAAQ,EAAE,cAAM,CAAC,IAAI,CAAC,IAAI,CAAC,cAAM,CAAC;YAClC,GAAG,EAAE,cAAM,CAAC,IAAI,CAAC,IAAI,CAAC,cAAM,CAAC;YAC7B,SAAS,EAAE,cAAM,CAAC,KAAK,CAAC,IAAI,CAAC,cAAM,CAAC;YACpC,WAAW,EAAE,cAAM,CAAC,GAAG,CAAC,IAAI,CAAC,cAAM,CAAC;YACpC,YAAY,EAAE,cAAM,CAAC,GAAG,CAAC,IAAI,CAAC,cAAM,CAAC;YACrC,UAAU,EAAE,cAAM,CAAC,IAAI,CAAC,IAAI,CAAC,cAAM,CAAC;SACrC,CAAA;KACF;SAAM;QACL,OAAO;YACL,SAAS,CAAC,MAA4B;gBACpC,OAAO,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAA;YACjB,CAAC;YACD,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YAClB,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACb,SAAS,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACnB,WAAW,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACrB,YAAY,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACtB,UAAU,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;SACrB,CAAA;KACF;AACH,CAAC;AAlCD,8BAkCC","sourcesContent":["import colors from 'colors/safe'\nimport { TestStepResultStatus } from '@cucumber/messages'\n\ncolors.enable()\n\nexport type IColorFn = (text: string) => string\n\nexport interface IColorFns {\n forStatus: (status: TestStepResultStatus) => IColorFn\n location: IColorFn\n tag: IColorFn\n diffAdded: IColorFn\n diffRemoved: IColorFn\n errorMessage: IColorFn\n errorStack: IColorFn\n}\n\nexport default function getColorFns(enabled: boolean): IColorFns {\n if (enabled) {\n return {\n forStatus(status: TestStepResultStatus) {\n return {\n AMBIGUOUS: colors.red.bind(colors),\n FAILED: colors.red.bind(colors),\n PASSED: colors.green.bind(colors),\n PENDING: colors.yellow.bind(colors),\n SKIPPED: colors.cyan.bind(colors),\n UNDEFINED: colors.yellow.bind(colors),\n UNKNOWN: colors.yellow.bind(colors),\n }[status]\n },\n location: colors.gray.bind(colors),\n tag: colors.cyan.bind(colors),\n diffAdded: colors.green.bind(colors),\n diffRemoved: colors.red.bind(colors),\n errorMessage: colors.red.bind(colors),\n errorStack: colors.grey.bind(colors),\n }\n } else {\n return {\n forStatus(status: TestStepResultStatus) {\n return (x) => x\n },\n location: (x) => x,\n tag: (x) => x,\n diffAdded: (x) => x,\n diffRemoved: (x) => x,\n errorMessage: (x) => x,\n errorStack: (x) => x,\n }\n }\n}\n"]}
@@ -1,32 +1,29 @@
1
1
  /// <reference types="node" />
2
- import { Dictionary } from 'lodash';
3
- import { messages } from '@cucumber/messages';
2
+ import * as messages from '@cucumber/messages';
4
3
  import { EventEmitter } from 'events';
5
- import { Query } from '@cucumber/query';
6
4
  export interface ITestCaseAttempt {
7
5
  attempt: number;
8
- gherkinDocument: messages.IGherkinDocument;
9
- pickle: messages.IPickle;
10
- stepAttachments: Dictionary<messages.IAttachment[]>;
11
- stepResults: Dictionary<messages.TestStepFinished.ITestStepResult>;
12
- testCase: messages.ITestCase;
13
- worstTestStepResult: messages.TestStepFinished.ITestStepResult;
6
+ gherkinDocument: messages.GherkinDocument;
7
+ pickle: messages.Pickle;
8
+ stepAttachments: Record<string, messages.Attachment[]>;
9
+ stepResults: Record<string, messages.TestStepResult>;
10
+ testCase: messages.TestCase;
11
+ worstTestStepResult: messages.TestStepResult;
14
12
  }
15
13
  export default class EventDataCollector {
16
14
  private gherkinDocumentMap;
17
15
  private pickleMap;
18
16
  private testCaseMap;
19
17
  private testCaseAttemptDataMap;
20
- readonly undefinedParameterTypes: messages.IUndefinedParameterType[];
21
- readonly query: Query;
18
+ readonly undefinedParameterTypes: messages.UndefinedParameterType[];
22
19
  constructor(eventBroadcaster: EventEmitter);
23
- getGherkinDocument(uri: string): messages.IGherkinDocument;
24
- getPickle(pickleId: string): messages.IPickle;
20
+ getGherkinDocument(uri: string): messages.GherkinDocument;
21
+ getPickle(pickleId: string): messages.Pickle;
25
22
  getTestCaseAttempts(): ITestCaseAttempt[];
26
23
  getTestCaseAttempt(testCaseStartedId: string): ITestCaseAttempt;
27
24
  parseEnvelope(envelope: messages.Envelope): void;
28
- initTestCaseAttempt(testCaseStarted: messages.ITestCaseStarted): void;
29
- storeAttachment({ testCaseStartedId, testStepId, body, mediaType, }: messages.IAttachment): void;
30
- storeTestStepResult({ testCaseStartedId, testStepId, testStepResult, }: messages.ITestStepFinished): void;
31
- storeTestCaseResult({ testCaseStartedId }: messages.ITestCaseFinished): void;
25
+ private initTestCaseAttempt;
26
+ storeAttachment(attachment: messages.Attachment): void;
27
+ storeTestStepResult({ testCaseStartedId, testStepId, testStepResult, }: messages.TestStepFinished): void;
28
+ storeTestCaseResult({ testCaseStartedId }: messages.TestCaseFinished): void;
32
29
  }
@@ -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"]}