1
1
import { EventEmitter } from 'node:events'
2
- import * as messages from '@cucumber/messages'
3
- import { IdGenerator } from '@cucumber/messages'
2
+ import {
3
+ Envelope ,
4
+ IdGenerator ,
5
+ Pickle ,
6
+ TestCase ,
7
+ TestStep ,
8
+ Group as MessagesGroup ,
9
+ } from '@cucumber/messages'
4
10
import { Group } from '@cucumber/cucumber-expressions'
5
11
import { SupportCodeLibrary } from '../support_code_library_builder/types'
6
12
import { doesHaveValue } from '../value_checker'
7
-
8
- export declare type IAssembledTestCases = Record < string , messages . TestCase >
9
-
10
- export interface IAssembleTestCasesOptions {
11
- eventBroadcaster : EventEmitter
12
- newId : IdGenerator . NewId
13
- pickles : messages . Pickle [ ]
14
- supportCodeLibrary : SupportCodeLibrary
15
- }
13
+ import { AssembledTestCase , SourcedPickle } from './types'
16
14
17
15
export async function assembleTestCases ( {
18
16
eventBroadcaster,
19
17
newId,
20
- pickles ,
18
+ sourcedPickles ,
21
19
supportCodeLibrary,
22
- } : IAssembleTestCasesOptions ) : Promise < IAssembledTestCases > {
23
- const result : IAssembledTestCases = { }
24
- for ( const pickle of pickles ) {
25
- const { id : pickleId } = pickle
20
+ } : {
21
+ eventBroadcaster : EventEmitter
22
+ newId : IdGenerator . NewId
23
+ sourcedPickles : ReadonlyArray < SourcedPickle >
24
+ supportCodeLibrary : SupportCodeLibrary
25
+ } ) : Promise < ReadonlyArray < AssembledTestCase > > {
26
+ return sourcedPickles . map ( ( { gherkinDocument, pickle } ) => {
26
27
const testCaseId = newId ( )
27
- const fromBeforeHooks : messages . TestStep [ ] = makeBeforeHookSteps ( {
28
+ const fromBeforeHooks : TestStep [ ] = makeBeforeHookSteps ( {
28
29
supportCodeLibrary,
29
30
pickle,
30
31
newId,
31
32
} )
32
- const fromStepDefinitions : messages . TestStep [ ] = makeSteps ( {
33
+ const fromStepDefinitions : TestStep [ ] = makeSteps ( {
33
34
pickle,
34
35
supportCodeLibrary,
35
36
newId,
36
37
} )
37
- const fromAfterHooks : messages . TestStep [ ] = makeAfterHookSteps ( {
38
+ const fromAfterHooks : TestStep [ ] = makeAfterHookSteps ( {
38
39
supportCodeLibrary,
39
40
pickle,
40
41
newId,
41
42
} )
42
- const testCase : messages . TestCase = {
43
- pickleId,
43
+ const testCase : TestCase = {
44
+ pickleId : pickle . id ,
44
45
id : testCaseId ,
45
46
testSteps : [
46
47
...fromBeforeHooks ,
47
48
...fromStepDefinitions ,
48
49
...fromAfterHooks ,
49
50
] ,
50
51
}
51
- eventBroadcaster . emit ( 'envelope' , { testCase } )
52
- result [ pickleId ] = testCase
53
- }
54
- return result
52
+ eventBroadcaster . emit ( 'envelope' , { testCase } satisfies Envelope )
53
+ return {
54
+ gherkinDocument,
55
+ pickle,
56
+ testCase,
57
+ }
58
+ } )
55
59
}
56
60
57
61
function makeAfterHookSteps ( {
@@ -60,9 +64,9 @@ function makeAfterHookSteps({
60
64
newId,
61
65
} : {
62
66
supportCodeLibrary : SupportCodeLibrary
63
- pickle : messages . Pickle
67
+ pickle : Pickle
64
68
newId : IdGenerator . NewId
65
- } ) : messages . TestStep [ ] {
69
+ } ) : TestStep [ ] {
66
70
return supportCodeLibrary . afterTestCaseHookDefinitions
67
71
. slice ( 0 )
68
72
. reverse ( )
@@ -79,9 +83,9 @@ function makeBeforeHookSteps({
79
83
newId,
80
84
} : {
81
85
supportCodeLibrary : SupportCodeLibrary
82
- pickle : messages . Pickle
86
+ pickle : Pickle
83
87
newId : IdGenerator . NewId
84
- } ) : messages . TestStep [ ] {
88
+ } ) : TestStep [ ] {
85
89
return supportCodeLibrary . beforeTestCaseHookDefinitions
86
90
. filter ( ( hookDefinition ) => hookDefinition . appliesToTestCase ( pickle ) )
87
91
. map ( ( hookDefinition ) => ( {
@@ -95,10 +99,10 @@ function makeSteps({
95
99
supportCodeLibrary,
96
100
newId,
97
101
} : {
98
- pickle : messages . Pickle
102
+ pickle : Pickle
99
103
supportCodeLibrary : SupportCodeLibrary
100
104
newId : ( ) => string
101
- } ) : messages . TestStep [ ] {
105
+ } ) : TestStep [ ] {
102
106
return pickle . steps . map ( ( pickleStep ) => {
103
107
const stepDefinitions = supportCodeLibrary . stepDefinitions . filter (
104
108
( stepDefinition ) => stepDefinition . matchesStepName ( pickleStep . text )
@@ -124,7 +128,7 @@ function makeSteps({
124
128
} )
125
129
}
126
130
127
- function mapArgumentGroup ( group : Group ) : messages . Group {
131
+ function mapArgumentGroup ( group : Group ) : MessagesGroup {
128
132
return {
129
133
start : group . start ,
130
134
value : group . value ,
0 commit comments