Skip to content

Commit 67a8dc7

Browse files
Better reporting for table driven scenarios. (#116)
Signed-off-by: jensakejohansson <jens.johansson@systemverification.com>
1 parent ba5e76f commit 67a8dc7

File tree

3 files changed

+156
-17
lines changed

3 files changed

+156
-17
lines changed

builder/integration_test.go

Lines changed: 141 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -243,8 +243,8 @@ func (s *MySuite) TestToVerifyXmlContentForDataTableDrivenExecution(c *C) {
243243
value := gauge_messages.ProtoItem_TableDrivenScenario
244244
scenario1 := gauge_messages.ProtoScenario{ScenarioHeading: "Scenario"}
245245
scenario2 := gauge_messages.ProtoScenario{ScenarioHeading: "Scenario"}
246-
item1 := &gauge_messages.ProtoItem{TableDrivenScenario: &gauge_messages.ProtoTableDrivenScenario{Scenario: &scenario1, TableRowIndex: 0}, ItemType: value}
247-
item2 := &gauge_messages.ProtoItem{TableDrivenScenario: &gauge_messages.ProtoTableDrivenScenario{Scenario: &scenario2, TableRowIndex: 1}, ItemType: value}
246+
item1 := &gauge_messages.ProtoItem{TableDrivenScenario: &gauge_messages.ProtoTableDrivenScenario{Scenario: &scenario1, IsSpecTableDriven: true, TableRowIndex: 0}, ItemType: value}
247+
item2 := &gauge_messages.ProtoItem{TableDrivenScenario: &gauge_messages.ProtoTableDrivenScenario{Scenario: &scenario2, IsSpecTableDriven: true, TableRowIndex: 1}, ItemType: value}
248248
spec1 := &gauge_messages.ProtoSpec{SpecHeading: "HEADING", FileName: "FILENAME", Items: []*gauge_messages.ProtoItem{tableItem, item1, item2}}
249249
specResult := &gauge_messages.ProtoSpecResult{ProtoSpec: spec1, ScenarioCount: 1, Failed: false}
250250
suiteResult := &gauge_messages.ProtoSuiteResult{SpecResults: []*gauge_messages.ProtoSpecResult{specResult}}
@@ -269,8 +269,145 @@ func (s *MySuite) TestToVerifyXmlContentForDataTableDrivenExecution(c *C) {
269269
c.Assert(suites.Suites[0].SystemError.Contents, Equals, "")
270270
c.Assert(suites.Suites[0].SystemOutput.Contents, Equals, "")
271271
c.Assert(len(suites.Suites[0].TestCases), Equals, 2)
272-
c.Assert(suites.Suites[0].TestCases[0].Name, Equals, "Scenario 1: [name: john] [age: 20]")
273-
c.Assert(suites.Suites[0].TestCases[1].Name, Equals, "Scenario 2: [name: mike] [age: 22]")
272+
c.Assert(suites.Suites[0].TestCases[0].Name, Equals, "Scenario | SpecRow: 1: [name: john] [age: 20]")
273+
c.Assert(suites.Suites[0].TestCases[1].Name, Equals, "Scenario | SpecRow: 2: [name: mike] [age: 22]")
274+
}
275+
276+
func (s *MySuite) TestToVerifyXmlContentForScenarioTableDrivenExecution(c *C) {
277+
scenarioTable := &gauge_messages.ProtoTable{
278+
Headers: &gauge_messages.ProtoTableRow{
279+
Cells: []string{"city", "country"},
280+
},
281+
Rows: []*gauge_messages.ProtoTableRow{
282+
{Cells: []string{"New York", "USA"}},
283+
{Cells: []string{"London", "UK"}},
284+
},
285+
}
286+
287+
value := gauge_messages.ProtoItem_TableDrivenScenario
288+
scenario1 := gauge_messages.ProtoScenario{ScenarioHeading: "Scenario"}
289+
scenario2 := gauge_messages.ProtoScenario{ScenarioHeading: "Scenario"}
290+
item1 := &gauge_messages.ProtoItem{
291+
TableDrivenScenario: &gauge_messages.ProtoTableDrivenScenario{
292+
Scenario: &scenario1,
293+
IsScenarioTableDriven: true,
294+
ScenarioTableRowIndex: 0,
295+
ScenarioDataTable: scenarioTable,
296+
},
297+
ItemType: value,
298+
}
299+
item2 := &gauge_messages.ProtoItem{
300+
TableDrivenScenario: &gauge_messages.ProtoTableDrivenScenario{
301+
Scenario: &scenario2,
302+
IsScenarioTableDriven: true,
303+
ScenarioTableRowIndex: 1,
304+
ScenarioDataTable: scenarioTable,
305+
},
306+
ItemType: value,
307+
}
308+
spec1 := &gauge_messages.ProtoSpec{SpecHeading: "HEADING", FileName: "FILENAME", Items: []*gauge_messages.ProtoItem{item1, item2}}
309+
specResult := &gauge_messages.ProtoSpecResult{ProtoSpec: spec1, ScenarioCount: 1, Failed: false}
310+
suiteResult := &gauge_messages.ProtoSuiteResult{SpecResults: []*gauge_messages.ProtoSpecResult{specResult}}
311+
message := &gauge_messages.SuiteExecutionResult{SuiteResult: suiteResult}
312+
313+
builder := &XmlBuilder{currentId: 0}
314+
bytes, err := builder.GetXmlContent(message)
315+
316+
assertXmlValidation(bytes, c)
317+
318+
var suites JUnitTestSuites
319+
xml.Unmarshal(bytes, &suites)
320+
321+
c.Assert(err, Equals, nil)
322+
c.Assert(len(suites.Suites), Equals, 1)
323+
c.Assert(suites.Suites[0].Errors, Equals, 0)
324+
c.Assert(suites.Suites[0].Failures, Equals, 0)
325+
c.Assert(suites.Suites[0].Package, Equals, "FILENAME")
326+
c.Assert(suites.Suites[0].Name, Equals, "HEADING")
327+
c.Assert(suites.Suites[0].Tests, Equals, 1)
328+
c.Assert(suites.Suites[0].Timestamp, Equals, builder.suites.Suites[0].Timestamp)
329+
c.Assert(suites.Suites[0].SystemError.Contents, Equals, "")
330+
c.Assert(suites.Suites[0].SystemOutput.Contents, Equals, "")
331+
c.Assert(len(suites.Suites[0].TestCases), Equals, 2)
332+
c.Assert(suites.Suites[0].TestCases[0].Name, Equals, "Scenario | ScnRow: 1: [city: New York] [country: USA]")
333+
c.Assert(suites.Suites[0].TestCases[1].Name, Equals, "Scenario | ScnRow: 2: [city: London] [country: UK]")
334+
}
335+
336+
func (s *MySuite) TestToVerifyXmlContentForBothSpecAndScenarioTableDrivenExecution(c *C) {
337+
specTableItem := &gauge_messages.ProtoItem{
338+
ItemType: gauge_messages.ProtoItem_Table,
339+
Table: &gauge_messages.ProtoTable{
340+
Headers: &gauge_messages.ProtoTableRow{
341+
Cells: []string{"name", "age"},
342+
},
343+
Rows: []*gauge_messages.ProtoTableRow{
344+
{Cells: []string{"john", "20"}},
345+
{Cells: []string{"mike", "22"}},
346+
},
347+
},
348+
}
349+
350+
scenarioTable := &gauge_messages.ProtoTable{
351+
Headers: &gauge_messages.ProtoTableRow{
352+
Cells: []string{"city", "country"},
353+
},
354+
Rows: []*gauge_messages.ProtoTableRow{
355+
{Cells: []string{"New York", "USA"}},
356+
{Cells: []string{"London", "UK"}},
357+
},
358+
}
359+
360+
value := gauge_messages.ProtoItem_TableDrivenScenario
361+
scenario1 := gauge_messages.ProtoScenario{ScenarioHeading: "Scenario"}
362+
scenario2 := gauge_messages.ProtoScenario{ScenarioHeading: "Scenario"}
363+
item1 := &gauge_messages.ProtoItem{
364+
TableDrivenScenario: &gauge_messages.ProtoTableDrivenScenario{
365+
Scenario: &scenario1,
366+
IsSpecTableDriven: true,
367+
TableRowIndex: 0,
368+
IsScenarioTableDriven: true,
369+
ScenarioTableRowIndex: 0,
370+
ScenarioDataTable: scenarioTable,
371+
},
372+
ItemType: value,
373+
}
374+
item2 := &gauge_messages.ProtoItem{
375+
TableDrivenScenario: &gauge_messages.ProtoTableDrivenScenario{
376+
Scenario: &scenario2,
377+
IsSpecTableDriven: true,
378+
TableRowIndex: 1,
379+
IsScenarioTableDriven: true,
380+
ScenarioTableRowIndex: 1,
381+
ScenarioDataTable: scenarioTable,
382+
},
383+
ItemType: value,
384+
}
385+
spec1 := &gauge_messages.ProtoSpec{SpecHeading: "HEADING", FileName: "FILENAME", Items: []*gauge_messages.ProtoItem{specTableItem, item1, item2}}
386+
specResult := &gauge_messages.ProtoSpecResult{ProtoSpec: spec1, ScenarioCount: 1, Failed: false}
387+
suiteResult := &gauge_messages.ProtoSuiteResult{SpecResults: []*gauge_messages.ProtoSpecResult{specResult}}
388+
message := &gauge_messages.SuiteExecutionResult{SuiteResult: suiteResult}
389+
390+
builder := &XmlBuilder{currentId: 0}
391+
bytes, err := builder.GetXmlContent(message)
392+
393+
assertXmlValidation(bytes, c)
394+
395+
var suites JUnitTestSuites
396+
xml.Unmarshal(bytes, &suites)
397+
398+
c.Assert(err, Equals, nil)
399+
c.Assert(len(suites.Suites), Equals, 1)
400+
c.Assert(suites.Suites[0].Errors, Equals, 0)
401+
c.Assert(suites.Suites[0].Failures, Equals, 0)
402+
c.Assert(suites.Suites[0].Package, Equals, "FILENAME")
403+
c.Assert(suites.Suites[0].Name, Equals, "HEADING")
404+
c.Assert(suites.Suites[0].Tests, Equals, 1)
405+
c.Assert(suites.Suites[0].Timestamp, Equals, builder.suites.Suites[0].Timestamp)
406+
c.Assert(suites.Suites[0].SystemError.Contents, Equals, "")
407+
c.Assert(suites.Suites[0].SystemOutput.Contents, Equals, "")
408+
c.Assert(len(suites.Suites[0].TestCases), Equals, 2)
409+
c.Assert(suites.Suites[0].TestCases[0].Name, Equals, "Scenario | SpecRow: 1: [name: john] [age: 20] ScnRow: 1: [city: New York] [country: USA]")
410+
c.Assert(suites.Suites[0].TestCases[1].Name, Equals, "Scenario | SpecRow: 2: [name: mike] [age: 22] ScnRow: 2: [city: London] [country: UK]")
274411
}
275412

276413
func (s *MySuite) TestToVerifyXmlContentForErroredSpec(c *C) {

builder/xmlReportBuilder.go

Lines changed: 13 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -193,22 +193,24 @@ func (x *XmlBuilder) getScenarioContent(result *gauge_messages.ProtoSpecResult,
193193
}
194194

195195
func (x *XmlBuilder) getTableDrivenScenarioContent(result *gauge_messages.ProtoSpecResult, tableDriven *gauge_messages.ProtoTableDrivenScenario, ts *JUnitTestSuite) {
196-
if tableDriven.GetScenario() == nil {
196+
scenario := tableDriven.GetScenario()
197+
if scenario == nil {
197198
return
198199
}
199-
scenario := tableDriven.GetScenario()
200-
rowIndex := tableDriven.GetTableRowIndex()
201-
202-
var headerValues []string
203-
200+
var tableValues strings.Builder
201+
if tableDriven.IsSpecTableDriven {
202+
specTable := findSpecTable(result) // SpecTable not included in TableDrivenScenario msg; find it in the spec.
203+
rowIndex := tableDriven.GetTableRowIndex()
204+
var specTableValues = buildHeaderValuesFromTable(specTable, int(rowIndex))
205+
fmt.Fprintf(&tableValues, " SpecRow: %d: %s", rowIndex+1, strings.Join(specTableValues, " "))
206+
}
204207
if tableDriven.IsScenarioTableDriven {
205-
headerValues = buildHeaderValuesFromTable(tableDriven.ScenarioTableRow, int(rowIndex))
206-
} else { // tableDriven.IsSpecTableDriven seemed to never be true(?), so we assume in this case.
207-
specTable := findSpecTable(result)
208-
headerValues = buildHeaderValuesFromTable(specTable, int(rowIndex))
208+
rowIndex := tableDriven.GetScenarioTableRowIndex()
209+
var scenarioTableValues = buildHeaderValuesFromTable(tableDriven.ScenarioDataTable, int(rowIndex))
210+
fmt.Fprintf(&tableValues, " ScnRow: %d: %s", rowIndex+1, strings.Join(scenarioTableValues, " "))
209211
}
210212

211-
scenario.ScenarioHeading += fmt.Sprintf(" %d: %s", rowIndex+1, strings.Join(headerValues, " "))
213+
scenario.ScenarioHeading += " |" + tableValues.String()
212214
x.getScenarioContent(result, scenario, ts)
213215
}
214216

plugin.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
"description": "Xml reporting plugin",
1717
"gaugeVersionSupport": {
1818
"maximum": "",
19-
"minimum": "1.6.0"
19+
"minimum": "1.6.22"
2020
},
2121
"id": "xml-report",
2222
"install": {
@@ -28,5 +28,5 @@
2828
"scope": [
2929
"Execution"
3030
],
31-
"version": "0.5.3"
31+
"version": "0.5.4"
3232
}

0 commit comments

Comments
 (0)