Many acceptance tests need test data to work with, and RowEntryFixture is a simple fixture made for just that. You create a class that inherits from RowEntryFixture and override its EnterRow method to add an item of data from the corresponding table in your acceptance test.
When I started using FitNesse for my .Net projects, however, I discovered that the FitNesse developers didn't add RowEntryFixture to the .Net part of FitNesse. So I ported the Java version to .Net, and I built it into my .Net FitNesse replacement bundle. Here's the code for anyone wanting to build FitNesse with it:
using System;
using System.IO;
using fit;
namespace fitnesse.fixtures
{
public abstract class RowEntryFixture : ColumnFixture
{
public abstract void EnterRow();
public const String ERROR_INDICATOR = "Unable to enter last row: ";
public const String RIGHT_STYLE = "pass";
public const String WRONG_STYLE = "fail";
public override void DoRow(Parse row)
{
if(row.Parts.Body.IndexOf(ERROR_INDICATOR) != -1)
return;
base.DoRow(row);
try
{
EnterRow();
Right(AppendCell(row, "entered"));
}
catch(Exception e)
{
Wrong(AppendCell(row, "skipped"));
ReportError(row, e);
}
}
protected Parse AppendCell(Parse row, String text)
{
Parse lastCell = new Parse("td", text, null, null);
row.Parts.Last.More = lastCell;
return lastCell;
}
public void ReportError(Parse row, Exception e)
{
Parse errorCell = MakeMessageCell(e);
InsertRowAfter(row, new Parse("tr", null, errorCell, null));
}
public Parse MakeMessageCell(Exception e)
{
Parse errorCell = new Parse("td", "", null, null);
StringWriter buffer = new StringWriter();
buffer.Write(e.StackTrace);
errorCell.AddToTag(" colspan=\"" + (ColumnBindings.Length + 1) + "\"");
errorCell.AddToBody("<i>" + ERROR_INDICATOR + e.Message + "</i>");
errorCell.AddToBody("<pre>" + (buffer.ToString()) + "</pre>");
Wrong(errorCell);
return errorCell;
}
public void InsertRowAfter(Parse currentRow, Parse rowToAdd)
{
Parse nextRow = currentRow.More;
currentRow.More = rowToAdd;
rowToAdd.More = nextRow;
}
}
}