blob: 470526b2e3ca6c58a7513008d434ed048a30603c [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2011, 2014 Tasktop Technologies
* 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:
* David Green - initial API and implementation
*******************************************************************************/
package org.eclipse.mylyn.internal.wikitext.mediawiki.core;
import java.io.StringWriter;
import junit.framework.TestCase;
import org.eclipse.mylyn.internal.wikitext.confluence.core.ConfluenceDocumentBuilder;
import org.eclipse.mylyn.wikitext.core.parser.Attributes;
import org.eclipse.mylyn.wikitext.core.parser.DocumentBuilder;
import org.eclipse.mylyn.wikitext.core.parser.DocumentBuilder.BlockType;
import org.eclipse.mylyn.wikitext.core.parser.DocumentBuilder.SpanType;
import org.eclipse.mylyn.wikitext.core.parser.LinkAttributes;
import org.eclipse.mylyn.wikitext.tests.TestUtil;
/**
* @author David Green
* @see ConfluenceDocumentBuilder
*/
public class ConfluenceDocumentBuilderTest extends TestCase {
private DocumentBuilder builder;
private StringWriter out;
@Override
protected void setUp() throws Exception {
out = new StringWriter();
builder = new ConfluenceDocumentBuilder(out);
super.setUp();
}
public void testParagraph() {
builder.beginDocument();
builder.beginBlock(BlockType.PARAGRAPH, new Attributes());
builder.characters("text\n\nmore text");
builder.endBlock();
builder.endDocument();
String markup = out.toString();
TestUtil.println(markup);
assertEquals("text more text\n\n", markup);
}
public void testParagraphWithCssClass() {
builder.beginDocument();
builder.beginBlock(BlockType.PARAGRAPH, new Attributes(null, "test", null, null));
builder.characters("text\n\nmore text");
builder.endBlock();
builder.endDocument();
String markup = out.toString();
TestUtil.println(markup);
assertEquals("text more text\n\n", markup);
}
public void testParagraphWithCssStyle() {
builder.beginDocument();
builder.beginBlock(BlockType.PARAGRAPH, new Attributes(null, null, "x-test: foo;", null));
builder.characters("text\n\nmore text");
builder.endBlock();
builder.endDocument();
String markup = out.toString();
TestUtil.println(markup);
assertEquals("text more text\n\n", markup);
}
public void testParagraphWithId() {
builder.beginDocument();
builder.beginBlock(BlockType.PARAGRAPH, new Attributes("123", null, null, null));
builder.characters("text\n\nmore text");
builder.endBlock();
builder.endDocument();
String markup = out.toString();
TestUtil.println(markup);
assertEquals("text more text\n\n", markup);
}
public void testParagraphWithIdAndClass() {
builder.beginDocument();
builder.beginBlock(BlockType.PARAGRAPH, new Attributes("123", "test", null, null));
builder.characters("text\n\nmore text");
builder.endBlock();
builder.endDocument();
String markup = out.toString();
TestUtil.println(markup);
assertEquals("text more text\n\n", markup);
}
public void testParagraphWithLink() {
builder.beginDocument();
builder.beginBlock(BlockType.PARAGRAPH, new Attributes());
builder.characters("text\n\nmore text ");
final LinkAttributes attributes = new LinkAttributes();
attributes.setHref("http://example.com/foo+bar/baz.gif");
builder.beginSpan(SpanType.LINK, attributes);
builder.characters("baz");
builder.endSpan();
builder.characters(" test");
builder.endBlock();
builder.endDocument();
String markup = out.toString();
TestUtil.println(markup);
assertEquals("text more text [baz | http://example.com/foo+bar/baz.gif] test\n\n", markup);
}
public void testBlockCode() {
builder.beginDocument();
builder.beginBlock(BlockType.CODE, new Attributes());
builder.characters("text\n\nmore text");
builder.endBlock();
builder.endDocument();
String markup = out.toString();
TestUtil.println(markup);
assertEquals("{code}text\n\nmore text{code}\n\n\n", markup);
}
public void testParagraphFollowingExtendedBlockCode() {
builder.beginDocument();
builder.beginBlock(BlockType.CODE, new Attributes());
builder.characters("text\n\nmore text");
builder.endBlock();
builder.beginBlock(BlockType.PARAGRAPH, new Attributes());
builder.characters("text");
builder.endBlock();
builder.beginBlock(BlockType.PARAGRAPH, new Attributes());
builder.characters("text2");
builder.endBlock();
builder.endDocument();
String markup = out.toString();
TestUtil.println(markup);
assertEquals("{code}text\n\nmore text{code}\n\n\ntext\n\ntext2\n\n", markup);
}
public void testHeading1() {
builder.beginDocument();
builder.beginHeading(1, new Attributes());
builder.characters("text\n\nmore text");
builder.endHeading();
builder.beginBlock(BlockType.PARAGRAPH, new Attributes());
builder.characters("text");
builder.endBlock();
builder.endDocument();
String markup = out.toString();
TestUtil.println(markup);
assertEquals("h1. text more text\n\ntext\n\n", markup);
}
public void testHeading1_WithNestedMarkup() {
builder.beginDocument();
builder.beginHeading(1, new Attributes());
builder.characters("text ");
builder.beginSpan(SpanType.EMPHASIS, new Attributes());
builder.characters("emphasized");
builder.endSpan();
builder.endHeading();
builder.beginBlock(BlockType.PARAGRAPH, new Attributes());
builder.characters("text");
builder.endBlock();
builder.endDocument();
String markup = out.toString();
TestUtil.println(markup);
assertEquals("h1. text _emphasized_\n\ntext\n\n", markup);
}
public void testImplicitParagrah() {
builder.beginDocument();
builder.characters("text1");
builder.beginBlock(BlockType.PARAGRAPH, new Attributes());
builder.characters("text2");
builder.endBlock();
builder.characters("text3");
builder.endDocument();
String markup = out.toString();
TestUtil.println(markup);
assertEquals("text1\n\ntext2\n\ntext3\n\n", markup);
}
public void testBoldSpanNoWhitespace_spanAtLineStart() {
builder.beginDocument();
builder.beginBlock(BlockType.PARAGRAPH, new Attributes());
builder.beginSpan(SpanType.BOLD, new Attributes());
builder.characters("text2");
builder.endSpan();
builder.characters("text3");
builder.endBlock();
builder.endDocument();
String markup = out.toString();
TestUtil.println(markup);
assertEquals("*text2* text3\n\n", markup);
}
public void testBoldSpanNoWhitespace_spanAtLineEnd() {
builder.beginDocument();
builder.beginBlock(BlockType.PARAGRAPH, new Attributes());
builder.characters("text3");
builder.beginSpan(SpanType.BOLD, new Attributes());
builder.characters("text2");
builder.endSpan();
builder.endBlock();
builder.endDocument();
String markup = out.toString();
TestUtil.println(markup);
assertEquals("text3 *text2*\n\n", markup);
}
public void testBoldSpanNoWhitespace_spanMidLine() {
builder.beginDocument();
builder.beginBlock(BlockType.PARAGRAPH, new Attributes());
builder.characters("text3");
builder.beginSpan(SpanType.BOLD, new Attributes());
builder.characters("text2");
builder.endSpan();
builder.characters("text4");
builder.endBlock();
builder.endDocument();
String markup = out.toString();
TestUtil.println(markup);
assertEquals("text3 *text2* text4\n\n", markup);
}
public void testBoldSpanNoWhitespace_adjacentSpans() {
builder.beginDocument();
builder.beginBlock(BlockType.PARAGRAPH, new Attributes());
builder.beginSpan(SpanType.BOLD, new Attributes());
builder.characters("text2");
builder.endSpan();
builder.beginSpan(SpanType.ITALIC, new Attributes());
builder.characters("text3");
builder.endSpan();
builder.endBlock();
builder.endDocument();
String markup = out.toString();
TestUtil.println(markup);
assertEquals("*text2* _text3_\n\n", markup);
}
public void testSpanWithAdjacentWhitespace() {
builder.beginDocument();
builder.characters("prefix ");
builder.beginSpan(SpanType.BOLD, new Attributes());
builder.characters("bolded");
builder.endBlock();
builder.characters(" suffix");
builder.endBlock();
builder.endDocument();
String markup = out.toString();
TestUtil.println(markup);
assertEquals("prefix *bolded* suffix\n\n", markup);
}
public void testBoldSpanWithAdjacentPunctuation() {
builder.beginDocument();
builder.beginBlock(BlockType.PARAGRAPH, new Attributes());
builder.beginSpan(SpanType.BOLD, new Attributes());
builder.characters("text2");
builder.endSpan();
builder.characters("!");
builder.endBlock();
builder.endDocument();
String markup = out.toString();
TestUtil.println(markup);
assertEquals("*text2*!\n\n", markup);
}
public void testEmptySpan() {
builder.beginDocument();
builder.characters("prefix ");
builder.beginSpan(SpanType.BOLD, new Attributes());
builder.endBlock();
builder.characters(" suffix");
builder.endBlock();
builder.endDocument();
String markup = out.toString();
TestUtil.println(markup);
assertEquals("prefix suffix\n\n", markup);
}
public void testMonospaceSpan() {
builder.beginDocument();
builder.characters("prefix ");
builder.beginSpan(SpanType.MONOSPACE, new Attributes());
builder.characters("test");
builder.endSpan();
builder.characters(" suffix");
builder.endDocument();
String markup = out.toString();
TestUtil.println(markup);
assertEquals("prefix {{test}} suffix\n\n", markup);
}
public void testLinkSpan() {
builder.beginDocument();
builder.characters("prefix ");
LinkAttributes attributes = new LinkAttributes();
attributes.setHref("http://example.com/target");
builder.beginSpan(SpanType.LINK, attributes);
builder.characters("test");
builder.endSpan();
builder.characters(" suffix");
builder.endDocument();
String markup = out.toString();
TestUtil.println(markup);
assertEquals("prefix [test | http://example.com/target] suffix\n\n", markup);
}
public void testLinkSpanWithTitle() {
builder.beginDocument();
builder.characters("prefix ");
LinkAttributes attributes = new LinkAttributes();
attributes.setHref("http://example.com/target");
attributes.setTitle("Title Words");
builder.beginSpan(SpanType.LINK, attributes);
builder.characters("test");
builder.endSpan();
builder.characters(" suffix");
builder.endDocument();
String markup = out.toString();
TestUtil.println(markup);
assertEquals("prefix [test | http://example.com/target | Title Words] suffix\n\n", markup);
}
public void testLinkSpanNoText() {
builder.beginDocument();
builder.characters("prefix ");
LinkAttributes attributes = new LinkAttributes();
attributes.setHref("http://example.com/target");
builder.beginSpan(SpanType.LINK, attributes);
builder.endSpan();
builder.characters(" suffix");
builder.endDocument();
String markup = out.toString();
TestUtil.println(markup);
assertEquals("prefix [http://example.com/target] suffix\n\n", markup);
}
public void testLinkAlternate() {
builder.beginDocument();
builder.characters("prefix ");
builder.link("#test", "Test 123");
builder.characters(" suffix");
builder.endDocument();
String markup = out.toString();
TestUtil.println(markup);
assertEquals("prefix [Test 123 | #test] suffix\n\n", markup);
}
public void testLinkSpanNoHref() {
builder.beginDocument();
builder.characters("prefix ");
LinkAttributes attributes = new LinkAttributes();
builder.beginSpan(SpanType.LINK, attributes);
builder.endSpan();
builder.characters(" suffix");
builder.endDocument();
String markup = out.toString();
TestUtil.println(markup);
assertEquals("prefix [] suffix\n\n", markup);
}
public void testTableWithEmptyCells() {
builder.beginDocument();
builder.beginBlock(BlockType.TABLE, new Attributes());
builder.beginBlock(BlockType.TABLE_ROW, new Attributes());
builder.beginBlock(BlockType.TABLE_CELL_NORMAL, new Attributes());
builder.characters("content");
builder.endBlock();
builder.beginBlock(BlockType.TABLE_CELL_NORMAL, new Attributes());
builder.endBlock();
builder.endBlock();
builder.endBlock();
builder.endDocument();
String markup = out.toString();
TestUtil.println(markup);
assertEquals("|content| |\n\n", markup);
}
public void testDivAfterImplicitParagraph() {
builder.beginDocument();
builder.characters("test");
builder.beginBlock(BlockType.DIV, new Attributes());
builder.characters("more ");
builder.beginSpan(SpanType.BOLD, new Attributes());
builder.characters("text");
builder.endSpan();
builder.endBlock();
builder.beginBlock(BlockType.NUMERIC_LIST, new Attributes());
builder.beginBlock(BlockType.LIST_ITEM, new Attributes());
builder.characters("text2");
builder.endSpan();
builder.endBlock();
builder.endDocument();
String markup = out.toString();
TestUtil.println(markup);
assertEquals("test\n\nmore *text*\n# text2\n\n", markup);
}
public void testDivWithinTableCell() {
builder.beginDocument();
builder.beginBlock(BlockType.TABLE, new Attributes());
builder.beginBlock(BlockType.TABLE_ROW, new Attributes());
builder.beginBlock(BlockType.TABLE_CELL_NORMAL, new Attributes());
builder.characters("first");
builder.endBlock();
builder.beginBlock(BlockType.TABLE_CELL_NORMAL, new Attributes());
builder.beginBlock(BlockType.DIV, new Attributes());
builder.characters("content");
builder.endBlock(); // div
builder.endBlock(); // cell
builder.endBlock(); // row
builder.endBlock(); // table
builder.endDocument();
String markup = out.toString();
TestUtil.println(markup);
assertEquals("|first|content|\n\n", markup);
}
public void testItalics() {
builder.beginDocument();
builder.characters("prefix ");
builder.beginSpan(SpanType.ITALIC, new Attributes());
builder.characters("italic phrase");
builder.endBlock();
builder.characters(" suffix");
builder.endBlock();
builder.endDocument();
String markup = out.toString();
TestUtil.println(markup);
assertEquals("prefix _italic phrase_ suffix\n\n", markup);
}
public void testEmptyBoldSpan() {
builder.beginDocument();
builder.characters("first ");
builder.beginSpan(SpanType.BOLD, new Attributes());
builder.endSpan();
builder.characters("second");
builder.endDocument();
String markup = out.toString();
TestUtil.println(markup);
assertEquals("first second\n\n", markup);
}
public void testParagraphWithSingleNewline() {
builder.beginDocument();
builder.characters("first");
builder.lineBreak();
builder.characters("second");
builder.endDocument();
String markup = out.toString();
TestUtil.println(markup);
assertEquals("first\nsecond\n\n", markup);
}
public void testParagraphWithMultipleNewlines() {
builder.beginDocument();
builder.characters("first");
builder.lineBreak();
builder.lineBreak();
builder.lineBreak();
builder.characters("second");
builder.endDocument();
String markup = out.toString();
TestUtil.println(markup);
assertEquals("first\n\\\\\\\\second\n\n", markup);
}
public void testListItemWithSingleNewline() {
builder.beginDocument();
builder.beginBlock(BlockType.BULLETED_LIST, new Attributes());
builder.beginBlock(BlockType.LIST_ITEM, new Attributes());
builder.characters("first");
builder.lineBreak();
builder.characters("second");
builder.endBlock(); // list item
builder.beginBlock(BlockType.LIST_ITEM, new Attributes());
builder.characters("another");
builder.endBlock(); // list item
builder.endBlock(); // list
builder.endDocument();
String markup = out.toString();
TestUtil.println(markup);
assertEquals("* first\nsecond\n* another\n\n", markup);
}
public void testListItemWithMultipleNewlines() {
builder.beginDocument();
builder.beginBlock(BlockType.BULLETED_LIST, new Attributes());
builder.beginBlock(BlockType.LIST_ITEM, new Attributes());
builder.characters("first");
builder.lineBreak();
builder.lineBreak();
builder.characters("second");
builder.endBlock(); // list item
builder.beginBlock(BlockType.LIST_ITEM, new Attributes());
builder.characters("another");
builder.endBlock(); // list item
builder.endBlock(); // list
builder.endDocument();
String markup = out.toString();
TestUtil.println(markup);
assertEquals("* first\n\\\\second\n* another\n\n", markup);
}
public void testPreformattedWithMultipleNewlines() {
builder.beginDocument();
builder.beginBlock(BlockType.PREFORMATTED, new Attributes());
builder.characters("first");
builder.lineBreak();
builder.lineBreak();
builder.characters("second");
builder.endBlock(); // pre
builder.endDocument();
String markup = out.toString();
TestUtil.println(markup);
assertEquals("{noformat}first\n\nsecond{noformat}\n\n\n", markup);
}
public void testImplicitParagrahWithSpan() {
builder.beginDocument();
builder.beginSpan(SpanType.BOLD, new Attributes());
builder.characters("text1");
builder.endSpan();
builder.beginBlock(BlockType.PARAGRAPH, new Attributes());
builder.characters("text2");
builder.endBlock();
builder.endDocument();
String markup = out.toString();
TestUtil.println(markup);
assertEquals("*text1*\n\ntext2\n\n", markup);
}
public void testSpanOpensImplicitParagraph() {
builder.beginDocument();
builder.beginBlock(BlockType.CODE, new Attributes());
builder.characters("// some code");
builder.endBlock();
builder.beginSpan(SpanType.DELETED, new Attributes());
builder.characters("redacted");
builder.endSpan();
builder.characters(" text");
builder.endDocument();
String markup = out.toString();
TestUtil.println(markup);
assertEquals("{code}// some code{code}\n\n-redacted- text\n\n", markup);
}
public void testBlockQuote() {
builder.beginDocument();
builder.beginBlock(BlockType.QUOTE, new Attributes());
builder.characters("block text");
builder.endBlock();
builder.endDocument();
String markup = out.toString();
TestUtil.println(markup);
assertEquals("{quote}block text{quote}\n\n", markup);
}
public void testSpanSuperscript() {
assertSpan("begin ^span text^ end\n\n", SpanType.SUPERSCRIPT);
}
public void testSpanSubscript() {
assertSpan("begin ~span text~ end\n\n", SpanType.SUBSCRIPT);
}
public void testSpanBold() {
assertSpan("begin *span text* end\n\n", SpanType.BOLD);
}
public void testSpanCitation() {
assertSpan("begin??span text??end\n\n", SpanType.CITATION);
}
public void testSpanCode() {
assertSpan("begin @span text@ end\n\n", SpanType.CODE);
}
public void testSpanDeleted() {
assertSpan("begin -span text- end\n\n", SpanType.DELETED);
}
public void testSpanEmphasis() {
assertSpan("begin _span text_ end\n\n", SpanType.EMPHASIS);
}
public void testSpanInserted() {
assertSpan("begin +span text+ end\n\n", SpanType.INSERTED);
}
public void testSpanItalic() {
assertSpan("begin _span text_ end\n\n", SpanType.ITALIC);
}
public void testSpanMonospace() {
assertSpan("begin{{span text}}end\n\n", SpanType.MONOSPACE);
}
public void testSpanQuote() {
assertSpan("beginspan textend\n\n", SpanType.QUOTE);
}
public void testSpanSpan() {
assertSpan("beginspan textend\n\n", SpanType.SPAN);
}
public void testSpanStrong() {
assertSpan("begin *span text* end\n\n", SpanType.STRONG);
}
public void testSpanUnderlined() {
assertSpan("begin +span text+ end\n\n", SpanType.UNDERLINED);
}
private void assertSpan(String expected, SpanType spanType) {
builder.beginDocument();
builder.characters("begin");
builder.beginSpan(spanType, new Attributes());
builder.characters("span text");
builder.endSpan();
builder.characters("end");
builder.endDocument();
String markup = out.toString();
TestUtil.println(markup);
assertEquals(expected, markup);
}
}