blob: e7b8c1830aad34b60fca7df5666f25aa4485647f [file] [log] [blame]
/*******************************************************************************
* 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);
}
}