diff --git a/src/Pickles/Pickles.DocumentationBuilders.Excel.UnitTests/WhenAddingAScenarioOutlineToAWorksheet.cs b/src/Pickles/Pickles.DocumentationBuilders.Excel.UnitTests/WhenAddingAScenarioOutlineToAWorksheet.cs index 189ac4483..3eaf52c7a 100644 --- a/src/Pickles/Pickles.DocumentationBuilders.Excel.UnitTests/WhenAddingAScenarioOutlineToAWorksheet.cs +++ b/src/Pickles/Pickles.DocumentationBuilders.Excel.UnitTests/WhenAddingAScenarioOutlineToAWorksheet.cs @@ -41,10 +41,10 @@ public class WhenAddingAScenarioOutlineToAWorksheet : BaseFixture public void ThenSingleScenarioOutlineAddedSuccessfully() { var excelScenarioFormatter = Container.Resolve(); - var exampleTable = new Table(); + var exampleTable = new ExampleTable(); exampleTable.HeaderRow = new TableRow("Var1", "Var2", "Var3", "Var4"); exampleTable.DataRows = - new List(new[] { new TableRow("1", "2", "3", "4"), new TableRow("5", "6", "7", "8") }); + new List(new[] { new TableRowWithTestResult("1", "2", "3", "4"), new TableRowWithTestResult("5", "6", "7", "8") }); var example = new Example { Name = "Examples", Description = string.Empty, TableArgument = exampleTable }; var examples = new List(); examples.Add(example); @@ -87,10 +87,10 @@ public void ThenSingleScenarioOutlineAddedSuccessfully() public void ThenSingleScenarioOutlineWithStepsAddedSuccessfully() { var excelScenarioFormatter = Container.Resolve(); - var exampleTable = new Table(); + var exampleTable = new ExampleTable(); exampleTable.HeaderRow = new TableRow("Var1", "Var2", "Var3", "Var4"); exampleTable.DataRows = - new List(new[] { new TableRow("1", "2", "3", "4"), new TableRow("5", "6", "7", "8") }); + new List(new[] { new TableRowWithTestResult("1", "2", "3", "4"), new TableRowWithTestResult("5", "6", "7", "8") }); var example = new Example { Name = "Examples", Description = string.Empty, TableArgument = exampleTable }; var examples = new List(); examples.Add(example); @@ -162,7 +162,7 @@ private static ScenarioOutline SetupScenarioOutline() { Name = "Examples", Description = string.Empty, - TableArgument = new Table + TableArgument = new ExampleTable { HeaderRow = new TableRow(), DataRows = new List() diff --git a/src/Pickles/Pickles.DocumentationBuilders.Excel/ExcelTableFormatter.cs b/src/Pickles/Pickles.DocumentationBuilders.Excel/ExcelTableFormatter.cs index 9697559fc..97fc6d082 100644 --- a/src/Pickles/Pickles.DocumentationBuilders.Excel/ExcelTableFormatter.cs +++ b/src/Pickles/Pickles.DocumentationBuilders.Excel/ExcelTableFormatter.cs @@ -66,5 +66,45 @@ public void Format(IXLWorksheet worksheet, Table table, ref int row) worksheet.Range(startRow, TableStartColumn, lastRow, lastColumn).Style.Border.RightBorder = XLBorderStyleValues.Thin; } + + + public void Format(IXLWorksheet worksheet, ExampleTable table, ref int row) + { + int startRow = row; + int headerColumn = TableStartColumn; + foreach (string cell in table.HeaderRow.Cells) + { + worksheet.Cell(row, headerColumn).Style.Font.SetBold(); + worksheet.Cell(row, headerColumn).Style.Font.SetItalic(); + worksheet.Cell(row, headerColumn).Style.Fill.SetBackgroundColor(XLColor.AliceBlue); + worksheet.Cell(row, headerColumn++).Value = cell; + } + + row++; + + foreach (TableRow dataRow in table.DataRows) + { + int dataColumn = TableStartColumn; + foreach (string cell in dataRow.Cells) + { + worksheet.Cell(row, dataColumn++).Value = cell; + } + + row++; + } + + int lastRow = row - 1; + int lastColumn = headerColumn - 1; + + worksheet.Range(startRow, TableStartColumn, lastRow, lastColumn).Style.Border.TopBorder = + XLBorderStyleValues.Thin; + worksheet.Range(startRow, TableStartColumn, lastRow, lastColumn).Style.Border.LeftBorder = + XLBorderStyleValues.Thin; + worksheet.Range(startRow, TableStartColumn, lastRow, lastColumn).Style.Border.BottomBorder = + XLBorderStyleValues.Thin; + worksheet.Range(startRow, TableStartColumn, lastRow, lastColumn).Style.Border.RightBorder = + XLBorderStyleValues.Thin; + } } + } diff --git a/src/Pickles/Pickles.DocumentationBuilders.Html.UnitTests/WhenFormattingScenarioOutlines.cs b/src/Pickles/Pickles.DocumentationBuilders.Html.UnitTests/WhenFormattingScenarioOutlines.cs index f2b62c43d..9f2a3133b 100644 --- a/src/Pickles/Pickles.DocumentationBuilders.Html.UnitTests/WhenFormattingScenarioOutlines.cs +++ b/src/Pickles/Pickles.DocumentationBuilders.Html.UnitTests/WhenFormattingScenarioOutlines.cs @@ -39,7 +39,7 @@ public class WhenFormattingScenarioOutlines : BaseFixture [Test] public void ThenCanFormatCompleteScenarioOutlineCorrectly() { - var table = new Table + var table = new ExampleTable { HeaderRow = new TableRow("Var1", "Var2", "Var3", "Var4"), DataRows = @@ -71,7 +71,7 @@ public void ThenCanFormatCompleteScenarioOutlineCorrectly() [Test] public void ThenCanFormatScenarioOutlineWithMissingNameCorrectly() { - var table = new Table + var table = new ExampleTable { HeaderRow = new TableRow("Var1", "Var2", "Var3", "Var4"), DataRows = @@ -102,7 +102,7 @@ public void ThenCanFormatScenarioOutlineWithMissingNameCorrectly() [Test] public void ThenCanFormatScenarioOutlineWithMissingDescriptionCorrectly() { - var table = new Table + var table = new ExampleTable { HeaderRow = new TableRow("Var1", "Var2", "Var3", "Var4"), DataRows = diff --git a/src/Pickles/Pickles.DocumentationBuilders.Json.UnitTests/AutomationLayer/StepDefinitions.cs b/src/Pickles/Pickles.DocumentationBuilders.Json.UnitTests/AutomationLayer/StepDefinitions.cs index 2774612b6..facb07411 100644 --- a/src/Pickles/Pickles.DocumentationBuilders.Json.UnitTests/AutomationLayer/StepDefinitions.cs +++ b/src/Pickles/Pickles.DocumentationBuilders.Json.UnitTests/AutomationLayer/StepDefinitions.cs @@ -18,7 +18,6 @@ // // -------------------------------------------------------------------------------------------------------------------- -using System; using System.IO; using System.Text.RegularExpressions; using Autofac; diff --git a/src/Pickles/Pickles.DocumentationBuilders.Json.UnitTests/FormattingAFeature.feature b/src/Pickles/Pickles.DocumentationBuilders.Json.UnitTests/FormattingAFeature.feature index 6c76ae918..0df282113 100644 --- a/src/Pickles/Pickles.DocumentationBuilders.Json.UnitTests/FormattingAFeature.feature +++ b/src/Pickles/Pickles.DocumentationBuilders.Json.UnitTests/FormattingAFeature.feature @@ -153,180 +153,91 @@ Scenario: A feature with a table "DataRows": [ [ "Chapter 1", - "1", - { - "WasExecuted": false, - "WasSuccessful": false - } + "1" ], [ "Chapter 2", - "5", - { - "WasExecuted": false, - "WasSuccessful": false - } + "5" ], [ "Chapter 3", - "10", - { - - "WasExecuted": false, - "WasSuccessful": false - } + "10" ], [ "Chapter 4", - "15", - { - "WasExecuted": false, - "WasSuccessful": false - } + "15" ], [ "Chapter 5", - "20", - { - "WasExecuted": false, - "WasSuccessful": false - } + "20" ], [ "Chapter 6", - "25", - { - "WasExecuted": false, - "WasSuccessful": false - } + "25" ], [ "Chapter 7", - "30", - { - "WasExecuted": false, - "WasSuccessful": false - } + "30" ], [ "Chapter 8", - "35", - { - "WasExecuted": false, - "WasSuccessful": false - } + "35" ], [ "Chapter 9", - "40", - { - "WasExecuted": false, - "WasSuccessful": false - } + "40" ], [ "Chapter 10", - "45", - { - "WasExecuted": false, - "WasSuccessful": false - } + "45" ], [ "Chapter 11", - "50", - { - "WasExecuted": false, - "WasSuccessful": false - } + "50" ], [ "Chapter 12", - "55", - { - "WasExecuted": false, - "WasSuccessful": false - } + "55" ], [ "Chapter 13", - "60", - { - "WasExecuted": false, - "WasSuccessful": false - } + "60" ], [ "Chapter 14", - "65", - { - "WasExecuted": false, - "WasSuccessful": false - } + "65" ], [ "Chapter 15", - "70", - { - "WasExecuted": false, - "WasSuccessful": false - } + "70" ], [ "Chapter 16", - "75", - { - "WasExecuted": false, - "WasSuccessful": false - } + "75" ], [ "Chapter 17", - "80", - { - "WasExecuted": false, - "WasSuccessful": false - } + "80" ], [ "Chapter 18", - "85", - { - "WasExecuted": false, - "WasSuccessful": false - } + "85" ], [ "Chapter 19", - "90", - { - "WasExecuted": false, - "WasSuccessful": false - } + "90" ], [ "Chapter 20", - "95", - { - "WasExecuted": false, - "WasSuccessful": false - } + "95" ], [ "Chapter 21", - "100", - { - "WasExecuted": false, - "WasSuccessful": false - } + "100" ], [ "Chapter 22", - "105", - { - "WasExecuted": false, - "WasSuccessful": false - } + "105" ] ] }, diff --git a/src/Pickles/Pickles.DocumentationBuilders.Json.UnitTests/FormattingAFeature.feature.cs b/src/Pickles/Pickles.DocumentationBuilders.Json.UnitTests/FormattingAFeature.feature.cs index e11113f22..45fb9edcf 100644 --- a/src/Pickles/Pickles.DocumentationBuilders.Json.UnitTests/FormattingAFeature.feature.cs +++ b/src/Pickles/Pickles.DocumentationBuilders.Json.UnitTests/FormattingAFeature.feature.cs @@ -177,90 +177,50 @@ When I click on the table heading ",\r\n \"TableArgument\": {\r\n \"HeaderRow\": [\r\n " + " \"heading\",\r\n \"page #\"\r\n ],\r\n " + " \"DataRows\": [\r\n [\r\n \"Chap" + - "ter 1\",\r\n \"1\",\r\n {\r\n " + - " \"WasExecuted\": false,\r\n \"WasSuccessful\": false\r\n " + - " }\r\n ],\r\n [\r\n " + - " \"Chapter 2\",\r\n \"5\",\r\n {\r\n " + - " \"WasExecuted\": false,\r\n \"WasSuccess" + - "ful\": false\r\n }\r\n ],\r\n " + - " [\r\n \"Chapter 3\",\r\n \"10\",\r\n " + - " {\r\n\r\n \"WasExecuted\": false,\r\n \"WasSucc" + - "essful\": false\r\n }\r\n ],\r\n [\r\n" + - " \"Chapter 4\",\r\n \"15\",\r\n " + - " {\r\n \"WasExecuted\": false,\r\n " + - " \"WasSuccessful\": false\r\n }\r\n ],\r\n " + - " [\r\n \"Chapter 5\",\r\n \"20\"," + - "\r\n {\r\n \"WasExecuted\": false,\r\n " + - " \"WasSuccessful\": false\r\n }\r\n " + - " ],\r\n [\r\n \"Chapter 6\",\r\n " + - " \"25\",\r\n {\r\n \"WasExecuted" + - "\": false,\r\n \"WasSuccessful\": false\r\n " + - " }\r\n ],\r\n [\r\n \"Chapte" + - "r 7\",\r\n \"30\",\r\n {\r\n " + - " \"WasExecuted\": false,\r\n \"WasSuccessful\": false\r\n " + - " }\r\n ],\r\n [\r\n " + - " \"Chapter 8\",\r\n \"35\",\r\n {\r\n " + - " \"WasExecuted\": false,\r\n \"WasSuccess" + - "ful\": false\r\n }\r\n ],\r\n " + - " [\r\n \"Chapter 9\",\r\n \"40\",\r\n " + - " {\r\n \"WasExecuted\": false,\r\n " + - " \"WasSuccessful\": false\r\n }\r\n ],\r\n " + - " [\r\n \"Chapter 10\",\r\n " + - " \"45\",\r\n {\r\n \"WasExecuted\": false,\r\n" + - " \"WasSuccessful\": false\r\n }\r\n " + - " ],\r\n [\r\n \"Chapter 11\",\r\n " + - " \"50\",\r\n {\r\n \"WasE" + - "xecuted\": false,\r\n \"WasSuccessful\": false\r\n " + - " }\r\n ],\r\n [\r\n " + - "\"Chapter 12\",\r\n \"55\",\r\n {\r\n " + - " \"WasExecuted\": false,\r\n \"WasSuccessful\": fal" + - "se\r\n }\r\n ],\r\n [\r\n " + - " \"Chapter 13\",\r\n \"60\",\r\n " + - " {\r\n \"WasExecuted\": false,\r\n \"W" + - "asSuccessful\": false\r\n }\r\n ],\r\n " + - " [\r\n \"Chapter 14\",\r\n \"65\",\r\n" + - " {\r\n \"WasExecuted\": false,\r\n " + - " \"WasSuccessful\": false\r\n }\r\n " + - " ],\r\n [\r\n \"Chapter 15\",\r\n " + - " \"70\",\r\n {\r\n \"WasExecuted\"" + - ": false,\r\n \"WasSuccessful\": false\r\n " + - "}\r\n ],\r\n [\r\n \"Chapter" + - " 16\",\r\n \"75\",\r\n {\r\n " + - " \"WasExecuted\": false,\r\n \"WasSuccessful\": false\r\n " + - " }\r\n ],\r\n [\r\n " + - " \"Chapter 17\",\r\n \"80\",\r\n {\r\n " + - " \"WasExecuted\": false,\r\n \"WasSucces" + - "sful\": false\r\n }\r\n ],\r\n " + - " [\r\n \"Chapter 18\",\r\n \"85\",\r\n " + - " {\r\n \"WasExecuted\": false,\r\n " + - " \"WasSuccessful\": false\r\n }\r\n ],\r" + - "\n [\r\n \"Chapter 19\",\r\n " + - " \"90\",\r\n {\r\n \"WasExecuted\": false," + - "\r\n \"WasSuccessful\": false\r\n }\r\n " + - " ],\r\n [\r\n \"Chapter 20\",\r\n " + - " \"95\",\r\n {\r\n \"Wa" + - "sExecuted\": false,\r\n \"WasSuccessful\": false\r\n " + - " }\r\n ],\r\n [\r\n " + - " \"Chapter 21\",\r\n \"100\",\r\n {\r\n " + - " \"WasExecuted\": false,\r\n \"WasSuccessful\": " + - "false\r\n }\r\n ],\r\n [\r\n " + - " \"Chapter 22\",\r\n \"105\",\r\n " + - " {\r\n \"WasExecuted\": false,\r\n " + - " \"WasSuccessful\": false\r\n }\r\n ]\r\n " + - " ]\r\n },\r\n \"StepComments\": [],\r\n " + - " \"AfterLastStepComments\": []\r\n },\r\n {\r\n " + - " \"Keyword\": \"When\",\r\n \"NativeKeyword\": \"When \",\r\n " + - " \"Name\": \"I click on the table heading\",\r\n \"StepComments\": " + - "[],\r\n \"AfterLastStepComments\": []\r\n },\r\n " + - " {\r\n \"Keyword\": \"Then\",\r\n \"NativeKeyword\": \"Then " + - "\",\r\n \"Name\": \"the table body should collapse\",\r\n \"" + - "StepComments\": [],\r\n \"AfterLastStepComments\": []\r\n }" + - "\r\n ],\r\n \"Tags\": [],\r\n \"Result\": {\r\n " + - " \"WasExecuted\": false,\r\n \"WasSuccessful\": false\r\n }\r\n " + - " }\r\n ],\r\n \"Result\": {\r\n \"WasExecuted\": false,\r\n " + - " \"WasSuccessful\": false\r\n },\r\n \"Tags\": []\r\n },\r\n \"" + - "Result\": {\r\n \"WasExecuted\": false,\r\n \"WasSuccessful\": false\r\n " + - " }\r\n }\r\n ],", ((TechTalk.SpecFlow.Table)(null)), "Then "); + "ter 1\",\r\n \"1\"\r\n ],\r\n " + + "[\r\n \"Chapter 2\",\r\n \"5\"\r\n " + + " ],\r\n [\r\n \"Chapter 3\",\r\n " + + " \"10\"\r\n ],\r\n [\r\n " + + " \"Chapter 4\",\r\n \"15\"\r\n ],\r\n " + + " [\r\n \"Chapter 5\",\r\n \"20\"\r\n " + + " ],\r\n [\r\n \"Chapter 6\"," + + "\r\n \"25\"\r\n ],\r\n [\r\n " + + " \"Chapter 7\",\r\n \"30\"\r\n " + + " ],\r\n [\r\n \"Chapter 8\",\r\n " + + " \"35\"\r\n ],\r\n [\r\n " + + " \"Chapter 9\",\r\n \"40\"\r\n ],\r\n " + + " [\r\n \"Chapter 10\",\r\n \"45\"\r\n " + + " ],\r\n [\r\n \"Chapter 11\",\r\n " + + " \"50\"\r\n ],\r\n [\r\n " + + " \"Chapter 12\",\r\n \"55\"\r\n ]" + + ",\r\n [\r\n \"Chapter 13\",\r\n " + + " \"60\"\r\n ],\r\n [\r\n " + + "\"Chapter 14\",\r\n \"65\"\r\n ],\r\n " + + " [\r\n \"Chapter 15\",\r\n \"70\"\r\n " + + " ],\r\n [\r\n \"Chapter 16\",\r\n " + + " \"75\"\r\n ],\r\n [\r\n " + + " \"Chapter 17\",\r\n \"80\"\r\n ]" + + ",\r\n [\r\n \"Chapter 18\",\r\n " + + " \"85\"\r\n ],\r\n [\r\n " + + "\"Chapter 19\",\r\n \"90\"\r\n ],\r\n " + + " [\r\n \"Chapter 20\",\r\n \"95\"\r\n " + + " ],\r\n [\r\n \"Chapter 21\",\r\n " + + " \"100\"\r\n ],\r\n [\r\n " + + " \"Chapter 22\",\r\n \"105\"\r\n " + + " ]\r\n ]\r\n },\r\n \"StepComments\": []," + + "\r\n \"AfterLastStepComments\": []\r\n },\r\n {" + + "\r\n \"Keyword\": \"When\",\r\n \"NativeKeyword\": \"When \",\r" + + "\n \"Name\": \"I click on the table heading\",\r\n \"StepC" + + "omments\": [],\r\n \"AfterLastStepComments\": []\r\n },\r\n " + + " {\r\n \"Keyword\": \"Then\",\r\n \"NativeKeywor" + + "d\": \"Then \",\r\n \"Name\": \"the table body should collapse\",\r\n " + + " \"StepComments\": [],\r\n \"AfterLastStepComments\": []\r\n " + + " }\r\n ],\r\n \"Tags\": [],\r\n \"Result\": {\r\n " + + " \"WasExecuted\": false,\r\n \"WasSuccessful\": false\r\n " + + " }\r\n }\r\n ],\r\n \"Result\": {\r\n \"WasExecuted\": f" + + "alse,\r\n \"WasSuccessful\": false\r\n },\r\n \"Tags\": []\r\n }" + + ",\r\n \"Result\": {\r\n \"WasExecuted\": false,\r\n \"WasSuccessful\": fa" + + "lse\r\n }\r\n }\r\n ],", ((TechTalk.SpecFlow.Table)(null)), "Then "); #line hidden this.ScenarioCleanup(); } diff --git a/src/Pickles/Pickles.DocumentationBuilders.Json/JsonTable.cs b/src/Pickles/Pickles.DocumentationBuilders.Json/JsonTable.cs index ded28b137..de2bf318a 100644 --- a/src/Pickles/Pickles.DocumentationBuilders.Json/JsonTable.cs +++ b/src/Pickles/Pickles.DocumentationBuilders.Json/JsonTable.cs @@ -28,4 +28,5 @@ public class JsonTable public List DataRows { get; set; } } + } diff --git a/src/Pickles/Pickles.DocumentationBuilders.Json/JsonTableRow.cs b/src/Pickles/Pickles.DocumentationBuilders.Json/JsonTableRow.cs index 7530ac669..aac915728 100644 --- a/src/Pickles/Pickles.DocumentationBuilders.Json/JsonTableRow.cs +++ b/src/Pickles/Pickles.DocumentationBuilders.Json/JsonTableRow.cs @@ -24,13 +24,24 @@ namespace PicklesDoc.Pickles.DocumentationBuilders.Json { public class JsonTableRow : List { - public JsonTableRow(IEnumerable cells, JsonTestResult result) + public JsonTableRow(IEnumerable cells) { AddRange(cells); - this.Result = result; - Add(result); + } + } + + public class JsonTableRowWithTestResult : JsonTableRow + { + public JsonTableRowWithTestResult(IEnumerable cells, JsonTestResult result) : base(cells) + { + if (result != null) + { + this.Result = result; + Add(result); + } } public JsonTestResult Result { get; private set; } } + } diff --git a/src/Pickles/Pickles.DocumentationBuilders.Json/Mapper/ExampleToJsonExampleMapper.cs b/src/Pickles/Pickles.DocumentationBuilders.Json/Mapper/ExampleToJsonExampleMapper.cs index 71ccfb0ed..98de081fb 100644 --- a/src/Pickles/Pickles.DocumentationBuilders.Json/Mapper/ExampleToJsonExampleMapper.cs +++ b/src/Pickles/Pickles.DocumentationBuilders.Json/Mapper/ExampleToJsonExampleMapper.cs @@ -51,7 +51,7 @@ public JsonExample Map(Example example, string language) { Name = example.Name, Description = example.Description, - TableArgument = this.tableMapper.Map(example.TableArgument), + TableArgument = this.tableMapper.MapWithTestResults(example.TableArgument), Tags = (example.Tags ?? new List()).ToList(), NativeKeyword = examplesKeyword }; diff --git a/src/Pickles/Pickles.DocumentationBuilders.Json/Mapper/TableRowToJsonTableRowMapper.cs b/src/Pickles/Pickles.DocumentationBuilders.Json/Mapper/TableRowToJsonTableRowMapper.cs index a26ad9fc4..d2f50ccd3 100644 --- a/src/Pickles/Pickles.DocumentationBuilders.Json/Mapper/TableRowToJsonTableRowMapper.cs +++ b/src/Pickles/Pickles.DocumentationBuilders.Json/Mapper/TableRowToJsonTableRowMapper.cs @@ -35,7 +35,18 @@ public TableRowToJsonTableRowMapper() public JsonTableRow Map(TableRow tableRow) { - return tableRow == null ? null : new JsonTableRow(tableRow.Cells.ToArray(), this.testResultMapper.Map(tableRow.Result)); + if (tableRow == null) + return null; + + return new JsonTableRow(tableRow.Cells.ToArray()); + } + + public JsonTableRow MapwWithTestResult(TableRowWithTestResult tableRow) + { + if (tableRow == null) + return null; + + return new JsonTableRowWithTestResult(tableRow.Cells.ToArray(), this.testResultMapper.Map(tableRow.Result)); } } } \ No newline at end of file diff --git a/src/Pickles/Pickles.DocumentationBuilders.Json/Mapper/TableToJsonTableMapper.cs b/src/Pickles/Pickles.DocumentationBuilders.Json/Mapper/TableToJsonTableMapper.cs index 496108c8e..f5c49fd40 100644 --- a/src/Pickles/Pickles.DocumentationBuilders.Json/Mapper/TableToJsonTableMapper.cs +++ b/src/Pickles/Pickles.DocumentationBuilders.Json/Mapper/TableToJsonTableMapper.cs @@ -50,5 +50,19 @@ public JsonTable Map(Table table) DataRows = (table.DataRows ?? new List()).Select(this.tableRowMapper.Map).ToList() }; } + + public JsonTable MapWithTestResults(ExampleTable table) + { + if (table == null) + { + return null; + } + + return new JsonTable + { + HeaderRow = this.tableHeaderMapper.Map(table.HeaderRow), + DataRows = (table.DataRows ?? new List()).Select(x=>this.tableRowMapper.MapwWithTestResult(x as TableRowWithTestResult)).ToList() + }; + } } } \ No newline at end of file diff --git a/src/Pickles/Pickles.ObjectModel/ObjectModel/Example.cs b/src/Pickles/Pickles.ObjectModel/ObjectModel/Example.cs index cf269c9b0..b8654c8ab 100644 --- a/src/Pickles/Pickles.ObjectModel/ObjectModel/Example.cs +++ b/src/Pickles/Pickles.ObjectModel/ObjectModel/Example.cs @@ -28,7 +28,7 @@ public class Example public string Description { get; set; } - public Table TableArgument { get; set; } + public ExampleTable TableArgument { get; set; } public List Tags { get; set; } } diff --git a/src/Pickles/Pickles.ObjectModel/ObjectModel/Table.cs b/src/Pickles/Pickles.ObjectModel/ObjectModel/Table.cs index 671b9d1c4..63de23678 100644 --- a/src/Pickles/Pickles.ObjectModel/ObjectModel/Table.cs +++ b/src/Pickles/Pickles.ObjectModel/ObjectModel/Table.cs @@ -28,4 +28,8 @@ public class Table public List DataRows { get; set; } } + + public class ExampleTable : Table + { + } } diff --git a/src/Pickles/Pickles.ObjectModel/ObjectModel/TableRow.cs b/src/Pickles/Pickles.ObjectModel/ObjectModel/TableRow.cs index e3dfcd4c7..b9ad27b63 100644 --- a/src/Pickles/Pickles.ObjectModel/ObjectModel/TableRow.cs +++ b/src/Pickles/Pickles.ObjectModel/ObjectModel/TableRow.cs @@ -45,6 +45,22 @@ public List Cells get { return this.tableCells; } } + } + + public class TableRowWithTestResult : TableRow + { + public TableRowWithTestResult() + { + } + + public TableRowWithTestResult(params string[] cells):base(cells) + { + } + + public TableRowWithTestResult(IEnumerable cells):base(cells) + { + } + public TestResult Result { get; set; } } } diff --git a/src/Pickles/Pickles.Test/Formatters/HtmlScenarioOutlineFormatterTests.cs b/src/Pickles/Pickles.Test/Formatters/HtmlScenarioOutlineFormatterTests.cs index 550b4822f..8be3379a0 100644 --- a/src/Pickles/Pickles.Test/Formatters/HtmlScenarioOutlineFormatterTests.cs +++ b/src/Pickles/Pickles.Test/Formatters/HtmlScenarioOutlineFormatterTests.cs @@ -61,14 +61,14 @@ private static ScenarioOutline BuildMinimalScenarioOutline() examples.Add(new Example { Description = "My Example Description", - TableArgument = new Table + TableArgument = new ExampleTable { HeaderRow = new TableRow("Cell1"), DataRows = new List( new[] { - new TableRow("Value1") + new TableRowWithTestResult("Value1") }) }, }); diff --git a/src/Pickles/Pickles.Test/ObjectModel/Json/ExampleToJsonExampleMapperTests.cs b/src/Pickles/Pickles.Test/ObjectModel/Json/ExampleToJsonExampleMapperTests.cs index 08cde4d25..3f8103136 100644 --- a/src/Pickles/Pickles.Test/ObjectModel/Json/ExampleToJsonExampleMapperTests.cs +++ b/src/Pickles/Pickles.Test/ObjectModel/Json/ExampleToJsonExampleMapperTests.cs @@ -101,7 +101,7 @@ public void Map_AnExampleWithTableArgument_ReturnsAJsonExampleWithTableArgument( { var example = new Example { - TableArgument = new Table { HeaderRow = new TableRow("Placeholder 1", "Placeholder 2") } + TableArgument = new ExampleTable { HeaderRow = new TableRow("Placeholder 1", "Placeholder 2") } }; var mapper = CreateMapper(); @@ -116,7 +116,7 @@ public void Map_EnglishFeature_SetsNativeKeywordToExamples() { var example = new Example { - TableArgument = new Table { HeaderRow = new TableRow("Placeholder 1", "Placeholder 2") } + TableArgument = new ExampleTable { HeaderRow = new TableRow("Placeholder 1", "Placeholder 2") } }; var mapper = CreateMapper(); @@ -130,7 +130,7 @@ public void Map_DutchFeature_SetsNativeKeywordToExamples() { var example = new Example { - TableArgument = new Table { HeaderRow = new TableRow("Placeholder 1", "Placeholder 2") } + TableArgument = new ExampleTable { HeaderRow = new TableRow("Placeholder 1", "Placeholder 2") } }; var mapper = CreateMapper(); diff --git a/src/Pickles/Pickles.Test/ObjectModel/Json/TableRowToJsonTableRowMapperTests.cs b/src/Pickles/Pickles.Test/ObjectModel/Json/TableRowToJsonTableRowMapperTests.cs index 94fc61e95..c31cce533 100644 --- a/src/Pickles/Pickles.Test/ObjectModel/Json/TableRowToJsonTableRowMapperTests.cs +++ b/src/Pickles/Pickles.Test/ObjectModel/Json/TableRowToJsonTableRowMapperTests.cs @@ -52,14 +52,26 @@ private static TableRowToJsonTableRowMapper CreateTableRowMapper() [Test] public void Map_TableRowWithResult_ReturnsObjectWithResult() { - var tableRow = new TableRow { Result = TestResult.Passed }; + var tableRow = new TableRowWithTestResult { Result = TestResult.Passed }; var mapper = CreateTableRowMapper(); - var actual = mapper.Map(tableRow); + var actual = mapper.MapwWithTestResult(tableRow) as JsonTableRowWithTestResult; + Check.That(actual != null); Check.That(actual.Result.WasExecuted).IsTrue(); Check.That(actual.Result.WasSuccessful).IsTrue(); } + [Test] + public void Map_TableRow_ReturnsObject() + { + var tableRow = new TableRowWithTestResult { Result = TestResult.Passed }; + var mapper = CreateTableRowMapper(); + + var actual = mapper.Map(tableRow) as JsonTableRowWithTestResult; + + Check.That(actual == null); + } + [Test] public void Map_TableRowWithRows_ReturnsObjectWithStrings() { @@ -68,8 +80,20 @@ public void Map_TableRowWithRows_ReturnsObjectWithStrings() var actual = mapper.Map(tableRow); Check.That(actual).Contains("first string", "second string", "third string"); - Check.That(actual.Result.WasSuccessful).Equals(false); - Check.That(actual.Result.WasExecuted).Equals(false); + Check.That(actual != null); + } + + [Test] + public void Map_TableRowWithTestResultsWithRows_ReturnsObjectWithStrings() + { + var tableRow = new TableRowWithTestResult("first string", "second string", "third string"); + var mapper = CreateTableRowMapper(); + var actual = mapper.MapwWithTestResult(tableRow) as JsonTableRowWithTestResult; + + Check.That(actual != null); + Check.That(actual).Contains("first string", "second string", "third string"); + Check.That(actual.Result.WasExecuted).IsFalse(); + Check.That(actual.Result.WasSuccessful).IsFalse(); } [Test] @@ -80,8 +104,9 @@ public void Map_TableRowWithCells_ConvertsToJsonTableRow() var jsonTableRow = mapper.Map(tableRow); Check.That(jsonTableRow).Contains("cell 1", "cell 2"); - Check.That(jsonTableRow.Result.WasSuccessful).Equals(false); - Check.That(jsonTableRow.Result.WasExecuted).Equals(false); + + var actual = jsonTableRow as JsonTableRowWithTestResult; + Check.That(actual == null); } [Test] @@ -97,9 +122,10 @@ public void Map_TableHeaderWithValues_ConvertsToJsonTableHeader() [Test] public void Map_TableRowWithTestResult_ConvertsToJsonTableRowWithTestResult() { - var tableRow = new TableRow { Result = TestResult.Passed }; + var tableRow = new TableRowWithTestResult { Result = TestResult.Passed }; var mapper = CreateTableRowMapper(); - var jsonTableRow = mapper.Map(tableRow); + var jsonTableRow = mapper.MapwWithTestResult(tableRow) as JsonTableRowWithTestResult; + Check.That(jsonTableRow != null); Check.That(jsonTableRow.Result.WasExecuted).IsEqualTo(true); Check.That(jsonTableRow.Result.WasSuccessful).IsEqualTo(true); diff --git a/src/Pickles/Pickles.Test/ObjectModel/Json/TableToJsonTableMapperTests.cs b/src/Pickles/Pickles.Test/ObjectModel/Json/TableToJsonTableMapperTests.cs index 09e377e96..c34bf7a5d 100644 --- a/src/Pickles/Pickles.Test/ObjectModel/Json/TableToJsonTableMapperTests.cs +++ b/src/Pickles/Pickles.Test/ObjectModel/Json/TableToJsonTableMapperTests.cs @@ -95,15 +95,46 @@ public void Map_TableWithDataRows_ReturnsJsonTableWithDataRows() Check.That(actual.DataRows.Count).IsEqualTo(2); + Check.That(actual.DataRows[0].Count).IsEqualTo(2); + Check.That(actual.DataRows[0].OfType()).ContainsExactly("cell 1-1", "cell 1-2"); + + Check.That(actual.DataRows[1].Count).IsEqualTo(2); + Check.That(actual.DataRows[1].OfType()).ContainsExactly("cell 2-1", "cell 2-2"); + } + + [Test] + public void Map_ExampleTableWithDataRows_ReturnsJsonTableWithDataRows() + { + var table = new ExampleTable + { + DataRows = new List + { + new TableRowWithTestResult("cell 1-1", "cell 1-2"), + new TableRowWithTestResult("cell 2-1", "cell 2-2") + } + }; + + var testResult = new JsonTestResult + { + WasExecuted = false, + WasSuccessful = false + }; + + var mapper = CreateMapper(); + var actual = mapper.MapWithTestResults(table); + + Check.That(actual.DataRows.Count).IsEqualTo(2); + Check.That(actual.DataRows[0].Count).IsEqualTo(3); Check.That(actual.DataRows[0].OfType()).ContainsExactly("cell 1-1", "cell 1-2"); - Check.That(actual.DataRows[0].Result.WasSuccessful).Equals(false); - Check.That(actual.DataRows[0].Result.WasExecuted).Equals(false); + Check.That((actual.DataRows[0] as JsonTableRowWithTestResult).Result.WasSuccessful).Equals(false); + Check.That((actual.DataRows[0] as JsonTableRowWithTestResult).Result.WasExecuted).Equals(false); Check.That(actual.DataRows[1].Count).IsEqualTo(3); Check.That(actual.DataRows[1].OfType()).ContainsExactly("cell 2-1", "cell 2-2"); - Check.That(actual.DataRows[1].Result.WasSuccessful).Equals(false); - Check.That(actual.DataRows[1].Result.WasExecuted).Equals(false); + Check.That((actual.DataRows[1] as JsonTableRowWithTestResult).Result.WasSuccessful).Equals(false); + Check.That((actual.DataRows[1] as JsonTableRowWithTestResult).Result.WasExecuted).Equals(false); + } [Test] diff --git a/src/Pickles/Pickles.TestFrameworks.UnitTests/MsTest/WhenParsingMsTestResultsFileWithEmptyExampleValues.cs b/src/Pickles/Pickles.TestFrameworks.UnitTests/MsTest/WhenParsingMsTestResultsFileWithEmptyExampleValues.cs index baa101da1..5fb379272 100644 --- a/src/Pickles/Pickles.TestFrameworks.UnitTests/MsTest/WhenParsingMsTestResultsFileWithEmptyExampleValues.cs +++ b/src/Pickles/Pickles.TestFrameworks.UnitTests/MsTest/WhenParsingMsTestResultsFileWithEmptyExampleValues.cs @@ -43,18 +43,18 @@ public void ThenMatchWillBeFoundEvenIfACarriageReturnWasFoundInValueField() var scenarioOutline = new ScenarioOutline { Name = "Testing test", Feature = feature }; scenarioOutline.Steps = new List(); - var examples = new Table(); + var examples = new ExampleTable(); examples.HeaderRow = new TableRow(); examples.HeaderRow.Cells.Add("result1"); examples.HeaderRow.Cells.Add("result2"); examples.HeaderRow.Cells.Add("result3"); - var row = new TableRow(); + var row = new TableRowWithTestResult(); row.Cells.Add("1"); row.Cells.Add("2"); row.Cells.Add("3"); examples.DataRows = new List(); examples.DataRows.Add(row); - row = new TableRow(); + row = new TableRowWithTestResult(); row.Cells.Add("1"); row.Cells.Add(""); row.Cells.Add("4"); diff --git a/src/Pickles/Pickles.TestFrameworks.UnitTests/MsTest/WhenParsingMsTestResultsFileWithIgnoredExample.cs b/src/Pickles/Pickles.TestFrameworks.UnitTests/MsTest/WhenParsingMsTestResultsFileWithIgnoredExample.cs index 4815e15ae..54bd92d5b 100644 --- a/src/Pickles/Pickles.TestFrameworks.UnitTests/MsTest/WhenParsingMsTestResultsFileWithIgnoredExample.cs +++ b/src/Pickles/Pickles.TestFrameworks.UnitTests/MsTest/WhenParsingMsTestResultsFileWithIgnoredExample.cs @@ -44,10 +44,10 @@ public void ThenIgnoredScenarioOutlineIsSetToInconclusive() var scenarioOutline = new ScenarioOutline { Name = "Add two numbers", Feature = feature }; scenarioOutline.Steps = new List(); - var examples = new Table(); + var examples = new ExampleTable(); examples.HeaderRow = new TableRow(); examples.HeaderRow.Cells.Add("TestCase"); - var row = new TableRow(); + var row = new TableRowWithTestResult(); row.Cells.Add("1"); examples.DataRows = new List(); examples.DataRows.Add(row); diff --git a/src/Pickles/Pickles.TestFrameworks.UnitTests/VsTest/WhenParsingMsTestResultsFileWithIgnoredExample.cs b/src/Pickles/Pickles.TestFrameworks.UnitTests/VsTest/WhenParsingMsTestResultsFileWithIgnoredExample.cs index ea3bd2cdc..97628be07 100644 --- a/src/Pickles/Pickles.TestFrameworks.UnitTests/VsTest/WhenParsingMsTestResultsFileWithIgnoredExample.cs +++ b/src/Pickles/Pickles.TestFrameworks.UnitTests/VsTest/WhenParsingMsTestResultsFileWithIgnoredExample.cs @@ -45,10 +45,10 @@ public void ThenIgnoredScenarioOutlineIsSetToInconclusive() var scenarioOutline = new ScenarioOutline { Name = "Add two numbers", Feature = feature }; scenarioOutline.Steps = new List(); - var examples = new Table(); + var examples = new ExampleTable(); examples.HeaderRow = new TableRow(); examples.HeaderRow.Cells.Add("TestCase"); - var row = new TableRow(); + var row = new TableRowWithTestResult(); row.Cells.Add("1"); examples.DataRows = new List(); examples.DataRows.Add(row); diff --git a/src/Pickles/Pickles/ObjectModel/Mapper.cs b/src/Pickles/Pickles/ObjectModel/Mapper.cs index f1d392db8..7446e4a72 100644 --- a/src/Pickles/Pickles/ObjectModel/Mapper.cs +++ b/src/Pickles/Pickles/ObjectModel/Mapper.cs @@ -72,7 +72,37 @@ public Table MapToTable(IEnumerable tableRows) return new Table { HeaderRow = this.MapToTableRow(tableRows.First()), - DataRows = tableRows.Skip(1).Select(this.MapToTableRow).ToList() + DataRows = tableRows.Skip(1).Select(MapToTableRow).ToList() + }; + } + + public TableRow MapToTableRowWithTestResult(G.TableRow tableRow) + { + if (tableRow == null) + { + return null; + } + + return new TableRowWithTestResult(tableRow.Cells.Select(this.MapToString)); + } + + public Table MapToExampleTable(G.DataTable dataTable) + { + if (dataTable == null) + { + return null; + } + + var tableRows = dataTable.Rows; + return this.MapToExampleTable(tableRows); + } + + public ExampleTable MapToExampleTable(IEnumerable tableRows) + { + return new ExampleTable + { + HeaderRow = this.MapToTableRow(tableRows.First()), + DataRows = tableRows.Skip(1).Select(MapToTableRowWithTestResult).ToList() }; } @@ -189,7 +219,7 @@ public Example MapToExample(G.Examples examples) { Description = examples.Description, Name = examples.Name, - TableArgument = this.MapToTable(((G.IHasRows) examples).Rows), + TableArgument = this.MapToExampleTable(((G.IHasRows) examples).Rows), Tags = examples.Tags?.Select(this.MapToString).ToList() }; } diff --git a/src/Pickles/Pickles/Runner.cs b/src/Pickles/Pickles/Runner.cs index 8eabeb9ff..c223cb600 100644 --- a/src/Pickles/Pickles/Runner.cs +++ b/src/Pickles/Pickles/Runner.cs @@ -117,13 +117,15 @@ private static void SetResultsForIndividualScenariosUnderFeature(FeatureNode fea if (scenarioOutline != null) { - foreach (var example in scenarioOutline.Examples.SelectMany(e => e.TableArgument.DataRows)) + foreach (var example in scenarioOutline.Examples.SelectMany(e => e.TableArgument.DataRows).Cast()) { - example.Result = testResults.GetExampleResult(scenarioOutline, example.Cells.ToArray()); + if(example!=null) + example.Result = testResults.GetExampleResult(scenarioOutline, example.Cells.ToArray()); } scenarioOutline.Result = scenarioOutline.Examples.SelectMany(e => e.TableArgument.DataRows) + .Cast() .Select(row => row.Result) .Merge(); }