diff --git a/lib/src/main/java/de/kuschku/libquassel/quassel/syncables/BufferViewConfig.kt b/lib/src/main/java/de/kuschku/libquassel/quassel/syncables/BufferViewConfig.kt index 2a09dfa3567ca9970ce3b72094dbc8b2c769ae45..d626de13fb962f361426ca313ebbcf36fa58e6cc 100644 --- a/lib/src/main/java/de/kuschku/libquassel/quassel/syncables/BufferViewConfig.kt +++ b/lib/src/main/java/de/kuschku/libquassel/quassel/syncables/BufferViewConfig.kt @@ -26,6 +26,7 @@ import de.kuschku.libquassel.quassel.syncables.interfaces.IBufferViewConfig import de.kuschku.libquassel.session.SignalProxy import de.kuschku.libquassel.util.flag.hasFlag import de.kuschku.libquassel.util.helper.clampOf +import de.kuschku.libquassel.util.irc.IrcCaseMappers import io.reactivex.Observable import io.reactivex.subjects.BehaviorSubject @@ -327,12 +328,12 @@ class BufferViewConfig constructor( fun insertBufferSorted(info: BufferInfo, bufferSyncer: BufferSyncer) { if (!_buffers.contains(info.bufferId)) { - val position = if (_sortAlphabetically) { - val sortedBuffers = _buffers.mapNotNull { bufferSyncer.bufferInfo(it)?.bufferName } - -sortedBuffers.binarySearch(info.bufferName) - } else { - _buffers.size - } + val element = IrcCaseMappers.unicode.toLowerCaseNullable(info.bufferName) + val position = + if (_sortAlphabetically) -_buffers.mapNotNull { + IrcCaseMappers.unicode.toLowerCaseNullable(bufferSyncer.bufferInfo(it)?.bufferName) + }.binarySearch(element) - 1 + else _buffers.size requestAddBuffer(info.bufferId, position) } } diff --git a/lib/src/test/java/de/kuschku/libquassel/integration/BufferViewConfigTest.kt b/lib/src/test/java/de/kuschku/libquassel/integration/BufferViewConfigTest.kt new file mode 100644 index 0000000000000000000000000000000000000000..c79d32a43ce3b87f5a5fbed6df557364f56e63c0 --- /dev/null +++ b/lib/src/test/java/de/kuschku/libquassel/integration/BufferViewConfigTest.kt @@ -0,0 +1,54 @@ +/* + * 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.libquassel.integration + +import de.kuschku.libquassel.protocol.BufferId +import de.kuschku.libquassel.protocol.QType +import de.kuschku.libquassel.protocol.QVariant_ +import de.kuschku.libquassel.protocol.Type +import de.kuschku.libquassel.util.TestSession +import de.kuschku.libquassel.util.setupTestSession +import de.kuschku.libquassel.util.with +import org.junit.Before +import org.junit.Test + +class BufferViewConfigTest { + lateinit var session: TestSession + + @Before + fun setUp() { + session = setupTestSession() + } + + // Test positioning of added channel + @Test + fun addChannelAutomatically() = session.with { + val bufferViewConfig = bufferViewManager.bufferViewConfig(0)!! + + ensure { + bufferViewConfig.insertBufferSorted(bufferSyncer.bufferInfo(BufferId(4))!!, bufferSyncer) + }.does { + callSync(bufferViewConfig, "requestAddBuffer", listOf( + QVariant_.of(BufferId(4), QType.BufferId), + QVariant_.of(2, Type.Int) + )) + } + } +} diff --git a/lib/src/test/java/de/kuschku/libquassel/util/SetupTests.kt b/lib/src/test/java/de/kuschku/libquassel/util/SetupTests.kt index 1ba012c65fe7b1c6ec29db7eb6b6568b561371a6..46b000aaf20f84c9dc1a6a1fd7dc6f95a539f72e 100644 --- a/lib/src/test/java/de/kuschku/libquassel/util/SetupTests.kt +++ b/lib/src/test/java/de/kuschku/libquassel/util/SetupTests.kt @@ -32,6 +32,15 @@ fun TestSession.with(f: TestSession.() -> Unit) = f.invoke(this) fun withTestSession(f: TestSession.() -> Unit) = f.invoke(setupTestSession()) fun setupTestSession() = TestSession().provideTestData { + bufferViewConfigs = listOf( + buildBufferViewConfig(0) { + setBufferViewName("All Chats") + addBuffer(BufferId(1), 0) + addBuffer(BufferId(2), 1) + addBuffer(BufferId(3), 2) + } + ) + identities = listOf( buildIdentity(IdentityId(1)) { setIdentityName("Default Identity") diff --git a/lib/src/test/java/de/kuschku/libquassel/util/TestSession.kt b/lib/src/test/java/de/kuschku/libquassel/util/TestSession.kt index b020902d19b33641413606ddcaf30f2764415c4b..70ad2689b9c2ae5f0c8d56b42216c7670be15ec7 100644 --- a/lib/src/test/java/de/kuschku/libquassel/util/TestSession.kt +++ b/lib/src/test/java/de/kuschku/libquassel/util/TestSession.kt @@ -219,6 +219,13 @@ class TestSession : ProtocolHandler({ throw it }), ISession { synchronize(network) } + fun addBufferViewConfig(bufferViewConfig: BufferViewConfig, initialize: Boolean = false) { + if (!initialize) + bufferViewConfig.initialized = true + bufferViewManager.addBufferViewConfig(bufferViewConfig) + synchronize(bufferViewConfig) + } + override fun removeNetwork(networkId: NetworkId) { val network = networks.remove(networkId) stopSynchronize(network) @@ -244,6 +251,13 @@ class TestSession : ProtocolHandler({ throw it }), ISession { return identity } + fun buildBufferViewConfig(bufferViewConfigId: Int, + f: (BufferViewConfig.() -> Unit)? = null): BufferViewConfig { + val bufferViewConfig = BufferViewConfig(bufferViewConfigId, proxy) + f?.invoke(bufferViewConfig) + return bufferViewConfig + } + data class BufferTestData( val bufferInfo: BufferInfo, val activity: Message_Types = Message_Type.of(), @@ -254,11 +268,17 @@ class TestSession : ProtocolHandler({ throw it }), ISession { data class TestData( val session: TestSession, + var bufferViewConfigs: List<BufferViewConfig> = emptyList(), var networks: List<Network> = emptyList(), var identities: List<Identity> = emptyList(), var buffers: List<BufferTestData> = emptyList(), var aliases: List<IAliasManager.Alias> = emptyList() ) { + fun buildBufferViewConfig(bufferViewConfigId: Int, + f: (BufferViewConfig.() -> Unit)? = null): BufferViewConfig { + return session.buildBufferViewConfig(bufferViewConfigId, f) + } + fun buildNetwork(networkId: NetworkId, f: (Network.() -> Unit)? = null): Network { return session.buildNetwork(networkId, f) } @@ -287,6 +307,9 @@ class TestSession : ProtocolHandler({ throw it }), ISession { fun provideTestData(f: TestData.() -> Unit): TestSession { val data = TestData(this) f.invoke(data) + for (bufferViewConfig in data.bufferViewConfigs) { + addBufferViewConfig(bufferViewConfig) + } for (network in data.networks) { addNetwork(network) }