@@ -104,19 +104,7 @@ func (e *specExecutor) execute(executeBefore, execute, executeAfter bool) *resul
104104 logger .Fatalf (true , "Failed to resolve Specifications : %s" , err .Error ())
105105 }
106106 e .specResult .AddScenarioResults (results )
107- scnMap := make (map [int ]bool )
108- for _ , s := range tableDriven {
109- if _ , ok := scnMap [s .Span .Start ]; ! ok {
110- scnMap [s .Span .Start ] = true
111- }
112- r , err := e .executeScenario (s )
113- if err != nil {
114- logger .Fatalf (true , "Failed to resolve Specifications : %s" , err .Error ())
115- }
116- e .specResult .AddTableDrivenScenarioResult (r , gauge .ConvertToProtoTable (s .DataTable .Table ),
117- s .ScenarioDataTableRowIndex , s .SpecDataTableRowIndex , s .SpecDataTableRow .IsInitialized ())
118- }
119- e .specResult .ScenarioCount += len (scnMap )
107+ e .executeScenarioTableDrivenScenarios (tableDriven )
120108 } else {
121109 err := e .executeSpec ()
122110 if err != nil {
@@ -152,18 +140,40 @@ func (e *specExecutor) executeSpec() error {
152140 nonTableRelatedScenarios , tableRelatedScenarios := parser .FilterTableRelatedScenarios (e .specification .Scenarios , func (s * gauge.Scenario ) bool {
153141 return s .SpecDataTableRow .IsInitialized ()
154142 })
155- res , err := e .executeScenarios (nonTableRelatedScenarios )
143+
144+ others , scenarioTableDriven := parser .FilterTableRelatedScenarios (nonTableRelatedScenarios , func (s * gauge.Scenario ) bool {
145+ return s .ScenarioDataTableRow .IsInitialized ()
146+ })
147+
148+ res , err := e .executeScenarios (others )
156149 if err != nil {
157150 return err
158151 }
159152 e .specResult .AddScenarioResults (res )
153+ e .executeScenarioTableDrivenScenarios (scenarioTableDriven )
160154 err = e .executeTableRelatedScenarios (tableRelatedScenarios )
161155 if err != nil {
162156 return err
163157 }
164158 return nil
165159}
166160
161+ func (e * specExecutor ) executeScenarioTableDrivenScenarios (scenarios []* gauge.Scenario ) {
162+ scnMap := make (map [int ]bool )
163+ for _ , s := range scenarios {
164+ if _ , ok := scnMap [s .Span .Start ]; ! ok {
165+ scnMap [s .Span .Start ] = true
166+ }
167+ r , err := e .executeScenario (s )
168+ if err != nil {
169+ logger .Fatalf (true , "Failed to resolve Specifications : %s" , err .Error ())
170+ }
171+ e .specResult .AddTableDrivenScenarioResult (r , gauge .ConvertToProtoTable (s .DataTable .Table ),
172+ s .ScenarioDataTableRowIndex , s .SpecDataTableRowIndex , s .SpecDataTableRow .IsInitialized ())
173+ }
174+ e .specResult .ScenarioCount += len (scnMap )
175+ }
176+
167177func (e * specExecutor ) initSpecDataStore () * gauge_messages.ProtoExecutionResult {
168178 initSpecDataStoreMessage := & gauge_messages.Message {MessageType : gauge_messages .Message_SpecDataStoreInit ,
169179 SpecDataStoreInitRequest : & gauge_messages.SpecDataStoreInitRequest {Stream : int32 (e .stream )}}
0 commit comments