github.com/ezbuy/gauge@v0.9.4-0.20171013092048-7ac5bd3931cd/parser/dataTableSpecs_test.go (about) 1 // Copyright 2015 ThoughtWorks, Inc. 2 3 // This file is part of Gauge. 4 5 // Gauge is free software: you can redistribute it and/or modify 6 // it under the terms of the GNU General Public License as published by 7 // the Free Software Foundation, either version 3 of the License, or 8 // (at your option) any later version. 9 10 // Gauge is distributed in the hope that it will be useful, 11 // but WITHOUT ANY WARRANTY; without even the implied warranty of 12 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 // GNU General Public License for more details. 14 15 // You should have received a copy of the GNU General Public License 16 // along with Gauge. If not, see <http://www.gnu.org/licenses/>. 17 18 package parser 19 20 import ( 21 "testing" 22 23 "encoding/json" 24 "reflect" 25 26 "github.com/getgauge/gauge/gauge" 27 ) 28 29 type DataTableSpecTest struct { 30 specs []*gauge.Specification 31 want int 32 message string 33 } 34 35 var tests = []DataTableSpecTest{ 36 { 37 specs: []*gauge.Specification{ 38 { 39 Heading: &gauge.Heading{}, 40 Scenarios: []*gauge.Scenario{{Steps: []*gauge.Step{{Args: []*gauge.StepArg{{Value: "header", ArgType: gauge.Dynamic, Name: "header"}}}}}}, 41 DataTable: gauge.DataTable{Table: *gauge.NewTable([]string{"header"}, [][]gauge.TableCell{ 42 {{Value: "row1", CellType: gauge.Static}, {Value: "row2", CellType: gauge.Static}}, 43 }, 0)}, 44 }, 45 }, 46 want: 2, 47 message: "Create specs for each data table row", 48 }, 49 { 50 specs: []*gauge.Specification{ 51 { 52 Heading: &gauge.Heading{}, 53 Scenarios: []*gauge.Scenario{{Steps: []*gauge.Step{{Args: []*gauge.StepArg{{Value: "header", ArgType: gauge.Dynamic, Name: "header"}}}}}}, 54 }, 55 }, 56 want: 1, 57 message: "Create non data table driven specs", 58 }, 59 { 60 specs: []*gauge.Specification{ 61 { 62 Heading: &gauge.Heading{}, 63 Scenarios: []*gauge.Scenario{{Steps: []*gauge.Step{{Args: []*gauge.StepArg{{Value: "header", ArgType: gauge.Dynamic, Name: "header"}}}}}}, 64 DataTable: gauge.DataTable{Table: *gauge.NewTable([]string{"header"}, [][]gauge.TableCell{ 65 {{Value: "row1", CellType: gauge.Static}, {Value: "row2", CellType: gauge.Static}}, 66 }, 0)}, 67 }, 68 { 69 Heading: &gauge.Heading{}, 70 Scenarios: []*gauge.Scenario{{Steps: []*gauge.Step{{Args: []*gauge.StepArg{{Value: "header", ArgType: gauge.Dynamic, Name: "header"}}}}}}, 71 }, 72 }, 73 want: 3, 74 message: "Create data table driven and non data table driven specs", 75 }, 76 { 77 specs: []*gauge.Specification{ 78 { 79 Heading: &gauge.Heading{}, 80 Scenarios: []*gauge.Scenario{{Steps: []*gauge.Step{{Args: []*gauge.StepArg{{Value: "abc", ArgType: gauge.Static}}}}}}, 81 DataTable: gauge.DataTable{Table: *gauge.NewTable([]string{"header"}, [][]gauge.TableCell{ 82 {{Value: "row1", CellType: gauge.Static}, {Value: "row2", CellType: gauge.Static}}, 83 }, 0)}, 84 Contexts: []*gauge.Step{{Args: []*gauge.StepArg{{Value: "header", ArgType: gauge.Dynamic, Name: "header"}}}}, 85 }, 86 }, 87 want: 2, 88 message: "Create specs with context steps using table param", 89 }, 90 { 91 specs: []*gauge.Specification{ 92 { 93 Heading: &gauge.Heading{}, 94 Scenarios: []*gauge.Scenario{{Steps: []*gauge.Step{{Args: []*gauge.StepArg{{Value: "abc", ArgType: gauge.Static}}}}}}, 95 DataTable: gauge.DataTable{Table: *gauge.NewTable([]string{"header"}, [][]gauge.TableCell{ 96 {{Value: "row1", CellType: gauge.Static}, {Value: "row2", CellType: gauge.Static}}, 97 }, 0)}, 98 TearDownSteps: []*gauge.Step{{Args: []*gauge.StepArg{{Value: "header", ArgType: gauge.Dynamic, Name: "header"}}}}, 99 }, 100 }, 101 want: 2, 102 message: "Create specs with Teardown steps using table param", 103 }, 104 } 105 106 func TestGetSpecsForDataTableRows(t *testing.T) { 107 for _, test := range tests { 108 got := GetSpecsForDataTableRows(test.specs, gauge.NewBuildErrors()) 109 110 if len(got) != test.want { 111 t.Errorf("Failed: %s. Wanted: %d specs, Got: %d specs", test.message, test.want, len(got)) 112 } 113 } 114 } 115 116 func TestGetTableWithOneRow(t *testing.T) { 117 table := *gauge.NewTable([]string{"header"}, [][]gauge.TableCell{ 118 {{Value: "row1", CellType: gauge.Static}, {Value: "row2", CellType: gauge.Static}}, 119 }, 0) 120 121 want := *gauge.NewTable([]string{"header"}, [][]gauge.TableCell{{{Value: "row1", CellType: gauge.Static}}}, 0) 122 123 got := *getTableWithOneRow(table, 0) 124 125 if !reflect.DeepEqual(want, got) { 126 t.Errorf("Failed: Table with 1 row. Wanted: %v, Got: %v", want, got) 127 } 128 } 129 130 func TestCreateSpecsForTableRows(t *testing.T) { 131 spec := &gauge.Specification{ 132 Heading: &gauge.Heading{}, 133 Scenarios: []*gauge.Scenario{{Steps: []*gauge.Step{{Args: []*gauge.StepArg{{Value: "header", ArgType: gauge.Dynamic, Name: "header"}}}}}}, 134 DataTable: gauge.DataTable{Table: *gauge.NewTable([]string{"header"}, [][]gauge.TableCell{ 135 {{Value: "row1", CellType: gauge.Static}, {Value: "row2", CellType: gauge.Static}}, 136 }, 0)}, 137 Contexts: []*gauge.Step{{Args: []*gauge.StepArg{{Value: "header", ArgType: gauge.Dynamic, Name: "header"}}}}, 138 Items: []gauge.Item{ 139 &gauge.DataTable{Table: *gauge.NewTable([]string{"header"}, [][]gauge.TableCell{ 140 {{Value: "row1", CellType: gauge.Static}, {Value: "row2", CellType: gauge.Static}}, 141 }, 0)}, 142 &gauge.Scenario{Steps: []*gauge.Step{{Args: []*gauge.StepArg{{Value: "header", ArgType: gauge.Dynamic, Name: "header"}}}}}, 143 }, 144 TearDownSteps: []*gauge.Step{{Args: []*gauge.StepArg{{Value: "abc", ArgType: gauge.Static}}}}, 145 } 146 147 want := []*gauge.Specification{ 148 { 149 Heading: &gauge.Heading{}, 150 Scenarios: []*gauge.Scenario{{Steps: []*gauge.Step{{Args: []*gauge.StepArg{{Value: "header", ArgType: gauge.Dynamic, Name: "header"}}}}, DataTableRow: *gauge.NewTable([]string{"header"}, [][]gauge.TableCell{ 151 {{Value: "row1", CellType: gauge.Static}}, 152 }, 0), DataTableRowIndex: 0}}, 153 DataTable: gauge.DataTable{Table: *gauge.NewTable([]string{"header"}, [][]gauge.TableCell{ 154 {{Value: "row1", CellType: gauge.Static}}, 155 }, 0)}, 156 Contexts: []*gauge.Step{{Args: []*gauge.StepArg{{Value: "header", ArgType: gauge.Dynamic, Name: "header"}}}}, 157 Items: []gauge.Item{ 158 &gauge.DataTable{Table: *gauge.NewTable([]string{"header"}, [][]gauge.TableCell{ 159 {{Value: "row1", CellType: gauge.Static}}, 160 }, 0)}, 161 &gauge.Scenario{Steps: []*gauge.Step{{Args: []*gauge.StepArg{{Value: "header", ArgType: gauge.Dynamic, Name: "header"}}}}, DataTableRow: *gauge.NewTable([]string{"header"}, [][]gauge.TableCell{ 162 {{Value: "row1", CellType: gauge.Static}}, 163 }, 0), DataTableRowIndex: 0}, 164 }, 165 TearDownSteps: []*gauge.Step{{Args: []*gauge.StepArg{{Value: "abc", ArgType: gauge.Static}}}}, 166 }, 167 { 168 Heading: &gauge.Heading{}, 169 Scenarios: []*gauge.Scenario{{Steps: []*gauge.Step{{Args: []*gauge.StepArg{{Value: "header", ArgType: gauge.Dynamic, Name: "header"}}}}, DataTableRow: *gauge.NewTable([]string{"header"}, [][]gauge.TableCell{ 170 {{Value: "row2", CellType: gauge.Static}}, 171 }, 0), DataTableRowIndex: 1}}, 172 DataTable: gauge.DataTable{Table: *gauge.NewTable([]string{"header"}, [][]gauge.TableCell{ 173 {{Value: "row2", CellType: gauge.Static}}, 174 }, 0)}, 175 Contexts: []*gauge.Step{{Args: []*gauge.StepArg{{Value: "header", ArgType: gauge.Dynamic, Name: "header"}}}}, 176 Items: []gauge.Item{ 177 &gauge.DataTable{Table: *gauge.NewTable([]string{"header"}, [][]gauge.TableCell{ 178 {{Value: "row2", CellType: gauge.Static}}, 179 }, 0)}, 180 &gauge.Scenario{Steps: []*gauge.Step{{Args: []*gauge.StepArg{{Value: "header", ArgType: gauge.Dynamic, Name: "header"}}}}, DataTableRow: *gauge.NewTable([]string{"header"}, [][]gauge.TableCell{ 181 {{Value: "row2", CellType: gauge.Static}}, 182 }, 0), DataTableRowIndex: 1}, 183 }, 184 TearDownSteps: []*gauge.Step{{Args: []*gauge.StepArg{{Value: "abc", ArgType: gauge.Static}}}}, 185 }, 186 } 187 188 got := createSpecsForTableRows(spec, spec.Scenarios, gauge.NewBuildErrors()) 189 190 if !reflect.DeepEqual(want, got) { 191 gotJson, _ := json.Marshal(got) 192 wantJson, _ := json.Marshal(want) 193 t.Errorf("Failed: Create specs for table row.\n\tWanted: %v\n\tGot: %v", string(wantJson), string(gotJson)) 194 } 195 }