| /******************************************************************************* |
| * Copyright (c) 2011, 2013 Igor Malinin 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: |
| * Igor Malinin - initial API and implementation |
| *******************************************************************************/ |
| |
| package org.eclipse.mylyn.internal.wikitext.creole.tests; |
| |
| import junit.framework.TestCase; |
| |
| import org.eclipse.mylyn.wikitext.core.osgi.OsgiServiceLocator; |
| import org.eclipse.mylyn.wikitext.core.parser.MarkupParser; |
| import org.eclipse.mylyn.wikitext.core.parser.markup.MarkupLanguage; |
| import org.eclipse.mylyn.wikitext.creole.core.CreoleLanguage; |
| import org.eclipse.mylyn.wikitext.tests.TestUtil; |
| |
| /** |
| * @author Igor Malinin |
| * @author David Green |
| */ |
| public class CreoleLanguageTest extends TestCase { |
| |
| private MarkupParser parser; |
| |
| @Override |
| public void setUp() throws Exception { |
| super.setUp(); |
| parser = new MarkupParser(new CreoleLanguage()); |
| } |
| |
| public void testDiscoverable() { |
| MarkupLanguage language = OsgiServiceLocator.getApplicableInstance().getMarkupLanguage("Creole"); |
| assertNotNull(language); |
| assertTrue(language instanceof CreoleLanguage); |
| } |
| |
| public void testParagraph() throws Exception { |
| String html = parser.parseToHtml("a paragraph\n\nanother paragraph\\\\\nwith\n2 lines"); |
| TestUtil.println("HTML:" + html); |
| assertEquals("<p>a paragraph</p><p>another paragraph<br/>\nwith\n2 lines</p>", content(html)); |
| } |
| |
| public void testHeadings() { |
| for (int level = 1; level <= 6; ++level) { |
| String delimiter = repeat(level, "="); |
| |
| String[] headingMarkupSamples = new String[] { delimiter + " heading text ", |
| delimiter + "\t heading text \t", delimiter + "heading text" + delimiter, |
| delimiter + "\t heading text \t" + delimiter, delimiter + "heading text" + delimiter + " \t ", |
| "\t " + delimiter + "heading text", }; |
| |
| for (String headingMarkup : headingMarkupSamples) { |
| String html = parser.parseToHtml(headingMarkup + "\n\npara"); |
| TestUtil.println(html); |
| assertEquals("<h" + level + " id=\"headingtext\">heading text</h" + level + ">" + "<p>para</p>", |
| content(html)); |
| } |
| |
| for (String headingMarkup : headingMarkupSamples) { |
| String html = parser.parseToHtml("para\n" + headingMarkup + "\npara"); |
| TestUtil.println(html); |
| assertEquals("<p>para</p>" + "<h" + level + " id=\"headingtext\">heading text</h" + level + ">" |
| + "<p>para</p>", content(html)); |
| } |
| } |
| } |
| |
| public void testBold() { |
| String html = parser.parseToHtml("normal **bold text** normal"); |
| TestUtil.println(html); |
| assertEquals("<p>normal <b>bold text</b> normal</p>", content(html)); |
| } |
| |
| public void testBold_LineStart() { |
| String html = parser.parseToHtml("**bold text** normal"); |
| TestUtil.println(html); |
| assertEquals("<p><b>bold text</b> normal</p>", content(html)); |
| } |
| |
| public void testBold_LineEnd() { |
| String html = parser.parseToHtml("normal **bold text**"); |
| TestUtil.println(html); |
| assertEquals("<p>normal <b>bold text</b></p>", content(html)); |
| } |
| |
| public void testBoldNotList() { |
| String html = parser.parseToHtml("**bold text** normal"); |
| TestUtil.println(html); |
| assertEquals("<p><b>bold text</b> normal</p>", content(html)); |
| } |
| |
| public void testItalic() { |
| String html = parser.parseToHtml("normal //italic text// normal"); |
| TestUtil.println(html); |
| assertEquals("<p>normal <i>italic text</i> normal</p>", content(html)); |
| } |
| |
| public void testItalic_LineStart() { |
| String html = parser.parseToHtml("//italic text// normal"); |
| TestUtil.println(html); |
| assertEquals("<p><i>italic text</i> normal</p>", content(html)); |
| } |
| |
| public void testItalic_LineEnd() { |
| String html = parser.parseToHtml("normal //italic text//"); |
| TestUtil.println(html); |
| assertEquals("<p>normal <i>italic text</i></p>", content(html)); |
| } |
| |
| public void testBoldItalic() { |
| String html = parser.parseToHtml("normal **//bold italic text//** normal"); |
| TestUtil.println(html); |
| assertEquals("<p>normal <b><i>bold italic text</i></b> normal</p>", content(html)); |
| } |
| |
| public void testItalicBold() { |
| String html = parser.parseToHtml("normal //**italic bold text**// normal"); |
| TestUtil.println(html); |
| assertEquals("<p>normal <i><b>italic bold text</b></i> normal</p>", content(html)); |
| } |
| |
| public void testItalicLink() { |
| String html = parser.parseToHtml("normal //http://example.com// normal"); |
| TestUtil.println(html); |
| assertEquals("<p>normal <i><a href=\"http://example.com\">http://example.com</a></i> normal</p>", content(html)); |
| } |
| |
| public void testItalicLink2() { |
| String html = parser.parseToHtml("normal //http://example.com https://example.com// normal"); |
| TestUtil.println(html); |
| assertEquals("<p>normal <i><a href=\"http://example.com\">http://example.com</a>" |
| + " <a href=\"https://example.com\">https://example.com</a></i> normal</p>", content(html)); |
| } |
| |
| public void testBoldItalicMixed() { |
| String html = parser.parseToHtml("normal **bold** or //italic// or **//both//** or //**both**// normal"); |
| TestUtil.println(html); |
| assertEquals("<p>normal <b>bold</b> or <i>italic</i> or <b><i>both</i></b> or <i><b>both</b></i> normal</p>", |
| content(html)); |
| } |
| |
| public void testBoldItalicEOL() { |
| String html = parser.parseToHtml("normal **bold** or //italic// or **//both//bold"); |
| TestUtil.println(html); |
| assertEquals("<p>normal <b>bold</b> or <i>italic</i> or <b><i>both</i>bold</b></p>", content(html)); |
| } |
| |
| public void testMonospace() { |
| String html = parser.parseToHtml("normal ##monospace text## normal"); |
| TestUtil.println(html); |
| assertEquals("<p>normal <tt>monospace text</tt> normal</p>", content(html)); |
| } |
| |
| public void testSuperscript() { |
| String html = parser.parseToHtml("normal ^^superscript text^^ normal"); |
| TestUtil.println(html); |
| assertEquals("<p>normal <sup>superscript text</sup> normal</p>", content(html)); |
| } |
| |
| public void testSubscript() { |
| String html = parser.parseToHtml("normal ,,subscript text,, normal"); |
| TestUtil.println(html); |
| assertEquals("<p>normal <sub>subscript text</sub> normal</p>", content(html)); |
| } |
| |
| public void testUnderlined() { |
| String html = parser.parseToHtml("normal __underlined text__ normal"); |
| TestUtil.println(html); |
| assertEquals("<p>normal <u>underlined text</u> normal</p>", content(html)); |
| } |
| |
| public void testLinkInternal() { |
| String html = parser.parseToHtml("[[internal link]]"); |
| TestUtil.println(html); |
| assertEquals("<p><a href=\"internal_link\">internal link</a></p>", content(html)); |
| } |
| |
| public void testLinkExternal() { |
| String html = parser.parseToHtml("[[http://example.com|external link]]"); |
| TestUtil.println(html); |
| assertEquals("<p><a href=\"http://example.com\">external link</a></p>", content(html)); |
| } |
| |
| public void testListNotBold() { |
| String html = parser.parseToHtml("*first\n**second **bold**\n***third"); |
| TestUtil.println(html); |
| assertEquals("<ul><li>first<ul><li>second <b>bold</b><ul><li>third</li></ul></li></ul></li></ul>", |
| content(html)); |
| } |
| |
| public void testNowiki() { |
| String html = parser.parseToHtml("{{{\nnowiki\ntext\n}}}"); |
| TestUtil.println(html); |
| assertEquals("<pre>nowiki\ntext\n</pre>", content(html)); |
| } |
| |
| public void testTable() { |
| String html = parser.parseToHtml("|=a|=b|=c|\n|x|y|z|"); |
| TestUtil.println(html); |
| assertEquals("<table><tr><th>a</th><th>b</th><th>c</th></tr><tr><td>x</td><td>y</td><td>z</td></tr></table>", |
| content(html)); |
| } |
| |
| private String repeat(int i, String string) { |
| StringBuilder buf = new StringBuilder(string.length() * i); |
| for (int x = 0; x < i; ++x) { |
| buf.append(string); |
| } |
| return buf.toString(); |
| } |
| |
| private String content(String html) { |
| int begin = html.indexOf("<body>") + 6; |
| int end = html.lastIndexOf("</body>"); |
| return html.substring(begin, end); |
| } |
| |
| } |