X-Git-Url: https://git.pterodactylus.net/?a=blobdiff_plain;f=src%2Ftest%2Fjava%2Fnet%2Fpterodactylus%2Fsone%2Ftext%2FSoneTextParserTest.java;h=b8d2fb4f0bfc1b7784fceaf5142b532d6805e4fd;hb=f4dd3d176c5732a7e2111f37cdbb4ea6c83aaf46;hp=56e31abc331f9bbc4de18656e0155887508bd235;hpb=52513d6490a4c84c5a60f4232614f8222b9bdd57;p=Sone.git diff --git a/src/test/java/net/pterodactylus/sone/text/SoneTextParserTest.java b/src/test/java/net/pterodactylus/sone/text/SoneTextParserTest.java index 56e31ab..b8d2fb4 100644 --- a/src/test/java/net/pterodactylus/sone/text/SoneTextParserTest.java +++ b/src/test/java/net/pterodactylus/sone/text/SoneTextParserTest.java @@ -40,106 +40,104 @@ import org.junit.Test; */ public class SoneTextParserTest { - // - // ACTIONS - // + private final SoneTextParser soneTextParser = new SoneTextParser(null, null); - /** - * Tests basic plain-text operation of the parser. - * - * @throws IOException - * if an I/O error occurs - */ @SuppressWarnings("static-method") @Test public void testPlainText() throws IOException { - SoneTextParser soneTextParser = new SoneTextParser(null, null); - Iterable parts; - /* check basic operation. */ - parts = soneTextParser.parse("Test.", null); + Iterable parts = soneTextParser.parse("Test.", null); assertThat("Parts", parts, notNullValue()); - assertThat("Part Text", "Test.", is(convertText(parts, PlainTextPart.class))); + assertThat("Part Text", convertText(parts, PlainTextPart.class), is("Test.")); /* check empty lines at start and end. */ parts = soneTextParser.parse("\nTest.\n\n", null); assertThat("Parts", parts, notNullValue()); - assertThat("Part Text", "Test.", is(convertText(parts, PlainTextPart.class))); + assertThat("Part Text", convertText(parts, PlainTextPart.class), is("Test.")); /* check duplicate empty lines in the text. */ parts = soneTextParser.parse("\nTest.\n\n\nTest.", null); assertThat("Parts", parts, notNullValue()); - assertThat("Part Text", "Test.\n\nTest.", is(convertText(parts, PlainTextPart.class))); + assertThat("Part Text", convertText(parts, PlainTextPart.class), is("Test.\n\nTest.")); } - /** - * Tests parsing of KSK links. - * - * @throws IOException - * if an I/O error occurs - */ @SuppressWarnings("static-method") @Test public void testKSKLinks() throws IOException { - SoneTextParser soneTextParser = new SoneTextParser(null, null); - Iterable parts; - /* check basic links. */ - parts = soneTextParser.parse("KSK@gpl.txt", null); + Iterable parts = soneTextParser.parse("KSK@gpl.txt", null); assertThat("Parts", parts, notNullValue()); - assertThat("Part Text", "[KSK@gpl.txt|gpl.txt|gpl.txt]", is(convertText(parts, FreenetLinkPart.class))); + assertThat("Part Text", convertText(parts, FreenetLinkPart.class), is("[KSK@gpl.txt|gpl.txt|gpl.txt]")); /* check embedded links. */ parts = soneTextParser.parse("Link is KSK@gpl.txt\u200b.", null); assertThat("Parts", parts, notNullValue()); - assertThat("Part Text", "Link is [KSK@gpl.txt|gpl.txt|gpl.txt]\u200b.", is(convertText(parts, PlainTextPart.class, FreenetLinkPart.class))); + assertThat("Part Text", convertText(parts, PlainTextPart.class, FreenetLinkPart.class), is("Link is [KSK@gpl.txt|gpl.txt|gpl.txt]\u200b.")); /* check embedded links and line breaks. */ parts = soneTextParser.parse("Link is KSK@gpl.txt\nKSK@test.dat\n", null); assertThat("Parts", parts, notNullValue()); - assertThat("Part Text", "Link is [KSK@gpl.txt|gpl.txt|gpl.txt]\n[KSK@test.dat|test.dat|test.dat]", is(convertText(parts, PlainTextPart.class, FreenetLinkPart.class))); + assertThat("Part Text", convertText(parts, PlainTextPart.class, FreenetLinkPart.class), is("Link is [KSK@gpl.txt|gpl.txt|gpl.txt]\n[KSK@test.dat|test.dat|test.dat]")); } - /** - * Test case for a bug that was discovered in 0.6.7. - * - * @throws IOException - * if an I/O error occurs - */ @SuppressWarnings({ "synthetic-access", "static-method" }) @Test public void testEmptyLinesAndSoneLinks() throws IOException { SoneTextParser soneTextParser = new SoneTextParser(new TestSoneProvider(), null); - Iterable parts; /* check basic links. */ - parts = soneTextParser.parse("Some text.\n\nLink to sone://DAxKQzS48mtaQc7sUVHIgx3fnWZPQBz0EueBreUVWrU and stuff.", null); + Iterable parts = soneTextParser.parse("Some text.\n\nLink to sone://DAxKQzS48mtaQc7sUVHIgx3fnWZPQBz0EueBreUVWrU and stuff.", null); assertThat("Parts", parts, notNullValue()); - assertThat("Part Text", "Some text.\n\nLink to [Sone|DAxKQzS48mtaQc7sUVHIgx3fnWZPQBz0EueBreUVWrU] and stuff.", is(convertText(parts, PlainTextPart.class, SonePart.class))); + assertThat("Part Text", convertText(parts, PlainTextPart.class, SonePart.class), is("Some text.\n\nLink to [Sone|DAxKQzS48mtaQc7sUVHIgx3fnWZPQBz0EueBreUVWrU] and stuff.")); } - /** - * Test for a bug discovered in Sone 0.8.4 where a plain “http://” would be - * parsed into a link. - * - * @throws IOException - * if an I/O error occurs - */ @SuppressWarnings({ "synthetic-access", "static-method" }) @Test public void testEmpyHttpLinks() throws IOException { SoneTextParser soneTextParser = new SoneTextParser(new TestSoneProvider(), null); - Iterable parts; /* check empty http links. */ - parts = soneTextParser.parse("Some text. Empty link: http:// – nice!", null); + Iterable parts = soneTextParser.parse("Some text. Empty link: http:// – nice!", null); assertThat("Parts", parts, notNullValue()); - assertThat("Part Text", "Some text. Empty link: http:// – nice!", is(convertText(parts, PlainTextPart.class))); + assertThat("Part Text", convertText(parts, PlainTextPart.class), is("Some text. Empty link: http:// – nice!")); } - // - // PRIVATE METHODS - // + @Test + public void httpLinkWithoutParensEndsAtNextClosingParen() { + Iterable parts = soneTextParser.parse("Some text (and a link: http://example.sone/abc) – nice!", null); + assertThat("Parts", parts, notNullValue()); + assertThat("Part Text", convertText(parts, PlainTextPart.class, LinkPart.class), is("Some text (and a link: [http://example.sone/abc|example.sone/abc|example.sone/abc]) – nice!")); + } + + @Test + public void httpLinkWithOpenedAndClosedParensEndsAtNextClosingParen() { + Iterable parts = soneTextParser.parse("Some text (and a link: http://example.sone/abc_(def)) – nice!", null); + assertThat("Parts", parts, notNullValue()); + assertThat("Part Text", convertText(parts, PlainTextPart.class, LinkPart.class), is("Some text (and a link: [http://example.sone/abc_(def)|example.sone/abc_(def)|example.sone/abc_(def)]) – nice!")); + } + + @Test + public void punctuationIsIgnoredAtEndOfLinkBeforeWhitespace() { + SoneTextParser soneTextParser = new SoneTextParser(null, null); + Iterable parts = soneTextParser.parse("Some text and a link: http://example.sone/abc. Nice!", null); + assertThat("Parts", parts, notNullValue()); + assertThat("Part Text", convertText(parts, PlainTextPart.class, LinkPart.class), is("Some text and a link: [http://example.sone/abc|example.sone/abc|example.sone/abc]. Nice!")); + } + + @Test + public void multiplePunctuationCharactersAreIgnoredAtEndOfLinkBeforeWhitespace() { + Iterable parts = soneTextParser.parse("Some text and a link: http://example.sone/abc... Nice!", null); + assertThat("Parts", parts, notNullValue()); + assertThat("Part Text", convertText(parts, PlainTextPart.class, LinkPart.class), is("Some text and a link: [http://example.sone/abc|example.sone/abc|example.sone/abc]... Nice!")); + } + + @Test + public void commasAreIgnoredAtEndOfLinkBeforeWhitespace() { + SoneTextParser soneTextParser = new SoneTextParser(null, null); + Iterable parts = soneTextParser.parse("Some text and a link: http://example.sone/abc, nice!", null); + assertThat("Parts", parts, notNullValue()); + assertThat("Part Text", convertText(parts, PlainTextPart.class, LinkPart.class), is("Some text and a link: [http://example.sone/abc|example.sone/abc|example.sone/abc], nice!")); + } /** * Converts all given {@link Part}s into a string, validating that the