Show target domains for non-mention/non-hashtag links where the target domain is not provided or differs from the domain in the text (#2698)
* Show target domains for non-mention/non-hashtag links where the target domain is not provided or differs from the domain in the text. Addresses #2694 * Add link signifier to the marked-up domain * Back down on validating hashtags and mentions, don't markup _any_ urls where the text starts with #/@
This commit is contained in:
parent
c908ebb3f1
commit
687cffd540
3 changed files with 123 additions and 1 deletions
|
@ -1,8 +1,11 @@
|
|||
package com.keylesspalace.tusky.util
|
||||
|
||||
import android.content.Context
|
||||
import android.text.SpannableStringBuilder
|
||||
import android.text.style.URLSpan
|
||||
import androidx.test.ext.junit.runners.AndroidJUnit4
|
||||
import androidx.test.platform.app.InstrumentationRegistry
|
||||
import com.keylesspalace.tusky.R
|
||||
import com.keylesspalace.tusky.entity.HashTag
|
||||
import com.keylesspalace.tusky.entity.Status
|
||||
import com.keylesspalace.tusky.interfaces.LinkListener
|
||||
|
@ -29,6 +32,9 @@ class LinkHelperTest {
|
|||
HashTag("mastodev", "https://example.com/Tags/mastodev"),
|
||||
)
|
||||
|
||||
private val context: Context
|
||||
get() = InstrumentationRegistry.getInstrumentation().targetContext
|
||||
|
||||
@Test
|
||||
fun whenSettingClickableText_mentionUrlsArePreserved() {
|
||||
val builder = SpannableStringBuilder()
|
||||
|
@ -140,4 +146,94 @@ class LinkHelperTest {
|
|||
Assert.assertEquals(domain, getDomain(url))
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
fun hiddenDomainsAreMarkedUp() {
|
||||
val displayedContent = "This is a good place to go"
|
||||
val maliciousDomain = "malicious.place"
|
||||
val maliciousUrl = "https://$maliciousDomain/to/go"
|
||||
val content = SpannableStringBuilder()
|
||||
content.append(displayedContent, URLSpan(maliciousUrl), 0)
|
||||
Assert.assertEquals(context.getString(R.string.url_domain_notifier, displayedContent, maliciousDomain), markupHiddenUrls(context, content, listOf(), listOf(), listener).toString())
|
||||
}
|
||||
|
||||
@Test
|
||||
fun fraudulentDomainsAreMarkedUp() {
|
||||
val displayedContent = "https://tusky.app/"
|
||||
val maliciousDomain = "malicious.place"
|
||||
val maliciousUrl = "https://$maliciousDomain/to/go"
|
||||
val content = SpannableStringBuilder()
|
||||
content.append(displayedContent, URLSpan(maliciousUrl), 0)
|
||||
Assert.assertEquals(context.getString(R.string.url_domain_notifier, displayedContent, maliciousDomain), markupHiddenUrls(context, content, listOf(), listOf(), listener).toString())
|
||||
}
|
||||
|
||||
@Test fun multipleHiddenDomainsAreMarkedUp() {
|
||||
val domains = listOf("one.place", "another.place", "athird.place")
|
||||
val displayedContent = "link"
|
||||
val content = SpannableStringBuilder()
|
||||
for (domain in domains) {
|
||||
content.append(displayedContent, URLSpan("https://$domain/foo/bar"), 0)
|
||||
}
|
||||
|
||||
val markedUpContent = markupHiddenUrls(context, content, listOf(), listOf(), listener)
|
||||
for (domain in domains) {
|
||||
Assert.assertTrue(markedUpContent.contains(context.getString(R.string.url_domain_notifier, displayedContent, domain)))
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
fun validMentionsAreNotMarkedUp() {
|
||||
val builder = SpannableStringBuilder()
|
||||
for (mention in mentions) {
|
||||
builder.append("@${mention.username}", URLSpan(mention.url), 0)
|
||||
builder.append(" ")
|
||||
}
|
||||
|
||||
val markedUpContent = markupHiddenUrls(context, builder, mentions, tags, listener)
|
||||
for (mention in mentions) {
|
||||
Assert.assertFalse(markedUpContent.contains("${getDomain(mention.url)})"))
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
fun invalidMentionsAreNotMarkedUp() {
|
||||
val builder = SpannableStringBuilder()
|
||||
for (mention in mentions) {
|
||||
builder.append("@${mention.username}", URLSpan(mention.url), 0)
|
||||
builder.append(" ")
|
||||
}
|
||||
|
||||
val markedUpContent = markupHiddenUrls(context, builder, listOf(), tags, listener)
|
||||
for (mention in mentions) {
|
||||
Assert.assertFalse(markedUpContent.contains("${getDomain(mention.url)})"))
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
fun validTagsAreNotMarkedUp() {
|
||||
val builder = SpannableStringBuilder()
|
||||
for (tag in tags) {
|
||||
builder.append("#${tag.name}", URLSpan(tag.url), 0)
|
||||
builder.append(" ")
|
||||
}
|
||||
|
||||
val markedUpContent = markupHiddenUrls(context, builder, mentions, tags, listener)
|
||||
for (tag in tags) {
|
||||
Assert.assertFalse(markedUpContent.contains("${getDomain(tag.url)})"))
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
fun invalidTagsAreNotMarkedUp() {
|
||||
val builder = SpannableStringBuilder()
|
||||
for (tag in tags) {
|
||||
builder.append("#${tag.name}", URLSpan(tag.url), 0)
|
||||
builder.append(" ")
|
||||
}
|
||||
|
||||
val markedUpContent = markupHiddenUrls(context, builder, mentions, listOf(), listener)
|
||||
for (tag in tags) {
|
||||
Assert.assertFalse(markedUpContent.contains("${getDomain(tag.url)})"))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue