mirror of https://github.com/TeamNewPipe/NewPipe
100 lines
6.3 KiB
Kotlin
100 lines
6.3 KiB
Kotlin
package org.schabi.newpipe.util.urlfinder
|
|
|
|
import org.junit.Assert.assertEquals
|
|
import org.junit.Test
|
|
|
|
/**
|
|
* Keep in mind that patterns from PatternsCompat are used, and they are already being extensively tested.
|
|
*/
|
|
class UrlFinderTest {
|
|
@Test fun `first url from long text`() {
|
|
val expected = "https://www.youtube.com/playlist?list=PLabcdefghij-ABCDEFGHIJ1234567890_"
|
|
val result = UrlFinder.firstUrlFromInput("""
|
|
|Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
|
|
|Eu tincidunt tortor aliquam nulla. URL: https://www.youtube.com/playlist?list=PLabcdefghij-ABCDEFGHIJ1234567890_ Sed dictum consequat dui.
|
|
|Pharetra diam sit amet nisl suscipit adipiscing bibendum est.
|
|
|Volutpat sed cras ornare arcu dui vivamus. Nulla posuere sollicitudin aliquam ultrices sagittis.
|
|
|Amet nisl purus in mollis nunc sed id. Ut aliquam purus sit amet luctus. Sit amet nisl suscipit adipiscing.
|
|
|Dapibus ultrices in iaculis nunc sed augue lacus viverra. Nisl purus in mollis nunc.
|
|
|Viverra nibh cras pulvinar mattis. ####!@!@!@!#### Not this one: https://www.youtube.com/playlist?list=SHOULD_NOT Nunc sed blandit libero volutpat.
|
|
|Nisl tincidunt eget nullam non nisi est sit amet. Purus in massa tempor nec feugiat nisl pretium fusce id.
|
|
|Vulputate eu scelerisque felis imperdiet proin fermentum leo vel.""".trimMargin())
|
|
|
|
assertEquals(expected, result)
|
|
}
|
|
|
|
@Test fun `no url from long text`() {
|
|
val result = UrlFinder.firstUrlFromInput("""
|
|
|Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
|
|
|Eu tincidunt tortor aliquam nulla. Sed dictum consequat dui. Pharetra diam sit amet nisl suscipit adipiscing bibendum est.
|
|
|Volutpat sed cras ornare arcu dui vivamus. Nulla posuere sollicitudin aliquam ultrices sagittis.
|
|
|Amet nisl purus in mollis nunc sed id. Ut aliquam purus sit amet luctus. Sit amet nisl suscipit adipiscing.
|
|
|Dapibus ultrices in iaculis nunc sed augue lacus viverra. Nisl purus in mollis nunc.
|
|
|Viverra nibh cras pulvinar mattis. Not this one: sed blandit libero volutpat.
|
|
|Nisl tincidunt eget nullam non nisi est sit amet. Purus in massa tempor nec feugiat nisl pretium fusce id.
|
|
|Vulputate eu scelerisque felis imperdiet proin fermentum leo vel.""".trimMargin())
|
|
|
|
assertEquals(null, result)
|
|
}
|
|
|
|
@Test fun `null and empty input`() {
|
|
assertEquals(null, UrlFinder.firstUrlFromInput(null))
|
|
assertEquals(null, UrlFinder.firstUrlFromInput(""))
|
|
assertEquals(null, UrlFinder.firstUrlFromInput(" "))
|
|
}
|
|
|
|
@Test fun `normal urls`() {
|
|
assertEquals("https://www.youtube.com/playlist?list=PLabcdefghij-ABCDEFGHIJ1234567890_",
|
|
UrlFinder.firstUrlFromInput("https://www.youtube.com/playlist?list=PLabcdefghij-ABCDEFGHIJ1234567890_"))
|
|
|
|
assertEquals("https://www.youtube.com/watch?v=dQw4w9WgXcQ",
|
|
UrlFinder.firstUrlFromInput("https://www.youtube.com/watch?v=dQw4w9WgXcQ"))
|
|
|
|
assertEquals("http://www.youtube.com/watch?v=dQw4w9WgXcQ",
|
|
UrlFinder.firstUrlFromInput("http://www.youtube.com/watch?v=dQw4w9WgXcQ"))
|
|
|
|
assertEquals("https://www.google.com", UrlFinder.firstUrlFromInput("https://www.google.com"))
|
|
assertEquals("http://www.google.com/test/", UrlFinder.firstUrlFromInput("http://www.google.com/test/"))
|
|
assertEquals("https://www.google.com/test?x=yz#123", UrlFinder.firstUrlFromInput("https://www.google.com/test?x=yz#123"))
|
|
assertEquals("https://208.67.222.222", UrlFinder.firstUrlFromInput("https://208.67.222.222"))
|
|
assertEquals("https://208.67.222.222/", UrlFinder.firstUrlFromInput("https://208.67.222.222/"))
|
|
assertEquals("http://208.67.222.222/", UrlFinder.firstUrlFromInput("http://208.67.222.222/"))
|
|
}
|
|
|
|
@Test fun `unknown protocols`() {
|
|
assertEquals(null, UrlFinder.firstUrlFromInput("httpsS://www.youtube.com/watch?v=dQw4w9WgXcQ"))
|
|
assertEquals(null, UrlFinder.firstUrlFromInput("rtsp://www.youtube.com/watch?v=dQw4w9WgXcQ"))
|
|
assertEquals(null, UrlFinder.firstUrlFromInput("ftp://www.youtube.com/watch?v=dQw4w9WgXcQ"))
|
|
assertEquals(null, UrlFinder.firstUrlFromInput("ASDF://www.youtube.com/watch?v=dQw4w9WgXcQ"))
|
|
assertEquals(null, UrlFinder.firstUrlFromInput("https→://www.youtube.com/watch?v=dQw4w9WgXcQ"))
|
|
assertEquals(null, UrlFinder.firstUrlFromInput("file:///etc/fstab"))
|
|
assertEquals(null, UrlFinder.firstUrlFromInput("://www.youtube.com/watch?v=dQw4w9WgXcQ"))
|
|
assertEquals(null, UrlFinder.firstUrlFromInput("www.youtube.com/watch?v=dQw4w9WgXcQ"))
|
|
assertEquals(null, UrlFinder.firstUrlFromInput("youtube.com/watch?v=dQw4w9WgXcQ"))
|
|
}
|
|
|
|
@Test fun `no ipv6 urls`() {
|
|
assertEquals(null, UrlFinder.firstUrlFromInput("http://[2620:119:35::35]/test"))
|
|
assertEquals(null, UrlFinder.firstUrlFromInput("https://[2620:119:35::35]"))
|
|
}
|
|
|
|
@Test fun `random prefixes and suffixes`() {
|
|
assertEquals("https://www.youtube.com/playlist?list=PLabcdefghij-ABCDEFGHIJ1234567890_",
|
|
UrlFinder.firstUrlFromInput("$#!@#@!#https://www.youtube.com/playlist?list=PLabcdefghij-ABCDEFGHIJ1234567890_ @@@@@@@@@@@"))
|
|
|
|
assertEquals("https://www.youtube.com/playlist?list=PLabcdefghij-ABCDEFGHIJ1234567890_",
|
|
UrlFinder.firstUrlFromInput("(___\"https://www.youtube.com/playlist?list=PLabcdefghij-ABCDEFGHIJ1234567890_\")))_"))
|
|
|
|
assertEquals("https://www.youtube.com/watch?v=dQw4w9WgXcQ",
|
|
UrlFinder.firstUrlFromInput(" https://www.youtube.com/watch?v=dQw4w9WgXcQ "))
|
|
|
|
assertEquals("https://www.youtube.com/watch?v=dQw4w9WgXcQ",
|
|
UrlFinder.firstUrlFromInput(" ------_---__-https://www.youtube.com/watch?v=dQw4w9WgXcQ !!!!!!"))
|
|
|
|
assertEquals("https://www.youtube.com/watch?v=dQw4w9WgXcQ",
|
|
UrlFinder.firstUrlFromInput("****https://www.youtube.com/watch?v=dQw4w9WgXcQ _"))
|
|
assertEquals("https://www.youtube.com/watch?v=dQw4w9WgXcQ",
|
|
UrlFinder.firstUrlFromInput("https://www.youtube.com/watch?v=dQw4w9WgXcQ\"Not PartOfTheUrl"))
|
|
}
|
|
}
|