From 57beacaf3314d8b051a52eccc923488f0dcd2c8c Mon Sep 17 00:00:00 2001 From: Janne Koschinski <janne@kuschku.de> Date: Mon, 12 Aug 2019 12:15:35 +0200 Subject: [PATCH] Fixes crash cluster 2e777e9c --- viewmodel/build.gradle.kts | 4 +- .../quasseldroid/viewmodel/ChatViewModel.kt | 18 ++++---- .../viewmodel/ChatViewModelTest.kt | 46 +++++++++++++++++++ 3 files changed, 59 insertions(+), 9 deletions(-) create mode 100644 viewmodel/src/test/java/de/kuschku/quasseldroid/viewmodel/ChatViewModelTest.kt diff --git a/viewmodel/build.gradle.kts b/viewmodel/build.gradle.kts index 2130a6a62..45aae2105 100644 --- a/viewmodel/build.gradle.kts +++ b/viewmodel/build.gradle.kts @@ -39,7 +39,7 @@ android { lintOptions { isWarningsAsErrors = true - setLintConfig(file("../lint.xml")) + lintConfig = file("../lint.xml") } } @@ -65,4 +65,6 @@ dependencies { implementation(project(":lib")) { exclude(group = "org.threeten", module = "threetenbp") } + + testImplementation("junit", "junit", "4.12") } diff --git a/viewmodel/src/main/java/de/kuschku/quasseldroid/viewmodel/ChatViewModel.kt b/viewmodel/src/main/java/de/kuschku/quasseldroid/viewmodel/ChatViewModel.kt index 2e182483a..d2d70291a 100644 --- a/viewmodel/src/main/java/de/kuschku/quasseldroid/viewmodel/ChatViewModel.kt +++ b/viewmodel/src/main/java/de/kuschku/quasseldroid/viewmodel/ChatViewModel.kt @@ -150,14 +150,12 @@ open class ChatViewModel : QuasselViewModel() { ) } - private fun recentMessagesChange(value: Int) { - val current = recentlySentMessageIndex.safeValue - val size = recentlySentMessages.safeValue.size - val nextValue = current + value - recentlySentMessageIndex.onNext( - if (nextValue < 0) -1 - else (size + current + value) % size - ) + private fun recentMessagesChange(change: Int) { + recentlySentMessageIndex.onNext(recentMessagesChangeInternal( + recentlySentMessageIndex.safeValue, + recentlySentMessages.safeValue.size, + change + )) } fun recentMessagesValue() = @@ -197,5 +195,9 @@ open class ChatViewModel : QuasselViewModel() { const val KEY_SELECTED_BUFFER_ID = "model_chat_selectedBufferId" const val MAX_RECENT_MESSAGES = 20 + + fun recentMessagesChangeInternal(current: Int, size: Int, change: Int) = + if (current + change < 0 || size == 0) -1 + else (size + current + change) % size } } diff --git a/viewmodel/src/test/java/de/kuschku/quasseldroid/viewmodel/ChatViewModelTest.kt b/viewmodel/src/test/java/de/kuschku/quasseldroid/viewmodel/ChatViewModelTest.kt new file mode 100644 index 000000000..92791cae3 --- /dev/null +++ b/viewmodel/src/test/java/de/kuschku/quasseldroid/viewmodel/ChatViewModelTest.kt @@ -0,0 +1,46 @@ +/* + * Quasseldroid - Quassel client for Android + * + * Copyright (c) 2019 Janne Mareike Koschinski + * Copyright (c) 2019 The Quassel Project + * + * This program is free software: you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 3 as published + * by the Free Software Foundation. + * + * This program 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 this program. If not, see <http://www.gnu.org/licenses/>. + */ + +package de.kuschku.quasseldroid.viewmodel + +import de.kuschku.quasseldroid.viewmodel.ChatViewModel.Companion.recentMessagesChangeInternal +import org.junit.Assert.assertEquals +import org.junit.Test + +class ChatViewModelTest { + @Test + fun testRecentMessagesChange() { + assertEquals(recentMessagesChangeInternal(0, 0, -1), -1) + assertEquals(recentMessagesChangeInternal(0, 0, +1), -1) + assertEquals(recentMessagesChangeInternal(-1, 0, -1), -1) + assertEquals(recentMessagesChangeInternal(-1, 0, +1), -1) + assertEquals(recentMessagesChangeInternal(1, 0, -1), -1) + assertEquals(recentMessagesChangeInternal(1, 0, +1), -1) + + + assertEquals(recentMessagesChangeInternal(0, 5, -1), -1) + assertEquals(recentMessagesChangeInternal(0, 5, +1), 1) + + assertEquals(recentMessagesChangeInternal(1, 5, -1), 0) + assertEquals(recentMessagesChangeInternal(1, 5, +1), 2) + + assertEquals(recentMessagesChangeInternal(4, 5, -1), 3) + assertEquals(recentMessagesChangeInternal(4, 5, +1), 0) + } +} -- GitLab