diff options
author | Declan O’Brien | 2017-11-09 02:04:50 +0000 |
---|---|---|
committer | David Green | 2017-11-15 20:08:11 +0000 |
commit | cd6a1b2fcaddbf25fb80f124dc11819006d1b374 (patch) | |
tree | a16e92880bff7888b29ad9e613004baa1d3e7226 | |
parent | 713641ea683e9a6574e628280e8456e76f767836 (diff) | |
download | org.eclipse.mylyn.docs-cd6a1b2fcaddbf25fb80f124dc11819006d1b374.tar.gz org.eclipse.mylyn.docs-cd6a1b2fcaddbf25fb80f124dc11819006d1b374.tar.xz org.eclipse.mylyn.docs-cd6a1b2fcaddbf25fb80f124dc11819006d1b374.zip |
527020: prevent infinite loop in paragraph starting with definition list
* update ParagraphBlock to return offSet
* add unit tests to TextileLanguageDefinitionListTest
Task-Url: https://bugs.eclipse.org/bugs/show_bug.cgi?id=527020
Change-Id: I2be3515f40e33babfabf6e3f962d92c28d6e1c67
Signed-off-by: Declan O’Brien <declan.obrien@tasktop.com>
2 files changed, 47 insertions, 2 deletions
diff --git a/wikitext/core/org.eclipse.mylyn.wikitext.textile/src/main/java/org/eclipse/mylyn/wikitext/textile/internal/block/ParagraphBlock.java b/wikitext/core/org.eclipse.mylyn.wikitext.textile/src/main/java/org/eclipse/mylyn/wikitext/textile/internal/block/ParagraphBlock.java index 77af3caa8..e67a518c8 100644 --- a/wikitext/core/org.eclipse.mylyn.wikitext.textile/src/main/java/org/eclipse/mylyn/wikitext/textile/internal/block/ParagraphBlock.java +++ b/wikitext/core/org.eclipse.mylyn.wikitext.textile/src/main/java/org/eclipse/mylyn/wikitext/textile/internal/block/ParagraphBlock.java @@ -21,7 +21,7 @@ import org.eclipse.mylyn.wikitext.textile.internal.Textile; /** * Matches any textile text, including lines starting with <code>p. </code>. - * + * * @author David Green */ public class ParagraphBlock extends Block { @@ -76,7 +76,7 @@ public class ParagraphBlock extends Block { for (Block block : textileLanguage.getParagraphBreakingBlocks()) { if (block.canStart(line, offset)) { setClosed(true); - return 0; + return offset; } } diff --git a/wikitext/core/org.eclipse.mylyn.wikitext.textile/src/test/java/org/eclipse/mylyn/wikitext/textile/TextileLanguageDefinitionListTest.java b/wikitext/core/org.eclipse.mylyn.wikitext.textile/src/test/java/org/eclipse/mylyn/wikitext/textile/TextileLanguageDefinitionListTest.java index f98844a5b..c65bd0709 100644 --- a/wikitext/core/org.eclipse.mylyn.wikitext.textile/src/test/java/org/eclipse/mylyn/wikitext/textile/TextileLanguageDefinitionListTest.java +++ b/wikitext/core/org.eclipse.mylyn.wikitext.textile/src/test/java/org/eclipse/mylyn/wikitext/textile/TextileLanguageDefinitionListTest.java @@ -12,6 +12,7 @@ package org.eclipse.mylyn.wikitext.textile; import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; import java.io.IOException; @@ -21,6 +22,7 @@ import java.util.List; import org.eclipse.mylyn.wikitext.parser.DocumentBuilder.BlockType; import org.eclipse.mylyn.wikitext.parser.MarkupParser; import org.eclipse.mylyn.wikitext.parser.builder.HtmlDocumentBuilder; +import org.eclipse.mylyn.wikitext.textile.internal.TextileDocumentBuilder; import org.eclipse.mylyn.wikitext.toolkit.RecordingDocumentBuilder; import org.eclipse.mylyn.wikitext.toolkit.RecordingDocumentBuilder.Event; import org.junit.Before; @@ -48,6 +50,14 @@ public class TextileLanguageDefinitionListTest { return out.toString(); } + private String textileToTextileRoundTrip(String testContent) { + StringWriter out = new StringWriter(); + TextileDocumentBuilder builder = new TextileDocumentBuilder(out); + parser.setBuilder(builder); + parser.parse(testContent); + return out.toString(); + } + @Test public void simple() { String html = parseToHtml("- one := two"); @@ -153,6 +163,41 @@ public class TextileLanguageDefinitionListTest { } @Test + public void definitionListToTextile() { + String testContent = "; a"; + String result = textileToTextileRoundTrip(testContent); + assertEquals("- a\n", result); + } + + @Test + public void definitionListToHtml() { + String testContent = "; a"; + String html = parser.parseToHtml(testContent); + assertTrue(html.contains("<body><dl><dt>a</dt></dl></body>")); + } + + @Test + public void paragraphContainingOnlyDefinitionListSyntaxToTextile() { + String testContent = "p. ; a"; + String result = textileToTextileRoundTrip(testContent); + assertEquals("- a\n", result); + } + + @Test + public void paragraphContainingOnlyDefinitionListSyntaxToHtml() { + String testContent = "p. ; a"; + String html = parser.parseToHtml(testContent); + assertTrue(html.contains("<body><p></p><dl><dt>a</dt></dl></body>")); + } + + @Test + public void paragraphContainingDefinitionListSyntaxToTextile() { + String testContent = "p. abc ; a"; + String result = textileToTextileRoundTrip(testContent); + assertEquals("abc ; a\n\n", result); + } + + @Test public void offsets() { RecordingDocumentBuilder builder = new RecordingDocumentBuilder(); MarkupParser markupParser = new MarkupParser(markupLanguage); |