Skip to content

Commit 88176a5

Browse files
authored
Improve url link recognition (#329)
1 parent 0af168a commit 88176a5

File tree

2 files changed

+59
-1
lines changed

2 files changed

+59
-1
lines changed

app/src/main/kotlin/net/primal/android/core/utils/UriUtils.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ fun String.parseUris(includeNostrUris: Boolean = true): List<String> {
1515
.filterInvalidTLDs()
1616
.map { it.originalUrl }
1717
val customUrls = this.detectUrls()
18-
val mergedUrls = mergeUrls(emptyList(), customUrls)
18+
val mergedUrls = mergeUrls(libUrls, customUrls)
1919

2020
return if (includeNostrUris) {
2121
val nostr = this.parseNostrUris()

app/src/test/kotlin/net/primal/android/core/utils/UriUtilsTest.kt

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package net.primal.android.core.utils
22

3+
import io.kotest.matchers.collections.shouldContainExactly
34
import io.kotest.matchers.ints.shouldBeExactly
45
import io.kotest.matchers.nulls.shouldNotBeNull
56
import io.kotest.matchers.shouldBe
@@ -37,6 +38,63 @@ class UriUtilsTest {
3738
expectedUrls.size shouldBeExactly 1
3839
}
3940

41+
@Test
42+
fun `parseUrls should recognize various url formats`() {
43+
val content = """
44+
Some random links about bitcoin:
45+
https://en.m.wikipedia.org/wiki/Bit_(money)
46+
Check out primal.net for more info!
47+
Visit us at www.primal.net or at https://primal.net
48+
Here's a link to a secure site: https://www.example.com/path/to/resource
49+
And a simple link: example.com
50+
Don't forget the test with brackets: https://example.com/page?(query)=1&sort=desc
51+
""".trimIndent()
52+
53+
val expectedUrls = content.parseUris()
54+
55+
expectedUrls shouldBe listOf(
56+
"primal.net",
57+
"www.primal.net",
58+
"https://primal.net",
59+
"https://www.example.com/path/to/resource",
60+
"example.com",
61+
"https://en.m.wikipedia.org/wiki/Bit_(money)",
62+
"https://example.com/page?(query)=1&sort=desc",
63+
)
64+
expectedUrls.size shouldBeExactly 7
65+
}
66+
67+
@Test
68+
fun `parseUrls should recognize urls with port numbers`() {
69+
val content = """
70+
A link with a port number:
71+
https://www.example.com:443/resource
72+
""".trimIndent()
73+
74+
val expectedUrls = content.parseUris()
75+
76+
expectedUrls.shouldNotBeNull()
77+
expectedUrls shouldContainExactly listOf(
78+
"https://www.example.com:443/resource"
79+
)
80+
}
81+
82+
@Test
83+
fun `parseUrls should return empty for invalid urls`() {
84+
val content = """
85+
Some random links:
86+
thisisnotalink
87+
http://
88+
www.
89+
example@com
90+
""".trimIndent()
91+
92+
val expectedUrls = content.parseUris()
93+
94+
expectedUrls.shouldNotBeNull()
95+
expectedUrls.size shouldBe 0
96+
}
97+
4098
@Test
4199
fun `parseUrls should not return urls with brackets`() {
42100
val hugeContent = javaClass.getResource("/core/release_notes.txt")?.readText()

0 commit comments

Comments
 (0)