@lynxwall/cucumber-tsflow 6.3.0 → 6.5.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/README.md +174 -29
- package/lib/cucumber/binding-decorator.js +3 -3
- package/lib/cucumber/binding-registry.d.ts +1 -0
- package/lib/cucumber/binding-registry.js +16 -1
- package/lib/cucumber/managed-scenario-context.d.ts +32 -2
- package/lib/cucumber/managed-scenario-context.js +69 -16
- package/lib/cucumber/message-collector.d.ts +3 -1
- package/lib/cucumber/message-collector.js +12 -5
- package/lib/cucumber/parallel/worker.js +2 -2
- package/lib/cucumber/test-case-runner.d.ts +48 -0
- package/lib/cucumber/test-case-runner.js +318 -0
- package/lib/types/types.d.ts +2 -1
- package/lib/version.d.ts +1 -1
- package/lib/version.js +1 -1
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -313,7 +313,7 @@ If using VSCode to edit your project the following launch configurations can be
|
|
|
313
313
|
Bindings provide the automation that connects a specification step in a Gherkin feature file to some code that
|
|
314
314
|
executes for that step. When using Cucumber with TypeScript you can define this automation using a 'binding' class:
|
|
315
315
|
|
|
316
|
-
```
|
|
316
|
+
```typescript
|
|
317
317
|
import { binding } from "@lynxwall/cucumber-tsflow";
|
|
318
318
|
|
|
319
319
|
@binding()
|
|
@@ -327,7 +327,7 @@ export default class MySteps {
|
|
|
327
327
|
Step definitions can be bound to automation code in a 'binding' class by implementing a public function that is
|
|
328
328
|
bound with a 'given', 'when' or 'then' binding decorator:
|
|
329
329
|
|
|
330
|
-
```
|
|
330
|
+
```typescript
|
|
331
331
|
import { binding, given, when, then } from "@lynxwall/cucumber-tsflow";
|
|
332
332
|
|
|
333
333
|
@binding()
|
|
@@ -362,7 +362,7 @@ Scenario: Boolean type supported
|
|
|
362
362
|
|
|
363
363
|
The associated step definition replaces `true` in this scenario with a `{boolean}` expression as shown below:
|
|
364
364
|
|
|
365
|
-
```
|
|
365
|
+
```typescript
|
|
366
366
|
@given('I pass {boolean} into a step')
|
|
367
367
|
iPassbooleanIntoAStep(boolean: boolean): any {
|
|
368
368
|
this.boolValue = boolean;
|
|
@@ -386,7 +386,7 @@ More information on Cucumber Expressions and Custom Parameter Types can be found
|
|
|
386
386
|
Step definitions can be conditionally selected for execution based on the tags of the scenario by supplying tags when using the binding
|
|
387
387
|
decorators:
|
|
388
388
|
|
|
389
|
-
```
|
|
389
|
+
```typescript
|
|
390
390
|
@given('I perform a search using the value {string}')
|
|
391
391
|
public givenAValueBasedSearch(searchValue: string): void {
|
|
392
392
|
...
|
|
@@ -506,7 +506,7 @@ If it doesn't already exist, create a file named cucumber.json at the root of yo
|
|
|
506
506
|
|
|
507
507
|
The following example shows how to configure the behave formatter in cucumber.json. The tsflow-snippet-syntax module is configured as the default snippet syntax and does not require configuration. However, you can override the snippet syntax as documented here: <https://github.com/cucumber/cucumber-js/blob/v8.0.0/docs/custom_snippet_syntaxes.md>
|
|
508
508
|
|
|
509
|
-
```
|
|
509
|
+
```typescript
|
|
510
510
|
{
|
|
511
511
|
"default": {
|
|
512
512
|
"format": [
|
|
@@ -520,7 +520,7 @@ The following example shows how to configure the behave formatter in cucumber.js
|
|
|
520
520
|
|
|
521
521
|
The following example shows how to configure the bamboo junit formatter in cucumber.json. This differs from the standard cucumber junit formatter in that "pending" and "undefined" tests do not get classified as failures, instead they are classified as skips
|
|
522
522
|
|
|
523
|
-
```
|
|
523
|
+
```typescript
|
|
524
524
|
{
|
|
525
525
|
"default": {
|
|
526
526
|
"format": [
|
|
@@ -530,73 +530,218 @@ The following example shows how to configure the bamboo junit formatter in cucum
|
|
|
530
530
|
}
|
|
531
531
|
```
|
|
532
532
|
|
|
533
|
-
## Sharing Data between Bindings
|
|
533
|
+
## Sharing Data between Steps and Bindings
|
|
534
534
|
|
|
535
535
|
### Context Injection
|
|
536
536
|
|
|
537
|
-
Like 'specflow', cucumber-tsflow supports a simple dependency injection framework that will
|
|
537
|
+
Like 'specflow', cucumber-tsflow supports a simple dependency injection framework that will instantiate and inject class instances into 'binding' classes for each executing scenario.
|
|
538
538
|
|
|
539
|
-
|
|
539
|
+
Each scenario in a feature will get a new instance of the *Context* object when the steps associated with a scenario are executed. Hooks and steps used by the scenario will have access to the same instance of a "Scenario Context" during execution of the test steps. In addition, if steps of a scenario are implemented in separate bindings, those steps will still have access to the same instance of the *Context* object created for the scenario.
|
|
540
540
|
|
|
541
|
-
|
|
542
|
-
- Define a constructor on the 'binding' classes that will require the shared data that accepts the context objects as parameters
|
|
543
|
-
- Update the `@binding()` decorator to indicate the types of context objects that are required by the 'binding' class
|
|
541
|
+
**Recent Updates:**
|
|
544
542
|
|
|
545
|
-
|
|
543
|
+
- versions >= 6.5.0
|
|
544
|
+
- Context classes now support an `initialize()` function that can be defined synchronous or asynchronous. The `initialize()` function is called after the `BeforeAll` hook and before any other hooks or steps. This provides the ability to initialize a scenario context before any tests are executed with support for async operations.
|
|
545
|
+
- Context classes have always supported a `dispose()` function for cleanup. However, with latest updates the `dispose()` function can be defined synchronously or asynchronously.
|
|
546
|
+
|
|
547
|
+
- versions >= 6.4.0
|
|
548
|
+
- The current Cucumber World object is now available as a constructor parameter on all classes defined for Context Injection. For more information on the World object see: [Access to Cucumber.js World object](#access-to-cucumber.js-world-object).
|
|
549
|
+
|
|
550
|
+
|
|
551
|
+
### Using Context Injection
|
|
552
|
+
|
|
553
|
+
With Context Injection you first need to define one or more classes that will be injected into a binding instance. Next, you'll need to add the context types to the `@binding` decorator and implement a constructor that passes initialized instances of the context type into the binding instance.
|
|
554
|
+
|
|
555
|
+
**Defining a Context class:**
|
|
556
|
+
|
|
557
|
+
- Create a simple *Context* class representing the shared data. The class can have no constructor or a default empty constructor. However, to access the Cucumber World object you should define a constructor as shown in the example below.
|
|
558
|
+
|
|
559
|
+
**Synchronous example:**
|
|
560
|
+
|
|
561
|
+
```typescript
|
|
562
|
+
import { World } from '@cucumber/cucumber';
|
|
563
|
+
|
|
564
|
+
export class ScenarioContext {
|
|
565
|
+
public world: World;
|
|
566
|
+
public someValue = '';
|
|
567
|
+
private id: string = '';
|
|
568
|
+
|
|
569
|
+
constructor(worldObj: World) {
|
|
570
|
+
this.world = worldObj;
|
|
571
|
+
}
|
|
572
|
+
public initialize(): void {
|
|
573
|
+
this.id = this.makeid(5);
|
|
574
|
+
console.log(`Sync init: ${this.id}`);
|
|
575
|
+
}
|
|
576
|
+
public dispose(): void {
|
|
577
|
+
console.log(`Sync dispose: ${this.id}`);
|
|
578
|
+
}
|
|
579
|
+
makeid(length: number) {
|
|
580
|
+
...
|
|
581
|
+
return result;
|
|
582
|
+
}
|
|
583
|
+
}
|
|
584
|
+
```
|
|
585
|
+
|
|
586
|
+
**Asynchronous example:**
|
|
587
|
+
|
|
588
|
+
```typescript
|
|
589
|
+
import { World } from '@cucumber/cucumber';
|
|
590
|
+
|
|
591
|
+
export class ScenarioContext {
|
|
592
|
+
public world: World;
|
|
593
|
+
public someValue = '';
|
|
594
|
+
private id: string = '';
|
|
595
|
+
|
|
596
|
+
constructor(worldObj: World) {
|
|
597
|
+
this.world = worldObj;
|
|
598
|
+
}
|
|
599
|
+
public async initialize(): Promise<void> {
|
|
600
|
+
this.id = this.makeid(5);
|
|
601
|
+
await this.logTest(`Async init: ${this.id}`);
|
|
602
|
+
}
|
|
603
|
+
public async dispose(): Promise<void> {
|
|
604
|
+
await this.logTest(`Async dispose: ${this.id}`);
|
|
605
|
+
}
|
|
606
|
+
async logTest(text: string): Promise<void> {
|
|
607
|
+
await Promise.resolve(console.log(text));
|
|
608
|
+
}
|
|
609
|
+
makeid(length: number) {
|
|
610
|
+
...
|
|
611
|
+
return result;
|
|
612
|
+
}
|
|
613
|
+
}
|
|
614
|
+
```
|
|
615
|
+
|
|
616
|
+
|
|
617
|
+
|
|
618
|
+
**Initialize Binding in Step class:**
|
|
619
|
+
|
|
620
|
+
- Update the `@binding()` decorator to indicate the types of context objects that are required by the 'binding' class. You can include up to nine separate *Context* objects.
|
|
621
|
+
- Define a constructor on the `@binding` class with steps that need access to the shared data that accepts one or more context objects as parameters based on initialization of the `@binding` decorator.
|
|
622
|
+
|
|
623
|
+
**Single Context class example:**
|
|
624
|
+
|
|
625
|
+
```typescript
|
|
626
|
+
import { binding, given, when } from '@lynxwall/cucumber-tsflow';
|
|
627
|
+
import { ScenarioContext } from '../fixtures/scenario-context';
|
|
628
|
+
import { expect } from 'chai';
|
|
629
|
+
|
|
630
|
+
@binding([ScenarioContext])
|
|
631
|
+
export default class InjectionTestSteps1 {
|
|
632
|
+
constructor(private context: ScenarioContext) {}
|
|
633
|
+
|
|
634
|
+
@given('The Workspace is available and valid')
|
|
635
|
+
theWorkspaceIsAvailableAndValid() {
|
|
636
|
+
expect(this.context).not.to.be.undefined;
|
|
637
|
+
expect(this.context.world).not.to.be.undefined;
|
|
638
|
+
}
|
|
639
|
+
|
|
640
|
+
@when('I change the workspace in one step definition class')
|
|
641
|
+
whenIChangeTheWorkspaceInOneStep() {
|
|
642
|
+
this.context.someValue = 'value changed';
|
|
643
|
+
}
|
|
644
|
+
}
|
|
645
|
+
```
|
|
646
|
+
|
|
647
|
+
**Multiple Context classes example:**
|
|
648
|
+
|
|
649
|
+
```typescript
|
|
546
650
|
import { binding, given, when } from '@lynxwall/cucumber-tsflow';
|
|
547
|
-
import {
|
|
651
|
+
import { ScenarioContext } from '../fixtures/scenario-context';
|
|
652
|
+
import { SyncContext } from '../fixtures/sync-context';
|
|
548
653
|
import { expect } from 'chai';
|
|
549
654
|
|
|
550
|
-
@binding([
|
|
655
|
+
@binding([ScenarioContext, SyncContext])
|
|
551
656
|
export default class InjectionTestSteps1 {
|
|
552
|
-
constructor(private
|
|
657
|
+
constructor(private context: ScenarioContext, private syncContext: SyncContext) {}
|
|
553
658
|
|
|
554
659
|
@given('The Workspace is available and valid')
|
|
555
660
|
theWorkspaceIsAvailableAndValid() {
|
|
556
|
-
expect(this.
|
|
557
|
-
expect(this.
|
|
661
|
+
expect(this.context).not.to.be.undefined;
|
|
662
|
+
expect(this.context.world).not.to.be.undefined;
|
|
663
|
+
|
|
664
|
+
expect(this.syncContext).not.to.be.undefined;
|
|
665
|
+
expect(this.syncContext.world).not.to.be.undefined;
|
|
558
666
|
}
|
|
559
667
|
|
|
560
668
|
@when('I change the workspace in one step definition class')
|
|
561
669
|
whenIChangeTheWorkspaceInOneStep() {
|
|
562
|
-
this.
|
|
670
|
+
this.context.someValue = 'value changed';
|
|
563
671
|
}
|
|
564
672
|
}
|
|
565
673
|
```
|
|
566
674
|
|
|
675
|
+
|
|
676
|
+
|
|
567
677
|
### Access to Cucumber.js World object
|
|
568
678
|
|
|
569
|
-
The context object that you inject can also be configured to access the [World](https://github.com/cucumber/cucumber-js/blob/main/docs/support_files/world.md) object from Cucumber.js, which provides
|
|
679
|
+
The context object that you inject can also be configured to access the [World](https://github.com/cucumber/cucumber-js/blob/main/docs/support_files/world.md) object from Cucumber.js, which provides the following:
|
|
570
680
|
|
|
571
|
-
|
|
681
|
+
- `attach`: a method for adding [attachments](https://github.com/cucumber/cucumber-js/blob/main/docs/support_files/attachments.md) to hooks/steps
|
|
682
|
+
- `log`: a method for [logging](https://github.com/cucumber/cucumber-js/blob/main/docs/support_files/attachments.md#logging) information from hooks/steps
|
|
683
|
+
- `parameters`: an object of parameters passed in via configuration
|
|
572
684
|
|
|
573
|
-
|
|
685
|
+
Starting with version **6.4.0** the Cucumber World object is now passed into a *Context* class as a constructor parameter as shown below:
|
|
686
|
+
|
|
687
|
+
```typescript
|
|
688
|
+
import { World } from '@cucumber/cucumber';
|
|
689
|
+
|
|
690
|
+
export class ScenarioContext {
|
|
691
|
+
public world: World;
|
|
692
|
+
public someValue = '';
|
|
693
|
+
|
|
694
|
+
constructor(worldObj: World) {
|
|
695
|
+
this.world = worldObj;
|
|
696
|
+
}
|
|
697
|
+
|
|
698
|
+
public dispose(): void {
|
|
699
|
+
this.someValue = '';
|
|
700
|
+
}
|
|
701
|
+
}
|
|
702
|
+
```
|
|
703
|
+
|
|
704
|
+
In the example shown above, the world object instance passed in to the constructor is saved to a variable in the `ScenarioContext` class. This class is automatically initialized and injected into the constructor of a binding class when tests are executed. As a result, the world object, with access to world context parameters, logging and attachments, is available to most hooks and all steps within a test.
|
|
705
|
+
|
|
706
|
+
**NOTE:** `BeforeAll` and `AfterAll` hooks do not have access to the scenario context.
|
|
707
|
+
|
|
708
|
+
*Context* classes, as demonstrated by the `ScenarioContext` example above, also support a `dispose()` function that is called when the execution of a test scenario is complete.
|
|
709
|
+
|
|
710
|
+
With instance initialization, and dispose functionality, you have the ability to initialize common support operations and data needed for scenario test runs, and cleanup any resources when scenario test runs are complete.
|
|
711
|
+
|
|
712
|
+
### Access to the World object without using a constructor
|
|
713
|
+
|
|
714
|
+
**NOTE:** This approach of accessing the Cucumber World object is still supported. However, the ability to access the world object during *Context* initialization provides much better control over when context data is initialized versus relying on execution of a hook. As a result, using a `@before` hook as shown below is not recommended.
|
|
715
|
+
|
|
716
|
+
With this approach, you would define a world property on simple *Context* class that you're injecting:
|
|
717
|
+
|
|
718
|
+
```typescript
|
|
574
719
|
import { World } from '@cucumber/cucumber';
|
|
575
720
|
|
|
576
|
-
export class
|
|
721
|
+
export class ScenarioContext {
|
|
577
722
|
public world!: World;
|
|
578
723
|
public someValue = '';
|
|
579
724
|
}
|
|
580
725
|
```
|
|
581
726
|
|
|
582
|
-
Next you'll need to initialize the world property in a
|
|
727
|
+
Next you'll need to initialize the world property in a `@before` hook so that it's available to all steps in a scenario. This is done by adding a new file to the steps folder that is dedicated to initializing the class (`ScenarioContext` in this example) in a `@before` hook.
|
|
583
728
|
|
|
584
729
|
For this example I've added a file named world-context.ts with the following content:
|
|
585
730
|
|
|
586
|
-
```
|
|
731
|
+
```typescript
|
|
587
732
|
import { binding, before } from '@lynxwall/cucumber-tsflow';
|
|
588
|
-
import {
|
|
733
|
+
import { ScenarioContext } from '../fixtures/scenario-context';
|
|
589
734
|
import { World } from '@cucumber/cucumber';
|
|
590
735
|
|
|
591
|
-
@binding([
|
|
736
|
+
@binding([ScenarioContext])
|
|
592
737
|
export default class WorldContext {
|
|
593
738
|
_worldObj?: World;
|
|
594
739
|
|
|
595
|
-
constructor(private
|
|
740
|
+
constructor(private context: ScenarioContext) {}
|
|
596
741
|
|
|
597
742
|
@before()
|
|
598
743
|
beforeScenario() {
|
|
599
|
-
this.
|
|
744
|
+
this.context.world = this._worldObj as World;
|
|
600
745
|
}
|
|
601
746
|
}
|
|
602
747
|
```
|
|
@@ -91,7 +91,7 @@ function bindStepDefinition(stepBinding) {
|
|
|
91
91
|
throw new Error(`Cannot find matched step definition for ${stepBinding.stepPattern.toString()} with tag ${scenarioContext.scenarioInfo.tags} in binding registry`);
|
|
92
92
|
}
|
|
93
93
|
const contextTypes = bindingRegistry.getContextTypesForTarget(matchingStepBindings[0].targetPrototype);
|
|
94
|
-
const bindingObject = scenarioContext.getOrActivateBindingClass(matchingStepBindings[0].targetPrototype, contextTypes);
|
|
94
|
+
const bindingObject = scenarioContext.getOrActivateBindingClass(matchingStepBindings[0].targetPrototype, contextTypes, this);
|
|
95
95
|
bindingObject._worldObj = this;
|
|
96
96
|
return bindingObject[matchingStepBindings[0].targetPropertyKey].apply(bindingObject, arguments);
|
|
97
97
|
}
|
|
@@ -133,7 +133,7 @@ function bindHook(stepBinding) {
|
|
|
133
133
|
const scenarioContext = global.messageCollector.getHookScenarioContext(arg);
|
|
134
134
|
if (scenarioContext) {
|
|
135
135
|
const contextTypes = binding_registry_1.BindingRegistry.instance.getContextTypesForTarget(stepBinding.targetPrototype);
|
|
136
|
-
const bindingObject = scenarioContext.getOrActivateBindingClass(stepBinding.targetPrototype, contextTypes);
|
|
136
|
+
const bindingObject = scenarioContext.getOrActivateBindingClass(stepBinding.targetPrototype, contextTypes, this);
|
|
137
137
|
bindingObject._worldObj = this;
|
|
138
138
|
return bindingObject[stepBinding.targetPropertyKey].apply(bindingObject, arguments);
|
|
139
139
|
}
|
|
@@ -178,4 +178,4 @@ function bindHook(stepBinding) {
|
|
|
178
178
|
}
|
|
179
179
|
}
|
|
180
180
|
}
|
|
181
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
181
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmluZGluZy1kZWNvcmF0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY3VjdW1iZXIvYmluZGluZy1kZWNvcmF0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsdUNBQXVDO0FBQ3ZDLGlEQVc0QjtBQUU1Qix5REFBa0U7QUFDbEUsd0RBQXNFO0FBRXRFLGlEQUF5RDtBQUN6RCw0REFBMkI7QUFLM0I7Ozs7Ozs7R0FPRztBQUNILE1BQU0sd0JBQXdCLEdBQUcsSUFBSSxHQUFHLEVBQWlDLENBQUM7QUFFMUU7Ozs7Ozs7R0FPRztBQUNILFNBQWdCLE9BQU8sQ0FBQyxvQkFBb0M7SUFDM0QsT0FBTyxDQUFJLE1BQW1DLEVBQUUsRUFBRTtRQUNqRCxnQkFBZ0IsRUFBRSxDQUFDO1FBQ25CLE1BQU0sZUFBZSxHQUFHLGtDQUFlLENBQUMsUUFBUSxDQUFDO1FBQ2pELGVBQWUsQ0FBQyw2QkFBNkIsQ0FBQyxNQUFNLENBQUMsU0FBUyxFQUFFLG9CQUFvQixDQUFDLENBQUM7UUFDdEYsTUFBTSxXQUFXLEdBQWtCLEVBQUUsQ0FBQztRQUN0QyxXQUFXLENBQUMsSUFBSSxDQUFDLEdBQUcsZUFBZSxDQUFDLHdCQUF3QixDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7UUFDdEUsV0FBVyxDQUFDLElBQUksQ0FBQyxHQUFHLGVBQWUsQ0FBQyx3QkFBd0IsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztRQUVoRixXQUFXLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxFQUFFO1lBQ2pDLElBQUksV0FBVyxDQUFDLFdBQVcsR0FBRywrQkFBZ0IsQ0FBQyxlQUFlLEVBQUU7Z0JBQy9ELElBQUksZ0JBQWdCLEdBQUcsd0JBQXdCLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxXQUFXLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztnQkFDeEYsSUFBSSxnQkFBZ0IsS0FBSyxTQUFTLEVBQUU7b0JBQ25DLGdCQUFn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
|
|
@@ -63,6 +63,7 @@ export declare class BindingRegistry {
|
|
|
63
63
|
* @returns An array of [[StepBinding]] that map to the given step pattern and set of tag names.
|
|
64
64
|
*/
|
|
65
65
|
getStepBindings(stepPattern: StepPattern, tags: TagName[]): StepBinding[];
|
|
66
|
+
getStepBindingByCucumberKey(cucumberKey: string): StepBinding | undefined;
|
|
66
67
|
/**
|
|
67
68
|
* Updates the SupportCodeLibrary from Cucumber with
|
|
68
69
|
* callsite information from tsflow bindings
|
|
@@ -152,6 +152,21 @@ class BindingRegistry {
|
|
|
152
152
|
}
|
|
153
153
|
return this.mapTagNamesToStepBindings(['*'], tagMap);
|
|
154
154
|
}
|
|
155
|
+
getStepBindingByCucumberKey(cucumberKey) {
|
|
156
|
+
let result = undefined;
|
|
157
|
+
for (const [_, binding] of this._targetBindings) {
|
|
158
|
+
for (const stepBinding of binding.stepBindings) {
|
|
159
|
+
if (stepBinding.cucumberKey === cucumberKey) {
|
|
160
|
+
result = stepBinding;
|
|
161
|
+
break;
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
if (result) {
|
|
165
|
+
break;
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
return result;
|
|
169
|
+
}
|
|
155
170
|
/**
|
|
156
171
|
* Updates the SupportCodeLibrary from Cucumber with
|
|
157
172
|
* callsite information from tsflow bindings
|
|
@@ -213,4 +228,4 @@ class BindingRegistry {
|
|
|
213
228
|
}
|
|
214
229
|
}
|
|
215
230
|
exports.BindingRegistry = BindingRegistry;
|
|
216
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
231
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmluZGluZy1yZWdpc3RyeS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jdWN1bWJlci9iaW5kaW5nLXJlZ2lzdHJ5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUNBLDREQUEyQjtBQUMzQix3REFBc0U7QUFrQnRFOztHQUVHO0FBQ1UsUUFBQSxvQkFBb0IsR0FBRyxNQUFNLENBQUM7QUFFM0M7O0dBRUc7QUFDVSxRQUFBLFdBQVcsR0FBRyxHQUFHLENBQUM7QUFFL0I7O0dBRUc7QUFDSCxNQUFhLGVBQWU7SUFDbkIsU0FBUyxHQUFHLElBQUksR0FBRyxFQUE0QyxDQUFDO0lBQ2hFLGVBQWUsR0FBRyxJQUFJLEdBQUcsRUFBc0IsQ0FBQztJQUV4RDs7OztPQUlHO0lBQ0ksTUFBTSxLQUFLLFFBQVE7UUFDekIsTUFBTSx5QkFBeUIsR0FBRyxtQ0FBbUMsQ0FBQztRQUV0RSxNQUFNLFFBQVEsR0FBSSxNQUFjLENBQUMseUJBQXlCLENBQUMsQ0FBQztRQUU1RCxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQ2IsTUFBYyxDQUFDLHlCQUF5QixDQUFDLEdBQUcsSUFBSSxlQUFlLEVBQUUsQ0FBQztTQUNuRTtRQUVELE9BQU8sUUFBUSxJQUFLLE1BQWMsQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO0lBQy9ELENBQUM7SUFFRDs7Ozs7OztPQU9HO0lBQ0ksNkJBQTZCLENBQUMsZUFBb0IsRUFBRSxZQUE0QjtRQUN0RixJQUFJLENBQUMsWUFBWSxFQUFFO1lBQ2xCLE9BQU87U0FDUDtRQUVELElBQUksaUJBQWlCLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsZUFBZSxDQUFDLENBQUM7UUFFbEUsSUFBSSxDQUFDLGlCQUFpQixFQUFFO1lBQ3ZCLGlCQUFpQixHQUFHO2dCQUNuQixZQUFZLEVBQUUsRUFBRTtnQkFDaEIsWUFBWSxFQUFFLEVBQUU7YUFDaEIsQ0FBQztZQUVGLElBQUksQ0FBQyxlQUFlLENBQUMsR0FB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
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { ScenarioContext, ScenarioInfo } from '../types/scenario-context';
|
|
2
2
|
import { ContextType } from '../types/types';
|
|
3
|
+
import { World } from '@cucumber/cucumber';
|
|
3
4
|
/**
|
|
4
5
|
* Represents a [[ScenarioContext]] implementation that manages a collection of context objects that
|
|
5
6
|
* are created and used by binding classes during a running Cucumber scenario.
|
|
@@ -13,9 +14,38 @@ export declare class ManagedScenarioContext implements ScenarioContext {
|
|
|
13
14
|
*
|
|
14
15
|
*/
|
|
15
16
|
get scenarioInfo(): ScenarioInfo;
|
|
16
|
-
getOrActivateBindingClass(targetPrototype: any, contextTypes: ContextType[]): any;
|
|
17
|
-
|
|
17
|
+
getOrActivateBindingClass(targetPrototype: any, contextTypes: ContextType[], worldObj: World): any;
|
|
18
|
+
/**
|
|
19
|
+
* If context objects are passed into our step, this function will
|
|
20
|
+
* call initialize on the context objects only once.
|
|
21
|
+
* Using Promise.resolve so that initialize can be synchronous or async.
|
|
22
|
+
*/
|
|
23
|
+
initialize(): Promise<void>;
|
|
24
|
+
/**
|
|
25
|
+
* All objects support dispose, which is executed when a
|
|
26
|
+
* test run is ended. Using Promise.resolve to support
|
|
27
|
+
* synchronous or async functions.
|
|
28
|
+
*/
|
|
29
|
+
dispose(): Promise<void>;
|
|
18
30
|
private activateBindingClass;
|
|
31
|
+
/**
|
|
32
|
+
* Get or activate any object
|
|
33
|
+
*
|
|
34
|
+
* @param targetPrototype prototype for the object
|
|
35
|
+
* @param activatorFunc callback function used to create an instance of the object
|
|
36
|
+
* @param optional optional parameter passed into constructors
|
|
37
|
+
* @returns
|
|
38
|
+
*/
|
|
19
39
|
private getOrActivateObject;
|
|
40
|
+
/**
|
|
41
|
+
* Get or activate Context objects. Marks an object as a context
|
|
42
|
+
* object in ActiveInfo to let the system know it supports an initialize function.
|
|
43
|
+
*
|
|
44
|
+
* @param targetPrototype prototype for the object
|
|
45
|
+
* @param activatorFunc callback function used to create an instance of the object
|
|
46
|
+
* @param optional optional parameter passed into constructors
|
|
47
|
+
* @returns
|
|
48
|
+
*/
|
|
49
|
+
private getOrActivateContext;
|
|
20
50
|
}
|
|
21
51
|
export * from '../types/scenario-context';
|
|
@@ -20,6 +20,15 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
20
20
|
exports.ManagedScenarioContext = void 0;
|
|
21
21
|
const underscore_1 = __importDefault(require("underscore"));
|
|
22
22
|
const scenario_context_1 = require("../types/scenario-context");
|
|
23
|
+
class ActiveInfo {
|
|
24
|
+
constructor(obj, isContext = false) {
|
|
25
|
+
this.activeObject = obj;
|
|
26
|
+
this.isContext = isContext;
|
|
27
|
+
}
|
|
28
|
+
activeObject;
|
|
29
|
+
isContext;
|
|
30
|
+
initialized = false;
|
|
31
|
+
}
|
|
23
32
|
/**
|
|
24
33
|
* Represents a [[ScenarioContext]] implementation that manages a collection of context objects that
|
|
25
34
|
* are created and used by binding classes during a running Cucumber scenario.
|
|
@@ -37,19 +46,37 @@ class ManagedScenarioContext {
|
|
|
37
46
|
get scenarioInfo() {
|
|
38
47
|
return this._scenarioInfo;
|
|
39
48
|
}
|
|
40
|
-
getOrActivateBindingClass(targetPrototype, contextTypes) {
|
|
49
|
+
getOrActivateBindingClass(targetPrototype, contextTypes, worldObj) {
|
|
41
50
|
return this.getOrActivateObject(targetPrototype, () => {
|
|
42
|
-
return this.activateBindingClass(targetPrototype, contextTypes);
|
|
51
|
+
return this.activateBindingClass(targetPrototype, contextTypes, worldObj);
|
|
43
52
|
});
|
|
44
53
|
}
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
54
|
+
/**
|
|
55
|
+
* If context objects are passed into our step, this function will
|
|
56
|
+
* call initialize on the context objects only once.
|
|
57
|
+
* Using Promise.resolve so that initialize can be synchronous or async.
|
|
58
|
+
*/
|
|
59
|
+
async initialize() {
|
|
60
|
+
for (const [_key, value] of this._activeObjects) {
|
|
61
|
+
if (value.isContext && !value.initialized && typeof value.activeObject.initialize === 'function') {
|
|
62
|
+
await Promise.resolve(value.activeObject.initialize());
|
|
63
|
+
value.initialized = true;
|
|
49
64
|
}
|
|
50
|
-
}
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* All objects support dispose, which is executed when a
|
|
69
|
+
* test run is ended. Using Promise.resolve to support
|
|
70
|
+
* synchronous or async functions.
|
|
71
|
+
*/
|
|
72
|
+
async dispose() {
|
|
73
|
+
for (const [_key, value] of this._activeObjects) {
|
|
74
|
+
if (typeof value.activeObject.dispose === 'function') {
|
|
75
|
+
await Promise.resolve(value.activeObject.dispose());
|
|
76
|
+
}
|
|
77
|
+
}
|
|
51
78
|
}
|
|
52
|
-
activateBindingClass(targetPrototype, contextTypes) {
|
|
79
|
+
activateBindingClass(targetPrototype, contextTypes, worldObj) {
|
|
53
80
|
const invokeBindingConstructor = (args) => {
|
|
54
81
|
switch (contextTypes.length) {
|
|
55
82
|
case 0:
|
|
@@ -76,21 +103,47 @@ class ManagedScenarioContext {
|
|
|
76
103
|
return new targetPrototype.constructor(args[0], args[1], args[2], args[3], args[4], args[5], args[6], args[7], args[8], args[9]);
|
|
77
104
|
}
|
|
78
105
|
};
|
|
79
|
-
const contextObjects = underscore_1.default.map(contextTypes, contextType => this.
|
|
80
|
-
return new contextType();
|
|
81
|
-
}));
|
|
106
|
+
const contextObjects = underscore_1.default.map(contextTypes, contextType => this.getOrActivateContext(contextType.prototype, (worldObj) => {
|
|
107
|
+
return new contextType(worldObj);
|
|
108
|
+
}, worldObj));
|
|
82
109
|
return invokeBindingConstructor(contextObjects);
|
|
83
110
|
}
|
|
84
|
-
|
|
85
|
-
|
|
111
|
+
/**
|
|
112
|
+
* Get or activate any object
|
|
113
|
+
*
|
|
114
|
+
* @param targetPrototype prototype for the object
|
|
115
|
+
* @param activatorFunc callback function used to create an instance of the object
|
|
116
|
+
* @param optional optional parameter passed into constructors
|
|
117
|
+
* @returns
|
|
118
|
+
*/
|
|
119
|
+
getOrActivateObject(targetPrototype, activatorFunc, optional) {
|
|
120
|
+
let activeObject = this._activeObjects.get(targetPrototype)?.activeObject;
|
|
121
|
+
if (activeObject) {
|
|
122
|
+
return activeObject;
|
|
123
|
+
}
|
|
124
|
+
activeObject = activatorFunc(optional);
|
|
125
|
+
this._activeObjects.set(targetPrototype, new ActiveInfo(activeObject));
|
|
126
|
+
return activeObject;
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* Get or activate Context objects. Marks an object as a context
|
|
130
|
+
* object in ActiveInfo to let the system know it supports an initialize function.
|
|
131
|
+
*
|
|
132
|
+
* @param targetPrototype prototype for the object
|
|
133
|
+
* @param activatorFunc callback function used to create an instance of the object
|
|
134
|
+
* @param optional optional parameter passed into constructors
|
|
135
|
+
* @returns
|
|
136
|
+
*/
|
|
137
|
+
getOrActivateContext(targetPrototype, activatorFunc, optional) {
|
|
138
|
+
let activeObject = this._activeObjects.get(targetPrototype)?.activeObject;
|
|
86
139
|
if (activeObject) {
|
|
87
140
|
return activeObject;
|
|
88
141
|
}
|
|
89
|
-
activeObject = activatorFunc();
|
|
90
|
-
this._activeObjects.set(targetPrototype, activeObject);
|
|
142
|
+
activeObject = activatorFunc(optional);
|
|
143
|
+
this._activeObjects.set(targetPrototype, new ActiveInfo(activeObject, true));
|
|
91
144
|
return activeObject;
|
|
92
145
|
}
|
|
93
146
|
}
|
|
94
147
|
exports.ManagedScenarioContext = ManagedScenarioContext;
|
|
95
148
|
__exportStar(require("../types/scenario-context"), exports);
|
|
96
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
149
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFuYWdlZC1zY2VuYXJpby1jb250ZXh0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2N1Y3VtYmVyL21hbmFnZWQtc2NlbmFyaW8tY29udGV4dC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLDREQUEyQjtBQUUzQixnRUFBMEU7QUFJMUUsTUFBTSxVQUFVO0lBQ2YsWUFBWSxHQUFRLEVBQUUsWUFBcUIsS0FBSztRQUMvQyxJQUFJLENBQUMsWUFBWSxHQUFHLEdBQUcsQ0FBQztRQUN4QixJQUFJLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQztJQUM1QixDQUFDO0lBQ0QsWUFBWSxDQUFNO0lBQ2xCLFNBQVMsQ0FBVTtJQUNuQixXQUFXLEdBQVksS0FBSyxDQUFDO0NBQzdCO0FBRUQ7OztHQUdHO0FBQ0gsTUFBYSxzQkFBc0I7SUFDMUIsYUFBYSxDQUFlO0lBQzVCLGNBQWMsR0FBRyxJQUFJLEdBQUcsRUFBbUIsQ0FBQztJQUVwRCxZQUFZLGFBQXFCLEVBQUUsSUFBYztRQUNoRCxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksK0JBQVksQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDNUQsQ0FBQztJQUVEOzs7T0FHRztJQUNILElBQVcsWUFBWTtRQUN0QixPQUFPLElBQUksQ0FBQyxhQUFhLENBQUM7SUFDM0IsQ0FBQztJQUVNLHlCQUF5QixDQUFDLGVBQW9CLEVBQUUsWUFBMkIsRUFBRSxRQUFlO1FBQ2xHLE9BQU8sSUFBSSxDQUFDLG1CQUFtQixDQUFDLGVBQWUsRUFBRSxHQUFHLEVBQUU7WUFDckQsT0FBTyxJQUFJLENBQUMsb0JBQW9CLENBQUMsZUFBZSxFQUFFLFlBQVksRUFBRSxRQUFRLENBQUMsQ0FBQztRQUMzRSxDQUFDLENBQUMsQ0FBQztJQUNKLENBQUM7SUFFRDs7OztPQUlHO0lBQ0ksS0FBSyxDQUFDLFVBQVU7UUFDdEIsS0FBSyxNQUFNLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxJQUFJLElBQUksQ0FBQyxjQUFjLEVBQUU7WUFDaEQsSUFBSSxLQUFLLENBQUMsU0FBUyxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsSUFBSSxPQUFPLEtBQUssQ0FBQyxZQUFZLENBQUMsVUFBVSxLQUFLLFVBQVUsRUFBRTtnQkFDakcsTUFBTSxPQUFPLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQztnQkFDdkQsS0FBSyxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUM7YUFDekI7U0FDRDtJQUNGLENBQUM7SUFFRDs7OztPQUlHO0lBQ0ksS0FBSyxDQUFDLE9BQU87UUFDbkIsS0FBSyxNQUFNLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxJQUFJLElBQUksQ0FBQyxjQUFjLEVBQUU7WUFDaEQsSUFBSSxPQUFPLEtBQUssQ0FBQyxZQUFZLENBQUMsT0FBTyxLQUFLLFVBQVUsRUFBRTtnQkFDckQsTUFBTSxPQUFPLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQzthQUNwRDtTQUNEO0lBQ0YsQ0FBQztJQUVPLG9CQUFvQixDQUFDLGVBQW9CLEVBQUUsWUFBMkIsRUFBRSxRQUFlO1FBQzlGLE1BQU0sd0JBQXdCLEdBQUcsQ0FBQyxJQUFXLEVBQU8sRUFBRTtZQUNyRCxRQUFRLFlBQVksQ0FBQyxNQUFNLEVBQUU7Z0JBQzVCLEtBQUssQ0FBQztvQkFDTCxPQUFPLElBQUssZUFBZSxDQUFDLFdBQW1CLEVBQUUsQ0FBQztnQkFDbkQsS0FBSyxDQUFDO29CQUNMLE9BQU8sSUFBSyxlQUFlLENBQUMsV0FBbUIsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDMUQsS0FBSyxDQUFDO29CQUNMLE9BQU8sSUFBSyxlQUFlLENBQUMsV0FBbUIsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ25FLEtBQUssQ0FBQztvQkFDTCxPQUFPLElBQUssZUFBZSxDQUFDLFdBQW1CLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDNUUsS0FBSyxDQUFDO29CQUNMLE9BQU8sSUFBSyxlQUFlLENBQUMsV0FBbUIsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDckYsS0FBSyxDQUFDO29CQUNMLE9BQU8sSUFBSyxlQUFlLENBQUMsV0FBbUIsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQzlGLEtBQUssQ0FBQztvQkFDTCxPQUFPLElBQUssZUFBZSxDQUFDLFdBQW1CLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDdkcsS0FBSyxDQUFDO29CQUNMLE9BQU8sSUFBSyxlQUFlLENBQUMsV0FBbUIsQ0FDOUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUNQLElBQUksQ0FBQyxDQUFDLENBQUMsRUFDUCxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQ1AsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUNQLElBQUksQ0FBQyxDQUFDLENBQUMsRUFDUCxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQ1AsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUNQLENBQUM7Z0JBQ0gsS0FBSyxDQUFDO29CQUNMLE9BQU8sSUFBSyxlQUFlLENBQUMsV0FBbUIsQ0FDOUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUNQLElBQUksQ0FBQyxDQUFDLENBQUMsRUFDUCxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQ1AsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUNQLElBQUksQ0FBQyxDQUFDLENBQUMsRUFDUCxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQ1AsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUNQLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FDUCxDQUFDO2dCQUNILEtBQUssQ0FBQztvQkFDTCxPQUFPLElBQUssZUFBZSxDQUFDLFdBQW1CLENBQzlDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFDUCxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQ1AsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUNQLElBQUksQ0FBQyxDQUFDLENBQUMsRUFDUCxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQ1AsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUNQLElBQUksQ0FBQyxDQUFDLENBQUMsRUFDUCxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQ1AsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUNQLENBQUM7Z0JBQ0gsS0FBSyxFQUFFO29CQUNOLE9BQU8sSUFBSyxlQUFlLENBQUMsV0FBbUIsQ0FDOUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUNQLElBQUksQ0FBQyxDQUFDLENBQUMsRUFDUCxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQ1AsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUNQLElBQUksQ0FBQyxDQUFDLENBQUMsRUFDUCxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQ1AsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUNQLElBQUksQ0FBQyxDQUFDLENBQUMsRUFDUCxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQ1AsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUNQLENBQUM7YUFDSDtRQUNGLENBQUMsQ0FBQztRQUVGLE1BQU0sY0FBYyxHQUFHLG9CQUFDLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBRSxXQUFXLENBQUMsRUFBRSxDQUN4RCxJQUFJLENBQUMsb0JBQW9CLENBQ3hCLFdBQVcsQ0FBQyxTQUFTLEVBQ3JCLENBQUMsUUFBYyxFQUFFLEVBQUU7WUFDbEIsT0FBTyxJQUFJLFdBQVcsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNsQyxDQUFDLEVBQ0QsUUFBUSxDQUNSLENBQ0QsQ0FBQztRQUVGLE9BQU8sd0JBQXdCLENBQUMsY0FBYyxDQUFDLENBQUM7SUFDakQsQ0FBQztJQUVEOzs7Ozs7O09BT0c7SUFDSyxtQkFBbUIsQ0FBQyxlQUFvQixFQUFFLGFBQXNDLEVBQUUsUUFBYztRQUN2RyxJQUFJLFlBQVksR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxlQUFlLENBQUMsRUFBRSxZQUFZLENBQUM7UUFDMUUsSUFBSSxZQUFZLEVBQUU7WUFDakIsT0FBTyxZQUFZLENBQUM7U0FDcEI7UUFDRCxZQUFZLEdBQUcsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ3ZDLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLGVBQWUsRUFBRSxJQUFJLFVBQVUsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDO1FBQ3ZFLE9BQU8sWUFBWSxDQUFDO0lBQ3JCLENBQUM7SUFFRDs7Ozs7Ozs7T0FRRztJQUNLLG9CQUFvQixDQUFDLGVBQW9CLEVBQUUsYUFBc0MsRUFBRSxRQUFjO1FBQ3hHLElBQUksWUFBWSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLGVBQWUsQ0FBQyxFQUFFLFlBQVksQ0FBQztRQUMxRSxJQUFJLFlBQVksRUFBRTtZQUNqQixPQUFPLFlBQVksQ0FBQztTQUNwQjtRQUNELFlBQVksR0FBRyxhQUFhLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDdkMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsZUFBZSxFQUFFLElBQUksVUFBVSxDQUFDLFlBQVksRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQzdFLE9BQU8sWUFBWSxDQUFDO0lBQ3JCLENBQUM7Q0FDRDtBQXBLRCx3REFvS0M7QUFFRCw0REFBMEMifQ==
|
|
@@ -28,6 +28,8 @@ export default class MessageCollector {
|
|
|
28
28
|
private testCaseAttemptDataMap;
|
|
29
29
|
readonly undefinedParameterTypes: messages.UndefinedParameterType[];
|
|
30
30
|
private testCaseRunningMap;
|
|
31
|
+
private collectorEvents;
|
|
32
|
+
onTestCaseEnd(Handler: (testCaseFinished: messages.TestCaseFinished) => void): void;
|
|
31
33
|
addPickleAndTestCase(pickle: messages.Pickle, testCase: messages.TestCase): void;
|
|
32
34
|
hasFailures(): boolean;
|
|
33
35
|
getGherkinDocument(uri: string): messages.GherkinDocument;
|
|
@@ -64,7 +66,7 @@ export default class MessageCollector {
|
|
|
64
66
|
* this message to dispose and clear the ScenarioContext
|
|
65
67
|
* @param testCaseFinished
|
|
66
68
|
*/
|
|
67
|
-
|
|
69
|
+
endTestCase(testCaseStartedId: string): Promise<void>;
|
|
68
70
|
/**
|
|
69
71
|
* Uses the testCaleId passed in to find the associated Pickle (scenario)
|
|
70
72
|
* @param testCaseId
|
|
@@ -22,6 +22,9 @@ var __importStar = (this && this.__importStar) || function (mod) {
|
|
|
22
22
|
__setModuleDefault(result, mod);
|
|
23
23
|
return result;
|
|
24
24
|
};
|
|
25
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
26
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
27
|
+
};
|
|
25
28
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
29
|
const messages = __importStar(require("@cucumber/messages"));
|
|
27
30
|
const value_checker_1 = require("@cucumber/cucumber/lib/value_checker");
|
|
@@ -29,6 +32,7 @@ const managed_scenario_context_1 = require("./managed-scenario-context");
|
|
|
29
32
|
const utils_1 = require("./utils");
|
|
30
33
|
const helpers_1 = require("../utils/helpers");
|
|
31
34
|
const messages_1 = require("@cucumber/messages");
|
|
35
|
+
const events_1 = __importDefault(require("events"));
|
|
32
36
|
/**
|
|
33
37
|
* Custom implementation of the EventDataCollector from cucumber.js
|
|
34
38
|
*
|
|
@@ -46,6 +50,10 @@ class MessageCollector {
|
|
|
46
50
|
testCaseAttemptDataMap = {};
|
|
47
51
|
undefinedParameterTypes = [];
|
|
48
52
|
testCaseRunningMap = {};
|
|
53
|
+
collectorEvents = new events_1.default();
|
|
54
|
+
onTestCaseEnd(Handler) {
|
|
55
|
+
this.collectorEvents.on('testCaseEnd', Handler);
|
|
56
|
+
}
|
|
49
57
|
// Used during parallel execution to add the current pickle and testCase
|
|
50
58
|
// to a new Worker instance of the MessageCollector
|
|
51
59
|
addPickleAndTestCase(pickle, testCase) {
|
|
@@ -114,7 +122,6 @@ class MessageCollector {
|
|
|
114
122
|
}
|
|
115
123
|
else if (envelope.testCaseFinished) {
|
|
116
124
|
this.storeTestCaseResult(envelope.testCaseFinished);
|
|
117
|
-
this.endTestCase(envelope.testCaseFinished);
|
|
118
125
|
}
|
|
119
126
|
}
|
|
120
127
|
initTestCaseAttempt(testCaseStarted) {
|
|
@@ -215,12 +222,12 @@ class MessageCollector {
|
|
|
215
222
|
* this message to dispose and clear the ScenarioContext
|
|
216
223
|
* @param testCaseFinished
|
|
217
224
|
*/
|
|
218
|
-
endTestCase(
|
|
219
|
-
const testCase = this.testCaseRunningMap[
|
|
225
|
+
async endTestCase(testCaseStartedId) {
|
|
226
|
+
const testCase = this.testCaseRunningMap[testCaseStartedId];
|
|
220
227
|
if (testCase) {
|
|
221
228
|
const scenario = this.getScenarioForTest(testCase.testCaseId);
|
|
222
229
|
if (scenario && scenario.scenarioContext) {
|
|
223
|
-
scenario.scenarioContext.dispose();
|
|
230
|
+
await scenario.scenarioContext.dispose();
|
|
224
231
|
scenario.scenarioContext = undefined;
|
|
225
232
|
}
|
|
226
233
|
}
|
|
@@ -248,4 +255,4 @@ class MessageCollector {
|
|
|
248
255
|
}
|
|
249
256
|
}
|
|
250
257
|
exports.default = MessageCollector;
|
|
251
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
258
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVzc2FnZS1jb2xsZWN0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY3VjdW1iZXIvbWVzc2FnZS1jb2xsZWN0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLDZEQUErQztBQUMvQyx3RUFBd0U7QUFFeEUseUVBQW9FO0FBQ3BFLG1DQUEyRDtBQUMzRCw4Q0FBa0Q7QUFDbEQsaURBQTBEO0FBQzFELG9EQUFrQztBQTBCbEM7Ozs7Ozs7OztHQVNHO0FBQ0gsTUFBcUIsZ0JBQWdCO0lBQzVCLGtCQUFrQixHQUE2QyxFQUFFLENBQUM7SUFDbEUsU0FBUyxHQUFvQyxFQUFFLENBQUM7SUFDaEQsV0FBVyxHQUFzQyxFQUFFLENBQUM7SUFDcEQsc0JBQXNCLEdBQXlDLEVBQUUsQ0FBQztJQUNqRSx1QkFBdUIsR0FBc0MsRUFBRSxDQUFDO0lBQ2pFLGtCQUFrQixHQUE2QyxFQUFFLENBQUM7SUFFbEUsZUFBZSxHQUFHLElBQUksZ0JBQVksRUFBRSxDQUFDO0lBRTdDLGFBQWEsQ0FBQyxPQUE4RDtRQUMzRSxJQUFJLENBQUMsZUFBZSxDQUFDLEVBQUUsQ0FBQyxhQUFhLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDakQsQ0FBQztJQUVELHdFQUF3RTtJQUN4RSxtREFBbUQ7SUFDbkQsb0JBQW9CLENBQUMsTUFBdUIsRUFBRSxRQUEyQjtRQUN4RSxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLENBQUM7UUFDbkMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLEdBQUcsUUFBUSxDQUFDO0lBQzFDLENBQUM7SUFFRCxXQUFXO1FBQ1YsS0FBSyxNQUFNLE9BQU8sSUFBSSxJQUFJLENBQUMsc0JBQXNCLEVBQUU7WUFDbEQsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLHNCQUFzQixDQUFDLE9BQU8sQ0FBQyxDQUFD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
|
|
@@ -9,7 +9,7 @@ const url_1 = require("url");
|
|
|
9
9
|
const index_1 = __importDefault(require("@cucumber/cucumber/lib/support_code_library_builder/index"));
|
|
10
10
|
const run_test_run_hooks_1 = require("@cucumber/cucumber/lib/runtime/run_test_run_hooks");
|
|
11
11
|
const stopwatch_1 = require("@cucumber/cucumber/lib/runtime/stopwatch");
|
|
12
|
-
const test_case_runner_1 = __importDefault(require("
|
|
12
|
+
const test_case_runner_1 = __importDefault(require("../test-case-runner"));
|
|
13
13
|
const message_collector_1 = __importDefault(require("../message-collector"));
|
|
14
14
|
// eslint-disable-next-line @typescript-eslint/no-var-requires
|
|
15
15
|
const { importer } = require('@cucumber/cucumber/lib/importer');
|
|
@@ -101,4 +101,4 @@ class Worker {
|
|
|
101
101
|
}
|
|
102
102
|
}
|
|
103
103
|
exports.default = Worker;
|
|
104
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
104
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29ya2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2N1Y3VtYmVyL3BhcmFsbGVsL3dvcmtlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUNBLGlEQUFpRDtBQUNqRCxtQ0FBc0M7QUFDdEMsNkJBQW9DO0FBQ3BDLHNHQUFrRztBQUVsRywwRkFBMEc7QUFDMUcsd0VBQWtFO0FBQ2xFLDJFQUFpRDtBQU9qRCw2RUFBb0Q7QUFFcEQsOERBQThEO0FBQzlELE1BQU0sRUFBRSxRQUFRLEVBQUUsR0FBRyxPQUFPLENBQUMsaUNBQWlDLENBQUMsQ0FBQztBQUNoRSxNQUFNLEVBQUUsSUFBSSxFQUFFLEdBQUcsc0JBQVcsQ0FBQztBQUs3Qjs7O0dBR0c7QUFDSCxNQUFxQixNQUFNO0lBQ1QsR0FBRyxDQUFTO0lBQ1osSUFBSSxDQUFnQjtJQUVwQixFQUFFLENBQVM7SUFDWCxnQkFBZ0IsQ0FBZTtJQUN4QyxpQkFBaUIsR0FBWSxLQUFLLENBQUM7SUFDMUIsS0FBSyxDQUFvQjtJQUN6QixXQUFXLENBQWlCO0lBQ3JDLGtCQUFrQixDQUF1QjtJQUN6QyxlQUFlLENBQU07SUFDckIsZUFBZSxDQUFvQjtJQUUzQyxZQUFZLEVBQ1gsR0FBRyxFQUNILElBQUksRUFDSixFQUFFLEVBQ0YsV0FBVyxFQU1YO1FBQ0EsSUFBSSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUM7UUFDYixJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksRUFBRSxDQUFDO1FBQ3BCLElBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO1FBQ2YsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7UUFDakIsSUFBSSxDQUFDLFdBQVcsR0FBRyxXQUFXLENBQUM7UUFDL0IsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUkscUJBQVksRUFBRSxDQUFDO1FBQzNDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFLENBQUMsVUFBVSxFQUFFLENBQUMsUUFBMkIs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
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { INewTestCaseRunnerOptions } from '@cucumber/cucumber/lib/runtime/test_case_runner';
|
|
2
|
+
import * as messages from '@cucumber/messages';
|
|
3
|
+
import { ITestCaseHookParameter } from '@cucumber/cucumber/lib/support_code_library_builder/types';
|
|
4
|
+
import TestCaseHookDefinition from '@cucumber/cucumber/lib/models/test_case_hook_definition';
|
|
5
|
+
import TestStepHookDefinition from '@cucumber/cucumber/lib/models/test_step_hook_definition';
|
|
6
|
+
import { IDefinition } from '@cucumber/cucumber/lib/models/definition';
|
|
7
|
+
import { StepBinding } from '../types/step-binding';
|
|
8
|
+
import { ManagedScenarioContext } from './managed-scenario-context';
|
|
9
|
+
export default class TestCaseRunner {
|
|
10
|
+
private readonly attachmentManager;
|
|
11
|
+
private currentTestCaseStartedId?;
|
|
12
|
+
private currentTestStepId?;
|
|
13
|
+
private readonly eventBroadcaster;
|
|
14
|
+
private readonly stopwatch;
|
|
15
|
+
private readonly gherkinDocument;
|
|
16
|
+
private readonly newId;
|
|
17
|
+
private readonly pickle;
|
|
18
|
+
private readonly testCase;
|
|
19
|
+
private readonly maxAttempts;
|
|
20
|
+
private readonly skip;
|
|
21
|
+
private readonly filterStackTraces;
|
|
22
|
+
private readonly supportCodeLibrary;
|
|
23
|
+
private testStepResults?;
|
|
24
|
+
private world;
|
|
25
|
+
private readonly worldParameters;
|
|
26
|
+
private bindingRegistry;
|
|
27
|
+
constructor({ eventBroadcaster, stopwatch, gherkinDocument, newId, pickle, testCase, retries, skip, filterStackTraces, supportCodeLibrary, worldParameters }: INewTestCaseRunnerOptions);
|
|
28
|
+
resetTestProgressData(): void;
|
|
29
|
+
getBeforeStepHookDefinitions(): TestStepHookDefinition[];
|
|
30
|
+
getAfterStepHookDefinitions(): TestStepHookDefinition[];
|
|
31
|
+
getWorstStepResult(): messages.TestStepResult;
|
|
32
|
+
invokeStep(stepParam: messages.PickleStep | null, stepDefinition: IDefinition, hookParameter?: any): Promise<messages.TestStepResult>;
|
|
33
|
+
isSkippingSteps(): boolean;
|
|
34
|
+
shouldSkipHook(isBeforeHook: boolean): boolean;
|
|
35
|
+
aroundTestStep(testStepId: string, runStepFn: () => Promise<messages.TestStepResult>): Promise<void>;
|
|
36
|
+
run(): Promise<messages.TestStepResultStatus>;
|
|
37
|
+
runAttempt(attempt: number, moreAttemptsRemaining: boolean): Promise<boolean>;
|
|
38
|
+
runHook(hookDefinition: TestCaseHookDefinition, hookParameter: ITestCaseHookParameter, isBeforeHook: boolean): Promise<messages.TestStepResult>;
|
|
39
|
+
runStepHooks(stepHooks: TestStepHookDefinition[], pickleStep: messages.PickleStep, stepResult?: messages.TestStepResult): Promise<messages.TestStepResult[]>;
|
|
40
|
+
runStep(pickleStep: messages.PickleStep, testStep: messages.TestStep): Promise<messages.TestStepResult>;
|
|
41
|
+
/**
|
|
42
|
+
* Helper used to initialize any context types that are passed into
|
|
43
|
+
* a binding class before any hooks or steps are executed.
|
|
44
|
+
* @param stepBinding
|
|
45
|
+
* @param scenarioContext
|
|
46
|
+
*/
|
|
47
|
+
initializeContext(stepBinding: StepBinding, scenarioContext: ManagedScenarioContext): Promise<void>;
|
|
48
|
+
}
|
|
@@ -0,0 +1,318 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
+
if (mod && mod.__esModule) return mod;
|
|
20
|
+
var result = {};
|
|
21
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
+
__setModuleDefault(result, mod);
|
|
23
|
+
return result;
|
|
24
|
+
};
|
|
25
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
26
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
27
|
+
};
|
|
28
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
29
|
+
const helpers_1 = require("@cucumber/cucumber/lib/runtime/helpers");
|
|
30
|
+
const index_1 = __importDefault(require("@cucumber/cucumber/lib/runtime/attachment_manager/index"));
|
|
31
|
+
const step_runner_1 = __importDefault(require("@cucumber/cucumber/lib/runtime/step_runner"));
|
|
32
|
+
const messages = __importStar(require("@cucumber/messages"));
|
|
33
|
+
const messages_1 = require("@cucumber/messages");
|
|
34
|
+
const value_checker_1 = require("@cucumber/cucumber/lib/value_checker");
|
|
35
|
+
const binding_registry_1 = require("./binding-registry");
|
|
36
|
+
const console_1 = require("console");
|
|
37
|
+
class TestCaseRunner {
|
|
38
|
+
attachmentManager;
|
|
39
|
+
currentTestCaseStartedId;
|
|
40
|
+
currentTestStepId;
|
|
41
|
+
eventBroadcaster;
|
|
42
|
+
stopwatch;
|
|
43
|
+
gherkinDocument;
|
|
44
|
+
newId;
|
|
45
|
+
pickle;
|
|
46
|
+
testCase;
|
|
47
|
+
maxAttempts;
|
|
48
|
+
skip;
|
|
49
|
+
filterStackTraces;
|
|
50
|
+
supportCodeLibrary;
|
|
51
|
+
testStepResults;
|
|
52
|
+
world;
|
|
53
|
+
worldParameters;
|
|
54
|
+
bindingRegistry;
|
|
55
|
+
constructor({ eventBroadcaster, stopwatch, gherkinDocument, newId, pickle, testCase, retries = 0, skip, filterStackTraces, supportCodeLibrary, worldParameters }) {
|
|
56
|
+
this.attachmentManager = new index_1.default(({ data, media, fileName }) => {
|
|
57
|
+
if ((0, value_checker_1.doesNotHaveValue)(this.currentTestStepId)) {
|
|
58
|
+
throw new Error('Cannot attach when a step/hook is not running. Ensure your step/hook waits for the attach to finish.');
|
|
59
|
+
}
|
|
60
|
+
const attachment = {
|
|
61
|
+
attachment: {
|
|
62
|
+
body: data,
|
|
63
|
+
contentEncoding: media.encoding,
|
|
64
|
+
mediaType: media.contentType,
|
|
65
|
+
fileName,
|
|
66
|
+
testCaseStartedId: this.currentTestCaseStartedId,
|
|
67
|
+
testStepId: this.currentTestStepId
|
|
68
|
+
}
|
|
69
|
+
};
|
|
70
|
+
this.eventBroadcaster.emit('envelope', attachment);
|
|
71
|
+
});
|
|
72
|
+
this.eventBroadcaster = eventBroadcaster;
|
|
73
|
+
this.stopwatch = stopwatch;
|
|
74
|
+
this.gherkinDocument = gherkinDocument;
|
|
75
|
+
this.maxAttempts = 1 + (skip ? 0 : retries);
|
|
76
|
+
this.newId = newId;
|
|
77
|
+
this.pickle = pickle;
|
|
78
|
+
this.testCase = testCase;
|
|
79
|
+
this.skip = skip;
|
|
80
|
+
this.filterStackTraces = filterStackTraces;
|
|
81
|
+
this.supportCodeLibrary = supportCodeLibrary;
|
|
82
|
+
this.worldParameters = worldParameters;
|
|
83
|
+
this.resetTestProgressData();
|
|
84
|
+
this.bindingRegistry = binding_registry_1.BindingRegistry.instance;
|
|
85
|
+
}
|
|
86
|
+
resetTestProgressData() {
|
|
87
|
+
this.world = new this.supportCodeLibrary.World({
|
|
88
|
+
attach: this.attachmentManager.create.bind(this.attachmentManager),
|
|
89
|
+
log: this.attachmentManager.log.bind(this.attachmentManager),
|
|
90
|
+
parameters: this.worldParameters
|
|
91
|
+
});
|
|
92
|
+
this.testStepResults = [];
|
|
93
|
+
}
|
|
94
|
+
getBeforeStepHookDefinitions() {
|
|
95
|
+
return this.supportCodeLibrary.beforeTestStepHookDefinitions.filter(hookDefinition => hookDefinition.appliesToTestCase(this.pickle));
|
|
96
|
+
}
|
|
97
|
+
getAfterStepHookDefinitions() {
|
|
98
|
+
return this.supportCodeLibrary.afterTestStepHookDefinitions
|
|
99
|
+
.slice(0)
|
|
100
|
+
.reverse()
|
|
101
|
+
.filter(hookDefinition => hookDefinition.appliesToTestCase(this.pickle));
|
|
102
|
+
}
|
|
103
|
+
getWorstStepResult() {
|
|
104
|
+
if (!this.testStepResults || this.testStepResults.length === 0) {
|
|
105
|
+
return {
|
|
106
|
+
status: this.skip ? messages.TestStepResultStatus.SKIPPED : messages.TestStepResultStatus.PASSED,
|
|
107
|
+
duration: messages.TimeConversion.millisecondsToDuration(0)
|
|
108
|
+
};
|
|
109
|
+
}
|
|
110
|
+
return (0, messages_1.getWorstTestStepResult)(this.testStepResults);
|
|
111
|
+
}
|
|
112
|
+
async invokeStep(stepParam, stepDefinition, hookParameter) {
|
|
113
|
+
const step = stepParam;
|
|
114
|
+
return await step_runner_1.default.run({
|
|
115
|
+
defaultTimeout: this.supportCodeLibrary.defaultTimeout,
|
|
116
|
+
filterStackTraces: this.filterStackTraces,
|
|
117
|
+
hookParameter,
|
|
118
|
+
step,
|
|
119
|
+
stepDefinition,
|
|
120
|
+
world: this.world
|
|
121
|
+
});
|
|
122
|
+
}
|
|
123
|
+
isSkippingSteps() {
|
|
124
|
+
return this.getWorstStepResult().status !== messages.TestStepResultStatus.PASSED;
|
|
125
|
+
}
|
|
126
|
+
shouldSkipHook(isBeforeHook) {
|
|
127
|
+
return this.skip || (this.isSkippingSteps() && isBeforeHook);
|
|
128
|
+
}
|
|
129
|
+
async aroundTestStep(testStepId, runStepFn) {
|
|
130
|
+
const testStepStarted = {
|
|
131
|
+
testStepStarted: {
|
|
132
|
+
testCaseStartedId: this.currentTestCaseStartedId,
|
|
133
|
+
testStepId,
|
|
134
|
+
timestamp: this.stopwatch.timestamp()
|
|
135
|
+
}
|
|
136
|
+
};
|
|
137
|
+
this.eventBroadcaster.emit('envelope', testStepStarted);
|
|
138
|
+
this.currentTestStepId = testStepId;
|
|
139
|
+
const testStepResult = await runStepFn();
|
|
140
|
+
this.currentTestStepId = undefined;
|
|
141
|
+
this.testStepResults?.push(testStepResult);
|
|
142
|
+
const testStepFinished = {
|
|
143
|
+
testStepFinished: {
|
|
144
|
+
testCaseStartedId: this.currentTestCaseStartedId,
|
|
145
|
+
testStepId,
|
|
146
|
+
testStepResult,
|
|
147
|
+
timestamp: this.stopwatch.timestamp()
|
|
148
|
+
}
|
|
149
|
+
};
|
|
150
|
+
this.eventBroadcaster.emit('envelope', testStepFinished);
|
|
151
|
+
}
|
|
152
|
+
async run() {
|
|
153
|
+
for (let attempt = 0; attempt < this.maxAttempts; attempt++) {
|
|
154
|
+
const moreAttemptsRemaining = attempt + 1 < this.maxAttempts;
|
|
155
|
+
const willBeRetried = await this.runAttempt(attempt, moreAttemptsRemaining);
|
|
156
|
+
if (!willBeRetried) {
|
|
157
|
+
break;
|
|
158
|
+
}
|
|
159
|
+
this.resetTestProgressData();
|
|
160
|
+
}
|
|
161
|
+
return this.getWorstStepResult().status;
|
|
162
|
+
}
|
|
163
|
+
async runAttempt(attempt, moreAttemptsRemaining) {
|
|
164
|
+
this.currentTestCaseStartedId = this.newId();
|
|
165
|
+
const testCaseStarted = {
|
|
166
|
+
testCaseStarted: {
|
|
167
|
+
attempt,
|
|
168
|
+
testCaseId: this.testCase.id,
|
|
169
|
+
id: this.currentTestCaseStartedId,
|
|
170
|
+
timestamp: this.stopwatch.timestamp()
|
|
171
|
+
}
|
|
172
|
+
};
|
|
173
|
+
this.eventBroadcaster.emit('envelope', testCaseStarted);
|
|
174
|
+
// used to determine whether a hook is a Before or After
|
|
175
|
+
let didWeRunStepsYet = false;
|
|
176
|
+
for (const testStep of this.testCase.testSteps) {
|
|
177
|
+
await this.aroundTestStep(testStep.id, async () => {
|
|
178
|
+
if ((0, value_checker_1.doesHaveValue)(testStep.hookId)) {
|
|
179
|
+
const hookParameter = {
|
|
180
|
+
gherkinDocument: this.gherkinDocument,
|
|
181
|
+
pickle: this.pickle,
|
|
182
|
+
testCaseStartedId: this.currentTestCaseStartedId
|
|
183
|
+
};
|
|
184
|
+
if (didWeRunStepsYet) {
|
|
185
|
+
hookParameter.result = this.getWorstStepResult();
|
|
186
|
+
hookParameter.willBeRetried =
|
|
187
|
+
this.getWorstStepResult().status === messages.TestStepResultStatus.FAILED && moreAttemptsRemaining;
|
|
188
|
+
}
|
|
189
|
+
return await this.runHook(findHookDefinition(testStep.hookId, this.supportCodeLibrary), hookParameter, !didWeRunStepsYet);
|
|
190
|
+
}
|
|
191
|
+
else {
|
|
192
|
+
const pickleStep = this.pickle.steps.find(pickleStep => pickleStep.id === testStep.pickleStepId);
|
|
193
|
+
const testStepResult = await this.runStep(pickleStep, testStep);
|
|
194
|
+
didWeRunStepsYet = true;
|
|
195
|
+
return testStepResult;
|
|
196
|
+
}
|
|
197
|
+
});
|
|
198
|
+
}
|
|
199
|
+
// End test case will call dispose on all context types
|
|
200
|
+
// passed into a binding and then end the context.
|
|
201
|
+
await global.messageCollector.endTestCase(this.currentTestCaseStartedId);
|
|
202
|
+
const willBeRetried = this.getWorstStepResult().status === messages.TestStepResultStatus.FAILED && moreAttemptsRemaining;
|
|
203
|
+
const testCaseFinished = {
|
|
204
|
+
testCaseFinished: {
|
|
205
|
+
testCaseStartedId: this.currentTestCaseStartedId,
|
|
206
|
+
timestamp: this.stopwatch.timestamp(),
|
|
207
|
+
willBeRetried
|
|
208
|
+
}
|
|
209
|
+
};
|
|
210
|
+
this.eventBroadcaster.emit('envelope', testCaseFinished);
|
|
211
|
+
return willBeRetried;
|
|
212
|
+
}
|
|
213
|
+
async runHook(hookDefinition, hookParameter, isBeforeHook) {
|
|
214
|
+
if (this.shouldSkipHook(isBeforeHook)) {
|
|
215
|
+
return {
|
|
216
|
+
status: messages.TestStepResultStatus.SKIPPED,
|
|
217
|
+
duration: messages.TimeConversion.millisecondsToDuration(0)
|
|
218
|
+
};
|
|
219
|
+
}
|
|
220
|
+
// Get the step binding and scenario context so that we can
|
|
221
|
+
// initialize any context objects before hooks are executed
|
|
222
|
+
const stepBinding = this.bindingRegistry.getStepBindingByCucumberKey(hookDefinition.options.cucumberKey);
|
|
223
|
+
if (!stepBinding)
|
|
224
|
+
throw (0, console_1.error)('Unable to find StepBinding!');
|
|
225
|
+
const scenarioContext = global.messageCollector.getHookScenarioContext(hookParameter);
|
|
226
|
+
if (!scenarioContext)
|
|
227
|
+
throw (0, console_1.error)('Unable to find the ManagedScenarioContext!');
|
|
228
|
+
await this.initializeContext(stepBinding, scenarioContext);
|
|
229
|
+
return await this.invokeStep(null, hookDefinition, hookParameter);
|
|
230
|
+
}
|
|
231
|
+
async runStepHooks(stepHooks, pickleStep, stepResult) {
|
|
232
|
+
const stepHooksResult = [];
|
|
233
|
+
const hookParameter = {
|
|
234
|
+
gherkinDocument: this.gherkinDocument,
|
|
235
|
+
pickle: this.pickle,
|
|
236
|
+
pickleStep,
|
|
237
|
+
testCaseStartedId: this.currentTestCaseStartedId,
|
|
238
|
+
testStepId: this.currentTestStepId,
|
|
239
|
+
result: stepResult
|
|
240
|
+
};
|
|
241
|
+
for (const stepHookDefinition of stepHooks) {
|
|
242
|
+
stepHooksResult.push(await this.invokeStep(null, stepHookDefinition, hookParameter));
|
|
243
|
+
}
|
|
244
|
+
return stepHooksResult;
|
|
245
|
+
}
|
|
246
|
+
async runStep(pickleStep, testStep) {
|
|
247
|
+
const stepDefinitions = testStep.stepDefinitionIds?.map(stepDefinitionId => {
|
|
248
|
+
return findStepDefinition(stepDefinitionId, this.supportCodeLibrary);
|
|
249
|
+
});
|
|
250
|
+
if (!stepDefinitions || stepDefinitions.length === 0) {
|
|
251
|
+
return {
|
|
252
|
+
status: messages.TestStepResultStatus.UNDEFINED,
|
|
253
|
+
duration: messages.TimeConversion.millisecondsToDuration(0)
|
|
254
|
+
};
|
|
255
|
+
}
|
|
256
|
+
else if (stepDefinitions.length > 1) {
|
|
257
|
+
return {
|
|
258
|
+
message: (0, helpers_1.getAmbiguousStepException)(stepDefinitions),
|
|
259
|
+
status: messages.TestStepResultStatus.AMBIGUOUS,
|
|
260
|
+
duration: messages.TimeConversion.millisecondsToDuration(0)
|
|
261
|
+
};
|
|
262
|
+
}
|
|
263
|
+
else if (this.isSkippingSteps()) {
|
|
264
|
+
return {
|
|
265
|
+
status: messages.TestStepResultStatus.SKIPPED,
|
|
266
|
+
duration: messages.TimeConversion.millisecondsToDuration(0)
|
|
267
|
+
};
|
|
268
|
+
}
|
|
269
|
+
// Get the step binding and scenario context so that we can
|
|
270
|
+
// initialize any context objects before hooks are executed
|
|
271
|
+
const stepBinding = this.bindingRegistry.getStepBindingByCucumberKey(stepDefinitions[0].options.cucumberKey);
|
|
272
|
+
if (!stepBinding)
|
|
273
|
+
throw (0, console_1.error)('Unable to find StepBinding!');
|
|
274
|
+
const scenarioContext = global.messageCollector.getStepScenarioContext(stepBinding);
|
|
275
|
+
if (!scenarioContext)
|
|
276
|
+
throw (0, console_1.error)('Unable to find the ManagedScenarioContext!');
|
|
277
|
+
await this.initializeContext(stepBinding, scenarioContext);
|
|
278
|
+
// next execute any before step hooks followed by the step if there are no
|
|
279
|
+
// failures in before step hooks.
|
|
280
|
+
let stepResult;
|
|
281
|
+
let stepResults = await this.runStepHooks(this.getBeforeStepHookDefinitions(), pickleStep);
|
|
282
|
+
if ((0, messages_1.getWorstTestStepResult)(stepResults).status !== messages.TestStepResultStatus.FAILED) {
|
|
283
|
+
stepResult = await this.invokeStep(pickleStep, stepDefinitions[0]);
|
|
284
|
+
stepResults.push(stepResult);
|
|
285
|
+
}
|
|
286
|
+
// run the after step hooks
|
|
287
|
+
const afterStepHookResults = await this.runStepHooks(this.getAfterStepHookDefinitions(), pickleStep, stepResult);
|
|
288
|
+
stepResults = stepResults.concat(afterStepHookResults);
|
|
289
|
+
const finalStepResult = (0, messages_1.getWorstTestStepResult)(stepResults);
|
|
290
|
+
let finalDuration = messages.TimeConversion.millisecondsToDuration(0);
|
|
291
|
+
for (const result of stepResults) {
|
|
292
|
+
finalDuration = messages.TimeConversion.addDurations(finalDuration, result.duration);
|
|
293
|
+
}
|
|
294
|
+
finalStepResult.duration = finalDuration;
|
|
295
|
+
return finalStepResult;
|
|
296
|
+
}
|
|
297
|
+
/**
|
|
298
|
+
* Helper used to initialize any context types that are passed into
|
|
299
|
+
* a binding class before any hooks or steps are executed.
|
|
300
|
+
* @param stepBinding
|
|
301
|
+
* @param scenarioContext
|
|
302
|
+
*/
|
|
303
|
+
async initializeContext(stepBinding, scenarioContext) {
|
|
304
|
+
const contextTypes = this.bindingRegistry.getContextTypesForTarget(stepBinding.targetPrototype);
|
|
305
|
+
if (contextTypes.length > 0) {
|
|
306
|
+
scenarioContext.getOrActivateBindingClass(stepBinding.targetPrototype, contextTypes, this.world);
|
|
307
|
+
await scenarioContext.initialize();
|
|
308
|
+
}
|
|
309
|
+
}
|
|
310
|
+
}
|
|
311
|
+
exports.default = TestCaseRunner;
|
|
312
|
+
function findHookDefinition(id, supportCodeLibrary) {
|
|
313
|
+
return [...supportCodeLibrary.beforeTestCaseHookDefinitions, ...supportCodeLibrary.afterTestCaseHookDefinitions].find(definition => definition.id === id);
|
|
314
|
+
}
|
|
315
|
+
function findStepDefinition(id, supportCodeLibrary) {
|
|
316
|
+
return supportCodeLibrary.stepDefinitions.find(definition => definition.id === id);
|
|
317
|
+
}
|
|
318
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdC1jYXNlLXJ1bm5lci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jdWN1bWJlci90ZXN0LWNhc2UtcnVubmVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxvRUFBbUY7QUFFbkYsb0dBQXdGO0FBQ3hGLDZGQUFvRTtBQUNwRSw2REFBK0M7QUFDL0MsaURBQXlFO0FBVXpFLHdFQUF1RjtBQUd2Rix5REFBcUQ7QUFHckQscUNBQWdDO0FBRWhDLE1BQXFCLGNBQWM7SUFDakIsaUJBQWlCLENBQW9CO0lBQzlDLHdCQUF3QixDQUFVO0lBQ2xDLGlCQUFpQixDQUFVO0lBQ2xCLGdCQUFnQixDQUFlO0lBQy9CLFNBQVMsQ0FBYTtJQUN0QixlQUFlLENBQTJCO0lBQzFDLEtBQUssQ0FBb0I7SUFDekIsTUFBTSxDQUFrQjtJQUN4QixRQUFRLENBQW9CO0lBQzVCLFdBQVcsQ0FBUztJQUNwQixJQUFJLENBQVU7SUFDZCxpQkFBaUIsQ0FBVTtJQUMzQixrQkFBa0IsQ0FBc0I7SUFDakQsZUFBZSxDQUE2QjtJQUM1QyxLQUFLLENBQU07SUFDRixlQUFlLENBQU07SUFDOUIsZUFBZSxDQUFrQjtJQUV6QyxZQUFZLEVBQ1gsZ0JBQWdCLEVBQ2hCLFNBQVMsRUFDVCxlQUFlLEVBQ2YsS0FBSyxFQUNMLE1BQU0sRUFDTixRQUFRLEVBQ1IsT0FBTyxHQUFHLENBQUMsRUFDWCxJQUFJLEVBQ0osaUJBQWlCLEVBQ2pCLGtCQUFrQixFQUNsQixlQUFlLEVBQ1k7UUFDM0IsSUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksZUFBaUIsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFO1lBQzVFLElBQUksSUFBQSxnQ0FBZ0IsRUFBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsRUFBRTtnQkFDN0MsTUFBTSxJQUFJLEtBQUssQ0FDZCxzR0FBc0csQ0FDdEcsQ0FBQzthQUNGO1lBQ0QsTUFBTSxVQUFVLEdBQXNCO2dCQUNyQyxVQUFVLEVBQUU7b0JBQ1gsSUFBSSxFQUFFLElBQUk7b0JBQ1YsZUFBZSxFQUFFLEtBQUssQ0FBQyxRQUFRO29CQUMvQixTQUFTLEVBQUUsS0FBSyxDQUFDLFdBQVc7b0JBQzVCLFFBQVE7b0JBQ1IsaUJBQWlCLEVBQUUsSUFBSSxDQUFDLHdCQUF3QjtvQkFDaEQsVUFBVSxFQUFFLElBQUksQ0FBQyxpQkFBaUI7aUJBQ2xDO2FBQ0QsQ0FBQztZQUNGLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBQ3BELENBQUMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLGdCQUFnQixHQUFHLGdCQUFnQixDQUFDO1FBQ3pDLElBQUksQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDO1FBQzNCLElBQUksQ0FBQyxlQUFlLEdBQUcsZUFBZSxDQUFDO1FBQ3ZDLElBQUksQ0FBQyxXQUFXLEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzVDLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBQ25CLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO1FBQ2pCLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxpQkFBaUIsQ0FBQztRQUMzQyxJQUFJLENBQUMsa0JBQWtCLEdBQUcsa0JBQWtCLENBQUM7UUFDN0MsSUFBSSxDQUFDLGVBQWUsR0FBRyxlQUFlLENBQUM7UUFDdkMsSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUM7UUFDN0IsSUFBSSxDQUFDLGVBQWUsR0FBRyxrQ0FBZSxDQUFDLFFBQVEsQ0FBQztJQUNqRCxDQUFDO0lBRUQscUJBQXFCO1FBQ3BCLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxJQUFJLENBQUMsa0JBQWtCLENBQUMsS0FBSyxDQUFDO1lBQzlDLE1BQU0sRUFBRSxJQUFJLENBQUMsaUJBQWlCLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUM7WUFDbEUsR0FBRyxFQUFFLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQztZQUM1RCxVQUFVLEVBQUUsSUFBSSxDQUFDLGVBQWU7U0FDaEMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLGVBQWUsR0FBRyxFQUFFLENBQUM7SUFDM0IsQ0FBQztJQUVELDRCQUE0QjtRQUMzQixPQUFPLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyw2QkFBNkIsQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLEVBQUUsQ0FDcEYsY0FBYyxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FDN0MsQ0FBQztJQUNILENBQUM7SUFFRCwyQkFBMkI7UUFDMUIsT0FBTyxJQUFJLENBQUMsa0JBQWtCLENBQUMsNEJBQTRCO2FBQ3pELEtBQUssQ0FBQyxDQUFDLENBQUM7YUFDUixPQUFPLEVBQUU7YUFDVCxNQUFNLENBQUMsY0FBYyxDQUFDLEVBQUUsQ0FBQyxjQUFjLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7SUFDM0UsQ0FBQztJQUVELGtCQUFrQjtRQUNqQixJQUFJLENBQUMsSUFBSSxDQUFDLGVBQWUsSUFBSSxJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7WUFDL0QsT0FBTztnQkFDTixNQUFNLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLG9CQUFvQixDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLG9CQUFvQixDQUFDLE1BQU07Z0JBQ2hHLFFBQVEsRUFBRSxRQUFRLENBQUMsY0FBYyxDQUFDLHNCQUFzQixDQUFDLENBQUMsQ0FBQzthQUMzRCxDQUFDO1NBQ0Y7UUFDRCxPQUFPLElBQUEsaUNBQXNCLEVBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDO0lBQ3JELENBQUM7SUFFRCxLQUFLLENBQUMsVUFBVSxDQUNmLFNBQXFDLEVBQ3JDLGNBQTJCLEVBQzNCLGFBQW1CO1FBRW5CLE1BQU0sSUFBSSxHQUFHLFNBQVUsQ0FBQztRQUN4QixPQUFPLE1BQU0scUJBQVUsQ0FBQyxHQUFHLENBQUM7WUFDM0IsY0FBYyxFQUFFLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxjQUFjO1lBQ3RELGlCQUFpQixFQUFFLElBQUksQ0FBQyxpQkFBaUI7WUFDekMsYUFBYTtZQUNiLElBQUk7WUFDSixjQUFjO1lBQ2QsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLO1NBQ2pCLENBQUMsQ0FBQztJQUNKLENBQUM7SUFFRCxlQUFlO1FBQ2QsT0FBTyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQyxNQUFNLEtBQUssUUFBUSxDQUFDLG9CQUFvQixDQUFDLE1BQU0sQ0FBQztJQUNsRixDQUFDO0lBRUQsY0FBYyxDQUFDLFlBQXFCO1FBQ25DLE9BQU8sSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLEVBQUUsSUFBSSxZQUFZLENBQUMsQ0FBQztJQUM5RCxDQUFDO0lBRUQsS0FBSyxDQUFDLGNBQWMsQ0FBQyxVQUFrQixFQUFFLFNBQWlEO1FBQ3pGLE1BQU0sZUFBZSxHQUFzQjtZQUMxQyxlQUFlLEVBQUU7Z0JBQ2hCLGlCQUFpQixFQUFFLElBQUksQ0FBQyx3QkFBeUI7Z0JBQ2pELFVBQVU7Z0JBQ1YsU0FBUyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsU0FBUyxFQUFFO2FBQ3JDO1NBQ0QsQ0FBQztRQUNGLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLGVBQWUsQ0FBQyxDQUFDO1FBQ3hELElBQUksQ0FBQyxpQkFBaUIsR0FBRyxVQUFVLENBQUM7UUFDcEMsTUFBTSxjQUFjLEdBQUcsTUFBTSxTQUFTLEVBQUUsQ0FBQztRQUN6QyxJQUFJLENBQUMsaUJBQWlCLEdBQUcsU0FBUyxDQUFDO1FBQ25DLElBQUksQ0FBQyxlQUFlLEVBQUUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQzNDLE1BQU0sZ0JBQWdCLEdBQXNCO1lBQzNDLGdCQUFnQixFQUFFO2dCQUNqQixpQkFBaUIsRUFBRSxJQUFJLENBQUMsd0JBQXlCO2dCQUNqRCxVQUFVO2dCQUNWLGNBQWM7Z0JBQ2QsU0FBUyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsU0FBUyxFQUFFO2FBQ3JDO1NBQ0QsQ0FBQztRQUNGLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLGdCQUFnQixDQUFDLENBQUM7SUFDMUQsQ0FBQztJQUVELEtBQUssQ0FBQyxHQUFHO1FBQ1IsS0FBSyxJQUFJLE9BQU8sR0FBRyxDQUFDLEVBQUUsT0FBTyxHQUFHLElBQUksQ0FBQyxXQUFXLEVBQUUsT0FBTyxFQUFFLEVBQUU7WUFDNUQsTUFBTSxxQkFBcUIsR0FBRyxPQUFPLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUM7WUFFN0QsTUFBTSxhQUFhLEdBQUcsTUFBTSxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sRUFBRSxxQkFBcUIsQ0FBQyxDQUFDO1lBRTVFLElBQUksQ0FBQyxhQUFhLEVBQUU7Z0JBQ25CLE1BQU07YUFDTjtZQUNELElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO1NBQzdCO1FBQ0QsT0FBTyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQyxNQUFNLENBQUM7SUFDekMsQ0FBQztJQUVELEtBQUssQ0FBQyxVQUFVLENBQUMsT0FBZSxFQUFFLHFCQUE4QjtRQUMvRCxJQUFJLENBQUMsd0JBQXdCLEdBQUcsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQzdDLE1BQU0sZUFBZSxHQUFzQjtZQUMxQyxlQUFlLEVBQUU7Z0JBQ2hCLE9BQU87Z0JBQ1AsVUFBVSxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRTtnQkFDNUIsRUFBRSxFQUFFLElBQUksQ0FBQyx3QkFBd0I7Z0JBQ2pDLFNBQVMsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLFNBQVMsRUFBRTthQUNyQztTQUNELENBQUM7UUFDRixJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxlQUFlLENBQUMsQ0FBQztRQUN4RCx3REFBd0Q7UUFDeEQsSUFBSSxnQkFBZ0IsR0FBRyxLQUFLLENBQUM7UUFDN0IsS0FBSyxNQUFNLFFBQVEsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsRUFBRTtZQUMvQyxNQUFNLElBQUksQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLEVBQUUsRUFBRSxLQUFLLElBQUksRUFBRTtnQkFDakQsSUFBSSxJQUFBLDZCQUFhLEVBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxFQUFFO29CQUNuQyxNQUFNLGFBQWEsR0FBMkI7d0JBQzdDLGVBQWUsRUFBRSxJQUFJLENBQUMsZUFBZTt3QkFDckMsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNO3dCQUNuQixpQkFBaUIsRUFBRSxJQUFJLENBQUMsd0JBQXlCO3FCQUNqRCxDQUFDO29CQUNGLElBQUksZ0JBQWdCLEVBQUU7d0JBQ3JCLGFBQWEsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7d0JBQ2pELGFBQWEsQ0FBQyxhQUFhOzRCQUMxQixJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQyxNQUFNLEtBQUssUUFBUSxDQUFDLG9CQUFvQixDQUFDLE1BQU0sSUFBSSxxQkFBcUIsQ0FBQztxQkFDcEc7b0JBQ0QsT0FBTyxNQUFNLElBQUksQ0FBQyxPQUFPLENBQ3hCLGtCQUFrQixDQUFDLFFBQVEsQ0FBQyxNQUFPLEVBQUUsSUFBSSxDQUFDLGtCQUFrQixDQUFDLEVBQzdELGFBQWEsRUFDYixDQUFDLGdCQUFnQixDQUNqQixDQUFDO2lCQUNGO3FCQUFNO29CQUNOLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxFQUFFLEtBQUssUUFBUSxDQUFDLFlBQVksQ0FBQyxDQUFDO29CQUNqRyxNQUFNLGNBQWMsR0FBRyxNQUFNLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVyxFQUFFLFFBQVEsQ0FBQyxDQUFDO29CQUNqRSxnQkFBZ0IsR0FBRyxJQUFJLENBQUM7b0JBQ3hCLE9BQU8sY0FBYyxDQUFDO2lCQUN0QjtZQUNGLENBQUMsQ0FBQyxDQUFDO1NBQ0g7UUFDRCx1REFBdUQ7UUFDdkQsa0RBQWtEO1FBQ2xELE1BQU0sTUFBTSxDQUFDLGdCQUFnQixDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsd0JBQXdCLENBQUMsQ0FBQztRQUV6RSxNQUFNLGFBQWEsR0FDbEIsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUMsTUFBTSxLQUFLLFFBQVEsQ0FBQyxvQkFBb0IsQ0FBQyxNQUFNLElBQUkscUJBQXFCLENBQUM7UUFDcEcsTUFBTSxnQkFBZ0IsR0FBc0I7WUFDM0MsZ0JBQWdCLEVBQUU7Z0JBQ2pCLGlCQUFpQixFQUFFLElBQUksQ0FBQyx3QkFBd0I7Z0JBQ2hELFNBQVMsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLFNBQVMsRUFBRTtnQkFDckMsYUFBYTthQUNiO1NBQ0QsQ0FBQztRQUNGLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLGdCQUFnQixDQUFDLENBQUM7UUFFekQsT0FBTyxhQUFhLENBQUM7SUFDdEIsQ0FBQztJQUVELEtBQUssQ0FBQyxPQUFPLENBQ1osY0FBc0MsRUFDdEMsYUFBcUMsRUFDckMsWUFBcUI7UUFFckIsSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDLFlBQVksQ0FBQyxFQUFFO1lBQ3RDLE9BQU87Z0JBQ04sTUFBTSxFQUFFLFFBQVEsQ0FBQyxvQkFBb0IsQ0FBQyxPQUFPO2dCQUM3QyxRQUFRLEVBQUUsUUFBUSxDQUFDLGNBQWMsQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDLENBQUM7YUFDM0QsQ0FBQztTQUNGO1FBQ0QsMkRBQTJEO1FBQzNELDJEQUEyRDtRQUMzRCxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLDJCQUEyQixDQUFFLGNBQWMsQ0FBQyxPQUFlLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDbEgsSUFBSSxDQUFDLFdBQVc7WUFBRSxNQUFNLElBQUEsZUFBSyxFQUFDLDZCQUE2QixDQUFDLENBQUM7UUFDN0QsTUFBTSxlQUFlLEdBQUcsTUFBTSxDQUFDLGdCQUFnQixDQUFDLHNCQUFzQixDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQ3RGLElBQUksQ0FBQyxlQUFlO1lBQUUsTUFBTSxJQUFBLGVBQUssRUFBQyw0Q0FBNEMsQ0FBQyxDQUFDO1FBQ2hGLE1BQU0sSUFBSSxDQUFDLGlCQUFpQixDQUFDLFdBQVcsRUFBRSxlQUFlLENBQUMsQ0FBQztRQUUzRCxPQUFPLE1BQU0sSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsY0FBYyxFQUFFLGFBQWEsQ0FBQyxDQUFDO0lBQ25FLENBQUM7SUFFRCxLQUFLLENBQUMsWUFBWSxDQUNqQixTQUFtQyxFQUNuQyxVQUErQixFQUMvQixVQUFvQztRQUVwQyxNQUFNLGVBQWUsR0FBRyxFQUFFLENBQUM7UUFDM0IsTUFBTSxhQUFhLEdBQTJCO1lBQzdDLGVBQWUsRUFBRSxJQUFJLENBQUMsZUFBZTtZQUNyQyxNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU07WUFDbkIsVUFBVTtZQUNWLGlCQUFpQixFQUFFLElBQUksQ0FBQyx3QkFBeUI7WUFDakQsVUFBVSxFQUFFLElBQUksQ0FBQyxpQkFBa0I7WUFDbkMsTUFBTSxFQUFFLFVBQVc7U0FDbkIsQ0FBQztRQUNGLEtBQUssTUFBTSxrQkFBa0IsSUFBSSxTQUFTLEVBQUU7WUFDM0MsZUFBZSxDQUFDLElBQUksQ0FBQyxNQUFNLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLGtCQUFrQixFQUFFLGFBQWEsQ0FBQyxDQUFDLENBQUM7U0FDckY7UUFDRCxPQUFPLGVBQWUsQ0FBQztJQUN4QixDQUFDO0lBRUQsS0FBSyxDQUFDLE9BQU8sQ0FBQyxVQUErQixFQUFFLFFBQTJCO1FBQ3pFLE1BQU0sZUFBZSxHQUFHLFFBQVEsQ0FBQyxpQkFBaUIsRUFBRSxHQUFHLENBQUMsZ0JBQWdCLENBQUMsRUFBRTtZQUMxRSxPQUFPLGtCQUFrQixDQUFDLGdCQUFnQixFQUFFLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1FBQ3RFLENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLGVBQWUsSUFBSSxlQUFlLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtZQUNyRCxPQUFPO2dCQUNOLE1BQU0sRUFBRSxRQUFRLENBQUMsb0JBQW9CLENBQUMsU0FBUztnQkFDL0MsUUFBUSxFQUFFLFFBQVEsQ0FBQyxjQUFjLENBQUMsc0JBQXNCLENBQUMsQ0FBQyxDQUFDO2FBQzNELENBQUM7U0FDRjthQUFNLElBQUksZUFBZSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDdEMsT0FBTztnQkFDTixPQUFPLEVBQUUsSUFBQSxtQ0FBeUIsRUFBQyxlQUFlLENBQUM7Z0JBQ25ELE1BQU0sRUFBRSxRQUFRLENBQUMsb0JBQW9CLENBQUMsU0FBUztnQkFDL0MsUUFBUSxFQUFFLFFBQVEsQ0FBQyxjQUFjLENBQUMsc0JBQXNCLENBQUMsQ0FBQyxDQUFDO2FBQzNELENBQUM7U0FDRjthQUFNLElBQUksSUFBSSxDQUFDLGVBQWUsRUFBRSxFQUFFO1lBQ2xDLE9BQU87Z0JBQ04sTUFBTSxFQUFFLFFBQVEsQ0FBQyxvQkFBb0IsQ0FBQyxPQUFPO2dCQUM3QyxRQUFRLEVBQUUsUUFBUSxDQUFDLGNBQWMsQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDLENBQUM7YUFDM0QsQ0FBQztTQUNGO1FBQ0QsMkRBQTJEO1FBQzNELDJEQUEyRDtRQUMzRCxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLDJCQUEyQixDQUNsRSxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBZSxDQUFDLFdBQVcsQ0FDL0MsQ0FBQztRQUNGLElBQUksQ0FBQyxXQUFXO1lBQUUsTUFBTSxJQUFBLGVBQUssRUFBQyw2QkFBNkIsQ0FBQyxDQUFDO1FBQzdELE1BQU0sZUFBZSxHQUFHLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxzQkFBc0IsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUNwRixJQUFJLENBQUMsZUFBZTtZQUFFLE1BQU0sSUFBQSxlQUFLLEVBQUMsNENBQTRDLENBQUMsQ0FBQztRQUNoRixNQUFNLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxXQUFXLEVBQUUsZUFBZSxDQUFDLENBQUM7UUFFM0QsMEVBQTBFO1FBQzFFLGlDQUFpQztRQUNqQyxJQUFJLFVBQVUsQ0FBQztRQUNmLElBQUksV0FBVyxHQUFHLE1BQU0sSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsNEJBQTRCLEVBQUUsRUFBRSxVQUFVLENBQUMsQ0FBQztRQUMzRixJQUFJLElBQUEsaUNBQXNCLEVBQUMsV0FBVyxDQUFDLENBQUMsTUFBTSxLQUFLLFFBQVEsQ0FBQyxvQkFBb0IsQ0FBQyxNQUFNLEVBQUU7WUFDeEYsVUFBVSxHQUFHLE1BQU0sSUFBSSxDQUFDLFVBQVUsQ0FBQyxVQUFVLEVBQUUsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDbkUsV0FBVyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztTQUM3QjtRQUNELDJCQUEyQjtRQUMzQixNQUFNLG9CQUFvQixHQUFHLE1BQU0sSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsMkJBQTJCLEVBQUUsRUFBRSxVQUFVLEVBQUUsVUFBVSxDQUFDLENBQUM7UUFDakgsV0FBVyxHQUFHLFdBQVcsQ0FBQyxNQUFNLENBQUMsb0JBQW9CLENBQUMsQ0FBQztRQUV2RCxNQUFNLGVBQWUsR0FBRyxJQUFBLGlDQUFzQixFQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQzVELElBQUksYUFBYSxHQUFHLFFBQVEsQ0FBQyxjQUFjLENBQUMsc0JBQXNCLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdEUsS0FBSyxNQUFNLE1BQU0sSUFBSSxXQUFXLEVBQUU7WUFDakMsYUFBYSxHQUFHLFFBQVEsQ0FBQyxjQUFjLENBQUMsWUFBWSxDQUFDLGFBQWEsRUFBRSxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7U0FDckY7UUFDRCxlQUFlLENBQUMsUUFBUSxHQUFHLGFBQWEsQ0FBQztRQUN6QyxPQUFPLGVBQWUsQ0FBQztJQUN4QixDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxLQUFLLENBQUMsaUJBQWlCLENBQUMsV0FBd0IsRUFBRSxlQUF1QztRQUN4RixNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLHdCQUF3QixDQUFDLFdBQVcsQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUNoRyxJQUFJLFlBQVksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQzVCLGVBQWUsQ0FBQyx5QkFBeUIsQ0FBQyxXQUFXLENBQUMsZUFBZSxFQUFFLFlBQVksRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDakcsTUFBTSxlQUFlLENBQUMsVUFBVSxFQUFFLENBQUM7U0FDbkM7SUFDRixDQUFDO0NBQ0Q7QUFwVUQsaUNBb1VDO0FBRUQsU0FBUyxrQkFBa0IsQ0FBQyxFQUFVLEVBQUUsa0JBQXVDO0lBQzlFLE9BQU8sQ0FBQyxHQUFHLGtCQUFrQixDQUFDLDZCQUE2QixFQUFFLEdBQUcsa0JBQWtCLENBQUMsNEJBQTRCLENBQUMsQ0FBQyxJQUFJLENBQ3BILFVBQVUsQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQ2pDLENBQUM7QUFDSixDQUFDO0FBRUQsU0FBUyxrQkFBa0IsQ0FBQyxFQUFVLEVBQUUsa0JBQXVDO0lBQzlFLE9BQU8sa0JBQWtCLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFFLENBQUM7QUFDckYsQ0FBQyJ9
|
package/lib/types/types.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { World } from '@cucumber/cucumber';
|
|
1
2
|
/**
|
|
2
3
|
* A string representation of a [[RegExp]] that defines a Cucumber step pattern.
|
|
3
4
|
*/
|
|
@@ -14,7 +15,7 @@ export interface ContextType {
|
|
|
14
15
|
/**
|
|
15
16
|
* A default constructor.
|
|
16
17
|
*/
|
|
17
|
-
new (): any;
|
|
18
|
+
new (worldObj: World): any;
|
|
18
19
|
}
|
|
19
20
|
export type TypeDecorator = <T>(target: {
|
|
20
21
|
new (...args: any[]): T;
|
package/lib/version.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare const version = "6.
|
|
1
|
+
export declare const version = "6.5.0";
|
package/lib/version.js
CHANGED
|
@@ -2,5 +2,5 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.version = void 0;
|
|
4
4
|
// Generated by genversion.
|
|
5
|
-
exports.version = '6.
|
|
5
|
+
exports.version = '6.5.0';
|
|
6
6
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyc2lvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy92ZXJzaW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLDJCQUEyQjtBQUNkLFFBQUEsT0FBTyxHQUFHLE9BQU8sQ0FBQSJ9
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@lynxwall/cucumber-tsflow",
|
|
3
|
-
"description": "Provides 'specflow' like bindings for CucumberJS 9.
|
|
4
|
-
"version": "6.
|
|
3
|
+
"description": "Provides 'specflow' like bindings for CucumberJS 9.6.0+ in TypeScript 5.0+.",
|
|
4
|
+
"version": "6.5.0",
|
|
5
5
|
"author": "Lonnie Wall <lynxdev@lynxwall.com>",
|
|
6
6
|
"license": "MIT",
|
|
7
7
|
"main": "./lib/index",
|