Skip to content

Commit 3989402

Browse files
author
vagrant
committed
Merge branch 'ExampleTableToString'
2 parents 638b07a + 0f8a70a commit 3989402

File tree

5 files changed

+99
-1
lines changed

5 files changed

+99
-1
lines changed

.gitignore

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,4 +16,4 @@ PackageBuild/*
1616
Build/*
1717
TestResult.xml
1818
TestStack.BDDfy.sln.ide/graph
19-
_NCrunch_TestStack.BDDfy
19+
_NCrunch_TestStack.BDDfy/
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+

2+
| Header 1 | Header 2 |
3+
| 1 | 2 |
4+
| 3 | 4 |
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+

2+
| Header 1 | Header 2 | Additional |
3+
| 1 | 2 | SomeAdditional Value |
4+
| 3 | 4 | |

TestStack.BDDfy.Tests/Scanner/Examples/ExampleTableTests.cs

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
using System;
22
using System.Linq;
3+
using ApprovalTests;
34
using NUnit.Framework;
45
using Shouldly;
56

@@ -29,5 +30,29 @@ public void CanParseTable()
2930
argException.Message.ShouldBe("Cannot convert <null> to Int32 (Column: 'Header 1', Row: 2)");
3031
exampleTable.ElementAt(1).GetValueOf(1, typeof(DateTime)).ShouldBe(new DateTime(2010, 3, 14));
3132
}
33+
34+
[Test]
35+
public void TableToString()
36+
{
37+
var table = new ExampleTable("Header 1", "Header 2")
38+
{
39+
{1, 2},
40+
{3, 4}
41+
};
42+
43+
Approvals.Verify(table.ToString());
44+
}
45+
46+
[Test]
47+
public void TableToStringWithAdditionalColumn()
48+
{
49+
var table = new ExampleTable("Header 1", "Header 2")
50+
{
51+
{1, 2},
52+
{3, 4}
53+
};
54+
55+
Approvals.Verify(table.ToString(new[] {"Additional"}, new[] {new[] {"SomeAdditional Value"}}));
56+
}
3257
}
3358
}

TestStack.BDDfy/Scanners/StepScanners/Examples/ExampleTable.cs

Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
using System.Collections;
33
using System.Collections.Generic;
44
using System.Linq;
5+
using System.Text;
56

67
namespace TestStack.BDDfy
78
{
@@ -17,6 +18,7 @@ public ExampleTable(params string[] headers)
1718
public string[] Headers { get; private set; }
1819

1920
public int Count { get { return _rows.Count; } }
21+
2022
public bool IsReadOnly { get { return false; } }
2123

2224
public void Add(params object[] items)
@@ -96,5 +98,68 @@ private static string Sanitise(string value)
9698
{
9799
return value.Replace(" ", string.Empty).Replace("_", string.Empty);
98100
}
101+
102+
public string ToString(string[] additionalHeaders, string[][] additionalData)
103+
{
104+
var numberColumns = Headers.Length + additionalHeaders.Length;
105+
var maxWidth = new int[numberColumns];
106+
107+
var rows = new List<string[]>();
108+
109+
Action<IEnumerable<string>> addRow = cells =>
110+
{
111+
var row = new string[numberColumns];
112+
var index = 0;
113+
114+
foreach (var cellText in cells)
115+
{
116+
row[index++] = cellText;
117+
}
118+
119+
for (var i = 0; i < numberColumns; i++)
120+
{
121+
var rowValue = row[i];
122+
if (rowValue != null && rowValue.Length > maxWidth[i])
123+
{
124+
maxWidth[i] = rowValue.Length;
125+
}
126+
}
127+
128+
rows.Add(row);
129+
};
130+
131+
addRow(Headers.Concat(additionalHeaders));
132+
var rowIndex = 0;
133+
foreach (var row in this)
134+
{
135+
var additionalValues = additionalData.Length > rowIndex ? additionalData[rowIndex] : Enumerable.Empty<string>();
136+
addRow(row.Values.Select(v => v.GetValueAsString()).Concat(additionalValues));
137+
rowIndex++;
138+
}
139+
140+
var stringBuilder = new StringBuilder().AppendLine();
141+
foreach (var row in rows)
142+
{
143+
WriteExampleRow(row, maxWidth, stringBuilder);
144+
}
145+
146+
return stringBuilder.ToString();
147+
}
148+
149+
public override string ToString()
150+
{
151+
return ToString(new string[0], new string[0][]);
152+
}
153+
154+
private void WriteExampleRow(string[] row, int[] maxWidth, StringBuilder stringBuilder)
155+
{
156+
for (var index = 0; index < row.Length; index++)
157+
{
158+
var col = row[index];
159+
stringBuilder.AppendFormat("| {0} ", (col ?? string.Empty).Trim().PadRight(maxWidth[index]));
160+
}
161+
162+
stringBuilder.AppendLine("|");
163+
}
99164
}
100165
}

0 commit comments

Comments
 (0)