github.com/getgauge/gauge@v1.6.9/execution/resolve_test.go (about) 1 /*---------------------------------------------------------------- 2 * Copyright (c) ThoughtWorks, Inc. 3 * Licensed under the Apache License, Version 2.0 4 * See LICENSE in the project root for license information. 5 *----------------------------------------------------------------*/ 6 7 package execution 8 9 import ( 10 "path/filepath" 11 "testing" 12 13 "github.com/getgauge/gauge-proto/go/gauge_messages" 14 "github.com/getgauge/gauge/gauge" 15 "github.com/getgauge/gauge/parser" 16 . "gopkg.in/check.v1" 17 ) 18 19 func (s *MySuite) TestResolveConceptToProtoConceptItem(c *C) { 20 conceptDictionary := gauge.NewConceptDictionary() 21 22 specText := newSpecBuilder().specHeading("A spec heading"). 23 scenarioHeading("First scenario"). 24 step("create user \"456\" \"foo\" and \"9900\""). 25 String() 26 path, _ := filepath.Abs(filepath.Join("testdata", "concept.cpt")) 27 _, _, err := parser.AddConcepts([]string{path}, conceptDictionary) 28 if err != nil { 29 c.Error(err) 30 } 31 spec, _, err := new(parser.SpecParser).Parse(specText, conceptDictionary, "") 32 if err != nil { 33 c.Error(err) 34 } 35 36 specExecutor := newSpecExecutor(spec, nil, nil, nil, 0) 37 specExecutor.errMap = getValidationErrorMap() 38 lookup, err := specExecutor.dataTableLookup() 39 c.Assert(err, IsNil) 40 cItem, err := resolveToProtoConceptItem(*spec.Scenarios[0].Steps[0], lookup, specExecutor.setSkipInfo) 41 c.Assert(err, IsNil) 42 protoConcept := cItem.GetConcept() 43 44 checkConceptParameterValuesInOrder(c, protoConcept, "456", "foo", "9900") 45 firstNestedStep := protoConcept.GetSteps()[0].GetConcept().GetSteps()[0].GetStep() 46 params := getParameters(firstNestedStep.GetFragments()) 47 c.Assert(1, Equals, len(params)) 48 c.Assert(params[0].GetParameterType(), Equals, gauge_messages.Parameter_Dynamic) 49 c.Assert(params[0].GetValue(), Equals, "456") 50 51 secondNestedStep := protoConcept.GetSteps()[0].GetConcept().GetSteps()[1].GetStep() 52 params = getParameters(secondNestedStep.GetFragments()) 53 c.Assert(1, Equals, len(params)) 54 c.Assert(params[0].GetParameterType(), Equals, gauge_messages.Parameter_Dynamic) 55 c.Assert(params[0].GetValue(), Equals, "foo") 56 57 secondStep := protoConcept.GetSteps()[1].GetStep() 58 params = getParameters(secondStep.GetFragments()) 59 c.Assert(1, Equals, len(params)) 60 c.Assert(params[0].GetParameterType(), Equals, gauge_messages.Parameter_Dynamic) 61 c.Assert(params[0].GetValue(), Equals, "9900") 62 63 } 64 65 func (s *MySuite) TestResolveNestedConceptToProtoConceptItem(c *C) { 66 conceptDictionary := gauge.NewConceptDictionary() 67 68 specText := newSpecBuilder().specHeading("A spec heading"). 69 scenarioHeading("First scenario"). 70 step("create user \"456\" \"foo\" and \"9900\""). 71 String() 72 73 path, _ := filepath.Abs(filepath.Join("testdata", "concept.cpt")) 74 _, _, err := parser.AddConcepts([]string{path}, conceptDictionary) 75 if err != nil { 76 c.Error(err) 77 } 78 specParser := new(parser.SpecParser) 79 spec, _, _ := specParser.Parse(specText, conceptDictionary, "") 80 81 specExecutor := newSpecExecutor(spec, nil, nil, nil, 0) 82 specExecutor.errMap = getValidationErrorMap() 83 lookup, err := specExecutor.dataTableLookup() 84 c.Assert(err, IsNil) 85 cItem, err := resolveToProtoConceptItem(*spec.Scenarios[0].Steps[0], lookup, specExecutor.setSkipInfo) 86 c.Assert(err, IsNil) 87 protoConcept := cItem.GetConcept() 88 checkConceptParameterValuesInOrder(c, protoConcept, "456", "foo", "9900") 89 90 c.Assert(protoConcept.GetSteps()[0].GetItemType(), Equals, gauge_messages.ProtoItem_Concept) 91 92 nestedConcept := protoConcept.GetSteps()[0].GetConcept() 93 checkConceptParameterValuesInOrder(c, nestedConcept, "456", "foo") 94 95 firstNestedStep := nestedConcept.GetSteps()[0].GetStep() 96 params := getParameters(firstNestedStep.GetFragments()) 97 c.Assert(1, Equals, len(params)) 98 c.Assert(params[0].GetParameterType(), Equals, gauge_messages.Parameter_Dynamic) 99 c.Assert(params[0].GetValue(), Equals, "456") 100 101 secondNestedStep := nestedConcept.GetSteps()[1].GetStep() 102 params = getParameters(secondNestedStep.GetFragments()) 103 c.Assert(1, Equals, len(params)) 104 c.Assert(params[0].GetParameterType(), Equals, gauge_messages.Parameter_Dynamic) 105 c.Assert(params[0].GetValue(), Equals, "foo") 106 107 c.Assert(protoConcept.GetSteps()[1].GetItemType(), Equals, gauge_messages.ProtoItem_Step) 108 secondStepInConcept := protoConcept.GetSteps()[1].GetStep() 109 params = getParameters(secondStepInConcept.GetFragments()) 110 c.Assert(1, Equals, len(params)) 111 c.Assert(params[0].GetParameterType(), Equals, gauge_messages.Parameter_Dynamic) 112 c.Assert(params[0].GetValue(), Equals, "9900") 113 } 114 115 func TestResolveNestedConceptAndTableParamToProtoConceptItem(t *testing.T) { 116 conceptDictionary := gauge.NewConceptDictionary() 117 118 specText := newSpecBuilder().specHeading("A spec heading"). 119 scenarioHeading("First scenario"). 120 step("create user \"456\""). 121 String() 122 want := "456" 123 path, _ := filepath.Abs(filepath.Join("testdata", "conceptTable.cpt")) 124 _, _, err := parser.AddConcepts([]string{path}, conceptDictionary) 125 if err != nil { 126 t.Error(err) 127 } 128 specParser := new(parser.SpecParser) 129 spec, _, _ := specParser.Parse(specText, conceptDictionary, "") 130 131 specExecutor := newSpecExecutor(spec, nil, nil, nil, 0) 132 specExecutor.errMap = getValidationErrorMap() 133 lookup, err := specExecutor.dataTableLookup() 134 if err != nil { 135 t.Errorf("Expected no error. Got : %s", err.Error()) 136 } 137 cItem, err := resolveToProtoConceptItem(*spec.Scenarios[0].Steps[0], lookup, specExecutor.setSkipInfo) 138 if err != nil { 139 t.Errorf("Expected no error. Got : %s", err.Error()) 140 } 141 protoConcept := cItem.GetConcept() 142 got := getParameters(protoConcept.GetSteps()[0].GetStep().GetFragments())[0].GetTable().GetRows()[1].Cells[0] 143 144 if want != got { 145 t.Errorf("Did not resolve dynamic param in table for concept. Got %s, want: %s", got, want) 146 } 147 } 148 149 func (s *MySuite) TestResolveToProtoConceptItemWithDataTable(c *C) { 150 conceptDictionary := gauge.NewConceptDictionary() 151 152 specText := newSpecBuilder().specHeading("A spec heading"). 153 tableHeader("id", "name", "phone"). 154 tableHeader("123", "foo", "8800"). 155 tableHeader("666", "bar", "9900"). 156 scenarioHeading("First scenario"). 157 step("create user <id> <name> and <phone>"). 158 String() 159 160 path, _ := filepath.Abs(filepath.Join("testdata", "concept.cpt")) 161 _, _, err := parser.AddConcepts([]string{path}, conceptDictionary) 162 if err != nil { 163 c.Error(err) 164 } 165 specParser := new(parser.SpecParser) 166 spec, _, _ := specParser.Parse(specText, conceptDictionary, "") 167 168 specExecutor := newSpecExecutor(spec, nil, nil, nil, 0) 169 170 specExecutor.errMap = gauge.NewBuildErrors() 171 lookup, err := specExecutor.dataTableLookup() 172 c.Assert(err, IsNil) 173 cItem, err := resolveToProtoConceptItem(*spec.Scenarios[0].Steps[0], lookup, specExecutor.setSkipInfo) 174 c.Assert(err, IsNil) 175 protoConcept := cItem.GetConcept() 176 checkConceptParameterValuesInOrder(c, protoConcept, "123", "foo", "8800") 177 178 c.Assert(protoConcept.GetSteps()[0].GetItemType(), Equals, gauge_messages.ProtoItem_Concept) 179 nestedConcept := protoConcept.GetSteps()[0].GetConcept() 180 checkConceptParameterValuesInOrder(c, nestedConcept, "123", "foo") 181 firstNestedStep := nestedConcept.GetSteps()[0].GetStep() 182 params := getParameters(firstNestedStep.GetFragments()) 183 c.Assert(1, Equals, len(params)) 184 c.Assert(params[0].GetParameterType(), Equals, gauge_messages.Parameter_Dynamic) 185 c.Assert(params[0].GetValue(), Equals, "123") 186 187 secondNestedStep := nestedConcept.GetSteps()[1].GetStep() 188 params = getParameters(secondNestedStep.GetFragments()) 189 c.Assert(1, Equals, len(params)) 190 c.Assert(params[0].GetParameterType(), Equals, gauge_messages.Parameter_Dynamic) 191 c.Assert(params[0].GetValue(), Equals, "foo") 192 193 c.Assert(protoConcept.GetSteps()[1].GetItemType(), Equals, gauge_messages.ProtoItem_Step) 194 secondStepInConcept := protoConcept.GetSteps()[1].GetStep() 195 params = getParameters(secondStepInConcept.GetFragments()) 196 c.Assert(1, Equals, len(params)) 197 c.Assert(params[0].GetParameterType(), Equals, gauge_messages.Parameter_Dynamic) 198 c.Assert(params[0].GetValue(), Equals, "8800") 199 } 200 201 func checkConceptParameterValuesInOrder(c *C, concept *gauge_messages.ProtoConcept, paramValues ...string) { 202 params := getParameters(concept.GetConceptStep().Fragments) 203 c.Assert(len(params), Equals, len(paramValues)) 204 for i, param := range params { 205 c.Assert(param.GetValue(), Equals, paramValues[i]) 206 } 207 }