From f1abd1f02b982e9367e5b3530ece87719e91a971 Mon Sep 17 00:00:00 2001 From: Dan Caseley Date: Wed, 2 Apr 2025 18:18:42 +0100 Subject: [PATCH] Add additional unit tests --- .../util/linkdetector/LinkDetectorTest.java | 231 ++++++++++++++++++ 1 file changed, 231 insertions(+) diff --git a/src/test/java/nl/goodbytes/util/linkdetector/LinkDetectorTest.java b/src/test/java/nl/goodbytes/util/linkdetector/LinkDetectorTest.java index 6c8b637..4be718e 100644 --- a/src/test/java/nl/goodbytes/util/linkdetector/LinkDetectorTest.java +++ b/src/test/java/nl/goodbytes/util/linkdetector/LinkDetectorTest.java @@ -287,4 +287,235 @@ public void testEmbeddedLinkFollowedByComma() throws Exception assertEquals(", bar", fragments.get(2).toString()); assertFalse(fragments.get(2).isLink()); } + + @Test + public void testMultipleLinksInLongerText() throws Exception + { + // Setup test fixture. + final String input = "Please visit https://www.example.org and https://example.com at your convenience."; + Fragment fragmentUnderTest; + + // Execute system under test. + final List fragments = LinkDetector.parse(input); + + // Verify results. + assertEquals(5, fragments.size()); + + fragmentUnderTest = fragments.get(0); + assertEquals(0, fragmentUnderTest.startIndex()); + assertEquals("Please visit ".length(), fragmentUnderTest.endIndex()); + assertEquals("Please visit ", fragmentUnderTest.toString()); + assertFalse(fragmentUnderTest.isLink()); + + fragmentUnderTest = fragments.get(1); + assertEquals("Please visit ".length(), fragmentUnderTest.startIndex()); + assertEquals("Please visit https://www.example.org".length(), fragmentUnderTest.endIndex()); + assertEquals("https://www.example.org", fragmentUnderTest.toString()); + assertTrue(fragmentUnderTest.isLink()); + + fragmentUnderTest = fragments.get(2); + assertEquals("Please visit https://www.example.org".length(), fragmentUnderTest.startIndex()); + assertEquals("Please visit https://www.example.org and ".length(), fragmentUnderTest.endIndex()); + assertEquals(" and ", fragmentUnderTest.toString()); + assertFalse(fragmentUnderTest.isLink()); + + fragmentUnderTest = fragments.get(3); + assertEquals("Please visit https://www.example.org and ".length(), fragmentUnderTest.startIndex()); + assertEquals("Please visit https://www.example.org and https://example.com".length(), fragmentUnderTest.endIndex()); + assertEquals("https://example.com", fragmentUnderTest.toString()); + assertTrue(fragmentUnderTest.isLink()); + + fragmentUnderTest = fragments.get(4); + assertEquals("Please visit https://www.example.org and https://example.com".length(), fragmentUnderTest.startIndex()); + assertEquals("Please visit https://www.example.org and https://example.com at your convenience.".length(), fragmentUnderTest.endIndex()); + assertEquals(" at your convenience.", fragmentUnderTest.toString()); + assertFalse(fragmentUnderTest.isLink()); + } + + @Test + public void testLinkWithQueryString() throws Exception + { + // Setup test fixture. + final String input = "https://www.example.org?foo=bar"; + + // Execute system under test. + final List fragments = LinkDetector.parse(input); + + // Verify results. + assertEquals(1, fragments.size()); + assertEquals(0, fragments.get(0).startIndex()); + assertEquals(input.length(), fragments.get(0).endIndex()); + assertEquals(input, fragments.get(0).toString()); + assertTrue(fragments.get(0).isLink()); + } + + @Test + public void testLinkWithQueryStringWithExtraParams() throws Exception + { + // Setup test fixture. + final String input = "https://www.example.org?foo=bar&baz=qux&a=3&b=_a"; + + // Execute system under test. + final List fragments = LinkDetector.parse(input); + + // Verify results. + assertEquals(1, fragments.size()); + assertEquals(0, fragments.get(0).startIndex()); + assertEquals(input.length(), fragments.get(0).endIndex()); + assertEquals(input, fragments.get(0).toString()); + assertTrue(fragments.get(0).isLink()); + } + + @Test + public void testFtpLink() throws Exception + { + // Setup test fixture. + final String input = "ftp://www.example.org"; + + // Execute system under test. + final List fragments = LinkDetector.parse(input); + + // Verify results. + assertEquals(1, fragments.size()); + assertEquals(0, fragments.get(0).startIndex()); + assertEquals(input.length(), fragments.get(0).endIndex()); + assertEquals(input, fragments.get(0).toString()); + assertTrue(fragments.get(0).isLink()); + } + + @Test + public void testLinkWithBasicAuthentication() throws Exception + { + // Setup test fixture. + final String input = "https://foo:bar@www.example.org"; + + // Execute system under test. + final List fragments = LinkDetector.parse(input); + + // Verify results. + assertEquals(1, fragments.size()); + assertEquals(0, fragments.get(0).startIndex()); + assertEquals(input.length(), fragments.get(0).endIndex()); + assertEquals(input, fragments.get(0).toString()); + assertTrue(fragments.get(0).isLink()); + } + + @Test + public void testLinkWithPort() throws Exception + { + // Setup test fixture. + final String input = "https://www.example.org:8080"; + + // Execute system under test. + final List fragments = LinkDetector.parse(input); + + // Verify results. + assertEquals(1, fragments.size()); + assertEquals(0, fragments.get(0).startIndex()); + assertEquals(input.length(), fragments.get(0).endIndex()); + assertEquals(input, fragments.get(0).toString()); + assertTrue(fragments.get(0).isLink()); + } + + @Test + public void testLinkWithFragment() throws Exception + { + // Setup test fixture. + final String input = "https://www.example.org#fragment"; + + // Execute system under test. + final List fragments = LinkDetector.parse(input); + + // Verify results. + assertEquals(1, fragments.size()); + assertEquals(0, fragments.get(0).startIndex()); + assertEquals(input.length(), fragments.get(0).endIndex()); + assertEquals(input, fragments.get(0).toString()); + assertTrue(fragments.get(0).isLink()); + } + + @Test + public void testLinkWithFileExtension() throws Exception + { + // Setup test fixture. + final String input = "https://www.example.org/file.html"; + + // Execute system under test. + final List fragments = LinkDetector.parse(input); + + // Verify results. + assertEquals(1, fragments.size()); + assertEquals(0, fragments.get(0).startIndex()); + assertEquals(input.length(), fragments.get(0).endIndex()); + assertEquals(input, fragments.get(0).toString()); + assertTrue(fragments.get(0).isLink()); + } + + @Test + public void testLinkWithLinkInQueryString() throws Exception + { + // Setup test fixture. + final String input = "https://duckduckgo.com/?q=https://example.com"; + + // Execute system under test. + final List fragments = LinkDetector.parse(input); + + // Verify results. + assertEquals(1, fragments.size()); + assertEquals(0, fragments.get(0).startIndex()); + assertEquals(input.length(), fragments.get(0).endIndex()); + assertEquals(input, fragments.get(0).toString()); + assertTrue(fragments.get(0).isLink()); + } + + @Test + public void testLinkWithIpAddress() throws Exception + { + // Setup test fixture. + final String input = "http://127.0.0.1/local/"; + + // Execute system under test. + final List fragments = LinkDetector.parse(input); + + // Verify results. + assertEquals(1, fragments.size()); + assertEquals(0, fragments.get(0).startIndex()); + assertEquals(input.length(), fragments.get(0).endIndex()); + assertEquals(input, fragments.get(0).toString()); + assertTrue(fragments.get(0).isLink()); + } + + @Test + public void testObfuscatedLink() throws Exception + { + // Setup test fixture. + final String input = "https://e%78a%6Dpl%65.com"; + + // Execute system under test. + final List fragments = LinkDetector.parse(input); + + // Verify results. + assertEquals(1, fragments.size()); + assertEquals(0, fragments.get(0).startIndex()); + assertEquals(input.length(), fragments.get(0).endIndex()); + assertEquals(input, fragments.get(0).toString()); + assertTrue(fragments.get(0).isLink()); + } + + @Test + public void testTextWithLinkCharacters() throws Exception + { + // Setup test fixture. + final String input = "A hyperlink begins with https:// and is followed by a domain, such as example.com"; + + // Execute system under test. + final List fragments = LinkDetector.parse(input); + + // Verify results. + assertEquals(1, fragments.size()); + assertEquals(0, fragments.get(0).startIndex()); + assertEquals(input.length(), fragments.get(0).endIndex()); + assertEquals(input, fragments.get(0).toString()); + assertFalse(fragments.get(0).isLink()); + } }