blob: 130b507e6aef1eedd92b9466acbecd6ed38a182f [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2016 Jeremie Bresson and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Jeremie Bresson - initial API and implementation
*******************************************************************************/
package org.eclipse.mylyn.internal.wikitext.asciidoc.tests;
import static org.junit.Assert.assertEquals;
import org.junit.Test;
/**
* Tests for the AsciiDoc TableBlock elements.
*/
public class AsciiDocLanguageTableTest extends AsciiDocLanguageTestBase {
@Test
public void testSimpleTable() {
String html = parseToHtml("" //
+ "|===\n" //
+ "\n" //
+ "| first | second | third\n" //
+ "\n" //
+ "| lorem | ipsum | dolor\n" //
+ "\n" //
+ "|===\n" //
+ "Some Text");
assertEquals("<table>" //
+ "<tr>" //
+ "<td>first</td>" //
+ "<td>second</td>" //
+ "<td>third</td>" //
+ "</tr>" //
+ "<tr>" //
+ "<td>lorem</td>" //
+ "<td>ipsum</td>" //
+ "<td>dolor</td>" //
+ "</tr>" //
+ "</table>" //
+ "<p>Some Text</p>\n", html);
}
@Test
public void testTableWithContentAdjacentToThePipe() {
String html = parseToHtml("" //
+ "|=== \n" //
+ "\n" //
+ "|lorem|ipsum\n" //
+ "\n" //
+ "|===\n");
assertEquals("<table>" //
+ "<tr>" //
+ "<td>lorem</td>" //
+ "<td>ipsum</td>" //
+ "</tr>" //
+ "</table>", html);
}
@Test
public void testTableWithLeadingAndTrailingSpaces() {
String html = parseToHtml("" //
+ "|===\n" //
+ "\n" //
+ "| lorem | _ipsum_ \n" //
+ "\n" //
+ "|=== \n");
assertEquals("<table>" //
+ "<tr>" //
+ "<td>lorem</td>" //
+ "<td><em>ipsum</em></td>" //
+ "</tr>" //
+ "</table>", html);
}
@Test
public void testTableWithEscapedPipe() {
String html = parseToHtml("" //
+ "|===\n" //
+ "\n" //
+ "| lorem \\| ipsum | other\n" //
+ "\n" //
+ "|===\n");
assertEquals("<table>" //
+ "<tr>" //
+ "<td>lorem | ipsum</td>" //
+ "<td>other</td>" //
+ "</tr>" //
+ "</table>", html);
}
@Test
public void testTableFirstRowDefinesNumberOfColumns() {
String html = parseToHtml("" //
+ "|===\n" //
+ "\n" //
+ "| lorem | ipsum\n" //
+ "\n" //
+ "| first\n" //
+ "| second\n" //
+ "\n" //
+ "| alice\n" //
+ "| bob\n" //
+ "|===\n");
assertEquals("<table>" //
+ "<tr>" //
+ "<td>lorem</td>" //
+ "<td>ipsum</td>" //
+ "</tr>" //
+ "<tr>" //
+ "<td>first</td>" //
+ "<td>second</td>" //
+ "</tr>" //
+ "<tr>" //
+ "<td>alice</td>" //
+ "<td>bob</td>" //
+ "</tr>" //
+ "</table>", html);
}
@Test
public void testTableEmptyCellInFirstRow() {
String html = parseToHtml("" //
+ "|===\n" //
+ "\n" //
+ "| lorem | | ipsum\n" //
+ "\n" //
+ "| one | two | three\n" //
+ "\n" //
+ "|===\n");
assertEquals("<table>" //
+ "<tr>" //
+ "<td>lorem</td>" //
+ "<td></td>" //
+ "<td>ipsum</td>" //
+ "</tr>" //
+ "<tr>" //
+ "<td>one</td>" //
+ "<td>two</td>" //
+ "<td>three</td>" //
+ "</tr>" //
+ "</table>", html);
}
@Test
public void testTableEmptyCellInSecondRow() {
String html = parseToHtml("" //
+ "|===\n" //
+ "|one|two|three\n" //
+ "|lorem||ipsum\n" //
+ "|===\n");
assertEquals("<table>" //
+ "<tr>" //
+ "<td>one</td>" //
+ "<td>two</td>" //
+ "<td>three</td>" //
+ "</tr>" //
+ "<tr>" //
+ "<td>lorem</td>" //
+ "<td></td>" //
+ "<td>ipsum</td>" //
+ "</tr>" //
+ "</table>", html);
}
@Test
public void testTableColsAttribute() {
String html = parseToHtml("" //
+ "[cols=\"3*\"]\n" //
+ "|===\n" //
+ "\n" //
+ "| first\n"//
+ "| second\n"//
+ "| third\n" //
+ "\n" //
+ "| lorem\n"//
+ "| ipsum\n"//
+ "| dolor\n" //
+ "\n" //
+ "|===\n" //
+ "Some Text");
assertEquals("<table>" //
+ "<tr>" //
+ "<td>first</td>" //
+ "<td>second</td>" //
+ "<td>third</td>" //
+ "</tr>" //
+ "<tr>" //
+ "<td>lorem</td>" //
+ "<td>ipsum</td>" //
+ "<td>dolor</td>" //
+ "</tr>" //
+ "</table>" //
+ "<p>Some Text</p>\n", html);
}
@Test
public void testTableColsAttributeCellMissingInLastRow() {
String html = parseToHtml("" //
+ "[cols=\"2*\"]\n" //
+ "|===\n" //
+ "\n" //
+ "| first\n"//
+ "| second\n"//
+ "\n" //
+ "| lorem\n"//
+ "\n" //
+ "|===\n" //
+ "Some Text");
assertEquals("<table>" //
+ "<tr>" //
+ "<td>first</td>" //
+ "<td>second</td>" //
+ "</tr>" //
+ "<tr>" //
+ "<td>lorem</td>" //
+ "</tr>" //
+ "</table>" //
+ "<p>Some Text</p>\n", html);
}
@Test
public void testTableColsAttributeAndAlignment() {
String html = parseToHtml("" //
+ "[cols=\"<.^,>.>\"]\n" //
+ "|===\n" //
+ "| first\n"//
+ "| second\n"//
+ "| lorem\n"//
+ "| ipsum\n"//
+ "|===\n" //
+ "Some Text");
assertEquals("<table>" //
+ "<tr>" //
+ "<td align=\"left\" valign=\"middle\">first</td>" //
+ "<td align=\"right\" valign=\"bottom\">second</td>" //
+ "</tr>" //
+ "<tr>" //
+ "<td align=\"left\" valign=\"middle\">lorem</td>" //
+ "<td align=\"right\" valign=\"bottom\">ipsum</td>" //
+ "</tr>" //
+ "</table>" //
+ "<p>Some Text</p>\n", html);
}
@Test
public void testColsTableEmptyCellInFirstRow() {
String html = parseToHtml("" //
+ "[cols=\"3*\"]\n" //
+ "|===\n" //
+ "\n" //
+ "| lorem \n" //
+ "| \n" //
+ "| ipsum\n" //
+ "\n" //
+ "| one \n" //
+ "| two \n" //
+ "| three\n" //
+ "\n" //
+ "|===\n");
assertEquals("<table>" //
+ "<tr>" //
+ "<td>lorem</td>" //
+ "<td></td>" //
+ "<td>ipsum</td>" //
+ "</tr>" //
+ "<tr>" //
+ "<td>one</td>" //
+ "<td>two</td>" //
+ "<td>three</td>" //
+ "</tr>" //
+ "</table>", html);
}
@Test
public void testColsTableEmptyCellInSecondRow() {
String html = parseToHtml("" //
+ "[cols=\"3*\"]\n" //
+ "|===\n" //
+ "|one\n" //
+ "|two\n" //
+ "|three\n" //
+ "|lorem\n" //
+ "|\n" //
+ "|ipsum\n" //
+ "|===\n");
assertEquals("<table>" //
+ "<tr>" //
+ "<td>one</td>" //
+ "<td>two</td>" //
+ "<td>three</td>" //
+ "</tr>" //
+ "<tr>" //
+ "<td>lorem</td>" //
+ "<td></td>" //
+ "<td>ipsum</td>" //
+ "</tr>" //
+ "</table>", html);
}
@Test
public void testColsTableTooManyCellsInSecondRow() {
String html = parseToHtml("" //
+ "[cols=\"1,1\"]\n" //
+ "|===\n" //
+ "|one|two\n" //
+ "|three|four|five|six\n" //
+ "|===\n");
assertEquals("<table>" //
+ "<tr>" //
+ "<td>one</td>" //
+ "<td>two</td>" //
+ "</tr>" //
+ "<tr>" //
+ "<td>three</td>" //
+ "<td>four</td>" //
+ "</tr>" //
+ "<tr>" //
+ "<td>five</td>" //
+ "<td>six</td>" //
+ "</tr>" //
+ "</table>", html);
}
@Test
public void testMultilineCell() {
String html = parseToHtml("" //
+ "[cols=\"2*\"]\n" //
+ "|===\n" //
+ "|aaa\n" //
+ "bbb\n" //
+ "|xxx\n" //
+ "| first | second\n" //
+ "|===\n");
assertEquals("<table>" //
+ "<tr>" //
+ "<td>aaa bbb</td>" //
+ "<td>xxx</td>" //
+ "</tr>" //
+ "<tr>" //
+ "<td>first</td>" //
+ "<td>second</td>" //
+ "</tr>" //
+ "</table>", html);
}
@Test
public void testMultilineCellOneCol() {
String html = parseToHtml("" //
+ "|===\n" //
+ "| aaa\n" //
+ "bbb\n" //
+ "ccc\n" //
+ "| xxx\n" //
+ "yyy\n" //
+ "| 000\n" //
+ "|===\n");
assertEquals("<table>" //
+ "<tr>" //
+ "<td>aaa bbb ccc</td>" //
+ "</tr>" //
+ "<tr>" //
+ "<td>xxx yyy</td>" //
+ "</tr>" //
+ "<tr>" //
+ "<td>000</td>" //
+ "</tr>" //
+ "</table>", html);
}
@Test
public void testMultilineCellTwoCols() {
String html = parseToHtml("" //
+ "|===\n" //
+ "| aaa\n" //
+ "bbb | xxx\n" //
+ "| 000\n" //
+ "| 111\n" //
+ "|===\n");
assertEquals("<table>" //
+ "<tr>" //
+ "<td>aaa bbb</td>" //
+ "<td>xxx</td>" //
+ "</tr>" //
+ "<tr>" //
+ "<td>000</td>" //
+ "<td>111</td>" //
+ "</tr>" //
+ "</table>", html);
}
@Test
public void testBasicTableAttributes() {
String html = parseToHtml("[width=\"80%\",options=\"header\"]\n" //
+ "|===\n" //
+ "|one|two|three\n" //
+ "|four|five|six\n" //
+ "|===");
assertEquals("<table width=\"80%\">" //
+ "<tr><th>one</th><th>two</th><th>three</th></tr>" //
+ "<tr><td>four</td><td>five</td><td>six</td></tr>" //
+ "</table>", html);
}
@Test
public void testTableAttributesWithCols() {
String html = parseToHtml("[width=\"70%\",options=\"header\",cols=\"2*\"]\n" //
+ "|===\n" //
+ "|one\n" //
+ "|two\n" //
+ "|three\n" //
+ "|four\n" //
+ "|===");
assertEquals("<table width=\"70%\">" //
+ "<tr><th>one</th><th>two</th></tr>" //
+ "<tr><td>three</td><td>four</td></tr>" //
+ "</table>", html);
}
@Test
public void testTableCSV() {
String html = parseToHtml("" //
+ "[format=\"csv\", options=\"header\"]\n" //
+ "|===\n" //
+ "first,second,third\n" //
+ "lorem,ipsum,dolor\n" //
+ "|===\n" //
+ "Some Text");
assertEquals("<table>" //
+ "<tr>" //
+ "<th>first</th>" //
+ "<th>second</th>" //
+ "<th>third</th>" //
+ "</tr>" //
+ "<tr>" //
+ "<td>lorem</td>" //
+ "<td>ipsum</td>" //
+ "<td>dolor</td>" //
+ "</tr>" //
+ "</table>" //
+ "<p>Some Text</p>\n", html);
}
@Test
public void testTableCSVShorthandNotation() {
String html = parseToHtml("" //
+ ",===\n" //
+ "first,second\n" //
+ "lorem,ipsum\n" //
+ ",===\n" //
+ "Some Text");
assertEquals("<table>" //
+ "<tr>" //
+ "<th>first</th>" //
+ "<th>second</th>" //
+ "</tr>" //
+ "<tr>" //
+ "<td>lorem</td>" //
+ "<td>ipsum</td>" //
+ "</tr>" //
+ "</table>" //
+ "<p>Some Text</p>\n", html);
}
@Test
public void testTableCSVEscaped() {
String html = parseToHtml("" //
+ "[cols=\"2*\", format=\"csv\"]\n" //
+ "|===\n" //
+ "lo \\| rem\\,ips | um\n" //
+ "alice\n" //
+ "bob\n" //
+ "first,second\n" //
+ "|===\n");
assertEquals("<table>" //
+ "<tr>" //
+ "<td>lo \\| rem\\</td>" //
+ "<td>ips | um</td>" //
+ "</tr>" //
+ "<tr>" //
+ "<td>alice</td>" //
+ "<td>bob</td>" //
+ "</tr>" //
+ "<tr>" //
+ "<td>first</td>" //
+ "<td>second</td>" //
+ "</tr>" //
+ "</table>", html);
}
@Test
public void testTableCSVWithQuotes() {
String html = parseToHtml("" //
+ "[format=\"csv\"]\n" //
+ "|===\n" //
+ "\"first\",second,third\n" //
+ "first,\"second\",third\n" //
+ "first,second,\"third\"\n" //
+ "\"foo,bar\",second,third\n" //
+ "first,\"foo,bar\",third\n" //
+ "first,second,\"foo,bar\"\n" //
+ "|===\n" //
+ "Some Text");
assertEquals("<table>" //
+ "<tr>" //
+ "<td>first</td>" //
+ "<td>second</td>" //
+ "<td>third</td>" //
+ "</tr>" //
+ "<tr>" //
+ "<td>first</td>" //
+ "<td>second</td>" //
+ "<td>third</td>" //
+ "</tr>" //
+ "<tr>" //
+ "<td>first</td>" //
+ "<td>second</td>" //
+ "<td>third</td>" //
+ "</tr>" //
+ "<tr>" //
+ "<td>foo,bar</td>" //
+ "<td>second</td>" //
+ "<td>third</td>" //
+ "</tr>" //
+ "<tr>" //
+ "<td>first</td>" //
+ "<td>foo,bar</td>" //
+ "<td>third</td>" //
+ "</tr>" //
+ "<tr>" //
+ "<td>first</td>" //
+ "<td>second</td>" //
+ "<td>foo,bar</td>" //
+ "</tr>" //
+ "</table>" //
+ "<p>Some Text</p>\n", html);
}
@Test
public void testTableCSVWithWrongQuotes() {
String html = parseToHtml("" //
+ "[format=\"csv\"]\n" //
+ "|===\n" //
+ "xxx\"first\"xxx,second,third\n" //
+ "first,xxx\"second\"xxx,third\n" //
+ "first,second,xxx\"third\"xxx\n" //
+ "\n" //
+ "xxx \" fi rst \" xxx,second,third\n" //
+ "first,xxx \"sec ond\" xxx,third\n" //
+ "first,second,xxx \" third \" xxx\n" //
+ "|===\n" //
+ "Some Text");
assertEquals("<table>" //
+ "<tr>" //
+ "<td>xxx\"first\"xxx</td>" //
+ "<td>second</td>" //
+ "<td>third</td>" //
+ "</tr>" //
+ "<tr>" //
+ "<td>first</td>" //
+ "<td>xxx\"second\"xxx</td>" //
+ "<td>third</td>" //
+ "</tr>" //
+ "<tr>" //
+ "<td>first</td>" //
+ "<td>second</td>" //
+ "<td>xxx\"third\"xxx</td>" //
+ "</tr>" //
+ "<tr>" //
+ "<td>xxx \" fi rst \" xxx</td>" //
+ "<td>second</td>" //
+ "<td>third</td>" //
+ "</tr>" //
+ "<tr>" //
+ "<td>first</td>" //
+ "<td>xxx \"sec ond\" xxx</td>" //
+ "<td>third</td>" //
+ "</tr>" //
+ "<tr>" //
+ "<td>first</td>" //
+ "<td>second</td>" //
+ "<td>xxx \" third \" xxx</td>" //
+ "</tr>" //
+ "</table>" //
+ "<p>Some Text</p>\n", html);
}
@Test
public void testTableCSVWithQuotesAndEscaped() {
String html = parseToHtml("" //
+ "[format=\"csv\"]\n" //
+ "|===\n" //
+ "\"lorem \"\"a\"\" ipsum\",second,third\n" //
+ "first,\"lorem \"\"a\"\" ipsum\",third\n" //
+ "first,second,\"lorem \"\"a\"\" ipsum\"\n" //
+ "\n" //
+ "\"\"\"a\"\" ipsum\",second,third\n" //
+ "first,\"\"\"a\"\" ipsum\",third\n" //
+ "first,second,\"\"\"a\"\" ipsum\"\n" //
+ "\n" //
+ "\"lorem \"\"a\"\"\",second,third\n" //
+ "first,\"lorem \"\"a\"\"\",third\n" //
+ "first,second,\"lorem \"\"a\"\"\"\n" //
+ "|===\n" //
+ "Some Text");
assertEquals("<table>" //
+ "<tr>" //
+ "<td>lorem \"a\" ipsum</td>" //
+ "<td>second</td>" //
+ "<td>third</td>" //
+ "</tr>" //
+ "<tr>" //
+ "<td>first</td>" //
+ "<td>lorem \"a\" ipsum</td>" //
+ "<td>third</td>" //
+ "</tr>" //
+ "<tr>" //
+ "<td>first</td>" //
+ "<td>second</td>" //
+ "<td>lorem \"a\" ipsum</td>" //
+ "</tr>" //
+ "<tr>" //
+ "<td>\"a\" ipsum</td>" //
+ "<td>second</td>" //
+ "<td>third</td>" //
+ "</tr>" //
+ "<tr>" //
+ "<td>first</td>" //
+ "<td>\"a\" ipsum</td>" //
+ "<td>third</td>" //
+ "</tr>" //
+ "<tr>" //
+ "<td>first</td>" //
+ "<td>second</td>" //
+ "<td>\"a\" ipsum</td>" //
+ "</tr>" //
+ "<tr>" //
+ "<td>lorem \"a\"</td>" //
+ "<td>second</td>" //
+ "<td>third</td>" //
+ "</tr>" //
+ "<tr>" //
+ "<td>first</td>" //
+ "<td>lorem \"a\"</td>" //
+ "<td>third</td>" //
+ "</tr>" //
+ "<tr>" //
+ "<td>first</td>" //
+ "<td>second</td>" //
+ "<td>lorem \"a\"</td>" //
+ "</tr>" //
+ "</table>" //
+ "<p>Some Text</p>\n", html);
}
@Test
public void testTableDSV() {
String html = parseToHtml("" //
+ "[format=\"dsv\", options=\"header\"]\n" //
+ "|===\n" //
+ "first:second:third\n" //
+ "\n" //
+ "lorem:ipsum:dolor\n" //
+ "|===\n" //
+ "Some Text");
assertEquals("<table>" //
+ "<tr>" //
+ "<th>first</th>" //
+ "<th>second</th>" //
+ "<th>third</th>" //
+ "</tr>" //
+ "<tr>" //
+ "<td>lorem</td>" //
+ "<td>ipsum</td>" //
+ "<td>dolor</td>" //
+ "</tr>" //
+ "</table>" //
+ "<p>Some Text</p>\n", html);
}
@Test
public void testTableDSVShorthandNotation() {
String html = parseToHtml("" //
+ ":===\n" //
+ "first:second\n" //
+ "lorem:ipsum\n" //
+ ":===\n" //
+ "Some Text");
assertEquals("<table>" //
+ "<tr>" //
+ "<th>first</th>" //
+ "<th>second</th>" //
+ "</tr>" //
+ "<tr>" //
+ "<td>lorem</td>" //
+ "<td>ipsum</td>" //
+ "</tr>" //
+ "</table>" //
+ "<p>Some Text</p>\n", html);
}
@Test
public void testTableDSVEscaped() {
String html = parseToHtml("" //
+ "[cols=\"2*\", format=\"dsv\"]\n" //
+ "|===\n" //
+ "lo \\| rem\\:ips | um\n" //
+ "dolor\n" //
+ "\n" //
+ "first:second\n" //
+ "|===\n");
assertEquals("<table>" //
+ "<tr>" //
+ "<td>lo \\| rem:ips | um</td>" //
+ "<td>dolor</td>" //
+ "</tr>" //
+ "<tr>" //
+ "<td>first</td>" //
+ "<td>second</td>" //
+ "</tr>" //
+ "</table>", html);
}
}