add ktlint plugin to project and apply default code style (#2209)

* add ktlint plugin to project and apply default code style

* some manual adjustments, fix wildcard imports

* update CONTRIBUTING.md

* fix formatting
This commit is contained in:
Konrad Pozniak 2021-06-28 21:13:24 +02:00 committed by GitHub
commit 16ffcca748
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
227 changed files with 3933 additions and 3371 deletions

View file

@ -23,7 +23,6 @@ class SpannableString(private val text: CharSequence) : Spannable {
override val length: Int
get() = text.length
override fun nextSpanTransition(start: Int, limit: Int, type: Class<*>?): Int {
throw NotImplementedError()
}
@ -47,4 +46,4 @@ class SpannableString(private val text: CharSequence) : Spannable {
override fun getSpanStart(tag: Any?): Int {
throw NotImplementedError()
}
}
}

View file

@ -34,17 +34,20 @@ import org.junit.Test
import org.junit.runner.RunWith
import org.junit.runners.Parameterized
import org.mockito.ArgumentMatchers
import org.mockito.Mockito.*
import java.util.*
import org.mockito.Mockito.`when`
import org.mockito.Mockito.eq
import org.mockito.Mockito.mock
import java.util.ArrayList
import java.util.Collections
import java.util.Date
import java.util.concurrent.TimeUnit
class BottomSheetActivityTest {
@get:Rule
val instantTaskExecutorRule: InstantTaskExecutorRule = InstantTaskExecutorRule()
private lateinit var activity : FakeBottomSheetActivity
private lateinit var activity: FakeBottomSheetActivity
private lateinit var apiMock: MastodonApi
private val accountQuery = "http://mastodon.foo.bar/@User"
private val statusQuery = "http://mastodon.foo.bar/@User/345678"
@ -52,51 +55,51 @@ class BottomSheetActivityTest {
private val emptyCallback = Single.just(SearchResult(emptyList(), emptyList(), emptyList()))
private val testScheduler = TestScheduler()
private val account = Account (
"1",
"admin",
"admin",
"Ad Min",
SpannedString(""),
"http://mastodon.foo.bar",
"",
"",
false,
0,
0,
0,
null,
false,
emptyList(),
emptyList()
private val account = Account(
"1",
"admin",
"admin",
"Ad Min",
SpannedString(""),
"http://mastodon.foo.bar",
"",
"",
false,
0,
0,
0,
null,
false,
emptyList(),
emptyList()
)
private val accountSingle = Single.just(SearchResult(listOf(account), emptyList(), emptyList()))
private val status = Status(
"1",
statusQuery,
account,
null,
null,
null,
SpannedString("omgwat"),
Date(),
Collections.emptyList(),
0,
0,
false,
false,
false,
false,
"",
Status.Visibility.PUBLIC,
ArrayList(),
listOf(),
null,
pinned = false,
muted = false,
poll = null,
card = null
"1",
statusQuery,
account,
null,
null,
null,
SpannedString("omgwat"),
Date(),
Collections.emptyList(),
0,
0,
false,
false,
false,
false,
"",
Status.Visibility.PUBLIC,
ArrayList(),
listOf(),
null,
pinned = false,
muted = false,
poll = null,
card = null
)
private val statusSingle = Single.just(SearchResult(emptyList(), listOf(status), emptyList()))
@ -119,7 +122,7 @@ class BottomSheetActivityTest {
companion object {
@Parameterized.Parameters(name = "match_{0}")
@JvmStatic
fun data() : Iterable<Any> {
fun data(): Iterable<Any> {
return listOf(
arrayOf("https://mastodon.foo.bar/@User", true),
arrayOf("http://mastodon.foo.bar/@abc123", true),

View file

@ -25,7 +25,11 @@ import com.keylesspalace.tusky.components.compose.ComposeViewModel
import com.keylesspalace.tusky.components.compose.DEFAULT_CHARACTER_LIMIT
import com.keylesspalace.tusky.components.compose.MediaUploader
import com.keylesspalace.tusky.components.drafts.DraftHelper
import com.keylesspalace.tusky.db.*
import com.keylesspalace.tusky.db.AccountEntity
import com.keylesspalace.tusky.db.AccountManager
import com.keylesspalace.tusky.db.AppDatabase
import com.keylesspalace.tusky.db.InstanceDao
import com.keylesspalace.tusky.db.InstanceEntity
import com.keylesspalace.tusky.di.ViewModelFactory
import com.keylesspalace.tusky.entity.Account
import com.keylesspalace.tusky.entity.Instance
@ -34,7 +38,9 @@ import com.keylesspalace.tusky.service.ServiceClient
import com.nhaarman.mockitokotlin2.any
import io.reactivex.rxjava3.core.Single
import io.reactivex.rxjava3.core.SingleObserver
import org.junit.Assert.*
import org.junit.Assert.assertEquals
import org.junit.Assert.assertFalse
import org.junit.Assert.assertTrue
import org.junit.Before
import org.junit.Test
import org.junit.runner.RunWith
@ -59,25 +65,25 @@ class ComposeActivityTest {
private val instanceDomain = "example.domain"
private val account = AccountEntity(
id = 1,
domain = instanceDomain,
accessToken = "token",
isActive = true,
accountId = "1",
username = "username",
displayName = "Display Name",
profilePictureUrl = "",
notificationsEnabled = true,
notificationsMentioned = true,
notificationsFollowed = true,
notificationsFollowRequested = false,
notificationsReblogged = true,
notificationsFavorited = true,
notificationSound = true,
notificationVibration = true,
notificationLight = true
id = 1,
domain = instanceDomain,
accessToken = "token",
isActive = true,
accountId = "1",
username = "username",
displayName = "Display Name",
profilePictureUrl = "",
notificationsEnabled = true,
notificationsMentioned = true,
notificationsFollowed = true,
notificationsFollowRequested = false,
notificationsReblogged = true,
notificationsFavorited = true,
notificationSound = true,
notificationVibration = true,
notificationLight = true
)
private var instanceResponseCallback: (()->Instance)? = null
private var instanceResponseCallback: (() -> Instance)? = null
private var composeOptions: ComposeActivity.ComposeOptions? = null
@Before
@ -90,7 +96,7 @@ class ComposeActivityTest {
apiMock = mock(MastodonApi::class.java)
`when`(apiMock.getCustomEmojis()).thenReturn(Single.just(emptyList()))
`when`(apiMock.getInstance()).thenReturn(object: Single<Instance>() {
`when`(apiMock.getInstance()).thenReturn(object : Single<Instance>() {
override fun subscribeActual(observer: SingleObserver<in Instance>) {
val instance = instanceResponseCallback?.invoke()
if (instance == null) {
@ -103,19 +109,19 @@ class ComposeActivityTest {
val instanceDaoMock = mock(InstanceDao::class.java)
`when`(instanceDaoMock.loadMetadataForInstance(any())).thenReturn(
Single.just(InstanceEntity(instanceDomain, emptyList(),null, null, null, null))
Single.just(InstanceEntity(instanceDomain, emptyList(), null, null, null, null))
)
val dbMock = mock(AppDatabase::class.java)
`when`(dbMock.instanceDao()).thenReturn(instanceDaoMock)
val viewModel = ComposeViewModel(
apiMock,
accountManagerMock,
mock(MediaUploader::class.java),
mock(ServiceClient::class.java),
mock(DraftHelper::class.java),
dbMock
apiMock,
accountManagerMock,
mock(MediaUploader::class.java),
mock(ServiceClient::class.java),
mock(DraftHelper::class.java),
dbMock
)
activity.intent = Intent(activity, ComposeActivity::class.java).apply {
putExtra(ComposeActivity.COMPOSE_OPTIONS_EXTRA, composeOptions)
@ -381,41 +387,38 @@ class ComposeActivityTest {
activity.findViewById<EditText>(R.id.composeEditField).setText(text ?: "Some text")
}
private fun getInstanceWithMaximumTootCharacters(maximumTootCharacters: Int?): Instance
{
private fun getInstanceWithMaximumTootCharacters(maximumTootCharacters: Int?): Instance {
return Instance(
"https://example.token",
"Example dot Token",
"Example instance for testing",
"admin@example.token",
"2.6.3",
HashMap(),
null,
null,
listOf("en"),
Account(
"1",
"admin",
"admin",
"admin",
SpannedString(""),
"https://example.token",
"Example dot Token",
"Example instance for testing",
"admin@example.token",
"2.6.3",
HashMap(),
"",
"",
false,
0,
0,
0,
null,
null,
listOf("en"),
Account(
"1",
"admin",
"admin",
"admin",
SpannedString(""),
"https://example.token",
"",
"",
false,
0,
0,
0,
null,
false,
emptyList(),
emptyList()
),
maximumTootCharacters,
null,
null
false,
emptyList(),
emptyList()
),
maximumTootCharacters,
null,
null
)
}
}

View file

@ -22,64 +22,66 @@ import org.junit.runner.RunWith
import org.junit.runners.Parameterized
@RunWith(Parameterized::class)
class ComposeTokenizerTest(private val text: CharSequence,
private val expectedStartIndex: Int,
private val expectedEndIndex: Int) {
class ComposeTokenizerTest(
private val text: CharSequence,
private val expectedStartIndex: Int,
private val expectedEndIndex: Int
) {
companion object {
@Parameterized.Parameters(name = "{0}")
@JvmStatic
fun data(): Iterable<Any> {
return listOf(
arrayOf("@mention", 0, 8),
arrayOf("@ment10n", 0, 8),
arrayOf("@ment10n_", 0, 9),
arrayOf("@ment10n_n", 0, 10),
arrayOf("@ment10n_9", 0, 10),
arrayOf(" @mention", 1, 9),
arrayOf(" @ment10n", 1, 9),
arrayOf(" @ment10n_", 1, 10),
arrayOf(" @ment10n_ @", 11, 12),
arrayOf(" @ment10n_ @ment20n", 11, 19),
arrayOf(" @ment10n_ @ment20n_", 11, 20),
arrayOf(" @ment10n_ @ment20n_n", 11, 21),
arrayOf(" @ment10n_ @ment20n_9", 11, 21),
arrayOf(" @ment10n-", 1, 10),
arrayOf(" @ment10n- @", 11, 12),
arrayOf(" @ment10n- @ment20n", 11, 19),
arrayOf(" @ment10n- @ment20n-", 11, 20),
arrayOf(" @ment10n- @ment20n-n", 11, 21),
arrayOf(" @ment10n- @ment20n-9", 11, 21),
arrayOf("@ment10n@l0calhost", 0, 18),
arrayOf(" @ment10n@l0calhost", 1, 19),
arrayOf(" @ment10n_@l0calhost", 1, 20),
arrayOf(" @ment10n-@l0calhost", 1, 20),
arrayOf(" @ment10n_@l0calhost @ment20n@husky", 21, 35),
arrayOf(" @ment10n_@l0calhost @ment20n_@husky", 21, 36),
arrayOf(" @ment10n-@l0calhost @ment20n-@husky", 21, 36),
arrayOf(" @m@localhost", 1, 13),
arrayOf(" @m@localhost @a@localhost", 14, 26),
arrayOf("@m@", 0, 3),
arrayOf(" @m@ @a@asdf", 5, 12),
arrayOf(" @m@ @a@", 5, 8),
arrayOf(" @m@ @a@a", 5, 9),
arrayOf(" @m@a @a@m", 6, 10),
arrayOf("@m@m@", 5, 5),
arrayOf("#tusky@husky", 12, 12),
arrayOf(":tusky@husky", 12, 12),
arrayOf("mention", 7, 7),
arrayOf("ment10n", 7, 7),
arrayOf("mentio_", 7, 7),
arrayOf("#tusky", 0, 6),
arrayOf("#@tusky", 7, 7),
arrayOf("@#tusky", 7, 7),
arrayOf(" @#tusky", 8, 8),
arrayOf(":mastodon", 0, 9),
arrayOf(":@mastodon", 10, 10),
arrayOf("@:mastodon", 10, 10),
arrayOf(" @:mastodon", 11, 11),
arrayOf("#@:mastodon", 11, 11),
arrayOf(" #@:mastodon", 12, 12)
arrayOf("@mention", 0, 8),
arrayOf("@ment10n", 0, 8),
arrayOf("@ment10n_", 0, 9),
arrayOf("@ment10n_n", 0, 10),
arrayOf("@ment10n_9", 0, 10),
arrayOf(" @mention", 1, 9),
arrayOf(" @ment10n", 1, 9),
arrayOf(" @ment10n_", 1, 10),
arrayOf(" @ment10n_ @", 11, 12),
arrayOf(" @ment10n_ @ment20n", 11, 19),
arrayOf(" @ment10n_ @ment20n_", 11, 20),
arrayOf(" @ment10n_ @ment20n_n", 11, 21),
arrayOf(" @ment10n_ @ment20n_9", 11, 21),
arrayOf(" @ment10n-", 1, 10),
arrayOf(" @ment10n- @", 11, 12),
arrayOf(" @ment10n- @ment20n", 11, 19),
arrayOf(" @ment10n- @ment20n-", 11, 20),
arrayOf(" @ment10n- @ment20n-n", 11, 21),
arrayOf(" @ment10n- @ment20n-9", 11, 21),
arrayOf("@ment10n@l0calhost", 0, 18),
arrayOf(" @ment10n@l0calhost", 1, 19),
arrayOf(" @ment10n_@l0calhost", 1, 20),
arrayOf(" @ment10n-@l0calhost", 1, 20),
arrayOf(" @ment10n_@l0calhost @ment20n@husky", 21, 35),
arrayOf(" @ment10n_@l0calhost @ment20n_@husky", 21, 36),
arrayOf(" @ment10n-@l0calhost @ment20n-@husky", 21, 36),
arrayOf(" @m@localhost", 1, 13),
arrayOf(" @m@localhost @a@localhost", 14, 26),
arrayOf("@m@", 0, 3),
arrayOf(" @m@ @a@asdf", 5, 12),
arrayOf(" @m@ @a@", 5, 8),
arrayOf(" @m@ @a@a", 5, 9),
arrayOf(" @m@a @a@m", 6, 10),
arrayOf("@m@m@", 5, 5),
arrayOf("#tusky@husky", 12, 12),
arrayOf(":tusky@husky", 12, 12),
arrayOf("mention", 7, 7),
arrayOf("ment10n", 7, 7),
arrayOf("mentio_", 7, 7),
arrayOf("#tusky", 0, 6),
arrayOf("#@tusky", 7, 7),
arrayOf("@#tusky", 7, 7),
arrayOf(" @#tusky", 8, 8),
arrayOf(":mastodon", 0, 9),
arrayOf(":@mastodon", 10, 10),
arrayOf("@:mastodon", 10, 10),
arrayOf(" @:mastodon", 11, 11),
arrayOf("#@:mastodon", 11, 11),
arrayOf(" #@:mastodon", 12, 12)
)
}
}
@ -91,4 +93,4 @@ class ComposeTokenizerTest(private val text: CharSequence,
Assert.assertEquals(expectedStartIndex, tokenizer.findTokenStart(text, text.length))
Assert.assertEquals(expectedEndIndex, tokenizer.findTokenEnd(text, text.length))
}
}
}

View file

@ -7,17 +7,14 @@ import com.keylesspalace.tusky.entity.Poll
import com.keylesspalace.tusky.entity.PollOption
import com.keylesspalace.tusky.entity.Status
import com.keylesspalace.tusky.network.FilterModel
import com.keylesspalace.tusky.network.MastodonApi
import com.nhaarman.mockitokotlin2.doReturn
import com.nhaarman.mockitokotlin2.mock
import io.reactivex.rxjava3.core.Single
import org.junit.Assert.assertFalse
import org.junit.Assert.assertTrue
import org.junit.Before
import org.junit.Test
import org.junit.runner.RunWith
import org.robolectric.annotation.Config
import java.util.*
import java.util.Date
@Config(sdk = [28])
@RunWith(AndroidJUnit4::class)
@ -182,5 +179,4 @@ class FilterTest {
card = null
)
}
}
}

View file

@ -17,8 +17,8 @@ package com.keylesspalace.tusky
import com.keylesspalace.tusky.util.FocalPointUtil
import org.junit.Assert.assertEquals
import org.junit.Assert.assertTrue
import org.junit.Assert.assertFalse
import org.junit.Assert.assertTrue
import org.junit.Test
class FocalPointUtilTest {
@ -45,66 +45,112 @@ class FocalPointUtilTest {
// isVerticalCrop tests
@Test
fun isVerticalCropTest() {
assertTrue(FocalPointUtil.isVerticalCrop(2f, 1f,
1f, 2f))
assertTrue(
FocalPointUtil.isVerticalCrop(
2f, 1f,
1f, 2f
)
)
}
@Test
fun isHorizontalCropTest() {
assertFalse(FocalPointUtil.isVerticalCrop(1f, 2f,
2f,1f))
assertFalse(
FocalPointUtil.isVerticalCrop(
1f, 2f,
2f, 1f
)
)
}
@Test
fun isPerfectFitTest() { // Doesn't matter what it returns, just check it doesn't crash
FocalPointUtil.isVerticalCrop(3f, 1f,
6f, 2f)
FocalPointUtil.isVerticalCrop(
3f, 1f,
6f, 2f
)
}
// calculateScaling tests
@Test
fun perfectFitScaleDownTest() {
assertEquals(FocalPointUtil.calculateScaling(2f, 5f,
5f, 12.5f), 0.4f, eps)
assertEquals(
FocalPointUtil.calculateScaling(
2f, 5f,
5f, 12.5f
),
0.4f, eps
)
}
@Test
fun perfectFitScaleUpTest() {
assertEquals(FocalPointUtil.calculateScaling(2f, 5f,
1f, 2.5f), 2f, eps)
assertEquals(
FocalPointUtil.calculateScaling(
2f, 5f,
1f, 2.5f
),
2f, eps
)
}
@Test
fun verticalCropScaleUpTest() {
assertEquals(FocalPointUtil.calculateScaling(2f, 1f,
1f, 2f), 2f, eps)
assertEquals(
FocalPointUtil.calculateScaling(
2f, 1f,
1f, 2f
),
2f, eps
)
}
@Test
fun verticalCropScaleDownTest() {
assertEquals(FocalPointUtil.calculateScaling(4f, 3f,
8f, 24f), 0.5f, eps)
assertEquals(
FocalPointUtil.calculateScaling(
4f, 3f,
8f, 24f
),
0.5f, eps
)
}
@Test
fun horizontalCropScaleUpTest() {
assertEquals(FocalPointUtil.calculateScaling(1f, 2f,
2f, 1f), 2f, eps)
assertEquals(
FocalPointUtil.calculateScaling(
1f, 2f,
2f, 1f
),
2f, eps
)
}
@Test
fun horizontalCropScaleDownTest() {
assertEquals(FocalPointUtil.calculateScaling(3f, 4f,
24f, 8f), 0.5f, eps)
assertEquals(
FocalPointUtil.calculateScaling(
3f, 4f,
24f, 8f
),
0.5f, eps
)
}
// focalOffset tests
@Test
fun toLowFocalOffsetTest() {
assertEquals(FocalPointUtil.focalOffset(2f, 8f, 1f, 0.05f),
0f, eps)
assertEquals(
FocalPointUtil.focalOffset(2f, 8f, 1f, 0.05f),
0f, eps
)
}
@Test
fun toHighFocalOffsetTest() {
assertEquals(FocalPointUtil.focalOffset(2f, 4f, 2f,0.95f),
-6f, eps)
assertEquals(
FocalPointUtil.focalOffset(2f, 4f, 2f, 0.95f),
-6f, eps
)
}
@Test
fun possibleFocalOffsetTest() {
assertEquals(FocalPointUtil.focalOffset(2f, 4f, 2f,0.7f),
-4.6f, eps)
assertEquals(
FocalPointUtil.focalOffset(2f, 4f, 2f, 0.7f),
-4.6f, eps
)
}
}
}

View file

@ -36,10 +36,10 @@ class SpanUtilsTest {
@JvmStatic
fun data(): Iterable<Any> {
return listOf(
"@mention",
"#tag",
"https://thr.ee/meh?foo=bar&wat=@at#hmm",
"http://thr.ee/meh?foo=bar&wat=@at#hmm"
"@mention",
"#tag",
"https://thr.ee/meh?foo=bar&wat=@at#hmm",
"http://thr.ee/meh?foo=bar&wat=@at#hmm"
)
}
}
@ -94,21 +94,23 @@ class SpanUtilsTest {
}
@RunWith(Parameterized::class)
class HighlightingTestsForTag(private val text: String,
private val expectedStartIndex: Int,
private val expectedEndIndex: Int) {
class HighlightingTestsForTag(
private val text: String,
private val expectedStartIndex: Int,
private val expectedEndIndex: Int
) {
companion object {
@Parameterized.Parameters(name = "{0}")
@JvmStatic
fun data(): Iterable<Any> {
return listOf(
arrayOf("#test", 0, 5),
arrayOf(" #AfterSpace", 1, 12),
arrayOf("#BeforeSpace ", 0, 12),
arrayOf("@#after_at", 1, 10),
arrayOf("あいうえお#after_hiragana", 5, 20),
arrayOf("##DoubleHash", 1, 12),
arrayOf("###TripleHash", 2, 13)
arrayOf("#test", 0, 5),
arrayOf(" #AfterSpace", 1, 12),
arrayOf("#BeforeSpace ", 0, 12),
arrayOf("@#after_at", 1, 10),
arrayOf("あいうえお#after_hiragana", 5, 20),
arrayOf("##DoubleHash", 1, 12),
arrayOf("###TripleHash", 2, 13)
)
}
}
@ -133,13 +135,13 @@ class SpanUtilsTest {
}
override fun <T : Any> getSpans(start: Int, end: Int, type: Class<T>): Array<T> {
return spans.filter { it.start >= start && it.end <= end && type.isInstance(it)}
.map { it.span }
.toTypedArray() as Array<T>
return spans.filter { it.start >= start && it.end <= end && type.isInstance(it) }
.map { it.span }
.toTypedArray() as Array<T>
}
override fun removeSpan(what: Any?) {
spans.removeIf { span -> span.span == what}
spans.removeIf { span -> span.span == what }
}
override fun toString(): String {
@ -175,4 +177,4 @@ class SpanUtilsTest {
throw NotImplementedError()
}
}
}
}

View file

@ -3,21 +3,23 @@ package com.keylesspalace.tusky
import com.keylesspalace.tusky.util.dec
import com.keylesspalace.tusky.util.inc
import com.keylesspalace.tusky.util.isLessThan
import org.junit.Assert.*
import org.junit.Assert.assertEquals
import org.junit.Assert.assertFalse
import org.junit.Assert.assertTrue
import org.junit.Test
class StringUtilsTest {
@Test
fun isLessThan() {
val lessList = listOf(
"abc" to "bcd",
"ab" to "abc",
"cb" to "abc",
"1" to "2"
"abc" to "bcd",
"ab" to "abc",
"cb" to "abc",
"1" to "2"
)
lessList.forEach { (l, r) -> assertTrue("$l < $r", l.isLessThan(r)) }
val notLessList = lessList.map { (l, r) -> r to l } + listOf(
"abc" to "abc"
"abc" to "abc"
)
notLessList.forEach { (l, r) -> assertFalse("not $l < $r", l.isLessThan(r)) }
}
@ -25,22 +27,22 @@ class StringUtilsTest {
@Test
fun inc() {
listOf(
"122" to "123",
"12A" to "12B",
"1" to "2"
"122" to "123",
"12A" to "12B",
"1" to "2"
).forEach { (l, r) -> assertEquals("$l + 1 = $r", r, l.inc()) }
}
@Test
fun dec() {
listOf(
"123" to "122",
"12B" to "12A",
"120" to "11z",
"100" to "zz",
"0" to "",
"" to "",
"2" to "1"
"123" to "122",
"12B" to "12A",
"120" to "11z",
"100" to "zz",
"0" to "",
"" to "",
"2" to "1"
).forEach { (l, r) -> assertEquals("$l - 1 = $r", r, l.dec()) }
}
}
}

View file

@ -44,4 +44,4 @@ class TuskyApplication : Application() {
@JvmStatic
lateinit var localeManager: LocaleManager
}
}
}

View file

@ -23,14 +23,15 @@ import org.junit.Assert.assertEquals
import org.junit.Before
import org.junit.Test
import org.junit.runner.RunWith
import org.mockito.ArgumentMatchers.*
import org.mockito.ArgumentMatchers.any
import org.mockito.ArgumentMatchers.anyInt
import org.mockito.ArgumentMatchers.anyLong
import org.mockito.Mock
import org.mockito.MockitoAnnotations
import org.robolectric.annotation.Config
import retrofit2.Response
import java.util.*
import java.util.Date
import java.util.concurrent.TimeUnit
import kotlin.collections.ArrayList
@Config(sdk = [28])
@RunWith(AndroidJUnit4::class)
@ -50,7 +51,6 @@ class TimelineRepositoryTest {
private lateinit var testScheduler: TestScheduler
private val limit = 30
private val account = AccountEntity(
id = 2,

View file

@ -14,14 +14,24 @@ import com.keylesspalace.tusky.network.TimelineCases
import com.keylesspalace.tusky.util.Either
import com.keylesspalace.tusky.util.toViewData
import com.keylesspalace.tusky.viewdata.StatusViewData
import com.nhaarman.mockitokotlin2.*
import com.nhaarman.mockitokotlin2.clearInvocations
import com.nhaarman.mockitokotlin2.doReturn
import com.nhaarman.mockitokotlin2.eq
import com.nhaarman.mockitokotlin2.isNull
import com.nhaarman.mockitokotlin2.mock
import com.nhaarman.mockitokotlin2.times
import com.nhaarman.mockitokotlin2.verify
import com.nhaarman.mockitokotlin2.whenever
import io.reactivex.rxjava3.annotations.NonNull
import io.reactivex.rxjava3.core.Observable
import io.reactivex.rxjava3.core.Single
import io.reactivex.rxjava3.observers.TestObserver
import io.reactivex.rxjava3.subjects.PublishSubject
import kotlinx.coroutines.runBlocking
import org.junit.Assert.*
import org.junit.Assert.assertEquals
import org.junit.Assert.assertFalse
import org.junit.Assert.assertNull
import org.junit.Assert.assertTrue
import org.junit.Before
import org.junit.Test
import org.robolectric.annotation.Config
@ -29,7 +39,6 @@ import org.robolectric.shadows.ShadowLog
import retrofit2.Response
import java.io.IOException
@Config(sdk = [29])
class TimelineViewModelTest {
lateinit var timelineRepository: TimelineRepository
@ -727,7 +736,6 @@ class TimelineViewModelTest {
).thenReturn(Single.just(items))
}
private fun assertHasList(aList: List<StatusViewData>) {
assertEquals(
aList,
@ -780,4 +788,4 @@ class TimelineViewModelTest {
}
private fun List<Status>.toEitherList() = map { Either.Right<Placeholder, Status>(it) }
}
}

View file

@ -1,6 +1,6 @@
package com.keylesspalace.tusky.util
import org.junit.Assert.*
import org.junit.Assert.assertEquals
import org.junit.Test
class EmojiCompatFontTest {
@ -9,39 +9,39 @@ class EmojiCompatFontTest {
fun testCompareVersions() {
assertEquals(
-1,
EmojiCompatFont.compareVersions(
listOf(0),
listOf(1, 2, 3)
)
-1,
EmojiCompatFont.compareVersions(
listOf(0),
listOf(1, 2, 3)
)
)
assertEquals(
1,
EmojiCompatFont.compareVersions(
listOf(1, 2, 3),
listOf(0, 0, 0)
)
1,
EmojiCompatFont.compareVersions(
listOf(1, 2, 3),
listOf(0, 0, 0)
)
)
assertEquals(
-1,
EmojiCompatFont.compareVersions(
listOf(1, 0, 1),
listOf(1, 1, 0)
)
-1,
EmojiCompatFont.compareVersions(
listOf(1, 0, 1),
listOf(1, 1, 0)
)
)
assertEquals(
0,
EmojiCompatFont.compareVersions(
listOf(4, 5, 6),
listOf(4, 5, 6)
)
0,
EmojiCompatFont.compareVersions(
listOf(4, 5, 6),
listOf(4, 5, 6)
)
)
assertEquals(
0,
EmojiCompatFont.compareVersions(
listOf(0, 0),
listOf(0)
)
0,
EmojiCompatFont.compareVersions(
listOf(0, 0),
listOf(0)
)
)
}
}
}

View file

@ -23,11 +23,13 @@ class RickRollTest {
@Test
fun testShouldRickRoll() {
listOf("gab.Com", "social.gab.ai", "whatever.GAB.com").forEach {
rollableDomain -> assertTrue(shouldRickRoll(activity, rollableDomain))
rollableDomain ->
assertTrue(shouldRickRoll(activity, rollableDomain))
}
listOf("chaos.social", "notgab.com").forEach {
notRollableDomain -> assertFalse(shouldRickRoll(activity, notRollableDomain))
notRollableDomain ->
assertFalse(shouldRickRoll(activity, notRollableDomain))
}
}
}

View file

@ -12,7 +12,6 @@ import org.robolectric.annotation.Config
@RunWith(AndroidJUnit4::class)
class SmartLengthInputFilterTest {
@Test
fun shouldNotTrimStatusWithLength0() {
assertFalse(shouldTrimStatus(SpannableStringBuilder("")))
@ -25,56 +24,80 @@ class SmartLengthInputFilterTest {
@Test
fun shouldNotTrimStatusWithLength500() {
assertFalse(shouldTrimStatus(SpannableStringBuilder("u1Pc5TbDVYFnzIdqlQkb3xuZ2S61fFD1K4u" +
"cb3q40dnELjAsWxnSH59jqly249Spr0Vod029zfwFHYQ0PkBCNQ7tuk90h6aY661RFC7vhIKJna4yDYOBFj" +
"RR9u0CsUa6vlgEE5yUrk5LKn3bmnnzRCXmU6HyT2bFu256qoUWbmMQ6GFXUXjO28tru8Q3UiXKLgrotKdSH" +
"mmqPwQgtatbMykTW4RZdKTE46nzlbD3mXHdWQkf4uVPYhVT1CMvVbCPMaimfQ0xuU8CpxyVqA8a6lCL3YX9" +
"pNnZjD7DoCg2FCejANnjXsTF6vuqPSHjQZDjy696nSAFy95p9kBeJkc70fHzX5TcfUqSaNtvx3LUtpIkwh4" +
"q2EYmKISPsxlANaspEMPuX6r9fSACiEwmHsitZkp4RMKZq5NqRsGPCiAXcNIN3jj9fCYVGxUwVxVeCescDG" +
"5naEEszIR3FT1RO4MSn9c2ZZi0UdLizd8ciJAIuwwmcVyYyyM4")))
assertFalse(
shouldTrimStatus(
SpannableStringBuilder(
"u1Pc5TbDVYFnzIdqlQkb3xuZ2S61fFD1K4u" +
"cb3q40dnELjAsWxnSH59jqly249Spr0Vod029zfwFHYQ0PkBCNQ7tuk90h6aY661RFC7vhIKJna4yDYOBFj" +
"RR9u0CsUa6vlgEE5yUrk5LKn3bmnnzRCXmU6HyT2bFu256qoUWbmMQ6GFXUXjO28tru8Q3UiXKLgrotKdSH" +
"mmqPwQgtatbMykTW4RZdKTE46nzlbD3mXHdWQkf4uVPYhVT1CMvVbCPMaimfQ0xuU8CpxyVqA8a6lCL3YX9" +
"pNnZjD7DoCg2FCejANnjXsTF6vuqPSHjQZDjy696nSAFy95p9kBeJkc70fHzX5TcfUqSaNtvx3LUtpIkwh4" +
"q2EYmKISPsxlANaspEMPuX6r9fSACiEwmHsitZkp4RMKZq5NqRsGPCiAXcNIN3jj9fCYVGxUwVxVeCescDG" +
"5naEEszIR3FT1RO4MSn9c2ZZi0UdLizd8ciJAIuwwmcVyYyyM4"
)
)
)
}
@Test
fun shouldNotTrimStatusWithLength666() {
assertFalse(shouldTrimStatus(SpannableStringBuilder("hIAXqY7DYynQGcr3zxcjCjNZFcdwAzwnWv" +
"NHONtT55rO3r2faeMRZLTG3JlOshq8M1mtLRn0Ca8M9w82nIjJDm1jspxhFc4uLFpOjb9Gm2BokgRftA8ih" +
"pv6wvMwF5Fg8V4qa8GcXcqt1q7S9g09S3PszCXG4wnrR6dp8GGc9TqVArgmoLSc9EVREIRcLPdzkhV1WWM9" +
"ZWw7josT27BfBdMWk0ckQkClHAyqLtlKZ84WamxK2q3NtHR5gr7ohIjU8CZoKDjv1bA8ZI8wBesyOhqbmHf" +
"0Ltypq39WKZ63VTGSf5Dd9kuTEjlXJtxZD1DXH4FFplY45DH5WuQ61Ih5dGx0WFEEVb1L3aku3Ht8rKG7YU" +
"bOPeanGMBmeI9YRdiD4MmuTUkJfVLkA9rrpRtiEYw8RS3Jf9iqDkTpES9aLQODMip5xTsT4liIcUbLo0Z1d" +
"NhHk7YKubigNQIm1mmh2iU3Q0ZEm8TraDpKu2o27gIwSKbAnTllrOokprPxWQWDVrN9bIliwGHzgTKPI5z8" +
"gUybaqewxUYe12GvxnzqpfPFvvHricyZAC9i6Fkil5VmFdae75tLFWRBfE8Wfep0dSjL751m2yzvzZTc6uZ" +
"RTcUiipvl42DaY8Z5eG2b6xPVhvXshMORvHzwhJhPkHSbnwXX5K")))
assertFalse(
shouldTrimStatus(
SpannableStringBuilder(
"hIAXqY7DYynQGcr3zxcjCjNZFcdwAzwnWv" +
"NHONtT55rO3r2faeMRZLTG3JlOshq8M1mtLRn0Ca8M9w82nIjJDm1jspxhFc4uLFpOjb9Gm2BokgRftA8ih" +
"pv6wvMwF5Fg8V4qa8GcXcqt1q7S9g09S3PszCXG4wnrR6dp8GGc9TqVArgmoLSc9EVREIRcLPdzkhV1WWM9" +
"ZWw7josT27BfBdMWk0ckQkClHAyqLtlKZ84WamxK2q3NtHR5gr7ohIjU8CZoKDjv1bA8ZI8wBesyOhqbmHf" +
"0Ltypq39WKZ63VTGSf5Dd9kuTEjlXJtxZD1DXH4FFplY45DH5WuQ61Ih5dGx0WFEEVb1L3aku3Ht8rKG7YU" +
"bOPeanGMBmeI9YRdiD4MmuTUkJfVLkA9rrpRtiEYw8RS3Jf9iqDkTpES9aLQODMip5xTsT4liIcUbLo0Z1d" +
"NhHk7YKubigNQIm1mmh2iU3Q0ZEm8TraDpKu2o27gIwSKbAnTllrOokprPxWQWDVrN9bIliwGHzgTKPI5z8" +
"gUybaqewxUYe12GvxnzqpfPFvvHricyZAC9i6Fkil5VmFdae75tLFWRBfE8Wfep0dSjL751m2yzvzZTc6uZ" +
"RTcUiipvl42DaY8Z5eG2b6xPVhvXshMORvHzwhJhPkHSbnwXX5K"
)
)
)
}
@Test
fun shouldTrimStatusWithLength667() {
assertTrue(shouldTrimStatus(SpannableStringBuilder("hIAXqY7DYynQGcr3zxcjCjNZFcdwAzwnWv" +
"NHONtT55rO3r2faeMRZLTG3JlOshq8M1mtLRn0Ca8M9w82nIjJDm1jspxhFc4uLFpOjb9Gm2BokgRftA8ih" +
"pv6wvMwF5Fg8V4qa8GcXcqt1q7S9g09S3PszCXG4wnrR6dp8GGc9TqVArgmoLSc9EVREIRcLPdzkhV1WWM9" +
"ZWw7josT27BfBdMWk0ckQkClHAyqLtlKZ84WamxK2q3NtHR5gr7ohIjU8CZoKDjv1bA8ZI8wBesyOhqbmHf" +
"0Ltypq39WKZ63VTGSf5Dd9kuTEjlXJtxZD1DXH4FFplY45DH5WuQ61Ih5dGx0WFEEVb1L3aku3Ht8rKG7YU" +
"bOPeanGMBmeI9YRdiD4MmuTUkJfVLkA9rrpRtiEYw8RS3Jf9iqDkTpES9aLQODMip5xTsT4liIcUbLo0Z1d" +
"NhHk7YKubigNQIm1mmh2iU3Q0ZEm8TraDpKu2o27gIwSKbAnTllrOokprPxWQWDVrN9bIliwGHzgTKPI5z8" +
"gUybaqewxUYe12GvxnzqpfPFvvHricyZAC9i6Fkil5VmFdae75tLFWRBfE8Wfep0dSjL751m2yzvzZTc6uZ" +
"RTcUiipvl42DaY8Z5eG2b6xPVhvXshMORvHzwhJhPkHSbnwXX5K1")))
assertTrue(
shouldTrimStatus(
SpannableStringBuilder(
"hIAXqY7DYynQGcr3zxcjCjNZFcdwAzwnWv" +
"NHONtT55rO3r2faeMRZLTG3JlOshq8M1mtLRn0Ca8M9w82nIjJDm1jspxhFc4uLFpOjb9Gm2BokgRftA8ih" +
"pv6wvMwF5Fg8V4qa8GcXcqt1q7S9g09S3PszCXG4wnrR6dp8GGc9TqVArgmoLSc9EVREIRcLPdzkhV1WWM9" +
"ZWw7josT27BfBdMWk0ckQkClHAyqLtlKZ84WamxK2q3NtHR5gr7ohIjU8CZoKDjv1bA8ZI8wBesyOhqbmHf" +
"0Ltypq39WKZ63VTGSf5Dd9kuTEjlXJtxZD1DXH4FFplY45DH5WuQ61Ih5dGx0WFEEVb1L3aku3Ht8rKG7YU" +
"bOPeanGMBmeI9YRdiD4MmuTUkJfVLkA9rrpRtiEYw8RS3Jf9iqDkTpES9aLQODMip5xTsT4liIcUbLo0Z1d" +
"NhHk7YKubigNQIm1mmh2iU3Q0ZEm8TraDpKu2o27gIwSKbAnTllrOokprPxWQWDVrN9bIliwGHzgTKPI5z8" +
"gUybaqewxUYe12GvxnzqpfPFvvHricyZAC9i6Fkil5VmFdae75tLFWRBfE8Wfep0dSjL751m2yzvzZTc6uZ" +
"RTcUiipvl42DaY8Z5eG2b6xPVhvXshMORvHzwhJhPkHSbnwXX5K1"
)
)
)
}
@Test
fun shouldTrimStatusWithLength1000() {
assertTrue(shouldTrimStatus(SpannableStringBuilder("u1Pc5TbDVYFnzIdqlQkb3xuZ2S61fFD1K4u" +
"cb3q40dnELjAsWxnSH59jqly249Spr0Vod029zfwFHYQ0PkBCNQ7tuk90h6aY661RFC7vhIKJna4yDYOBFj" +
"RR9u0CsUa6vlgEE5yUrk5LKn3bmnnzRCXmU6HyT2bFu256qoUWbmMQ6GFXUXjO28tru8Q3UiXKLgrotKdSH" +
"mmqPwQgtatbMykTW4RZdKTE46nzlbD3mXHdWQkf4uVPYhVT1CMvVbCPMaimfQ0xuU8CpxyVqA8a6lCL3YX9" +
"pNnZjD7DoCg2FCejANnjXsTF6vuqPSHjQZDjy696nSAFy95p9kBeJkc70fHzX5TcfUqSaNtvx3LUtpIkwh4" +
"q2EYmKISPsxlANaspEMPuX6r9fSACiEwmHsitZkp4RMKZq5NqRsGPCiAXcNIN3jj9fCYVGxUwVxVeCescDG" +
"5naEEszIR3FT1RO4MSn9c2ZZi0UdLizd8ciJAIuwwmcVyYyyM4"+
"u1Pc5TbDVYFnzIdqlQkb3xuZ2S61fFD1K4u" +
"cb3q40dnELjAsWxnSH59jqly249Spr0Vod029zfwFHYQ0PkBCNQ7tuk90h6aY661RFC7vhIKJna4yDYOBFj" +
"RR9u0CsUa6vlgEE5yUrk5LKn3bmnnzRCXmU6HyT2bFu256qoUWbmMQ6GFXUXjO28tru8Q3UiXKLgrotKdSH" +
"mmqPwQgtatbMykTW4RZdKTE46nzlbD3mXHdWQkf4uVPYhVT1CMvVbCPMaimfQ0xuU8CpxyVqA8a6lCL3YX9" +
"pNnZjD7DoCg2FCejANnjXsTF6vuqPSHjQZDjy696nSAFy95p9kBeJkc70fHzX5TcfUqSaNtvx3LUtpIkwh4" +
"q2EYmKISPsxlANaspEMPuX6r9fSACiEwmHsitZkp4RMKZq5NqRsGPCiAXcNIN3jj9fCYVGxUwVxVeCescDG" +
"5naEEszIR3FT1RO4MSn9c2ZZi0UdLizd8ciJAIuwwmcVyYyyM4")))
assertTrue(
shouldTrimStatus(
SpannableStringBuilder(
"u1Pc5TbDVYFnzIdqlQkb3xuZ2S61fFD1K4u" +
"cb3q40dnELjAsWxnSH59jqly249Spr0Vod029zfwFHYQ0PkBCNQ7tuk90h6aY661RFC7vhIKJna4yDYOBFj" +
"RR9u0CsUa6vlgEE5yUrk5LKn3bmnnzRCXmU6HyT2bFu256qoUWbmMQ6GFXUXjO28tru8Q3UiXKLgrotKdSH" +
"mmqPwQgtatbMykTW4RZdKTE46nzlbD3mXHdWQkf4uVPYhVT1CMvVbCPMaimfQ0xuU8CpxyVqA8a6lCL3YX9" +
"pNnZjD7DoCg2FCejANnjXsTF6vuqPSHjQZDjy696nSAFy95p9kBeJkc70fHzX5TcfUqSaNtvx3LUtpIkwh4" +
"q2EYmKISPsxlANaspEMPuX6r9fSACiEwmHsitZkp4RMKZq5NqRsGPCiAXcNIN3jj9fCYVGxUwVxVeCescDG" +
"5naEEszIR3FT1RO4MSn9c2ZZi0UdLizd8ciJAIuwwmcVyYyyM4" +
"u1Pc5TbDVYFnzIdqlQkb3xuZ2S61fFD1K4u" +
"cb3q40dnELjAsWxnSH59jqly249Spr0Vod029zfwFHYQ0PkBCNQ7tuk90h6aY661RFC7vhIKJna4yDYOBFj" +
"RR9u0CsUa6vlgEE5yUrk5LKn3bmnnzRCXmU6HyT2bFu256qoUWbmMQ6GFXUXjO28tru8Q3UiXKLgrotKdSH" +
"mmqPwQgtatbMykTW4RZdKTE46nzlbD3mXHdWQkf4uVPYhVT1CMvVbCPMaimfQ0xuU8CpxyVqA8a6lCL3YX9" +
"pNnZjD7DoCg2FCejANnjXsTF6vuqPSHjQZDjy696nSAFy95p9kBeJkc70fHzX5TcfUqSaNtvx3LUtpIkwh4" +
"q2EYmKISPsxlANaspEMPuX6r9fSACiEwmHsitZkp4RMKZq5NqRsGPCiAXcNIN3jj9fCYVGxUwVxVeCescDG" +
"5naEEszIR3FT1RO4MSn9c2ZZi0UdLizd8ciJAIuwwmcVyYyyM4"
)
)
)
}
}

View file

@ -7,24 +7,24 @@ import org.junit.runners.Parameterized
@RunWith(Parameterized::class)
class VersionUtilsTest(
private val versionString: String,
private val supportsScheduledToots: Boolean
private val versionString: String,
private val supportsScheduledToots: Boolean
) {
companion object {
@JvmStatic
@Parameterized.Parameters
fun data() = listOf(
arrayOf("2.0.0", false),
arrayOf("2a9a0", false),
arrayOf("1.0", false),
arrayOf("error", false),
arrayOf("", false),
arrayOf("2.6.9", false),
arrayOf("2.7.0", true),
arrayOf("2.00008.0", true),
arrayOf("2.7.2 (compatible; Pleroma 1.0.0-1168-ge18c7866-pleroma-dot-site)", true),
arrayOf("3.0.1", true)
arrayOf("2.0.0", false),
arrayOf("2a9a0", false),
arrayOf("1.0", false),
arrayOf("error", false),
arrayOf("", false),
arrayOf("2.6.9", false),
arrayOf("2.7.0", true),
arrayOf("2.00008.0", true),
arrayOf("2.7.2 (compatible; Pleroma 1.0.0-1168-ge18c7866-pleroma-dot-site)", true),
arrayOf("3.0.1", true)
)
}
@ -32,5 +32,4 @@ class VersionUtilsTest(
fun testVersionUtils() {
assertEquals(VersionUtils(versionString).supportsScheduledToots(), supportsScheduledToots)
}
}
}