package fitnesse.wikitext.parser; import fitnesse.html.HtmlElement; import org.junit.Test; public class TableTest { @Test public void scansTables() { ParserTestHelper.assertScansTokenType("|a|\n", "Table", true); ParserTestHelper.assertScansTokenType("!|a|\n", "Table", true); ParserTestHelper.assertScansTokenType("-|a|\n", "Table", true); ParserTestHelper.assertScansTokenType("-!|a|\n", "Table", true); ParserTestHelper.assertScansTokenType("!| a |\n", "Table", true); } @Test public void parsesTables() { ParserTestHelper.assertParses("|a|\n", "SymbolList[Table[TableRow[TableCell[Text]]]]"); ParserTestHelper.assertParses("!|a|\n", "SymbolList[Table[TableRow[TableCell[Text]]]]"); ParserTestHelper.assertParses("| a |\n", "SymbolList[Table[TableRow[TableCell[Whitespace, Text, Whitespace]]]]"); ParserTestHelper.assertParses("!| a |\n", "SymbolList[Table[TableRow[TableCell[Whitespace, Text, Whitespace]]]]"); ParserTestHelper.assertParses("!|a:b|\n", "SymbolList[Table[TableRow[TableCell[Text, Colon, Text]]]]"); } @Test public void translatesTables() { ParserTestHelper.assertTranslatesTo("|a|\n", tableWithCell("a")); ParserTestHelper.assertTranslatesTo("|a| \n", tableWithCell("a")); ParserTestHelper.assertTranslatesTo("|a|", tableWithCell("a")); ParserTestHelper.assertTranslatesTo("||\n", tableWithCell("", false)); ParserTestHelper.assertTranslatesTo("| a |\n", tableWithCell("a")); ParserTestHelper.assertTranslatesTo("|!- a -!|\n", tableWithCell(" a ")); ParserTestHelper.assertTranslatesTo("|''a''|\n", tableWithCell("<i>a</i>")); ParserTestHelper.assertTranslatesTo("|!c a|\n", tableWithCell("<center>a</center>")); ParserTestHelper.assertTranslatesTo("|http://mysite.org|\n", tableWithCell("<a href=\"http://mysite.org\">http://mysite.org</a>")); ParserTestHelper.assertTranslatesTo("|!-line\nbreaks\n-!|\n", tableWithCell("line\nbreaks\n")); ParserTestHelper.assertTranslatesTo("|a|b|c|\n|d|e|f|\n", "<table>" + HtmlElement.endl + "\t<tr>" + HtmlElement.endl + "\t\t<td>a</td>" + HtmlElement.endl + "\t\t<td>b</td>" + HtmlElement.endl + "\t\t<td>c</td>" + HtmlElement.endl + "\t</tr>" + HtmlElement.endl + "\t<tr>" + HtmlElement.endl + "\t\t<td>d</td>" + HtmlElement.endl + "\t\t<td>e</td>" + HtmlElement.endl + "\t\t<td>f</td>" + HtmlElement.endl + "\t</tr>" + HtmlElement.endl + "</table>" + HtmlElement.endl); } @Test public void ignoresMalformedTables() { ParserTestHelper.assertTranslatesTo("!|\n\n|a|\n", "!|" + ParserTestHelper.newLineRendered + ParserTestHelper.newLineRendered + tableWithCell("a")); } @Test public void ignoreMostMarkupInLiteralTable() { ParserTestHelper.assertTranslatesTo("!|''<a''|\n", tableWithCell("''<a''")); ParserTestHelper.assertTranslatesTo("!|a@b.com|\n", tableWithCell("a@b.com")); } @Test public void evaluatesExpressionsInLiteralTable() { ParserTestHelper.assertTranslatesTo("!|${=3+4=}|\n", tableWithCell("7")); } @Test public void normalizesRowLength() { ParserTestHelper.assertTranslatesTo("|a|\n|b|c|\n|d|e|f|\n", "<table>" + HtmlElement.endl + "\t<tr>" + HtmlElement.endl + "\t\t<td colspan=\"3\">a</td>" + HtmlElement.endl + "\t</tr>" + HtmlElement.endl + "\t<tr>" + HtmlElement.endl + "\t\t<td>b</td>" + HtmlElement.endl + "\t\t<td colspan=\"2\">c</td>" + HtmlElement.endl + "\t</tr>" + HtmlElement.endl + "\t<tr>" + HtmlElement.endl + "\t\t<td>d</td>" + HtmlElement.endl + "\t\t<td>e</td>" + HtmlElement.endl + "\t\t<td>f</td>" + HtmlElement.endl + "\t</tr>" + HtmlElement.endl + "</table>" + HtmlElement.endl); } @Test public void hidesFirstRowInCommentTable() { ParserTestHelper.assertTranslatesTo("-|a|\n", tableWithCellAndRow("a", "<tr class=\"hidden\">")); } @Test public void combinesLiteralAndCommentOptions() { ParserTestHelper.assertTranslatesTo("-!|''<a''|\n", tableWithCellAndRow("''<a''", "<tr class=\"hidden\">")); } @Test public void overridesNestedRule() { ParserTestHelper.assertTranslatesTo("|''|\n", tableWithCell("''", false)); ParserTestHelper.assertTranslatesTo("|''a|\n''", tableWithCell("''a") + "''"); } @Test public void translatesNestedLiteralTable() { ParserTestHelper.assertTranslatesTo("|${x}|\n", new TestVariableSource("x", "!|y|\n"), tableWithCell(ParserTestHelper.nestedTableWithCellAndRow("y", "<tr>"))); } @Test public void translatesLiteralNestedTable() { ParserTestHelper.assertTranslatesTo("!|${x}|\n", new TestVariableSource("x", "|y|\n"), tableWithCell("|y|")); } @Test public void translatesVariableWithWhitespace() { ParserTestHelper.assertTranslatesTo("!|${x}|\n", new TestVariableSource("x", " a "), tableWithCell("a")); ParserTestHelper.assertTranslatesTo("!|${x}|\n", new TestVariableSource("x", "!- a -!"), tableWithCell(" a ")); ParserTestHelper.assertTranslatesTo("!|${x}|\n${x}", new TestVariableSource("x", "!- a -!"), tableWithCell(" a ") + " a "); } private String tableWithCell(String cellContent, boolean hasRowTitle) { return ParserTestHelper.tableWithCell(cellContent, hasRowTitle); } private String tableWithCell(String cellContent) { return ParserTestHelper.tableWithCell(cellContent); } private String tableWithCellAndRow(String cellContent, String firstRow) { return ParserTestHelper.tableWithCellAndRow(cellContent, firstRow); } }