82 lines
2.9 KiB
Kotlin
82 lines
2.9 KiB
Kotlin
/*
|
|
* Copyright 2023 Tusky Contributors
|
|
*
|
|
* This file is a part of Tusky.
|
|
*
|
|
* This program is free software; you can redistribute it and/or modify it under the terms of the
|
|
* GNU General Public License as published by the Free Software Foundation; either version 3 of the
|
|
* License, or (at your option) any later version.
|
|
*
|
|
* Tusky is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even
|
|
* the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
|
|
* Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License along with Tusky; if not,
|
|
* see <http://www.gnu.org/licenses>.
|
|
*/
|
|
|
|
package com.keylesspalace.tusky.components.compose
|
|
|
|
import com.keylesspalace.tusky.SpanUtilsTest
|
|
import com.keylesspalace.tusky.util.highlightSpans
|
|
import org.junit.Assert.assertEquals
|
|
import org.junit.Test
|
|
import org.junit.runner.RunWith
|
|
import org.robolectric.ParameterizedRobolectricTestRunner
|
|
import org.robolectric.annotation.Config
|
|
|
|
@RunWith(ParameterizedRobolectricTestRunner::class)
|
|
@Config(sdk = [33])
|
|
class StatusLengthTest(
|
|
private val text: String,
|
|
private val expectedLength: Int
|
|
) {
|
|
companion object {
|
|
@ParameterizedRobolectricTestRunner.Parameters(name = "{0}")
|
|
@JvmStatic
|
|
fun data(): Iterable<Any> {
|
|
return listOf(
|
|
arrayOf("", 0),
|
|
arrayOf(" ", 1),
|
|
arrayOf("123", 3),
|
|
arrayOf("🫣", 1),
|
|
// "@user@server" should be treated as "@user"
|
|
arrayOf("123 @example@example.org", 12),
|
|
// URLs under 23 chars are treated as 23 chars
|
|
arrayOf("123 http://example.url", 27),
|
|
// URLs over 23 chars are treated as 23 chars
|
|
arrayOf("123 http://urlthatislongerthan23characters.example.org", 27),
|
|
// Short hashtags are treated as is
|
|
arrayOf("123 #basictag", 13),
|
|
// Long hashtags are *also* treated as is (not treated as 23, like URLs)
|
|
arrayOf("123 #atagthatislongerthan23characters", 37)
|
|
)
|
|
}
|
|
}
|
|
|
|
@Test
|
|
fun statusLength_matchesExpectations() {
|
|
val spannedText = SpanUtilsTest.FakeSpannable(text)
|
|
highlightSpans(spannedText, 0)
|
|
|
|
assertEquals(
|
|
expectedLength,
|
|
ComposeActivity.statusLength(spannedText, null, 23)
|
|
)
|
|
}
|
|
|
|
@Test
|
|
fun statusLength_withCwText_matchesExpectations() {
|
|
val spannedText = SpanUtilsTest.FakeSpannable(text)
|
|
highlightSpans(spannedText, 0)
|
|
|
|
val cwText = SpanUtilsTest.FakeSpannable(
|
|
"a @example@example.org #hashtagmention and http://example.org URL"
|
|
)
|
|
assertEquals(
|
|
expectedLength + cwText.length,
|
|
ComposeActivity.statusLength(spannedText, cwText, 23)
|
|
)
|
|
}
|
|
}
|