Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
231 changes: 231 additions & 0 deletions src/test/java/nl/goodbytes/util/linkdetector/LinkDetectorTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -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<Fragment> 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<Fragment> 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<Fragment> 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<Fragment> 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<Fragment> 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<Fragment> 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<Fragment> 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<Fragment> 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<Fragment> 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<Fragment> 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<Fragment> 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<Fragment> 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());
}
}
Loading