@cucumber/query 13.2.0 → 13.4.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.
package/.mocharc.json CHANGED
@@ -2,5 +2,6 @@
2
2
  "require": ["ts-node/register", "source-map-support/register"],
3
3
  "extension": ["ts", "tsx"],
4
4
  "recursive": true,
5
+ "spec": ["src/**/*.spec.*"],
5
6
  "timeout": 10000
6
7
  }
@@ -0,0 +1,6 @@
1
+ {
2
+ "trailingComma": "es5",
3
+ "semi": false,
4
+ "singleQuote": true,
5
+ "printWidth": 100
6
+ }
@@ -1,6 +1,6 @@
1
1
  import * as messages from '@cucumber/messages';
2
- import { Attachment, Duration, Feature, Hook, Meta, Pickle, PickleStep, Step, TestCase, TestCaseFinished, TestCaseStarted, TestRunFinished, TestRunStarted, TestStep, TestStepFinished, TestStepResult, TestStepResultStatus } from '@cucumber/messages';
3
- import { NamingStrategy } from "./Lineage";
2
+ import { Attachment, Duration, Feature, Hook, Location, Meta, Pickle, PickleStep, Step, TestCase, TestCaseFinished, TestCaseStarted, TestRunFinished, TestRunStarted, TestStep, TestStepFinished, TestStepResult, TestStepResultStatus, TestStepStarted } from '@cucumber/messages';
3
+ import { Lineage, NamingStrategy } from './Lineage';
4
4
  export default class Query {
5
5
  private readonly testStepResultByPickleId;
6
6
  private readonly testStepResultsByPickleStepId;
@@ -15,7 +15,7 @@ export default class Query {
15
15
  private meta;
16
16
  private testRunStarted;
17
17
  private testRunFinished;
18
- private readonly testCaseStarted;
18
+ private readonly testCaseStartedById;
19
19
  private readonly lineageById;
20
20
  private readonly stepById;
21
21
  private readonly pickleById;
@@ -23,6 +23,7 @@ export default class Query {
23
23
  private readonly testCaseById;
24
24
  private readonly testStepById;
25
25
  private readonly testCaseFinishedByTestCaseStartedId;
26
+ private readonly testStepStartedByTestCaseStartedId;
26
27
  private readonly testStepFinishedByTestCaseStartedId;
27
28
  private readonly attachmentsByTestCaseStartedId;
28
29
  update(envelope: messages.Envelope): void;
@@ -34,6 +35,7 @@ export default class Query {
34
35
  private updatePickle;
35
36
  private updateTestCase;
36
37
  private updateTestCaseStarted;
38
+ private updateTestStepStarted;
37
39
  private updateAttachment;
38
40
  private updateTestStepFinished;
39
41
  private updateTestCaseFinished;
@@ -77,18 +79,21 @@ export default class Query {
77
79
  findMeta(): Meta | undefined;
78
80
  findMostSevereTestStepResultBy(testCaseStarted: TestCaseStarted): TestStepResult | undefined;
79
81
  findNameOf(pickle: Pickle, namingStrategy: NamingStrategy): string;
80
- findPickleBy(testCaseStarted: TestCaseStarted): Pickle | undefined;
82
+ findLocationOf(pickle: Pickle): Location | undefined;
83
+ findPickleBy(element: TestCaseStarted | TestStepStarted): Pickle | undefined;
81
84
  findPickleStepBy(testStep: TestStep): PickleStep | undefined;
82
85
  findStepBy(pickleStep: PickleStep): Step | undefined;
83
- findTestCaseBy(testCaseStarted: TestCaseStarted): TestCase | undefined;
86
+ findTestCaseBy(element: TestCaseStarted | TestStepStarted): TestCase | undefined;
84
87
  findTestCaseDurationBy(testCaseStarted: TestCaseStarted): Duration | undefined;
88
+ findTestCaseStartedBy(testStepStarted: TestStepStarted): TestCaseStarted | undefined;
85
89
  findTestCaseFinishedBy(testCaseStarted: TestCaseStarted): TestCaseFinished | undefined;
86
90
  findTestRunDuration(): Duration | undefined;
87
91
  findTestRunFinished(): TestRunFinished | undefined;
88
92
  findTestRunStarted(): TestRunStarted | undefined;
89
- findTestStepBy(testStepFinished: TestStepFinished): TestStep | undefined;
93
+ findTestStepBy(element: TestStepStarted | TestStepFinished): TestStep | undefined;
94
+ findTestStepsStartedBy(testCaseStarted: TestCaseStarted): ReadonlyArray<TestStepStarted>;
90
95
  findTestStepsFinishedBy(testCaseStarted: TestCaseStarted): ReadonlyArray<TestStepFinished>;
91
96
  findTestStepFinishedAndTestStepBy(testCaseStarted: TestCaseStarted): ReadonlyArray<[TestStepFinished, TestStep]>;
92
- private findLineageBy;
97
+ findLineageBy(element: Pickle | TestCaseStarted): Lineage | undefined;
93
98
  }
94
99
  //# sourceMappingURL=Query.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Query.d.ts","sourceRoot":"","sources":["../../src/Query.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,QAAQ,MAAM,oBAAoB,CAAA;AAC9C,OAAO,EACL,UAAU,EACV,QAAQ,EACR,OAAO,EAGP,IAAI,EACJ,IAAI,EACJ,MAAM,EACN,UAAU,EAGV,IAAI,EACJ,QAAQ,EACR,gBAAgB,EAChB,eAAe,EACf,eAAe,EACf,cAAc,EACd,QAAQ,EACR,gBAAgB,EAChB,cAAc,EACd,oBAAoB,EAErB,MAAM,oBAAoB,CAAA;AAE3B,OAAO,EAAU,cAAc,EAAC,MAAM,WAAW,CAAC;AAGlD,MAAM,CAAC,OAAO,OAAO,KAAK;IACxB,OAAO,CAAC,QAAQ,CAAC,wBAAwB,CAAuD;IAChG,OAAO,CAAC,QAAQ,CAAC,6BAA6B,CAG3C;IACH,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAuC;IAC1E,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAA4B;IACjE,OAAO,CAAC,QAAQ,CAAC,wBAAwB,CAA4B;IACrE,OAAO,CAAC,QAAQ,CAAC,2BAA2B,CAGzC;IACH,OAAO,CAAC,QAAQ,CAAC,yBAAyB,CAAsC;IAChF,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAmC;IAC7D,OAAO,CAAC,QAAQ,CAAC,uBAAuB,CAAmD;IAC3F,OAAO,CAAC,QAAQ,CAAC,qCAAqC,CAGnD;IAEH,OAAO,CAAC,IAAI,CAAM;IAClB,OAAO,CAAC,cAAc,CAAgB;IACtC,OAAO,CAAC,eAAe,CAAiB;IACxC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAA6B;IAC7D,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAkC;IAC9D,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA+B;IACxD,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAiC;IAC5D,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAqC;IACpE,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAmC;IAChE,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAmC;IAChE,OAAO,CAAC,QAAQ,CAAC,mCAAmC,CAA2C;IAC/F,OAAO,CAAC,QAAQ,CAAC,mCAAmC,CAC7B;IACvB,OAAO,CAAC,QAAQ,CAAC,8BAA8B,CACxB;IAEhB,MAAM,CAAC,QAAQ,EAAE,QAAQ,CAAC,QAAQ;IAoCzC,OAAO,CAAC,qBAAqB;IAQ7B,OAAO,CAAC,aAAa;IAoBrB,OAAO,CAAC,UAAU;IAclB,OAAO,CAAC,cAAc;IA0BtB,OAAO,CAAC,WAAW;IAInB,OAAO,CAAC,YAAY;IAKpB,OAAO,CAAC,cAAc;IAgBtB,OAAO,CAAC,qBAAqB;IAiB7B,OAAO,CAAC,gBAAgB;IASxB,OAAO,CAAC,sBAAsB;IAgB9B,OAAO,CAAC,sBAAsB;IAO9B;;;OAGG;IACI,4BAA4B,CACjC,aAAa,EAAE,SAAS,MAAM,EAAE,GAC/B,SAAS,QAAQ,CAAC,cAAc,EAAE;IAcrC;;;OAGG;IACI,wBAAwB,CAC7B,SAAS,EAAE,SAAS,MAAM,EAAE,GAC3B,SAAS,QAAQ,CAAC,cAAc,EAAE;IAcrC;;;OAGG;IACI,wBAAwB,CAC7B,aAAa,EAAE,SAAS,MAAM,EAAE,GAC/B,SAAS,QAAQ,CAAC,UAAU,EAAE;IAQ1B,uBAAuB,CAAC,WAAW,EAAE,SAAS,MAAM,EAAE,GAAG,SAAS,QAAQ,CAAC,UAAU,EAAE;IAM9F;;;OAGG;IACI,0BAA0B,CAC/B,YAAY,EAAE,MAAM,GACnB,SAAS,QAAQ,CAAC,sBAAsB,EAAE,GAAG,SAAS;IAIlD,OAAO,CAAC,MAAM,EAAE,MAAM,GAAG,QAAQ,CAAC,IAAI;IAItC,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,QAAQ,CAAC,QAAQ,EAAE;IAWlE,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,QAAQ,CAAC,QAAQ,EAAE;IAWxE,OAAO,CAAC,iBAAiB;IAsBlB,kBAAkB,CAAC,UAAU,EAAE,MAAM,GAAG,QAAQ,CAAC,cAAc,EAAE;IAIjE,eAAe,CACpB,SAAS,EAAE,SAAS,MAAM,EAAE,GAC3B,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,oBAAoB,EAAE,MAAM,CAAC,CAAC;IAYlD,mCAAmC,IAAI,MAAM,CAAC,oBAAoB,EAAE,MAAM,CAAC;IAsB3E,qBAAqB,IAAI,MAAM;IAI/B,cAAc,IAAI,aAAa,CAAC,MAAM,CAAC;IAKvC,kBAAkB,IAAI,aAAa,CAAC,UAAU,CAAC;IAK/C,sBAAsB,IAAI,aAAa,CAAC,eAAe,CAAC;IAQxD,sCAAsC,IAAI,GAAG,CAAC,OAAO,GAAG,SAAS,EAAE,aAAa,CAAC,eAAe,CAAC,CAAC;IAWlG,gBAAgB,IAAI,aAAa,CAAC,QAAQ,CAAC;IAK3C,iBAAiB,CAAC,gBAAgB,EAAE,gBAAgB,GAAG,aAAa,CAAC,UAAU,CAAC;IAKhF,aAAa,CAAC,eAAe,EAAE,eAAe,GAAG,OAAO,GAAG,SAAS;IAIpE,UAAU,CAAC,QAAQ,EAAE,QAAQ,GAAG,IAAI,GAAG,SAAS;IAOhD,QAAQ,IAAI,IAAI,GAAG,SAAS;IAI5B,8BAA8B,CAAC,eAAe,EAAE,eAAe,GAAG,cAAc,GAAG,SAAS;IAO5F,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,cAAc,EAAE,cAAc,GAAG,MAAM;IAKlE,YAAY,CAAC,eAAe,EAAE,eAAe,GAAG,MAAM,GAAG,SAAS;IAMlE,gBAAgB,CAAC,QAAQ,EAAE,QAAQ,GAAG,UAAU,GAAG,SAAS;IAO5D,UAAU,CAAC,UAAU,EAAE,UAAU,GAAG,IAAI,GAAG,SAAS;IAMpD,cAAc,CAAC,eAAe,EAAE,eAAe,GAAG,QAAQ,GAAG,SAAS;IAItE,sBAAsB,CAAC,eAAe,EAAE,eAAe,GAAG,QAAQ,GAAG,SAAS;IAW9E,sBAAsB,CAAC,eAAe,EAAE,eAAe,GAAG,gBAAgB,GAAG,SAAS;IAItF,mBAAmB,IAAI,QAAQ,GAAG,SAAS;IAU3C,mBAAmB,IAAI,eAAe,GAAG,SAAS;IAIlD,kBAAkB,IAAI,cAAc,GAAG,SAAS;IAIhD,cAAc,CAAC,gBAAgB,EAAE,gBAAgB,GAAG,QAAQ,GAAG,SAAS;IAIxE,uBAAuB,CAAC,eAAe,EAAE,eAAe,GAAG,aAAa,CAAC,gBAAgB,CAAC;IAK1F,iCAAiC,CACpC,eAAe,EAAE,eAAe,GACjC,aAAa,CAAC,CAAC,gBAAgB,EAAE,QAAQ,CAAC,CAAC;IAU9C,OAAO,CAAC,aAAa;CAMtB"}
1
+ {"version":3,"file":"Query.d.ts","sourceRoot":"","sources":["../../src/Query.ts"],"names":[],"mappings":"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"}
package/dist/src/Query.js CHANGED
@@ -32,10 +32,14 @@ var __importStar = (this && this.__importStar) || (function () {
32
32
  return result;
33
33
  };
34
34
  })();
35
+ var __importDefault = (this && this.__importDefault) || function (mod) {
36
+ return (mod && mod.__esModule) ? mod : { "default": mod };
37
+ };
35
38
  Object.defineProperty(exports, "__esModule", { value: true });
36
39
  const messages = __importStar(require("@cucumber/messages"));
37
40
  const messages_1 = require("@cucumber/messages");
38
41
  const multimaps_1 = require("@teppeis/multimaps");
42
+ const lodash_sortby_1 = __importDefault(require("lodash.sortby"));
39
43
  const helpers_1 = require("./helpers");
40
44
  class Query {
41
45
  constructor() {
@@ -49,7 +53,7 @@ class Query {
49
53
  this.hooksById = new Map();
50
54
  this.attachmentsByTestStepId = new multimaps_1.ArrayMultimap();
51
55
  this.stepMatchArgumentsListsByPickleStepId = new Map();
52
- this.testCaseStarted = [];
56
+ this.testCaseStartedById = new Map();
53
57
  this.lineageById = new Map();
54
58
  this.stepById = new Map();
55
59
  this.pickleById = new Map();
@@ -57,6 +61,7 @@ class Query {
57
61
  this.testCaseById = new Map();
58
62
  this.testStepById = new Map();
59
63
  this.testCaseFinishedByTestCaseStartedId = new Map();
64
+ this.testStepStartedByTestCaseStartedId = new multimaps_1.ArrayMultimap();
60
65
  this.testStepFinishedByTestCaseStartedId = new multimaps_1.ArrayMultimap();
61
66
  this.attachmentsByTestCaseStartedId = new multimaps_1.ArrayMultimap();
62
67
  }
@@ -82,6 +87,9 @@ class Query {
82
87
  if (envelope.testCaseStarted) {
83
88
  this.updateTestCaseStarted(envelope.testCaseStarted);
84
89
  }
90
+ if (envelope.testStepStarted) {
91
+ this.updateTestStepStarted(envelope.testStepStarted);
92
+ }
85
93
  if (envelope.attachment) {
86
94
  this.updateAttachment(envelope.attachment);
87
95
  }
@@ -160,20 +168,25 @@ class Query {
160
168
  });
161
169
  }
162
170
  updateTestCaseStarted(testCaseStarted) {
163
- this.testCaseStarted.push(testCaseStarted);
171
+ this.testCaseStartedById.set(testCaseStarted.id, testCaseStarted);
164
172
  /*
165
173
  when a test case attempt starts besides the first one, clear all existing results
166
174
  and attachments for that test case, so we always report on the latest attempt
167
175
  (applies to legacy pickle-oriented query methods only)
168
176
  */
169
177
  const testCase = this.testCaseById.get(testCaseStarted.testCaseId);
170
- this.testStepResultByPickleId.delete(testCase.pickleId);
171
- for (const testStep of testCase.testSteps) {
172
- this.testStepResultsByPickleStepId.delete(testStep.pickleStepId);
173
- this.testStepResultsbyTestStepId.delete(testStep.id);
174
- this.attachmentsByTestStepId.delete(testStep.id);
178
+ if (testCase) {
179
+ this.testStepResultByPickleId.delete(testCase.pickleId);
180
+ for (const testStep of testCase.testSteps) {
181
+ this.testStepResultsByPickleStepId.delete(testStep.pickleStepId);
182
+ this.testStepResultsbyTestStepId.delete(testStep.id);
183
+ this.attachmentsByTestStepId.delete(testStep.id);
184
+ }
175
185
  }
176
186
  }
187
+ updateTestStepStarted(testStepStarted) {
188
+ this.testStepStartedByTestCaseStartedId.put(testStepStarted.testCaseStartedId, testStepStarted);
189
+ }
177
190
  updateAttachment(attachment) {
178
191
  if (attachment.testStepId) {
179
192
  this.attachmentsByTestStepId.put(attachment.testStepId, attachment);
@@ -269,7 +282,12 @@ class Query {
269
282
  let pickleStepFound = false;
270
283
  for (const step of testCase.testSteps) {
271
284
  if (step.hookId) {
272
- pickleStepFound ? onAfterHookFound(step) : onBeforeHookFound(step);
285
+ if (pickleStepFound) {
286
+ onAfterHookFound(step);
287
+ }
288
+ else {
289
+ onBeforeHookFound(step);
290
+ }
273
291
  }
274
292
  else {
275
293
  pickleStepFound = true;
@@ -300,10 +318,7 @@ class Query {
300
318
  [messages_1.TestStepResultStatus.UNKNOWN]: 0,
301
319
  };
302
320
  for (const testCaseStarted of this.findAllTestCaseStarted()) {
303
- const mostSevereResult = this.findTestStepFinishedAndTestStepBy(testCaseStarted)
304
- .map(([testStepFinished]) => testStepFinished.testStepResult)
305
- .sort(helpers_1.comparatorByStatus)
306
- .at(-1);
321
+ const mostSevereResult = (0, lodash_sortby_1.default)(this.findTestStepFinishedAndTestStepBy(testCaseStarted).map(([testStepFinished]) => testStepFinished.testStepResult), [(testStepResult) => (0, helpers_1.statusOrdinal)(testStepResult.status)]).at(-1);
307
322
  if (mostSevereResult) {
308
323
  result[mostSevereResult.status]++;
309
324
  }
@@ -315,37 +330,38 @@ class Query {
315
330
  }
316
331
  findAllPickles() {
317
332
  const pickles = [...this.pickleById.values()];
318
- return pickles.sort(helpers_1.comparatorById);
333
+ return (0, lodash_sortby_1.default)(pickles, ['id']);
319
334
  }
320
335
  findAllPickleSteps() {
321
336
  const pickleSteps = [...this.pickleStepById.values()];
322
- return pickleSteps.sort(helpers_1.comparatorById);
337
+ return (0, lodash_sortby_1.default)(pickleSteps, ['id']);
323
338
  }
324
339
  findAllTestCaseStarted() {
325
- return this.testCaseStarted.filter((testCaseStarted) => {
340
+ return (0, lodash_sortby_1.default)([...this.testCaseStartedById.values()].filter((testCaseStarted) => {
326
341
  const testCaseFinished = this.testCaseFinishedByTestCaseStartedId.get(testCaseStarted.id);
327
342
  // only include if not yet finished OR won't be retried
328
343
  return !(testCaseFinished === null || testCaseFinished === void 0 ? void 0 : testCaseFinished.willBeRetried);
329
- });
344
+ }), [
345
+ (testCaseStarted) => messages_1.TimeConversion.timestampToMillisecondsSinceEpoch(testCaseStarted.timestamp),
346
+ 'id',
347
+ ]);
330
348
  }
331
349
  findAllTestCaseStartedGroupedByFeature() {
332
350
  const results = new Map();
333
- this.findAllTestCaseStarted()
334
- .map(testCaseStarted => [this.findLineageBy(testCaseStarted), testCaseStarted])
335
- .sort(([a], [b]) => (0, helpers_1.comparatorBy)(a.gherkinDocument, b.gherkinDocument, "uri"))
336
- .forEach(([{ feature }, testCaseStarted]) => {
351
+ (0, lodash_sortby_1.default)(this.findAllTestCaseStarted().map((testCaseStarted) => [this.findLineageBy(testCaseStarted), testCaseStarted]), [([lineage]) => lineage.gherkinDocument.uri]).forEach(([{ feature }, testCaseStarted]) => {
337
352
  var _a;
338
- results.set(feature, [...(_a = results.get(feature)) !== null && _a !== void 0 ? _a : [], testCaseStarted]);
353
+ results.set(feature, [...((_a = results.get(feature)) !== null && _a !== void 0 ? _a : []), testCaseStarted]);
339
354
  });
340
355
  return results;
341
356
  }
342
357
  findAllTestSteps() {
343
358
  const testSteps = [...this.testStepById.values()];
344
- return testSteps.sort(helpers_1.comparatorById);
359
+ return (0, lodash_sortby_1.default)(testSteps, ['id']);
345
360
  }
346
361
  findAttachmentsBy(testStepFinished) {
347
- return this.attachmentsByTestCaseStartedId.get(testStepFinished.testCaseStartedId)
348
- .filter(attachment => attachment.testStepId === testStepFinished.testStepId);
362
+ return this.attachmentsByTestCaseStartedId
363
+ .get(testStepFinished.testCaseStartedId)
364
+ .filter((attachment) => attachment.testStepId === testStepFinished.testStepId);
349
365
  }
350
366
  findFeatureBy(testCaseStarted) {
351
367
  var _a;
@@ -361,17 +377,22 @@ class Query {
361
377
  return this.meta;
362
378
  }
363
379
  findMostSevereTestStepResultBy(testCaseStarted) {
364
- return this.findTestStepFinishedAndTestStepBy(testCaseStarted)
365
- .map(([testStepFinished]) => testStepFinished.testStepResult)
366
- .sort(helpers_1.comparatorByStatus)
367
- .at(-1);
380
+ return (0, lodash_sortby_1.default)(this.findTestStepFinishedAndTestStepBy(testCaseStarted).map(([testStepFinished]) => testStepFinished.testStepResult), [(testStepResult) => (0, helpers_1.statusOrdinal)(testStepResult.status)]).at(-1);
368
381
  }
369
382
  findNameOf(pickle, namingStrategy) {
370
383
  const lineage = this.findLineageBy(pickle);
371
384
  return lineage ? namingStrategy.reduce(lineage, pickle) : pickle.name;
372
385
  }
373
- findPickleBy(testCaseStarted) {
374
- const testCase = this.findTestCaseBy(testCaseStarted);
386
+ findLocationOf(pickle) {
387
+ var _a;
388
+ const lineage = this.findLineageBy(pickle);
389
+ if (lineage === null || lineage === void 0 ? void 0 : lineage.example) {
390
+ return lineage.example.location;
391
+ }
392
+ return (_a = lineage === null || lineage === void 0 ? void 0 : lineage.scenario) === null || _a === void 0 ? void 0 : _a.location;
393
+ }
394
+ findPickleBy(element) {
395
+ const testCase = this.findTestCaseBy(element);
375
396
  helpers_1.assert.ok(testCase, 'Expected to find TestCase from TestCaseStarted');
376
397
  return this.pickleById.get(testCase.pickleId);
377
398
  }
@@ -386,7 +407,9 @@ class Query {
386
407
  helpers_1.assert.ok(astNodeId, 'Expected PickleStep to have an astNodeId');
387
408
  return this.stepById.get(astNodeId);
388
409
  }
389
- findTestCaseBy(testCaseStarted) {
410
+ findTestCaseBy(element) {
411
+ const testCaseStarted = 'testCaseStartedId' in element ? this.findTestCaseStartedBy(element) : element;
412
+ helpers_1.assert.ok(testCaseStarted, 'Expected to find TestCaseStarted by TestStepStarted');
390
413
  return this.testCaseById.get(testCaseStarted.testCaseId);
391
414
  }
392
415
  findTestCaseDurationBy(testCaseStarted) {
@@ -397,6 +420,9 @@ class Query {
397
420
  return messages_1.TimeConversion.millisecondsToDuration(messages_1.TimeConversion.timestampToMillisecondsSinceEpoch(testCaseFinished.timestamp) -
398
421
  messages_1.TimeConversion.timestampToMillisecondsSinceEpoch(testCaseStarted.timestamp));
399
422
  }
423
+ findTestCaseStartedBy(testStepStarted) {
424
+ return this.testCaseStartedById.get(testStepStarted.testCaseStartedId);
425
+ }
400
426
  findTestCaseFinishedBy(testCaseStarted) {
401
427
  return this.testCaseFinishedByTestCaseStartedId.get(testCaseStarted.id);
402
428
  }
@@ -413,8 +439,12 @@ class Query {
413
439
  findTestRunStarted() {
414
440
  return this.testRunStarted;
415
441
  }
416
- findTestStepBy(testStepFinished) {
417
- return this.testStepById.get(testStepFinished.testStepId);
442
+ findTestStepBy(element) {
443
+ return this.testStepById.get(element.testStepId);
444
+ }
445
+ findTestStepsStartedBy(testCaseStarted) {
446
+ // multimaps `get` implements `getOrDefault([])` behaviour internally
447
+ return [...this.testStepStartedByTestCaseStartedId.get(testCaseStarted.id)];
418
448
  }
419
449
  findTestStepsFinishedBy(testCaseStarted) {
420
450
  // multimaps `get` implements `getOrDefault([])` behaviour internally
@@ -430,7 +460,7 @@ class Query {
430
460
  });
431
461
  }
432
462
  findLineageBy(element) {
433
- const pickle = "testCaseId" in element ? this.findPickleBy(element) : element;
463
+ const pickle = 'testCaseId' in element ? this.findPickleBy(element) : element;
434
464
  const deepestAstNodeId = pickle.astNodeIds.at(-1);
435
465
  helpers_1.assert.ok(deepestAstNodeId, 'Expected Pickle to have at least one astNodeId');
436
466
  return this.lineageById.get(deepestAstNodeId);
@@ -1 +1 @@
1
- {"version":3,"file":"Query.js","sourceRoot":"","sources":["../../src/Query.ts"],"names":[],"mappings":"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","sourcesContent":["import * as messages from '@cucumber/messages'\nimport {\n Attachment,\n Duration,\n Feature,\n getWorstTestStepResult,\n GherkinDocument,\n Hook,\n Meta,\n Pickle,\n PickleStep,\n Rule,\n Scenario,\n Step,\n TestCase,\n TestCaseFinished,\n TestCaseStarted,\n TestRunFinished,\n TestRunStarted,\n TestStep,\n TestStepFinished,\n TestStepResult,\n TestStepResultStatus,\n TimeConversion,\n} from '@cucumber/messages'\nimport {ArrayMultimap} from '@teppeis/multimaps'\nimport {Lineage, NamingStrategy} from \"./Lineage\";\nimport { comparatorBy, comparatorById, comparatorByStatus, assert } from './helpers'\n\nexport default class Query {\n private readonly testStepResultByPickleId = new ArrayMultimap<string, messages.TestStepResult>()\n private readonly testStepResultsByPickleStepId = new ArrayMultimap<\n string,\n messages.TestStepResult\n >()\n private readonly testCaseByPickleId = new Map<string, messages.TestCase>()\n private readonly pickleIdByTestStepId = new Map<string, string>()\n private readonly pickleStepIdByTestStepId = new Map<string, string>()\n private readonly testStepResultsbyTestStepId = new ArrayMultimap<\n string,\n messages.TestStepResult\n >()\n private readonly testStepIdsByPickleStepId = new ArrayMultimap<string, string>()\n private readonly hooksById = new Map<string, messages.Hook>()\n private readonly attachmentsByTestStepId = new ArrayMultimap<string, messages.Attachment>()\n private readonly stepMatchArgumentsListsByPickleStepId = new Map<\n string,\n readonly messages.StepMatchArgumentsList[]\n >()\n\n private meta: Meta\n private testRunStarted: TestRunStarted\n private testRunFinished: TestRunFinished\n private readonly testCaseStarted: Array<TestCaseStarted> = []\n private readonly lineageById: Map<string, Lineage> = new Map()\n private readonly stepById: Map<string, Step> = new Map()\n private readonly pickleById: Map<string, Pickle> = new Map()\n private readonly pickleStepById: Map<string, PickleStep> = new Map()\n private readonly testCaseById: Map<string, TestCase> = new Map()\n private readonly testStepById: Map<string, TestStep> = new Map()\n private readonly testCaseFinishedByTestCaseStartedId: Map<string, TestCaseFinished> = new Map()\n private readonly testStepFinishedByTestCaseStartedId: ArrayMultimap<string, TestStepFinished> =\n new ArrayMultimap()\n private readonly attachmentsByTestCaseStartedId: ArrayMultimap<string, Attachment> =\n new ArrayMultimap()\n\n public update(envelope: messages.Envelope) {\n if (envelope.meta) {\n this.meta = envelope.meta\n }\n if (envelope.gherkinDocument) {\n this.updateGherkinDocument(envelope.gherkinDocument)\n }\n if (envelope.pickle) {\n this.updatePickle(envelope.pickle)\n }\n if (envelope.hook) {\n this.hooksById.set(envelope.hook.id, envelope.hook)\n }\n if (envelope.testRunStarted) {\n this.testRunStarted = envelope.testRunStarted\n }\n if (envelope.testCase) {\n this.updateTestCase(envelope.testCase)\n }\n if (envelope.testCaseStarted) {\n this.updateTestCaseStarted(envelope.testCaseStarted)\n }\n if (envelope.attachment) {\n this.updateAttachment(envelope.attachment)\n }\n if (envelope.testStepFinished) {\n this.updateTestStepFinished(envelope.testStepFinished)\n }\n if (envelope.testCaseFinished) {\n this.updateTestCaseFinished(envelope.testCaseFinished)\n }\n if (envelope.testRunFinished) {\n this.testRunFinished = envelope.testRunFinished\n }\n }\n\n private updateGherkinDocument(gherkinDocument: GherkinDocument) {\n if (gherkinDocument.feature) {\n this.updateFeature(gherkinDocument.feature, {\n gherkinDocument,\n })\n }\n }\n\n private updateFeature(feature: Feature, lineage: Lineage) {\n feature.children.forEach((featureChild) => {\n if (featureChild.background) {\n this.updateSteps(featureChild.background.steps)\n }\n if (featureChild.scenario) {\n this.updateScenario(featureChild.scenario, {\n ...lineage,\n feature,\n })\n }\n if (featureChild.rule) {\n this.updateRule(featureChild.rule, {\n ...lineage,\n feature,\n })\n }\n })\n }\n\n private updateRule(rule: Rule, lineage: Lineage) {\n rule.children.forEach((ruleChild) => {\n if (ruleChild.background) {\n this.updateSteps(ruleChild.background.steps)\n }\n if (ruleChild.scenario) {\n this.updateScenario(ruleChild.scenario, {\n ...lineage,\n rule,\n })\n }\n })\n }\n\n private updateScenario(scenario: Scenario, lineage: Lineage) {\n this.lineageById.set(scenario.id, {\n ...lineage,\n scenario,\n })\n scenario.examples.forEach((examples, examplesIndex) => {\n this.lineageById.set(examples.id, {\n ...lineage,\n scenario,\n examples,\n examplesIndex,\n })\n examples.tableBody.forEach((example, exampleIndex) => {\n this.lineageById.set(example.id, {\n ...lineage,\n scenario,\n examples,\n examplesIndex,\n example,\n exampleIndex,\n })\n })\n })\n this.updateSteps(scenario.steps)\n }\n\n private updateSteps(steps: ReadonlyArray<Step>) {\n steps.forEach((step) => this.stepById.set(step.id, step))\n }\n\n private updatePickle(pickle: Pickle) {\n this.pickleById.set(pickle.id, pickle)\n pickle.steps.forEach((pickleStep) => this.pickleStepById.set(pickleStep.id, pickleStep))\n }\n\n private updateTestCase(testCase: TestCase) {\n this.testCaseById.set(testCase.id, testCase)\n\n this.testCaseByPickleId.set(testCase.pickleId, testCase)\n testCase.testSteps.forEach((testStep) => {\n this.testStepById.set(testStep.id, testStep)\n this.pickleIdByTestStepId.set(testStep.id, testCase.pickleId)\n this.pickleStepIdByTestStepId.set(testStep.id, testStep.pickleStepId)\n this.testStepIdsByPickleStepId.put(testStep.pickleStepId, testStep.id)\n this.stepMatchArgumentsListsByPickleStepId.set(\n testStep.pickleStepId,\n testStep.stepMatchArgumentsLists\n )\n })\n }\n\n private updateTestCaseStarted(testCaseStarted: TestCaseStarted) {\n this.testCaseStarted.push(testCaseStarted)\n\n /*\n when a test case attempt starts besides the first one, clear all existing results\n and attachments for that test case, so we always report on the latest attempt\n (applies to legacy pickle-oriented query methods only)\n */\n const testCase = this.testCaseById.get(testCaseStarted.testCaseId)\n this.testStepResultByPickleId.delete(testCase.pickleId)\n for (const testStep of testCase.testSteps) {\n this.testStepResultsByPickleStepId.delete(testStep.pickleStepId)\n this.testStepResultsbyTestStepId.delete(testStep.id)\n this.attachmentsByTestStepId.delete(testStep.id)\n }\n }\n\n private updateAttachment(attachment: Attachment) {\n if (attachment.testStepId) {\n this.attachmentsByTestStepId.put(attachment.testStepId, attachment)\n }\n if (attachment.testCaseStartedId) {\n this.attachmentsByTestCaseStartedId.put(attachment.testCaseStartedId, attachment)\n }\n }\n\n private updateTestStepFinished(testStepFinished: TestStepFinished) {\n this.testStepFinishedByTestCaseStartedId.put(\n testStepFinished.testCaseStartedId,\n testStepFinished\n )\n\n const pickleId = this.pickleIdByTestStepId.get(testStepFinished.testStepId)\n this.testStepResultByPickleId.put(pickleId, testStepFinished.testStepResult)\n const testStep = this.testStepById.get(testStepFinished.testStepId)\n this.testStepResultsByPickleStepId.put(\n testStep.pickleStepId,\n testStepFinished.testStepResult\n )\n this.testStepResultsbyTestStepId.put(testStep.id, testStepFinished.testStepResult)\n }\n\n private updateTestCaseFinished(testCaseFinished: TestCaseFinished) {\n this.testCaseFinishedByTestCaseStartedId.set(\n testCaseFinished.testCaseStartedId,\n testCaseFinished\n )\n }\n\n /**\n * Gets all the results for multiple pickle steps\n * @param pickleStepIds\n */\n public getPickleStepTestStepResults(\n pickleStepIds: readonly string[]\n ): readonly messages.TestStepResult[] {\n if (pickleStepIds.length === 0) {\n return [\n {\n status: messages.TestStepResultStatus.UNKNOWN,\n duration: messages.TimeConversion.millisecondsToDuration(0),\n },\n ]\n }\n return pickleStepIds.reduce((testStepResults: messages.TestStepResult[], pickleId) => {\n return testStepResults.concat(this.testStepResultsByPickleStepId.get(pickleId))\n }, [])\n }\n\n /**\n * Gets all the results for multiple pickles\n * @param pickleIds\n */\n public getPickleTestStepResults(\n pickleIds: readonly string[]\n ): readonly messages.TestStepResult[] {\n if (pickleIds.length === 0) {\n return [\n {\n status: messages.TestStepResultStatus.UNKNOWN,\n duration: messages.TimeConversion.millisecondsToDuration(0),\n },\n ]\n }\n return pickleIds.reduce((testStepResults: messages.TestStepResult[], pickleId) => {\n return testStepResults.concat(this.testStepResultByPickleId.get(pickleId))\n }, [])\n }\n\n /**\n * Gets all the attachments for multiple pickle steps\n * @param pickleStepIds\n */\n public getPickleStepAttachments(\n pickleStepIds: readonly string[]\n ): readonly messages.Attachment[] {\n return this.getTestStepsAttachments(\n pickleStepIds.reduce((testStepIds: string[], pickleStepId: string) => {\n return testStepIds.concat(this.testStepIdsByPickleStepId.get(pickleStepId))\n }, [])\n )\n }\n\n public getTestStepsAttachments(testStepIds: readonly string[]): readonly messages.Attachment[] {\n return testStepIds.reduce((attachments: messages.Attachment[], testStepId) => {\n return attachments.concat(this.attachmentsByTestStepId.get(testStepId))\n }, [])\n }\n\n /**\n * Get StepMatchArguments for a pickle step\n * @param pickleStepId\n */\n public getStepMatchArgumentsLists(\n pickleStepId: string\n ): readonly messages.StepMatchArgumentsList[] | undefined {\n return this.stepMatchArgumentsListsByPickleStepId.get(pickleStepId)\n }\n\n public getHook(hookId: string): messages.Hook {\n return this.hooksById.get(hookId)\n }\n\n public getBeforeHookSteps(pickleId: string): readonly messages.TestStep[] {\n const hookSteps: messages.TestStep[] = []\n\n this.identifyHookSteps(\n pickleId,\n (hook) => hookSteps.push(hook),\n () => null\n )\n return hookSteps\n }\n\n public getAfterHookSteps(pickleId: string): readonly messages.TestStep[] {\n const hookSteps: messages.TestStep[] = []\n\n this.identifyHookSteps(\n pickleId,\n () => null,\n (hook) => hookSteps.push(hook)\n )\n return hookSteps\n }\n\n private identifyHookSteps(\n pickleId: string,\n onBeforeHookFound: (hook: messages.TestStep) => void,\n onAfterHookFound: (hook: messages.TestStep) => void\n ): void {\n const testCase = this.testCaseByPickleId.get(pickleId)\n\n if (!testCase) {\n return\n }\n\n let pickleStepFound = false\n\n for (const step of testCase.testSteps) {\n if (step.hookId) {\n pickleStepFound ? onAfterHookFound(step) : onBeforeHookFound(step)\n } else {\n pickleStepFound = true\n }\n }\n }\n\n public getTestStepResults(testStepId: string): messages.TestStepResult[] {\n return this.testStepResultsbyTestStepId.get(testStepId)\n }\n\n public getStatusCounts(\n pickleIds: readonly string[]\n ): Partial<Record<messages.TestStepResultStatus, number>> {\n const result: Partial<Record<messages.TestStepResultStatus, number>> = {}\n for (const pickleId of pickleIds) {\n const testStepResult = getWorstTestStepResult(this.getPickleTestStepResults([pickleId]))\n const count = result[testStepResult.status] || 0\n result[testStepResult.status] = count + 1\n }\n return result\n }\n\n /* new common interface with Java starts here */\n\n public countMostSevereTestStepResultStatus(): Record<TestStepResultStatus, number> {\n const result: Record<TestStepResultStatus, number> = {\n [TestStepResultStatus.AMBIGUOUS]: 0,\n [TestStepResultStatus.FAILED]: 0,\n [TestStepResultStatus.PASSED]: 0,\n [TestStepResultStatus.PENDING]: 0,\n [TestStepResultStatus.SKIPPED]: 0,\n [TestStepResultStatus.UNDEFINED]: 0,\n [TestStepResultStatus.UNKNOWN]: 0,\n }\n for (const testCaseStarted of this.findAllTestCaseStarted()) {\n const mostSevereResult = this.findTestStepFinishedAndTestStepBy(testCaseStarted)\n .map(([testStepFinished]) => testStepFinished.testStepResult)\n .sort(comparatorByStatus)\n .at(-1)\n if (mostSevereResult) {\n result[mostSevereResult.status]++\n }\n }\n return result\n }\n\n public countTestCasesStarted(): number {\n return this.findAllTestCaseStarted().length\n }\n\n public findAllPickles(): ReadonlyArray<Pickle> {\n const pickles = [...this.pickleById.values()]\n return pickles.sort(comparatorById)\n }\n\n public findAllPickleSteps(): ReadonlyArray<PickleStep> {\n const pickleSteps = [...this.pickleStepById.values()]\n return pickleSteps.sort(comparatorById)\n }\n\n public findAllTestCaseStarted(): ReadonlyArray<TestCaseStarted> {\n return this.testCaseStarted.filter((testCaseStarted) => {\n const testCaseFinished = this.testCaseFinishedByTestCaseStartedId.get(testCaseStarted.id)\n // only include if not yet finished OR won't be retried\n return !testCaseFinished?.willBeRetried\n })\n }\n\n public findAllTestCaseStartedGroupedByFeature(): Map<Feature | undefined, ReadonlyArray<TestCaseStarted>> {\n const results = new Map();\n this.findAllTestCaseStarted()\n .map(testCaseStarted => ([this.findLineageBy(testCaseStarted), testCaseStarted] as const))\n .sort(([a], [b]) => comparatorBy(a.gherkinDocument, b.gherkinDocument, \"uri\"))\n .forEach(([{feature}, testCaseStarted]) => {\n results.set(feature, [...results.get(feature) ?? [], testCaseStarted])\n })\n return results\n }\n\n public findAllTestSteps(): ReadonlyArray<TestStep> {\n const testSteps = [...this.testStepById.values()]\n return testSteps.sort(comparatorById)\n }\n\n public findAttachmentsBy(testStepFinished: TestStepFinished): ReadonlyArray<Attachment> {\n return this.attachmentsByTestCaseStartedId.get(testStepFinished.testCaseStartedId)\n .filter(attachment => attachment.testStepId === testStepFinished.testStepId)\n }\n\n public findFeatureBy(testCaseStarted: TestCaseStarted): Feature | undefined {\n return this.findLineageBy(testCaseStarted)?.feature\n }\n\n public findHookBy(testStep: TestStep): Hook | undefined {\n if (!testStep.hookId){\n return undefined\n }\n return this.hooksById.get(testStep.hookId)\n }\n\n public findMeta(): Meta | undefined {\n return this.meta;\n }\n\n public findMostSevereTestStepResultBy(testCaseStarted: TestCaseStarted): TestStepResult | undefined {\n return this.findTestStepFinishedAndTestStepBy(testCaseStarted)\n .map(([testStepFinished]) => testStepFinished.testStepResult)\n .sort(comparatorByStatus)\n .at(-1)\n }\n\n public findNameOf(pickle: Pickle, namingStrategy: NamingStrategy): string {\n const lineage = this.findLineageBy(pickle)\n return lineage ? namingStrategy.reduce(lineage, pickle) : pickle.name\n }\n\n public findPickleBy(testCaseStarted: TestCaseStarted): Pickle | undefined {\n const testCase = this.findTestCaseBy(testCaseStarted)\n assert.ok(testCase, 'Expected to find TestCase from TestCaseStarted')\n return this.pickleById.get(testCase.pickleId)\n }\n\n public findPickleStepBy(testStep: TestStep): PickleStep | undefined {\n if (!testStep.pickleStepId){\n return undefined\n }\n return this.pickleStepById.get(testStep.pickleStepId)\n }\n\n public findStepBy(pickleStep: PickleStep): Step | undefined {\n const [astNodeId] = pickleStep.astNodeIds\n assert.ok(astNodeId, 'Expected PickleStep to have an astNodeId')\n return this.stepById.get(astNodeId)\n }\n\n public findTestCaseBy(testCaseStarted: TestCaseStarted): TestCase | undefined {\n return this.testCaseById.get(testCaseStarted.testCaseId)\n }\n\n public findTestCaseDurationBy(testCaseStarted: TestCaseStarted): Duration | undefined {\n const testCaseFinished = this.findTestCaseFinishedBy(testCaseStarted)\n if (!testCaseFinished) {\n return undefined\n }\n return TimeConversion.millisecondsToDuration(\n TimeConversion.timestampToMillisecondsSinceEpoch(testCaseFinished.timestamp) -\n TimeConversion.timestampToMillisecondsSinceEpoch(testCaseStarted.timestamp)\n )\n }\n\n public findTestCaseFinishedBy(testCaseStarted: TestCaseStarted): TestCaseFinished | undefined {\n return this.testCaseFinishedByTestCaseStartedId.get(testCaseStarted.id)\n }\n\n public findTestRunDuration(): Duration | undefined {\n if (!this.testRunStarted || !this.testRunFinished) {\n return undefined\n }\n return TimeConversion.millisecondsToDuration(\n TimeConversion.timestampToMillisecondsSinceEpoch(this.testRunFinished.timestamp) -\n TimeConversion.timestampToMillisecondsSinceEpoch(this.testRunStarted.timestamp)\n )\n }\n\n public findTestRunFinished(): TestRunFinished | undefined {\n return this.testRunFinished\n }\n\n public findTestRunStarted(): TestRunStarted | undefined {\n return this.testRunStarted\n }\n\n public findTestStepBy(testStepFinished: TestStepFinished): TestStep | undefined {\n return this.testStepById.get(testStepFinished.testStepId)\n }\n\n public findTestStepsFinishedBy(testCaseStarted: TestCaseStarted): ReadonlyArray<TestStepFinished> {\n // multimaps `get` implements `getOrDefault([])` behaviour internally\n return [...this.testStepFinishedByTestCaseStartedId.get(testCaseStarted.id)]\n }\n\n public findTestStepFinishedAndTestStepBy(\n testCaseStarted: TestCaseStarted\n ): ReadonlyArray<[TestStepFinished, TestStep]> {\n return this.testStepFinishedByTestCaseStartedId\n .get(testCaseStarted.id)\n .map((testStepFinished) => {\n const testStep = this.findTestStepBy(testStepFinished)\n assert.ok(testStep, 'Expected to find TestStep by TestStepFinished')\n return [testStepFinished, testStep]\n })\n }\n\n private findLineageBy(element: Pickle | TestCaseStarted) {\n const pickle = \"testCaseId\" in element ? this.findPickleBy(element) : element\n const deepestAstNodeId = pickle.astNodeIds.at(-1)\n assert.ok(deepestAstNodeId, 'Expected Pickle to have at least one astNodeId')\n return this.lineageById.get(deepestAstNodeId)\n }\n}\n"]}
1
+ {"version":3,"file":"Query.js","sourceRoot":"","sources":["../../src/Query.ts"],"names":[],"mappings":"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","sourcesContent":["import * as messages from '@cucumber/messages'\nimport {\n Attachment,\n Duration,\n Feature,\n getWorstTestStepResult,\n GherkinDocument,\n Hook,\n Location,\n Meta,\n Pickle,\n PickleStep,\n Rule,\n Scenario,\n Step,\n TestCase,\n TestCaseFinished,\n TestCaseStarted,\n TestRunFinished,\n TestRunStarted,\n TestStep,\n TestStepFinished,\n TestStepResult,\n TestStepResultStatus,\n TestStepStarted,\n TimeConversion,\n} from '@cucumber/messages'\nimport { ArrayMultimap } from '@teppeis/multimaps'\nimport sortBy from 'lodash.sortby'\n\nimport { assert, statusOrdinal } from './helpers'\nimport { Lineage, NamingStrategy } from './Lineage'\n\nexport default class Query {\n private readonly testStepResultByPickleId = new ArrayMultimap<string, messages.TestStepResult>()\n private readonly testStepResultsByPickleStepId = new ArrayMultimap<\n string,\n messages.TestStepResult\n >()\n private readonly testCaseByPickleId = new Map<string, messages.TestCase>()\n private readonly pickleIdByTestStepId = new Map<string, string>()\n private readonly pickleStepIdByTestStepId = new Map<string, string>()\n private readonly testStepResultsbyTestStepId = new ArrayMultimap<\n string,\n messages.TestStepResult\n >()\n private readonly testStepIdsByPickleStepId = new ArrayMultimap<string, string>()\n private readonly hooksById = new Map<string, messages.Hook>()\n private readonly attachmentsByTestStepId = new ArrayMultimap<string, messages.Attachment>()\n private readonly stepMatchArgumentsListsByPickleStepId = new Map<\n string,\n readonly messages.StepMatchArgumentsList[]\n >()\n\n private meta: Meta\n private testRunStarted: TestRunStarted\n private testRunFinished: TestRunFinished\n private readonly testCaseStartedById: Map<string, TestCaseStarted> = new Map()\n private readonly lineageById: Map<string, Lineage> = new Map()\n private readonly stepById: Map<string, Step> = new Map()\n private readonly pickleById: Map<string, Pickle> = new Map()\n private readonly pickleStepById: Map<string, PickleStep> = new Map()\n private readonly testCaseById: Map<string, TestCase> = new Map()\n private readonly testStepById: Map<string, TestStep> = new Map()\n private readonly testCaseFinishedByTestCaseStartedId: Map<string, TestCaseFinished> = new Map()\n private readonly testStepStartedByTestCaseStartedId: ArrayMultimap<string, TestStepStarted> =\n new ArrayMultimap()\n private readonly testStepFinishedByTestCaseStartedId: ArrayMultimap<string, TestStepFinished> =\n new ArrayMultimap()\n private readonly attachmentsByTestCaseStartedId: ArrayMultimap<string, Attachment> =\n new ArrayMultimap()\n\n public update(envelope: messages.Envelope) {\n if (envelope.meta) {\n this.meta = envelope.meta\n }\n if (envelope.gherkinDocument) {\n this.updateGherkinDocument(envelope.gherkinDocument)\n }\n if (envelope.pickle) {\n this.updatePickle(envelope.pickle)\n }\n if (envelope.hook) {\n this.hooksById.set(envelope.hook.id, envelope.hook)\n }\n if (envelope.testRunStarted) {\n this.testRunStarted = envelope.testRunStarted\n }\n if (envelope.testCase) {\n this.updateTestCase(envelope.testCase)\n }\n if (envelope.testCaseStarted) {\n this.updateTestCaseStarted(envelope.testCaseStarted)\n }\n if (envelope.testStepStarted) {\n this.updateTestStepStarted(envelope.testStepStarted)\n }\n if (envelope.attachment) {\n this.updateAttachment(envelope.attachment)\n }\n if (envelope.testStepFinished) {\n this.updateTestStepFinished(envelope.testStepFinished)\n }\n if (envelope.testCaseFinished) {\n this.updateTestCaseFinished(envelope.testCaseFinished)\n }\n if (envelope.testRunFinished) {\n this.testRunFinished = envelope.testRunFinished\n }\n }\n\n private updateGherkinDocument(gherkinDocument: GherkinDocument) {\n if (gherkinDocument.feature) {\n this.updateFeature(gherkinDocument.feature, {\n gherkinDocument,\n })\n }\n }\n\n private updateFeature(feature: Feature, lineage: Lineage) {\n feature.children.forEach((featureChild) => {\n if (featureChild.background) {\n this.updateSteps(featureChild.background.steps)\n }\n if (featureChild.scenario) {\n this.updateScenario(featureChild.scenario, {\n ...lineage,\n feature,\n })\n }\n if (featureChild.rule) {\n this.updateRule(featureChild.rule, {\n ...lineage,\n feature,\n })\n }\n })\n }\n\n private updateRule(rule: Rule, lineage: Lineage) {\n rule.children.forEach((ruleChild) => {\n if (ruleChild.background) {\n this.updateSteps(ruleChild.background.steps)\n }\n if (ruleChild.scenario) {\n this.updateScenario(ruleChild.scenario, {\n ...lineage,\n rule,\n })\n }\n })\n }\n\n private updateScenario(scenario: Scenario, lineage: Lineage) {\n this.lineageById.set(scenario.id, {\n ...lineage,\n scenario,\n })\n scenario.examples.forEach((examples, examplesIndex) => {\n this.lineageById.set(examples.id, {\n ...lineage,\n scenario,\n examples,\n examplesIndex,\n })\n examples.tableBody.forEach((example, exampleIndex) => {\n this.lineageById.set(example.id, {\n ...lineage,\n scenario,\n examples,\n examplesIndex,\n example,\n exampleIndex,\n })\n })\n })\n this.updateSteps(scenario.steps)\n }\n\n private updateSteps(steps: ReadonlyArray<Step>) {\n steps.forEach((step) => this.stepById.set(step.id, step))\n }\n\n private updatePickle(pickle: Pickle) {\n this.pickleById.set(pickle.id, pickle)\n pickle.steps.forEach((pickleStep) => this.pickleStepById.set(pickleStep.id, pickleStep))\n }\n\n private updateTestCase(testCase: TestCase) {\n this.testCaseById.set(testCase.id, testCase)\n\n this.testCaseByPickleId.set(testCase.pickleId, testCase)\n testCase.testSteps.forEach((testStep) => {\n this.testStepById.set(testStep.id, testStep)\n this.pickleIdByTestStepId.set(testStep.id, testCase.pickleId)\n this.pickleStepIdByTestStepId.set(testStep.id, testStep.pickleStepId)\n this.testStepIdsByPickleStepId.put(testStep.pickleStepId, testStep.id)\n this.stepMatchArgumentsListsByPickleStepId.set(\n testStep.pickleStepId,\n testStep.stepMatchArgumentsLists\n )\n })\n }\n\n private updateTestCaseStarted(testCaseStarted: TestCaseStarted) {\n this.testCaseStartedById.set(testCaseStarted.id, testCaseStarted)\n\n /*\n when a test case attempt starts besides the first one, clear all existing results\n and attachments for that test case, so we always report on the latest attempt\n (applies to legacy pickle-oriented query methods only)\n */\n const testCase = this.testCaseById.get(testCaseStarted.testCaseId)\n if (testCase) {\n this.testStepResultByPickleId.delete(testCase.pickleId)\n for (const testStep of testCase.testSteps) {\n this.testStepResultsByPickleStepId.delete(testStep.pickleStepId)\n this.testStepResultsbyTestStepId.delete(testStep.id)\n this.attachmentsByTestStepId.delete(testStep.id)\n }\n }\n }\n\n private updateTestStepStarted(testStepStarted: TestStepStarted) {\n this.testStepStartedByTestCaseStartedId.put(testStepStarted.testCaseStartedId, testStepStarted)\n }\n\n private updateAttachment(attachment: Attachment) {\n if (attachment.testStepId) {\n this.attachmentsByTestStepId.put(attachment.testStepId, attachment)\n }\n if (attachment.testCaseStartedId) {\n this.attachmentsByTestCaseStartedId.put(attachment.testCaseStartedId, attachment)\n }\n }\n\n private updateTestStepFinished(testStepFinished: TestStepFinished) {\n this.testStepFinishedByTestCaseStartedId.put(\n testStepFinished.testCaseStartedId,\n testStepFinished\n )\n\n const pickleId = this.pickleIdByTestStepId.get(testStepFinished.testStepId)\n this.testStepResultByPickleId.put(pickleId, testStepFinished.testStepResult)\n const testStep = this.testStepById.get(testStepFinished.testStepId)\n this.testStepResultsByPickleStepId.put(testStep.pickleStepId, testStepFinished.testStepResult)\n this.testStepResultsbyTestStepId.put(testStep.id, testStepFinished.testStepResult)\n }\n\n private updateTestCaseFinished(testCaseFinished: TestCaseFinished) {\n this.testCaseFinishedByTestCaseStartedId.set(\n testCaseFinished.testCaseStartedId,\n testCaseFinished\n )\n }\n\n /**\n * Gets all the results for multiple pickle steps\n * @param pickleStepIds\n */\n public getPickleStepTestStepResults(\n pickleStepIds: readonly string[]\n ): readonly messages.TestStepResult[] {\n if (pickleStepIds.length === 0) {\n return [\n {\n status: messages.TestStepResultStatus.UNKNOWN,\n duration: messages.TimeConversion.millisecondsToDuration(0),\n },\n ]\n }\n return pickleStepIds.reduce((testStepResults: messages.TestStepResult[], pickleId) => {\n return testStepResults.concat(this.testStepResultsByPickleStepId.get(pickleId))\n }, [])\n }\n\n /**\n * Gets all the results for multiple pickles\n * @param pickleIds\n */\n public getPickleTestStepResults(\n pickleIds: readonly string[]\n ): readonly messages.TestStepResult[] {\n if (pickleIds.length === 0) {\n return [\n {\n status: messages.TestStepResultStatus.UNKNOWN,\n duration: messages.TimeConversion.millisecondsToDuration(0),\n },\n ]\n }\n return pickleIds.reduce((testStepResults: messages.TestStepResult[], pickleId) => {\n return testStepResults.concat(this.testStepResultByPickleId.get(pickleId))\n }, [])\n }\n\n /**\n * Gets all the attachments for multiple pickle steps\n * @param pickleStepIds\n */\n public getPickleStepAttachments(\n pickleStepIds: readonly string[]\n ): readonly messages.Attachment[] {\n return this.getTestStepsAttachments(\n pickleStepIds.reduce((testStepIds: string[], pickleStepId: string) => {\n return testStepIds.concat(this.testStepIdsByPickleStepId.get(pickleStepId))\n }, [])\n )\n }\n\n public getTestStepsAttachments(testStepIds: readonly string[]): readonly messages.Attachment[] {\n return testStepIds.reduce((attachments: messages.Attachment[], testStepId) => {\n return attachments.concat(this.attachmentsByTestStepId.get(testStepId))\n }, [])\n }\n\n /**\n * Get StepMatchArguments for a pickle step\n * @param pickleStepId\n */\n public getStepMatchArgumentsLists(\n pickleStepId: string\n ): readonly messages.StepMatchArgumentsList[] | undefined {\n return this.stepMatchArgumentsListsByPickleStepId.get(pickleStepId)\n }\n\n public getHook(hookId: string): messages.Hook {\n return this.hooksById.get(hookId)\n }\n\n public getBeforeHookSteps(pickleId: string): readonly messages.TestStep[] {\n const hookSteps: messages.TestStep[] = []\n\n this.identifyHookSteps(\n pickleId,\n (hook) => hookSteps.push(hook),\n () => null\n )\n return hookSteps\n }\n\n public getAfterHookSteps(pickleId: string): readonly messages.TestStep[] {\n const hookSteps: messages.TestStep[] = []\n\n this.identifyHookSteps(\n pickleId,\n () => null,\n (hook) => hookSteps.push(hook)\n )\n return hookSteps\n }\n\n private identifyHookSteps(\n pickleId: string,\n onBeforeHookFound: (hook: messages.TestStep) => void,\n onAfterHookFound: (hook: messages.TestStep) => void\n ): void {\n const testCase = this.testCaseByPickleId.get(pickleId)\n\n if (!testCase) {\n return\n }\n\n let pickleStepFound = false\n\n for (const step of testCase.testSteps) {\n if (step.hookId) {\n if (pickleStepFound) {\n onAfterHookFound(step)\n } else {\n onBeforeHookFound(step)\n }\n } else {\n pickleStepFound = true\n }\n }\n }\n\n public getTestStepResults(testStepId: string): messages.TestStepResult[] {\n return this.testStepResultsbyTestStepId.get(testStepId)\n }\n\n public getStatusCounts(\n pickleIds: readonly string[]\n ): Partial<Record<messages.TestStepResultStatus, number>> {\n const result: Partial<Record<messages.TestStepResultStatus, number>> = {}\n for (const pickleId of pickleIds) {\n const testStepResult = getWorstTestStepResult(this.getPickleTestStepResults([pickleId]))\n const count = result[testStepResult.status] || 0\n result[testStepResult.status] = count + 1\n }\n return result\n }\n\n /* new common interface with Java starts here */\n\n public countMostSevereTestStepResultStatus(): Record<TestStepResultStatus, number> {\n const result: Record<TestStepResultStatus, number> = {\n [TestStepResultStatus.AMBIGUOUS]: 0,\n [TestStepResultStatus.FAILED]: 0,\n [TestStepResultStatus.PASSED]: 0,\n [TestStepResultStatus.PENDING]: 0,\n [TestStepResultStatus.SKIPPED]: 0,\n [TestStepResultStatus.UNDEFINED]: 0,\n [TestStepResultStatus.UNKNOWN]: 0,\n }\n for (const testCaseStarted of this.findAllTestCaseStarted()) {\n const mostSevereResult = sortBy(\n this.findTestStepFinishedAndTestStepBy(testCaseStarted).map(\n ([testStepFinished]) => testStepFinished.testStepResult\n ),\n [(testStepResult) => statusOrdinal(testStepResult.status)]\n ).at(-1)\n if (mostSevereResult) {\n result[mostSevereResult.status]++\n }\n }\n return result\n }\n\n public countTestCasesStarted(): number {\n return this.findAllTestCaseStarted().length\n }\n\n public findAllPickles(): ReadonlyArray<Pickle> {\n const pickles = [...this.pickleById.values()]\n return sortBy(pickles, ['id'])\n }\n\n public findAllPickleSteps(): ReadonlyArray<PickleStep> {\n const pickleSteps = [...this.pickleStepById.values()]\n return sortBy(pickleSteps, ['id'])\n }\n\n public findAllTestCaseStarted(): ReadonlyArray<TestCaseStarted> {\n return sortBy(\n [...this.testCaseStartedById.values()].filter((testCaseStarted) => {\n const testCaseFinished = this.testCaseFinishedByTestCaseStartedId.get(testCaseStarted.id)\n // only include if not yet finished OR won't be retried\n return !testCaseFinished?.willBeRetried\n }),\n [\n (testCaseStarted) =>\n TimeConversion.timestampToMillisecondsSinceEpoch(testCaseStarted.timestamp),\n 'id',\n ]\n )\n }\n\n public findAllTestCaseStartedGroupedByFeature(): Map<\n Feature | undefined,\n ReadonlyArray<TestCaseStarted>\n > {\n const results = new Map()\n sortBy(\n this.findAllTestCaseStarted().map(\n (testCaseStarted) => [this.findLineageBy(testCaseStarted), testCaseStarted] as const\n ),\n [([lineage]) => lineage.gherkinDocument.uri]\n ).forEach(([{ feature }, testCaseStarted]) => {\n results.set(feature, [...(results.get(feature) ?? []), testCaseStarted])\n })\n return results\n }\n\n public findAllTestSteps(): ReadonlyArray<TestStep> {\n const testSteps = [...this.testStepById.values()]\n return sortBy(testSteps, ['id'])\n }\n\n public findAttachmentsBy(testStepFinished: TestStepFinished): ReadonlyArray<Attachment> {\n return this.attachmentsByTestCaseStartedId\n .get(testStepFinished.testCaseStartedId)\n .filter((attachment) => attachment.testStepId === testStepFinished.testStepId)\n }\n\n public findFeatureBy(testCaseStarted: TestCaseStarted): Feature | undefined {\n return this.findLineageBy(testCaseStarted)?.feature\n }\n\n public findHookBy(testStep: TestStep): Hook | undefined {\n if (!testStep.hookId) {\n return undefined\n }\n return this.hooksById.get(testStep.hookId)\n }\n\n public findMeta(): Meta | undefined {\n return this.meta\n }\n\n public findMostSevereTestStepResultBy(\n testCaseStarted: TestCaseStarted\n ): TestStepResult | undefined {\n return sortBy(\n this.findTestStepFinishedAndTestStepBy(testCaseStarted).map(\n ([testStepFinished]) => testStepFinished.testStepResult\n ),\n [(testStepResult) => statusOrdinal(testStepResult.status)]\n ).at(-1)\n }\n\n public findNameOf(pickle: Pickle, namingStrategy: NamingStrategy): string {\n const lineage = this.findLineageBy(pickle)\n return lineage ? namingStrategy.reduce(lineage, pickle) : pickle.name\n }\n\n public findLocationOf(pickle: Pickle): Location | undefined {\n const lineage = this.findLineageBy(pickle)\n if (lineage?.example) {\n return lineage.example.location\n }\n return lineage?.scenario?.location\n }\n\n public findPickleBy(element: TestCaseStarted | TestStepStarted): Pickle | undefined {\n const testCase = this.findTestCaseBy(element)\n assert.ok(testCase, 'Expected to find TestCase from TestCaseStarted')\n return this.pickleById.get(testCase.pickleId)\n }\n\n public findPickleStepBy(testStep: TestStep): PickleStep | undefined {\n if (!testStep.pickleStepId) {\n return undefined\n }\n return this.pickleStepById.get(testStep.pickleStepId)\n }\n\n public findStepBy(pickleStep: PickleStep): Step | undefined {\n const [astNodeId] = pickleStep.astNodeIds\n assert.ok(astNodeId, 'Expected PickleStep to have an astNodeId')\n return this.stepById.get(astNodeId)\n }\n\n public findTestCaseBy(element: TestCaseStarted | TestStepStarted): TestCase | undefined {\n const testCaseStarted =\n 'testCaseStartedId' in element ? this.findTestCaseStartedBy(element) : element\n assert.ok(testCaseStarted, 'Expected to find TestCaseStarted by TestStepStarted')\n return this.testCaseById.get(testCaseStarted.testCaseId)\n }\n\n public findTestCaseDurationBy(testCaseStarted: TestCaseStarted): Duration | undefined {\n const testCaseFinished = this.findTestCaseFinishedBy(testCaseStarted)\n if (!testCaseFinished) {\n return undefined\n }\n return TimeConversion.millisecondsToDuration(\n TimeConversion.timestampToMillisecondsSinceEpoch(testCaseFinished.timestamp) -\n TimeConversion.timestampToMillisecondsSinceEpoch(testCaseStarted.timestamp)\n )\n }\n\n public findTestCaseStartedBy(testStepStarted: TestStepStarted): TestCaseStarted | undefined {\n return this.testCaseStartedById.get(testStepStarted.testCaseStartedId)\n }\n\n public findTestCaseFinishedBy(testCaseStarted: TestCaseStarted): TestCaseFinished | undefined {\n return this.testCaseFinishedByTestCaseStartedId.get(testCaseStarted.id)\n }\n\n public findTestRunDuration(): Duration | undefined {\n if (!this.testRunStarted || !this.testRunFinished) {\n return undefined\n }\n return TimeConversion.millisecondsToDuration(\n TimeConversion.timestampToMillisecondsSinceEpoch(this.testRunFinished.timestamp) -\n TimeConversion.timestampToMillisecondsSinceEpoch(this.testRunStarted.timestamp)\n )\n }\n\n public findTestRunFinished(): TestRunFinished | undefined {\n return this.testRunFinished\n }\n\n public findTestRunStarted(): TestRunStarted | undefined {\n return this.testRunStarted\n }\n\n public findTestStepBy(element: TestStepStarted | TestStepFinished): TestStep | undefined {\n return this.testStepById.get(element.testStepId)\n }\n\n public findTestStepsStartedBy(testCaseStarted: TestCaseStarted): ReadonlyArray<TestStepStarted> {\n // multimaps `get` implements `getOrDefault([])` behaviour internally\n return [...this.testStepStartedByTestCaseStartedId.get(testCaseStarted.id)]\n }\n\n public findTestStepsFinishedBy(\n testCaseStarted: TestCaseStarted\n ): ReadonlyArray<TestStepFinished> {\n // multimaps `get` implements `getOrDefault([])` behaviour internally\n return [...this.testStepFinishedByTestCaseStartedId.get(testCaseStarted.id)]\n }\n\n public findTestStepFinishedAndTestStepBy(\n testCaseStarted: TestCaseStarted\n ): ReadonlyArray<[TestStepFinished, TestStep]> {\n return this.testStepFinishedByTestCaseStartedId\n .get(testCaseStarted.id)\n .map((testStepFinished) => {\n const testStep = this.findTestStepBy(testStepFinished)\n assert.ok(testStep, 'Expected to find TestStep by TestStepFinished')\n return [testStepFinished, testStep]\n })\n }\n\n public findLineageBy(element: Pickle | TestCaseStarted): Lineage | undefined {\n const pickle = 'testCaseId' in element ? this.findPickleBy(element) : element\n const deepestAstNodeId = pickle.astNodeIds.at(-1)\n assert.ok(deepestAstNodeId, 'Expected Pickle to have at least one astNodeId')\n return this.lineageById.get(deepestAstNodeId)\n }\n}\n"]}
@@ -1,12 +1,6 @@
1
- import { TestStepResult } from '@cucumber/messages';
2
- interface WithId {
3
- id: string | number;
4
- }
5
- export declare function comparatorById(a: WithId, b: WithId): 0 | 1 | -1;
6
- export declare function comparatorBy(a: any, b: any, key: string): 0 | 1 | -1;
7
- export declare function comparatorByStatus(a: TestStepResult, b: TestStepResult): 0 | 1 | -1;
1
+ import { TestStepResultStatus } from '@cucumber/messages';
2
+ export declare function statusOrdinal(status: TestStepResultStatus): number;
8
3
  export declare const assert: {
9
4
  ok(target: unknown, message: string): void;
10
5
  };
11
- export {};
12
6
  //# sourceMappingURL=helpers.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../src/helpers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAwB,MAAM,oBAAoB,CAAA;AAEzE,UAAU,MAAM;IACZ,EAAE,EAAE,MAAM,GAAG,MAAM,CAAA;CACtB;AAED,wBAAgB,cAAc,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,cAElD;AAED,wBAAgB,YAAY,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,cAQvD;AAED,wBAAgB,kBAAkB,CAAC,CAAC,EAAE,cAAc,EAAE,CAAC,EAAE,cAAc,cAQtE;AAcD,eAAO,MAAM,MAAM;eACJ,OAAO,WAAW,MAAM;CAKtC,CAAA"}
1
+ {"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../src/helpers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAA;AAEzD,wBAAgB,aAAa,CAAC,MAAM,EAAE,oBAAoB,UAUzD;AAED,eAAO,MAAM,MAAM;eACN,OAAO,WAAW,MAAM;CAKpC,CAAA"}
@@ -1,32 +1,9 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.assert = void 0;
4
- exports.comparatorById = comparatorById;
5
- exports.comparatorBy = comparatorBy;
6
- exports.comparatorByStatus = comparatorByStatus;
4
+ exports.statusOrdinal = statusOrdinal;
7
5
  const messages_1 = require("@cucumber/messages");
8
- function comparatorById(a, b) {
9
- return comparatorBy(a, b, "id");
10
- }
11
- function comparatorBy(a, b, key) {
12
- if (a[key] < b[key]) {
13
- return -1;
14
- }
15
- if (a[key] > b[key]) {
16
- return 1;
17
- }
18
- return 0;
19
- }
20
- function comparatorByStatus(a, b) {
21
- if (ordinal(a.status) < ordinal(b.status)) {
22
- return -1;
23
- }
24
- if (ordinal(a.status) > ordinal(b.status)) {
25
- return 1;
26
- }
27
- return 0;
28
- }
29
- function ordinal(status) {
6
+ function statusOrdinal(status) {
30
7
  return [
31
8
  messages_1.TestStepResultStatus.UNKNOWN,
32
9
  messages_1.TestStepResultStatus.PASSED,
@@ -42,6 +19,6 @@ exports.assert = {
42
19
  if (!target) {
43
20
  throw new Error(message);
44
21
  }
45
- }
22
+ },
46
23
  };
47
24
  //# sourceMappingURL=helpers.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../src/helpers.ts"],"names":[],"mappings":";;;AAMA,wCAEC;AAED,oCAQC;AAED,gDAQC;AA5BD,iDAAyE;AAMzE,SAAgB,cAAc,CAAC,CAAS,EAAE,CAAS;IAC/C,OAAO,YAAY,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAA;AACnC,CAAC;AAED,SAAgB,YAAY,CAAC,CAAM,EAAE,CAAM,EAAE,GAAW;IACpD,IAAK,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC;QACnB,OAAO,CAAC,CAAC,CAAC;IACd,CAAC;IACD,IAAK,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC;QACnB,OAAO,CAAC,CAAC;IACb,CAAC;IACD,OAAO,CAAC,CAAC;AACb,CAAC;AAED,SAAgB,kBAAkB,CAAC,CAAiB,EAAE,CAAiB;IACnE,IAAI,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC;QACxC,OAAO,CAAC,CAAC,CAAC;IACd,CAAC;IACD,IAAI,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC;QACxC,OAAO,CAAC,CAAC;IACb,CAAC;IACD,OAAO,CAAC,CAAC;AACb,CAAC;AAED,SAAS,OAAO,CAAC,MAA4B;IACzC,OAAO;QACH,+BAAoB,CAAC,OAAO;QAC5B,+BAAoB,CAAC,MAAM;QAC3B,+BAAoB,CAAC,OAAO;QAC5B,+BAAoB,CAAC,OAAO;QAC5B,+BAAoB,CAAC,SAAS;QAC9B,+BAAoB,CAAC,SAAS;QAC9B,+BAAoB,CAAC,MAAM;KAC9B,CAAC,OAAO,CAAC,MAAM,CAAC,CAAA;AACrB,CAAC;AAEY,QAAA,MAAM,GAAG;IAClB,EAAE,CAAC,MAAe,EAAE,OAAe;QAC/B,IAAI,CAAC,MAAM,EAAE,CAAC;YACV,MAAM,IAAI,KAAK,CAAC,OAAO,CAAC,CAAA;QAC5B,CAAC;IACL,CAAC;CACJ,CAAA","sourcesContent":["import { TestStepResult, TestStepResultStatus } from '@cucumber/messages'\n\ninterface WithId {\n id: string | number\n}\n\nexport function comparatorById(a: WithId, b: WithId) {\n return comparatorBy(a, b, \"id\")\n}\n\nexport function comparatorBy(a: any, b: any, key: string) {\n if ( a[key] < b[key] ){\n return -1;\n }\n if ( a[key] > b[key] ){\n return 1;\n }\n return 0;\n}\n\nexport function comparatorByStatus(a: TestStepResult, b: TestStepResult) {\n if (ordinal(a.status) < ordinal(b.status)) {\n return -1;\n }\n if (ordinal(a.status) > ordinal(b.status) ){\n return 1;\n }\n return 0;\n}\n\nfunction ordinal(status: TestStepResultStatus) {\n return [\n TestStepResultStatus.UNKNOWN,\n TestStepResultStatus.PASSED,\n TestStepResultStatus.SKIPPED,\n TestStepResultStatus.PENDING,\n TestStepResultStatus.UNDEFINED,\n TestStepResultStatus.AMBIGUOUS,\n TestStepResultStatus.FAILED,\n ].indexOf(status)\n}\n\nexport const assert = {\n ok(target: unknown, message: string) {\n if (!target) {\n throw new Error(message)\n }\n }\n}"]}
1
+ {"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../src/helpers.ts"],"names":[],"mappings":";;;AAEA,sCAUC;AAZD,iDAAyD;AAEzD,SAAgB,aAAa,CAAC,MAA4B;IACxD,OAAO;QACL,+BAAoB,CAAC,OAAO;QAC5B,+BAAoB,CAAC,MAAM;QAC3B,+BAAoB,CAAC,OAAO;QAC5B,+BAAoB,CAAC,OAAO;QAC5B,+BAAoB,CAAC,SAAS;QAC9B,+BAAoB,CAAC,SAAS;QAC9B,+BAAoB,CAAC,MAAM;KAC5B,CAAC,OAAO,CAAC,MAAM,CAAC,CAAA;AACnB,CAAC;AAEY,QAAA,MAAM,GAAG;IACpB,EAAE,CAAC,MAAe,EAAE,OAAe;QACjC,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,IAAI,KAAK,CAAC,OAAO,CAAC,CAAA;QAC1B,CAAC;IACH,CAAC;CACF,CAAA","sourcesContent":["import { TestStepResultStatus } from '@cucumber/messages'\n\nexport function statusOrdinal(status: TestStepResultStatus) {\n return [\n TestStepResultStatus.UNKNOWN,\n TestStepResultStatus.PASSED,\n TestStepResultStatus.SKIPPED,\n TestStepResultStatus.PENDING,\n TestStepResultStatus.UNDEFINED,\n TestStepResultStatus.AMBIGUOUS,\n TestStepResultStatus.FAILED,\n ].indexOf(status)\n}\n\nexport const assert = {\n ok(target: unknown, message: string) {\n if (!target) {\n throw new Error(message)\n }\n },\n}\n"]}