Files
swagger2markup/src/test/java/io/github/robwin/markup/builder/AbstractMarkupDocBuilderTest.java
2016-02-23 13:55:37 +01:00

134 lines
7.8 KiB
Java

package io.github.robwin.markup.builder;
import io.github.robwin.markup.builder.asciidoc.AsciiDoc;
import io.github.robwin.markup.builder.markdown.Markdown;
import org.apache.commons.codec.digest.DigestUtils;
import org.junit.Before;
import org.junit.Test;
import org.mockito.Mockito;
import java.io.IOException;
import java.io.StringReader;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.fail;
import static org.mockito.Mockito.mock;
public class AbstractMarkupDocBuilderTest {
AbstractMarkupDocBuilder builder;
@Before
public void setUp() {
builder = mock(AbstractMarkupDocBuilder.class, Mockito.CALLS_REAL_METHODS);
builder.newLine = System.getProperty("line.separator");
builder.documentBuilder = new StringBuilder();
}
private String normalize(Markup markup, String anchor) {
return builder.normalizeAnchor(markup, anchor);
}
private void assertNormalization(Markup markup, String result, String anchor) {
assertEquals(result, normalize(markup, anchor));
}
@Test
public void testNormalizeAnchorAsciiDoc() throws Exception {
assertNormalization(AsciiDoc.SPACE_ESCAPE, "", "");
assertNormalization(AsciiDoc.SPACE_ESCAPE, "anchor", "anchor");
assertNormalization(AsciiDoc.SPACE_ESCAPE, "anchor", "aNcHoR");
assertNormalization(AsciiDoc.SPACE_ESCAPE, "anchor", "_ anchor _");
assertNormalization(AsciiDoc.SPACE_ESCAPE, "anchor", "- anchor -");
assertNormalization(AsciiDoc.SPACE_ESCAPE, "a_n-c_h_o-r", "_-a _ - n-_-_-c_-_-_h___o---r_-");
assertNormalization(AsciiDoc.SPACE_ESCAPE, "classic-simple_anchor", "classic-simple_anchor");
assertNormalization(AsciiDoc.SPACE_ESCAPE, "an_chor", " an chor ");
assertNormalization(AsciiDoc.SPACE_ESCAPE, "anchor", "# anchor &");
assertNormalization(AsciiDoc.SPACE_ESCAPE, DigestUtils.md5Hex("\u0240"), "\u0240");
assertNormalization(AsciiDoc.SPACE_ESCAPE, normalize(AsciiDoc.SPACE_ESCAPE, "\u0240"), " \u0240 ");
assertNormalization(AsciiDoc.SPACE_ESCAPE, DigestUtils.md5Hex("µ_u_\u0240this"), " µ&|ù \u0240This .:/-_# ");
assertNormalization(AsciiDoc.SPACE_ESCAPE, "this_is_a_really_funky_string", "Tĥïŝ ĩš â really fůňķŷ Šťŕĭńġ");
assertNormalization(AsciiDoc.SPACE_ESCAPE, "", " @#&(){}[]!$*%+=/:.;,?\\<>| ");
assertNormalization(AsciiDoc.SPACE_ESCAPE, "sub_action_html_query_value", " /sub/action.html/?query=value ");
}
@Test
public void testNormalizeAnchorMarkdown() throws Exception {
assertNormalization(Markdown.SPACE_ESCAPE, "", "");
assertNormalization(Markdown.SPACE_ESCAPE, "anchor", "anchor");
assertNormalization(Markdown.SPACE_ESCAPE, "anchor", "aNcHoR");
assertNormalization(Markdown.SPACE_ESCAPE, "anchor", "_ anchor _");
assertNormalization(Markdown.SPACE_ESCAPE, "anchor", "- anchor -");
assertNormalization(Markdown.SPACE_ESCAPE, "a-n-c_h_o-r", "_-a _ - n-_-_-c_-_-_h___o---r_-");
assertNormalization(Markdown.SPACE_ESCAPE, "classic-simple_anchor", "classic-simple_anchor");
assertNormalization(Markdown.SPACE_ESCAPE, "an-chor", " an chor ");
assertNormalization(Markdown.SPACE_ESCAPE, "anchor", "# anchor &");
assertNormalization(Markdown.SPACE_ESCAPE, DigestUtils.md5Hex("\u0240"), "\u0240");
assertNormalization(Markdown.SPACE_ESCAPE, normalize(Markdown.SPACE_ESCAPE, "\u0240"), " \u0240 ");
assertNormalization(Markdown.SPACE_ESCAPE, DigestUtils.md5Hex("µ-u-\u0240this"), " µ&|ù \u0240This .:/-_# ");
assertNormalization(Markdown.SPACE_ESCAPE, "this-is-a-really-funky-string", "Tĥïŝ ĩš â really fůňķŷ Šťŕĭńġ");
assertNormalization(Markdown.SPACE_ESCAPE, "", " @#&(){}[]!$*%+=/:.;,?\\<>| ");
assertNormalization(Markdown.SPACE_ESCAPE, "sub-action-html-query-value", " /sub/action.html/?query=value ");
}
private void assertImportMarkup(Markup markup, String expected, String text, int levelOffset) throws IOException {
builder.documentBuilder = new StringBuilder();
builder.importMarkup(markup, new StringReader(text), levelOffset);
assertEquals(expected, builder.documentBuilder.toString());
}
private void assertImportMarkupException(Markup markup, String expected, String text, int levelOffset) throws IOException {
builder.documentBuilder = new StringBuilder();
try {
builder.importMarkup(markup, new StringReader(text), levelOffset);
fail("IllegalArgumentException expected");
} catch (IllegalArgumentException e) {
assertEquals(expected, e.getMessage());
}
}
@Test
public void testImportMarkupAsciiDoc() throws IOException {
assertImportMarkup(AsciiDoc.TITLE, "\n\n", "", 0);
assertImportMarkup(AsciiDoc.TITLE, "\n\n", "", 4);
assertImportMarkupException(AsciiDoc.TITLE, "Specified levelOffset (5) > max levelOffset (4)", "", 5);
assertImportMarkup(AsciiDoc.TITLE, "\n\n", "", -4);
assertImportMarkupException(AsciiDoc.TITLE, "Specified levelOffset (-5) < min levelOffset (-4)", "", -5);
assertImportMarkup(AsciiDoc.TITLE, "\n= title\nline 1\nline 2\n\n", "= title\r\nline 1\r\nline 2", 0);
assertImportMarkup(AsciiDoc.TITLE, "\nline 1\nline 2\n\n", "line 1\nline 2", 0);
assertImportMarkup(AsciiDoc.TITLE, "\nline 1\nline 2\n\n", "line 1\nline 2", 4);
assertImportMarkup(AsciiDoc.TITLE, "\n= title\nline 1\nline 2\n= title 2\nline 3\n\n", "= title\nline 1\nline 2\n= title 2\nline 3", 0);
assertImportMarkup(AsciiDoc.TITLE, "\n===== title\nline 1\nline 2\n\n", "= title\nline 1\nline 2", 4);
assertImportMarkup(AsciiDoc.TITLE, "\n= title\nline 1\nline 2\n\n", "===== title\nline 1\nline 2", -4);
assertImportMarkupException(AsciiDoc.TITLE, "Specified levelOffset (4) set title 'title' level (1) > max title level (4)", "== title\nline 1\nline 2", 4);
assertImportMarkupException(AsciiDoc.TITLE, "Specified levelOffset (-1) set title 'title' level (0) < 0", "= title\nline 1\nline 2", -1);
assertImportMarkupException(AsciiDoc.TITLE, "Specified levelOffset (-3) set title 'title' level (1) < 0", "== title\nline 1\nline 2", -3);
}
@Test
public void testImportMarkupMarkdown() throws IOException {
assertImportMarkup(Markdown.TITLE, "\n\n", "", 0);
assertImportMarkup(Markdown.TITLE, "\n\n", "", 4);
assertImportMarkup(Markdown.TITLE, "\n\n", "", -4);
assertImportMarkupException(Markdown.TITLE, "Specified levelOffset (5) > max levelOffset (4)", "", 5);
assertImportMarkupException(Markdown.TITLE, "Specified levelOffset (-5) < min levelOffset (-4)", "", -5);
assertImportMarkup(Markdown.TITLE, "\n# title\nline 1\nline 2\n\n", "# title\r\nline 1\r\nline 2", 0);
assertImportMarkup(Markdown.TITLE, "\nline 1\nline 2\n\n", "line 1\nline 2", 0);
assertImportMarkup(Markdown.TITLE, "\nline 1\nline 2\n\n", "line 1\nline 2", 4);
assertImportMarkup(Markdown.TITLE, "\n# title\nline 1\nline 2\n# title 2\nline 3\n\n", "# title\nline 1\nline 2\n# title 2\nline 3", 0);
assertImportMarkup(Markdown.TITLE, "\n##### title\nline 1\nline 2\n\n", "# title\nline 1\nline 2", 4);
assertImportMarkup(Markdown.TITLE, "\n# title\nline 1\nline 2\n\n", "##### title\nline 1\nline 2", -4);
assertImportMarkupException(Markdown.TITLE, "Specified levelOffset (4) set title 'title' level (1) > max title level (4)", "## title\nline 1\nline 2", 4);
assertImportMarkupException(Markdown.TITLE, "Specified levelOffset (-1) set title 'title' level (0) < 0", "# title\nline 1\nline 2", -1);
assertImportMarkupException(Markdown.TITLE, "Specified levelOffset (-3) set title 'title' level (1) < 0", "## title\nline 1\nline 2", -3);
}
}