package scrum.client.wiki; import org.testng.Assert; import org.testng.annotations.Test; public class WikiTest extends Assert { @Test public void table() { assertEquals(toHtml("{|a|}"), "\n<table class='data-table'>\n<tr> <td>a</td> </tr>\n</table>\n"); assertEquals(toHtml("{|\n|a\n|b\n|-\n|c\n|d\n\n|}"), "\n<table class='data-table'>\n<tr> <td>a</td> <td>b</td> </tr>\n<tr> <td>c</td> <td>d</td> </tr>\n</table>\n"); assertEquals(toHtml("{|\n|a||b\n|-\n|c||d\n|}"), "\n<table class='data-table'>\n<tr> <td>a</td> <td>b</td> </tr>\n<tr> <td>c</td> <td>d</td> </tr>\n</table>\n"); } @Test public void tableWithHeaders() { assertEquals(toHtml("{|\n!a\n!b\n|-\n|c\n|d\n\n|}"), "\n<table class='data-table'>\n<tr> <th>a</th> <th>b</th> </tr>\n<tr> <td>c</td> <td>d</td> </tr>\n</table>\n"); assertEquals(toHtml("{|\n!a!!b\n|-\n!c||d\n|}"), "\n<table class='data-table'>\n<tr> <th>a</th> <th>b</th> </tr>\n<tr> <th>c</th> <td>d</td> </tr>\n</table>\n"); } @Test public void localImg() { Assert.assertEquals(toHtml("[[Image:fle1]]"), "<a href='fle1.html'><img src=\"fle1\"></a>"); Assert.assertEquals(toHtml("[[Image:fle1|thumb]]"), "<a href='fle1.html'><img src=\"fle1\" width=\"100px\" align=\"right\"></a>"); Assert.assertEquals(toHtml("[[Image:fle1|thumb|left]]"), "<a href='fle1.html'><img src=\"fle1\" width=\"100px\" align=\"left\"></a>"); } @Test public void externalImg() { Assert.assertEquals(toHtml("[[Image:http://servisto.de/image.png]]"), "<a href=\"http://servisto.de/image.png\" target=\"_blank\"><img src=\"http://servisto.de/image.png\"></a>"); } @Test public void toc() { Assert.assertEquals(toHtml("TOC\n= 1 =\n== 1.1 ==\n= 2 ="), "<ul class=\"toc\"><li>1</li><ul><li>1.1</li></ul><li>2</li></ul><h1>1</h1><h2>1.1</h2><h1>2</h1>"); } @Test public void emphAndStrong() { Assert.assertEquals(toHtml("'''''emph and strong'''''"), "<strong><em>emph and strong</em></strong>"); Assert.assertEquals(toHtml("this is '''strong'''"), "this is <strong>strong</strong>"); Assert.assertEquals(toHtml("this is ''emph''"), "this is <em>emph</em>"); Assert.assertEquals(toHtml("''''''''''"), "''''''''''"); Assert.assertEquals(toHtml("'''''test"), "'''''test"); } @Test public void entityReference() { Assert.assertTrue(toHtml("tsk15 is completed").contains("<a ")); Assert.assertTrue(toHtml("[[Wiki]] is cool").contains("<a ")); Assert.assertTrue(toHtml("[[Wiki|Custom Text]] is cool").contains(">Custom Text</a>")); Assert.assertTrue(toHtml("tsk15!").contains("<a ")); Assert.assertTrue(toHtml("(tsk15!), :-)").contains("<a ")); } @Test public void link() { Assert.assertEquals(toHtml("link www.servisto.de here"), "link <a href=\"http://www.servisto.de\" target=\"_blank\">servisto.de</a> here"); Assert.assertEquals(toHtml("http://www.servisto.de"), "<a href=\"http://www.servisto.de\" target=\"_blank\">servisto.de</a>"); Assert.assertEquals(toHtml("link [www.servisto.de Servisto] here"), "link <a href=\"http://www.servisto.de\" target=\"_blank\">Servisto</a> here"); } @Test public void itemList() { Assert.assertEquals(toHtml("* item"), "<ul><li>item</li></ul>"); Assert.assertEquals(toHtml("# item"), "<ol><li>item</li></ol>"); Assert.assertEquals(toHtml("* item\nxyz"), "<ul><li>item<br>xyz</li></ul>"); Assert.assertEquals(toHtml("* item 1\n* item 2"), "<ul><li>item 1</li><li>item 2</li></ul>"); } @Test public void nestedItemList() { Assert.assertEquals(toHtml("* item\n # subitem"), "<ul><li>item<ol><li>subitem</li></ol></li></ul>"); Assert.assertEquals(toHtml("* item\n # subitem\n # subitem"), "<ul><li>item<ol><li>subitem</li><li>subitem</li></ol></li></ul>"); Assert.assertEquals(toHtml("* item\n # subitem\n * subsubitem"), "<ul><li>item<ol><li>subitem<ul><li>subsubitem</li></ul></li></ol></li></ul>"); } @Test public void preformated() { Assert.assertEquals(toHtml(" preformated"), "<div class=\"codeBlock\"><pre> preformated</pre></div>"); Assert.assertEquals(toHtml("\tpreformated"), "<div class=\"codeBlock\"><pre> preformated</pre></div>"); Assert.assertEquals(toHtml(" line 1\n line 2"), "<div class=\"codeBlock\"><pre> line 1\n line 2</pre></div>"); } @Test public void code() { Assert.assertEquals(toHtml("here is <code>code</code>."), "here is <code>code</code>."); Assert.assertEquals(toHtml("here is <code>multiword code</code>."), "here is <code>multiword code</code>."); Assert.assertEquals(toHtml("here is <code>multiline\ncode</code>."), "<p>here is <div class=\"codeBlock\"><code>multiline<br>code</code></div>.</p>"); Assert.assertEquals(toHtml("simple line\n\n<code>code</code>"), "<p>simple line</p><p><code>code</code></p>"); Assert.assertEquals(toHtml("<code>\n# enum\n# enum\n</code>"), "<p><div class=\"codeBlock\"><code># enum<br># enum<br></code></div></p>"); Assert.assertEquals(toHtml("<code>a\n\nb</code>"), "<p><div class=\"codeBlock\"><code>a<br><br>b</code></div></p>"); } @Test public void paragraph() { Assert.assertEquals(toHtml("a b"), "a b"); Assert.assertEquals(toHtml("a\nb"), "<p>a<br>b</p>"); Assert.assertEquals(toHtml("a\r\nb"), "<p>a<br>b</p>"); Assert.assertEquals(toHtml("a\n\nb"), "<p>a</p><p>b</p>"); Assert.assertEquals(toHtml("a\n\n\n"), "<p>a</p>"); } @Test public void header() { Assert.assertEquals(toHtml("= header ="), "<h1>header</h1>"); Assert.assertEquals(toHtml("= ="), "= ="); Assert.assertEquals(toHtml("= header = dummy"), "= header = dummy"); Assert.assertEquals(toHtml("== header =="), "<h2>header</h2>"); Assert.assertEquals(toHtml("== =="), "== =="); Assert.assertEquals(toHtml("== header == dummy"), "== header == dummy"); Assert.assertEquals(toHtml("=== header ==="), "<h3>header</h3>"); Assert.assertEquals(toHtml("==== header ===="), "<h4>header</h4>"); } @Test public void specialChars() { Assert.assertEquals(toHtml("ü ä ß"), "ü ä ß"); Assert.assertEquals(toHtml("& #"), "& #"); Assert.assertEquals(toHtml("< >"), "< >"); } @Test public void simple() { Assert.assertEquals(toHtml("hello world"), "hello world"); } @Test public void complete() { String html = toHtml("= header 1 =\nmy first paragraph\nstill first\n\nsecond paragraph\n\n\n\nthird paragraph\n\n== header 2 =="); // System.out.println("\n-----\n" + html + "\n-----\n"); Assert.assertEquals( html, "<h1>header 1</h1><p>my first paragraph<br>still first</p><p>second paragraph</p><p>third paragraph</p><h2>header 2</h2>"); } private static String toHtml(String wiki) { WikiParser parser = new WikiParser(wiki); WikiModel model = parser.parse(true); return model.toHtml(new TestHtmlContext()); } static class TestHtmlContext implements HtmlContext { @Override public String getEntityReferenceHrefOrOnclickAParameter(String reference) { return "href='" + reference + ".html'"; } @Override public String getDownloadUrlByReference(String reference) { return reference; } @Override public String getEntityLabelByReference(String reference) { return null; } } }