Merge pull request #5855 from element-hq/renovate/org.matrix.rustcomponents-sdk-android-25.x

fix(deps): update dependency org.matrix.rustcomponents:sdk-android to v25.12.4
This commit is contained in:
Benoit Marty 2025-12-08 14:24:24 +01:00 committed by GitHub
commit ad366c63ec
34 changed files with 181 additions and 143 deletions

View file

@ -177,7 +177,7 @@ test_detekt_test = { module = "io.gitlab.arturbosch.detekt:detekt-test", version
# https://github.com/matrix-org/matrix-rust-components-kotlin/commits/main/sdk/sdk-android/src/main/kotlin/org/matrix/rustcomponents/sdk/matrix_sdk_ffi.kt # https://github.com/matrix-org/matrix-rust-components-kotlin/commits/main/sdk/sdk-android/src/main/kotlin/org/matrix/rustcomponents/sdk/matrix_sdk_ffi.kt
# All new features should not be implemented in the pull request that upgrades the version, developers should # All new features should not be implemented in the pull request that upgrades the version, developers should
# only fix API breaks and may add some TODOs. # only fix API breaks and may add some TODOs.
matrix_sdk = "org.matrix.rustcomponents:sdk-android:25.12.2" matrix_sdk = "org.matrix.rustcomponents:sdk-android:25.12.4"
# Others # Others
coil = { module = "io.coil-kt.coil3:coil", version.ref = "coil" } coil = { module = "io.coil-kt.coil3:coil", version.ref = "coil" }

View file

@ -22,6 +22,7 @@ import io.element.android.libraries.matrix.impl.paths.SessionPaths
import io.element.android.libraries.matrix.impl.paths.getSessionPaths import io.element.android.libraries.matrix.impl.paths.getSessionPaths
import io.element.android.libraries.matrix.impl.proxy.ProxyProvider import io.element.android.libraries.matrix.impl.proxy.ProxyProvider
import io.element.android.libraries.matrix.impl.room.TimelineEventTypeFilterFactory import io.element.android.libraries.matrix.impl.room.TimelineEventTypeFilterFactory
import io.element.android.libraries.matrix.impl.storage.SqliteStoreBuilderProvider
import io.element.android.libraries.matrix.impl.util.anonymizedTokens import io.element.android.libraries.matrix.impl.util.anonymizedTokens
import io.element.android.libraries.network.useragent.UserAgentProvider import io.element.android.libraries.network.useragent.UserAgentProvider
import io.element.android.libraries.sessionstorage.api.SessionData import io.element.android.libraries.sessionstorage.api.SessionData
@ -36,7 +37,6 @@ import org.matrix.rustcomponents.sdk.RequestConfig
import org.matrix.rustcomponents.sdk.Session import org.matrix.rustcomponents.sdk.Session
import org.matrix.rustcomponents.sdk.SlidingSyncVersion import org.matrix.rustcomponents.sdk.SlidingSyncVersion
import org.matrix.rustcomponents.sdk.SlidingSyncVersionBuilder import org.matrix.rustcomponents.sdk.SlidingSyncVersionBuilder
import org.matrix.rustcomponents.sdk.SqliteStoreBuilder
import org.matrix.rustcomponents.sdk.use import org.matrix.rustcomponents.sdk.use
import timber.log.Timber import timber.log.Timber
import uniffi.matrix_sdk_base.MediaRetentionPolicy import uniffi.matrix_sdk_base.MediaRetentionPolicy
@ -62,6 +62,7 @@ class RustMatrixClientFactory(
private val featureFlagService: FeatureFlagService, private val featureFlagService: FeatureFlagService,
private val timelineEventTypeFilterFactory: TimelineEventTypeFilterFactory, private val timelineEventTypeFilterFactory: TimelineEventTypeFilterFactory,
private val clientBuilderProvider: ClientBuilderProvider, private val clientBuilderProvider: ClientBuilderProvider,
private val sqliteStoreBuilderProvider: SqliteStoreBuilderProvider,
) { ) {
private val sessionDelegate = RustClientSessionDelegate(sessionStore, appCoroutineScope, coroutineDispatchers) private val sessionDelegate = RustClientSessionDelegate(sessionStore, appCoroutineScope, coroutineDispatchers)
@ -126,12 +127,11 @@ class RustMatrixClientFactory(
slidingSyncType: ClientBuilderSlidingSync, slidingSyncType: ClientBuilderSlidingSync,
): ClientBuilder { ): ClientBuilder {
return clientBuilderProvider.provide() return clientBuilderProvider.provide()
.sqliteStore( .run {
SqliteStoreBuilder( sqliteStoreBuilderProvider.provide(sessionPaths)
dataPath = sessionPaths.fileDirectory.absolutePath, .passphrase(passphrase)
cachePath = sessionPaths.cacheDirectory.absolutePath, .setupClientBuilder(this)
).passphrase(passphrase) }
)
.setSessionDelegate(sessionDelegate) .setSessionDelegate(sessionDelegate)
.userAgent(userAgentProvider.provide()) .userAgent(userAgentProvider.provide())
.addRootCertificates(userCertificatesProvider.provides()) .addRootCertificates(userCertificatesProvider.provides())

View file

@ -0,0 +1,35 @@
/*
* Copyright (c) 2025 Element Creations Ltd.
*
* SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial.
* Please see LICENSE files in the repository root for full details.
*/
package io.element.android.libraries.matrix.impl.storage
import io.element.android.libraries.matrix.impl.paths.SessionPaths
import org.matrix.rustcomponents.sdk.ClientBuilder
import org.matrix.rustcomponents.sdk.SqliteStoreBuilder as SdkSqliteStoreBuilder
interface SqliteStoreBuilder {
fun passphrase(passphrase: String?): SqliteStoreBuilder
fun setupClientBuilder(clientBuilder: ClientBuilder): ClientBuilder
}
class RustSqliteStoreBuilder(
private val sessionPaths: SessionPaths,
) : SqliteStoreBuilder {
private var inner = SdkSqliteStoreBuilder(
dataPath = sessionPaths.fileDirectory.absolutePath,
cachePath = sessionPaths.cacheDirectory.absolutePath,
)
override fun passphrase(passphrase: String?): SqliteStoreBuilder {
inner = inner.passphrase(passphrase)
return this
}
override fun setupClientBuilder(clientBuilder: ClientBuilder): ClientBuilder {
return clientBuilder.sqliteStore(this.inner)
}
}

View file

@ -0,0 +1,23 @@
/*
* Copyright (c) 2025 Element Creations Ltd.
*
* SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial.
* Please see LICENSE files in the repository root for full details.
*/
package io.element.android.libraries.matrix.impl.storage
import dev.zacsweers.metro.AppScope
import dev.zacsweers.metro.ContributesBinding
import io.element.android.libraries.matrix.impl.paths.SessionPaths
interface SqliteStoreBuilderProvider {
fun provide(sessionPaths: SessionPaths): SqliteStoreBuilder
}
@ContributesBinding(AppScope::class)
class RustSqliteStoreBuilderProvider : SqliteStoreBuilderProvider {
override fun provide(sessionPaths: SessionPaths): SqliteStoreBuilder {
return RustSqliteStoreBuilder(sessionPaths)
}
}

View file

@ -0,0 +1,19 @@
/*
* Copyright (c) 2025 Element Creations Ltd.
*
* SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial.
* Please see LICENSE files in the repository root for full details.
*/
package io.element.android.libraries.matrix.impl
import org.matrix.rustcomponents.sdk.NoHandle
import org.matrix.rustcomponents.sdk.SqliteStoreBuilder
class FakeFfiSqliteStoreBuilder : SqliteStoreBuilder(NoHandle) {
override fun cacheSize(cacheSize: UInt?): SqliteStoreBuilder = this
override fun journalSizeLimit(limit: UInt?): SqliteStoreBuilder = this
override fun passphrase(passphrase: String?): SqliteStoreBuilder = this
override fun poolMaxSize(poolMaxSize: UInt?): SqliteStoreBuilder = this
override fun systemIsMemoryConstrained(): SqliteStoreBuilder = this
}

View file

@ -14,6 +14,7 @@ import io.element.android.libraries.matrix.api.core.SessionId
import io.element.android.libraries.matrix.impl.auth.FakeProxyProvider import io.element.android.libraries.matrix.impl.auth.FakeProxyProvider
import io.element.android.libraries.matrix.impl.auth.FakeUserCertificatesProvider import io.element.android.libraries.matrix.impl.auth.FakeUserCertificatesProvider
import io.element.android.libraries.matrix.impl.room.FakeTimelineEventTypeFilterFactory import io.element.android.libraries.matrix.impl.room.FakeTimelineEventTypeFilterFactory
import io.element.android.libraries.matrix.impl.storage.FakeSqliteStoreBuilderProvider
import io.element.android.libraries.network.useragent.SimpleUserAgentProvider import io.element.android.libraries.network.useragent.SimpleUserAgentProvider
import io.element.android.libraries.sessionstorage.api.SessionStore import io.element.android.libraries.sessionstorage.api.SessionStore
import io.element.android.libraries.sessionstorage.test.InMemorySessionStore import io.element.android.libraries.sessionstorage.test.InMemorySessionStore
@ -23,11 +24,9 @@ import io.element.android.services.toolbox.test.systemclock.FakeSystemClock
import io.element.android.tests.testutils.testCoroutineDispatchers import io.element.android.tests.testutils.testCoroutineDispatchers
import kotlinx.coroutines.test.TestScope import kotlinx.coroutines.test.TestScope
import kotlinx.coroutines.test.runTest import kotlinx.coroutines.test.runTest
import org.junit.Ignore
import org.junit.Test import org.junit.Test
import java.io.File import java.io.File
@Ignore("JNA direct mapping has broken unit tests with FFI fakes")
class RustMatrixClientFactoryTest { class RustMatrixClientFactoryTest {
@Test @Test
fun test() = runTest { fun test() = runTest {
@ -57,4 +56,5 @@ fun TestScope.createRustMatrixClientFactory(
featureFlagService = FakeFeatureFlagService(), featureFlagService = FakeFeatureFlagService(),
timelineEventTypeFilterFactory = FakeTimelineEventTypeFilterFactory(), timelineEventTypeFilterFactory = FakeTimelineEventTypeFilterFactory(),
clientBuilderProvider = clientBuilderProvider, clientBuilderProvider = clientBuilderProvider,
sqliteStoreBuilderProvider = FakeSqliteStoreBuilderProvider(),
) )

View file

@ -31,13 +31,11 @@ import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.test.TestScope import kotlinx.coroutines.test.TestScope
import kotlinx.coroutines.test.advanceUntilIdle import kotlinx.coroutines.test.advanceUntilIdle
import kotlinx.coroutines.test.runTest import kotlinx.coroutines.test.runTest
import org.junit.Ignore
import org.junit.Test import org.junit.Test
import org.matrix.rustcomponents.sdk.Client import org.matrix.rustcomponents.sdk.Client
import org.matrix.rustcomponents.sdk.UserProfile import org.matrix.rustcomponents.sdk.UserProfile
import java.io.File import java.io.File
@Ignore("JNA direct mapping has broken unit tests with FFI fakes")
class RustMatrixClientTest { class RustMatrixClientTest {
@Test @Test
fun `ensure that sessionId and deviceId can be retrieved from the client`() = runTest { fun `ensure that sessionId and deviceId can be retrieved from the client`() = runTest {

View file

@ -11,10 +11,8 @@ package io.element.android.libraries.matrix.impl.auth
import com.google.common.truth.Truth.assertThat import com.google.common.truth.Truth.assertThat
import io.element.android.libraries.matrix.api.auth.MatrixHomeServerDetails import io.element.android.libraries.matrix.api.auth.MatrixHomeServerDetails
import io.element.android.libraries.matrix.impl.fixtures.fakes.FakeFfiHomeserverLoginDetails import io.element.android.libraries.matrix.impl.fixtures.fakes.FakeFfiHomeserverLoginDetails
import org.junit.Ignore
import org.junit.Test import org.junit.Test
@Ignore("JNA direct mapping has broken unit tests with FFI fakes")
class HomeserverDetailsKtTest { class HomeserverDetailsKtTest {
@Test @Test
fun `map should be correct`() { fun `map should be correct`() {

View file

@ -14,10 +14,8 @@ import io.element.android.libraries.matrix.impl.fixtures.fakes.FakeFfiClient
import io.element.android.libraries.matrix.impl.fixtures.fakes.FakeFfiClientBuilder import io.element.android.libraries.matrix.impl.fixtures.fakes.FakeFfiClientBuilder
import io.element.android.libraries.matrix.impl.fixtures.fakes.FakeFfiHomeserverLoginDetails import io.element.android.libraries.matrix.impl.fixtures.fakes.FakeFfiHomeserverLoginDetails
import kotlinx.coroutines.test.runTest import kotlinx.coroutines.test.runTest
import org.junit.Ignore
import org.junit.Test import org.junit.Test
@Ignore("JNA direct mapping has broken unit tests with FFI fakes")
class RustHomeserverLoginCompatibilityCheckerTest { class RustHomeserverLoginCompatibilityCheckerTest {
@Test @Test
fun `check - is valid if it supports OIDC login`() = runTest { fun `check - is valid if it supports OIDC login`() = runTest {

View file

@ -23,12 +23,10 @@ import io.element.android.libraries.sessionstorage.test.InMemorySessionStore
import io.element.android.tests.testutils.testCoroutineDispatchers import io.element.android.tests.testutils.testCoroutineDispatchers
import kotlinx.coroutines.test.TestScope import kotlinx.coroutines.test.TestScope
import kotlinx.coroutines.test.runTest import kotlinx.coroutines.test.runTest
import org.junit.Ignore
import org.junit.Test import org.junit.Test
import java.io.File import java.io.File
class RustMatrixAuthenticationServiceTest { class RustMatrixAuthenticationServiceTest {
@Ignore("JNA direct mapping has broken unit tests with FFI fakes")
@Test @Test
fun `setHomeserver is successful`() = runTest { fun `setHomeserver is successful`() = runTest {
val sut = createRustMatrixAuthenticationService( val sut = createRustMatrixAuthenticationService(

View file

@ -11,10 +11,8 @@ package io.element.android.libraries.matrix.impl.auth.qrlogin
import com.google.common.truth.Truth.assertThat import com.google.common.truth.Truth.assertThat
import io.element.android.libraries.matrix.impl.fixtures.fakes.FakeFfiQrCodeData import io.element.android.libraries.matrix.impl.fixtures.fakes.FakeFfiQrCodeData
import io.element.android.libraries.matrix.test.A_HOMESERVER_URL import io.element.android.libraries.matrix.test.A_HOMESERVER_URL
import org.junit.Ignore
import org.junit.Test import org.junit.Test
@Ignore("JNA direct mapping has broken unit tests with FFI fakes")
class SdkQrCodeLoginDataTest { class SdkQrCodeLoginDataTest {
@Test @Test
fun `getServer reads the value from the Rust side, null case`() { fun `getServer reads the value from the Rust side, null case`() {

View file

@ -33,6 +33,7 @@ import org.matrix.rustcomponents.sdk.SyncServiceBuilder
import org.matrix.rustcomponents.sdk.TaskHandle import org.matrix.rustcomponents.sdk.TaskHandle
import org.matrix.rustcomponents.sdk.UnableToDecryptDelegate import org.matrix.rustcomponents.sdk.UnableToDecryptDelegate
import org.matrix.rustcomponents.sdk.UserProfile import org.matrix.rustcomponents.sdk.UserProfile
import uniffi.matrix_sdk_base.MediaRetentionPolicy
class FakeFfiClient( class FakeFfiClient(
private val userId: String = A_USER_ID.value, private val userId: String = A_USER_ID.value,
@ -88,5 +89,7 @@ class FakeFfiClient(
return homeserverLoginDetailsResult() return homeserverLoginDetailsResult()
} }
override suspend fun setMediaRetentionPolicy(policy: MediaRetentionPolicy) {}
override fun close() = closeResult() override fun close() = closeResult()
} }

View file

@ -44,5 +44,6 @@ class FakeFfiClientBuilder(
override fun enableShareHistoryOnInvite(enableShareHistoryOnInvite: Boolean): ClientBuilder = this override fun enableShareHistoryOnInvite(enableShareHistoryOnInvite: Boolean): ClientBuilder = this
override fun threadsEnabled(enabled: Boolean, threadSubscriptions: Boolean): ClientBuilder = this override fun threadsEnabled(enabled: Boolean, threadSubscriptions: Boolean): ClientBuilder = this
override fun sqliteStore(config: SqliteStoreBuilder): ClientBuilder = this override fun sqliteStore(config: SqliteStoreBuilder): ClientBuilder = this
override fun inMemoryStore(): ClientBuilder = this
override suspend fun build() = buildResult() override suspend fun build() = buildResult()
} }

View file

@ -13,6 +13,7 @@ import io.element.android.libraries.matrix.impl.fixtures.factories.aRustRoomInfo
import io.element.android.libraries.matrix.test.A_ROOM_ID import io.element.android.libraries.matrix.test.A_ROOM_ID
import io.element.android.tests.testutils.lambda.lambdaError import io.element.android.tests.testutils.lambda.lambdaError
import org.matrix.rustcomponents.sdk.EventTimelineItem import org.matrix.rustcomponents.sdk.EventTimelineItem
import org.matrix.rustcomponents.sdk.LatestEventValue
import org.matrix.rustcomponents.sdk.NoHandle import org.matrix.rustcomponents.sdk.NoHandle
import org.matrix.rustcomponents.sdk.Room import org.matrix.rustcomponents.sdk.Room
import org.matrix.rustcomponents.sdk.RoomInfo import org.matrix.rustcomponents.sdk.RoomInfo
@ -25,6 +26,7 @@ class FakeFfiRoom(
private val getMembersNoSync: () -> RoomMembersIterator = { lambdaError() }, private val getMembersNoSync: () -> RoomMembersIterator = { lambdaError() },
private val leaveLambda: () -> Unit = { lambdaError() }, private val leaveLambda: () -> Unit = { lambdaError() },
private val latestEventLambda: () -> EventTimelineItem? = { lambdaError() }, private val latestEventLambda: () -> EventTimelineItem? = { lambdaError() },
private val newLatestEventLambda: () -> LatestEventValue = { lambdaError() },
private val suggestedRoleForUserLambda: (String) -> RoomMemberRole = { lambdaError() }, private val suggestedRoleForUserLambda: (String) -> RoomMemberRole = { lambdaError() },
private val roomInfo: RoomInfo = aRustRoomInfo(id = roomId.value), private val roomInfo: RoomInfo = aRustRoomInfo(id = roomId.value),
) : Room(NoHandle) { ) : Room(NoHandle) {
@ -56,6 +58,10 @@ class FakeFfiRoom(
return suggestedRoleForUserLambda(userId) return suggestedRoleForUserLambda(userId)
} }
override suspend fun newLatestEvent(): LatestEventValue {
return newLatestEventLambda()
}
override fun close() { override fun close() {
// No-op // No-op
} }

View file

@ -29,15 +29,13 @@ import io.element.android.tests.testutils.lambda.lambdaRecorder
import io.element.android.tests.testutils.testCoroutineDispatchers import io.element.android.tests.testutils.testCoroutineDispatchers
import kotlinx.coroutines.test.TestScope import kotlinx.coroutines.test.TestScope
import kotlinx.coroutines.test.runTest import kotlinx.coroutines.test.runTest
import org.junit.Ignore
import org.junit.Test import org.junit.Test
import org.matrix.rustcomponents.sdk.NotificationClient import org.matrix.rustcomponents.sdk.NotificationClient
import org.matrix.rustcomponents.sdk.NotificationStatus import org.matrix.rustcomponents.sdk.NotificationStatus
import org.matrix.rustcomponents.sdk.TimelineEventType import org.matrix.rustcomponents.sdk.TimelineEventType
class RustNotificationServiceTest { class RustNotificationServiceTest {
@Ignore("JNA direct mapping has broken unit tests with FFI fakes") @Test
@Test
fun test() = runTest { fun test() = runTest {
val notificationClient = FakeFfiNotificationClient( val notificationClient = FakeFfiNotificationClient(
notificationItemResult = mapOf(AN_EVENT_ID.value to aRustBatchNotificationResult()), notificationItemResult = mapOf(AN_EVENT_ID.value to aRustBatchNotificationResult()),
@ -58,8 +56,7 @@ class RustNotificationServiceTest {
) )
} }
@Ignore("JNA direct mapping has broken unit tests with FFI fakes") @Test
@Test
fun `test mapping invalid item only drops that item`() = runTest { fun `test mapping invalid item only drops that item`() = runTest {
val error = IllegalStateException("This event type is not supported") val error = IllegalStateException("This event type is not supported")
val faultyEvent = object : FakeFfiTimelineEvent() { val faultyEvent = object : FakeFfiTimelineEvent() {
@ -86,8 +83,7 @@ class RustNotificationServiceTest {
assertThat(successfulResult?.isSuccess).isTrue() assertThat(successfulResult?.isSuccess).isTrue()
} }
@Ignore("JNA direct mapping has broken unit tests with FFI fakes") @Test
@Test
fun `test unable to resolve event`() = runTest { fun `test unable to resolve event`() = runTest {
val notificationClient = FakeFfiNotificationClient( val notificationClient = FakeFfiNotificationClient(
notificationItemResult = emptyMap(), notificationItemResult = emptyMap(),
@ -99,8 +95,7 @@ class RustNotificationServiceTest {
assertThat(exception).isInstanceOf(NotificationResolverException::class.java) assertThat(exception).isInstanceOf(NotificationResolverException::class.java)
} }
@Ignore("JNA direct mapping has broken unit tests with FFI fakes") @Test
@Test
fun `close should invoke the close method of the service`() = runTest { fun `close should invoke the close method of the service`() = runTest {
val closeResult = lambdaRecorder<Unit> { } val closeResult = lambdaRecorder<Unit> { }
val notificationClient = FakeFfiNotificationClient( val notificationClient = FakeFfiNotificationClient(

View file

@ -16,13 +16,11 @@ import io.element.android.libraries.matrix.test.A_ROOM_ID
import io.element.android.tests.testutils.testCoroutineDispatchers import io.element.android.tests.testutils.testCoroutineDispatchers
import kotlinx.coroutines.test.TestScope import kotlinx.coroutines.test.TestScope
import kotlinx.coroutines.test.runTest import kotlinx.coroutines.test.runTest
import org.junit.Ignore
import org.junit.Test import org.junit.Test
import org.matrix.rustcomponents.sdk.NotificationSettings import org.matrix.rustcomponents.sdk.NotificationSettings
class RustNotificationSettingsServiceTest { class RustNotificationSettingsServiceTest {
@Ignore("JNA direct mapping has broken unit tests with FFI fakes") @Test
@Test
fun test() = runTest { fun test() = runTest {
val sut = createRustNotificationSettingsService() val sut = createRustNotificationSettingsService()
val result = sut.getRoomNotificationSettings( val result = sut.getRoomNotificationSettings(

View file

@ -13,10 +13,8 @@ import io.element.android.libraries.matrix.api.pusher.UnsetHttpPusherData
import io.element.android.libraries.matrix.impl.fixtures.fakes.FakeFfiClient import io.element.android.libraries.matrix.impl.fixtures.fakes.FakeFfiClient
import io.element.android.tests.testutils.testCoroutineDispatchers import io.element.android.tests.testutils.testCoroutineDispatchers
import kotlinx.coroutines.test.runTest import kotlinx.coroutines.test.runTest
import org.junit.Ignore
import org.junit.Test import org.junit.Test
@Ignore("JNA direct mapping has broken unit tests with FFI fakes")
class RustPushersServiceTest { class RustPushersServiceTest {
@Test @Test
fun `setPusher should invoke the client method`() = runTest { fun `setPusher should invoke the client method`() = runTest {

View file

@ -14,10 +14,8 @@ import io.element.android.libraries.matrix.api.user.MatrixUser
import io.element.android.libraries.matrix.impl.fixtures.factories.aRustRoomHero import io.element.android.libraries.matrix.impl.fixtures.factories.aRustRoomHero
import io.element.android.libraries.matrix.impl.fixtures.factories.aRustRoomInfo import io.element.android.libraries.matrix.impl.fixtures.factories.aRustRoomInfo
import io.element.android.libraries.matrix.test.A_USER_ID import io.element.android.libraries.matrix.test.A_USER_ID
import org.junit.Ignore
import org.junit.Test import org.junit.Test
@Ignore("JNA direct mapping has broken unit tests with FFI fakes")
class RoomInfoExtTest { class RoomInfoExtTest {
@Test @Test
fun `get non empty element Heroes`() { fun `get non empty element Heroes`() {

View file

@ -32,7 +32,6 @@ import io.element.android.libraries.matrix.test.room.defaultRoomPowerLevelValues
import kotlinx.collections.immutable.persistentListOf import kotlinx.collections.immutable.persistentListOf
import kotlinx.collections.immutable.persistentMapOf import kotlinx.collections.immutable.persistentMapOf
import kotlinx.collections.immutable.toImmutableList import kotlinx.collections.immutable.toImmutableList
import org.junit.Ignore
import org.junit.Test import org.junit.Test
import org.matrix.rustcomponents.sdk.Membership import org.matrix.rustcomponents.sdk.Membership
import uniffi.matrix_sdk_base.EncryptionState import uniffi.matrix_sdk_base.EncryptionState
@ -40,7 +39,6 @@ import org.matrix.rustcomponents.sdk.JoinRule as RustJoinRule
import org.matrix.rustcomponents.sdk.RoomHistoryVisibility as RustRoomHistoryVisibility import org.matrix.rustcomponents.sdk.RoomHistoryVisibility as RustRoomHistoryVisibility
import org.matrix.rustcomponents.sdk.RoomNotificationMode as RustRoomNotificationMode import org.matrix.rustcomponents.sdk.RoomNotificationMode as RustRoomNotificationMode
@Ignore("JNA direct mapping has broken unit tests with FFI fakes")
class RoomInfoMapperTest { class RoomInfoMapperTest {
@Test @Test
fun `mapping of RustRoomInfo should map all the fields`() { fun `mapping of RustRoomInfo should map all the fields`() {

View file

@ -31,11 +31,9 @@ import kotlinx.coroutines.flow.shareIn
import kotlinx.coroutines.isActive import kotlinx.coroutines.isActive
import kotlinx.coroutines.test.TestScope import kotlinx.coroutines.test.TestScope
import kotlinx.coroutines.test.runTest import kotlinx.coroutines.test.runTest
import org.junit.Ignore
import org.junit.Test import org.junit.Test
import uniffi.matrix_sdk.RoomMemberRole import uniffi.matrix_sdk.RoomMemberRole
@Ignore("JNA direct mapping has broken unit tests with FFI fakes")
class RustBaseRoomTest { class RustBaseRoomTest {
@Test @Test
fun `RustBaseRoom should cancel the room coroutine scope when it is destroyed`() = runTest { fun `RustBaseRoom should cancel the room coroutine scope when it is destroyed`() = runTest {

View file

@ -25,10 +25,8 @@ import io.element.android.services.analytics.test.FakeAnalyticsService
import io.element.android.tests.testutils.lambda.lambdaRecorder import io.element.android.tests.testutils.lambda.lambdaRecorder
import io.element.android.tests.testutils.lambda.value import io.element.android.tests.testutils.lambda.value
import kotlinx.coroutines.test.runTest import kotlinx.coroutines.test.runTest
import org.junit.Ignore
import org.junit.Test import org.junit.Test
@Ignore("JNA direct mapping has broken unit tests with FFI fakes")
class DefaultJoinRoomTest { class DefaultJoinRoomTest {
@Test @Test
fun `when using roomId and there is no server names, the classic join room API is used`() = runTest { fun `when using roomId and there is no server names, the classic join room API is used`() = runTest {

View file

@ -24,10 +24,8 @@ import io.element.android.libraries.matrix.test.A_USER_ID_3
import io.element.android.libraries.matrix.test.A_USER_ID_4 import io.element.android.libraries.matrix.test.A_USER_ID_4
import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.test.runTest import kotlinx.coroutines.test.runTest
import org.junit.Ignore
import org.junit.Test import org.junit.Test
@Ignore("JNA direct mapping has broken unit tests with FFI fakes")
class RoomMemberListFetcherTest { class RoomMemberListFetcherTest {
@Test @Test
fun `fetchRoomMembers with CACHE source - emits cached members, if any`() = runTest { fun `fetchRoomMembers with CACHE source - emits cached members, if any`() = runTest {

View file

@ -19,12 +19,10 @@ import kotlinx.coroutines.test.StandardTestDispatcher
import kotlinx.coroutines.test.TestScope import kotlinx.coroutines.test.TestScope
import kotlinx.coroutines.test.runCurrent import kotlinx.coroutines.test.runCurrent
import kotlinx.coroutines.test.runTest import kotlinx.coroutines.test.runTest
import org.junit.Ignore
import org.junit.Test import org.junit.Test
import org.matrix.rustcomponents.sdk.RoomDirectorySearch import org.matrix.rustcomponents.sdk.RoomDirectorySearch
import org.matrix.rustcomponents.sdk.RoomDirectorySearchEntryUpdate import org.matrix.rustcomponents.sdk.RoomDirectorySearchEntryUpdate
@Ignore("JNA direct mapping has broken unit tests with FFI fakes")
@OptIn(ExperimentalCoroutinesApi::class) @OptIn(ExperimentalCoroutinesApi::class)
class RustBaseRoomDirectoryListTest { class RustBaseRoomDirectoryListTest {
@Test @Test

View file

@ -11,12 +11,10 @@ package io.element.android.libraries.matrix.impl.roomdirectory
import io.element.android.libraries.matrix.impl.fixtures.fakes.FakeFfiClient import io.element.android.libraries.matrix.impl.fixtures.fakes.FakeFfiClient
import kotlinx.coroutines.test.StandardTestDispatcher import kotlinx.coroutines.test.StandardTestDispatcher
import kotlinx.coroutines.test.runTest import kotlinx.coroutines.test.runTest
import org.junit.Ignore
import org.junit.Test import org.junit.Test
class RustBaseRoomDirectoryServiceTest { class RustBaseRoomDirectoryServiceTest {
@Ignore("JNA direct mapping has broken unit tests with FFI fakes") @Test
@Test
fun test() = runTest { fun test() = runTest {
val client = FakeFfiClient() val client = FakeFfiClient()
val sut = RustRoomDirectoryService( val sut = RustRoomDirectoryService(

View file

@ -12,13 +12,11 @@ import io.element.android.libraries.matrix.impl.fixtures.fakes.FakeFfiRoomList
import io.element.android.libraries.matrix.impl.fixtures.fakes.FakeFfiRoomListService import io.element.android.libraries.matrix.impl.fixtures.fakes.FakeFfiRoomListService
import io.element.android.services.analytics.test.FakeAnalyticsService import io.element.android.services.analytics.test.FakeAnalyticsService
import kotlinx.coroutines.test.runTest import kotlinx.coroutines.test.runTest
import org.junit.Ignore
import org.junit.Test import org.junit.Test
import kotlin.coroutines.EmptyCoroutineContext import kotlin.coroutines.EmptyCoroutineContext
class RoomListFactoryTest { class RoomListFactoryTest {
@Ignore("JNA direct mapping has broken unit tests with FFI fakes") @Test
@Test
fun `createRoomList should work`() = runTest { fun `createRoomList should work`() = runTest {
val sut = RoomListFactory( val sut = RoomListFactory(
innerRoomListService = FakeFfiRoomListService(), innerRoomListService = FakeFfiRoomListService(),

View file

@ -21,15 +21,14 @@ import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.test.StandardTestDispatcher import kotlinx.coroutines.test.StandardTestDispatcher
import kotlinx.coroutines.test.TestScope import kotlinx.coroutines.test.TestScope
import kotlinx.coroutines.test.runTest import kotlinx.coroutines.test.runTest
import org.junit.Ignore
import org.junit.Test import org.junit.Test
import org.matrix.rustcomponents.sdk.LatestEventValue
import org.matrix.rustcomponents.sdk.RoomListEntriesUpdate import org.matrix.rustcomponents.sdk.RoomListEntriesUpdate
class RoomSummaryListProcessorTest { class RoomSummaryListProcessorTest {
private val summaries = MutableStateFlow<List<RoomSummary>>(emptyList()) private val summaries = MutableStateFlow<List<RoomSummary>>(emptyList())
@Ignore("JNA direct mapping has broken unit tests with FFI fakes") @Test
@Test
fun `Append adds new entries at the end of the list`() = runTest { fun `Append adds new entries at the end of the list`() = runTest {
summaries.value = listOf(aRoomSummary()) summaries.value = listOf(aRoomSummary())
val processor = createProcessor() val processor = createProcessor()
@ -41,8 +40,7 @@ class RoomSummaryListProcessorTest {
assertThat(summaries.value.subList(1, 4).all { it.roomId == A_ROOM_ID_2 }).isTrue() assertThat(summaries.value.subList(1, 4).all { it.roomId == A_ROOM_ID_2 }).isTrue()
} }
@Ignore("JNA direct mapping has broken unit tests with FFI fakes") @Test
@Test
fun `PushBack adds a new entry at the end of the list`() = runTest { fun `PushBack adds a new entry at the end of the list`() = runTest {
summaries.value = listOf(aRoomSummary()) summaries.value = listOf(aRoomSummary())
val processor = createProcessor() val processor = createProcessor()
@ -52,8 +50,7 @@ class RoomSummaryListProcessorTest {
assertThat(summaries.value.last().roomId).isEqualTo(A_ROOM_ID_2) assertThat(summaries.value.last().roomId).isEqualTo(A_ROOM_ID_2)
} }
@Ignore("JNA direct mapping has broken unit tests with FFI fakes") @Test
@Test
fun `PushFront inserts a new entry at the start of the list`() = runTest { fun `PushFront inserts a new entry at the start of the list`() = runTest {
summaries.value = listOf(aRoomSummary()) summaries.value = listOf(aRoomSummary())
val processor = createProcessor() val processor = createProcessor()
@ -63,8 +60,7 @@ class RoomSummaryListProcessorTest {
assertThat(summaries.value.first().roomId).isEqualTo(A_ROOM_ID_2) assertThat(summaries.value.first().roomId).isEqualTo(A_ROOM_ID_2)
} }
@Ignore("JNA direct mapping has broken unit tests with FFI fakes") @Test
@Test
fun `Set replaces an entry at some index`() = runTest { fun `Set replaces an entry at some index`() = runTest {
summaries.value = listOf(aRoomSummary()) summaries.value = listOf(aRoomSummary())
val processor = createProcessor() val processor = createProcessor()
@ -76,8 +72,7 @@ class RoomSummaryListProcessorTest {
assertThat(summaries.value[index].roomId).isEqualTo(A_ROOM_ID_2) assertThat(summaries.value[index].roomId).isEqualTo(A_ROOM_ID_2)
} }
@Ignore("JNA direct mapping has broken unit tests with FFI fakes") @Test
@Test
fun `Insert inserts a new entry at the provided index`() = runTest { fun `Insert inserts a new entry at the provided index`() = runTest {
summaries.value = listOf(aRoomSummary()) summaries.value = listOf(aRoomSummary())
val processor = createProcessor() val processor = createProcessor()
@ -89,8 +84,7 @@ class RoomSummaryListProcessorTest {
assertThat(summaries.value[index].roomId).isEqualTo(A_ROOM_ID_2) assertThat(summaries.value[index].roomId).isEqualTo(A_ROOM_ID_2)
} }
@Ignore("JNA direct mapping has broken unit tests with FFI fakes") @Test
@Test
fun `Remove removes an entry at some index`() = runTest { fun `Remove removes an entry at some index`() = runTest {
summaries.value = listOf( summaries.value = listOf(
aRoomSummary(roomId = A_ROOM_ID), aRoomSummary(roomId = A_ROOM_ID),
@ -105,8 +99,7 @@ class RoomSummaryListProcessorTest {
assertThat(summaries.value[index].roomId).isEqualTo(A_ROOM_ID_2) assertThat(summaries.value[index].roomId).isEqualTo(A_ROOM_ID_2)
} }
@Ignore("JNA direct mapping has broken unit tests with FFI fakes") @Test
@Test
fun `PopBack removes an entry at the end of the list`() = runTest { fun `PopBack removes an entry at the end of the list`() = runTest {
summaries.value = listOf( summaries.value = listOf(
aRoomSummary(roomId = A_ROOM_ID), aRoomSummary(roomId = A_ROOM_ID),
@ -121,8 +114,7 @@ class RoomSummaryListProcessorTest {
assertThat(summaries.value[index].roomId).isEqualTo(A_ROOM_ID) assertThat(summaries.value[index].roomId).isEqualTo(A_ROOM_ID)
} }
@Ignore("JNA direct mapping has broken unit tests with FFI fakes") @Test
@Test
fun `PopFront removes an entry at the start of the list`() = runTest { fun `PopFront removes an entry at the start of the list`() = runTest {
summaries.value = listOf( summaries.value = listOf(
aRoomSummary(roomId = A_ROOM_ID), aRoomSummary(roomId = A_ROOM_ID),
@ -137,8 +129,7 @@ class RoomSummaryListProcessorTest {
assertThat(summaries.value[index].roomId).isEqualTo(A_ROOM_ID_2) assertThat(summaries.value[index].roomId).isEqualTo(A_ROOM_ID_2)
} }
@Ignore("JNA direct mapping has broken unit tests with FFI fakes") @Test
@Test
fun `Clear removes all the entries`() = runTest { fun `Clear removes all the entries`() = runTest {
summaries.value = listOf( summaries.value = listOf(
aRoomSummary(roomId = A_ROOM_ID), aRoomSummary(roomId = A_ROOM_ID),
@ -151,8 +142,7 @@ class RoomSummaryListProcessorTest {
assertThat(summaries.value).isEmpty() assertThat(summaries.value).isEmpty()
} }
@Ignore("JNA direct mapping has broken unit tests with FFI fakes") @Test
@Test
fun `Truncate removes all entries after the provided length`() = runTest { fun `Truncate removes all entries after the provided length`() = runTest {
summaries.value = listOf( summaries.value = listOf(
aRoomSummary(roomId = A_ROOM_ID), aRoomSummary(roomId = A_ROOM_ID),
@ -167,8 +157,7 @@ class RoomSummaryListProcessorTest {
assertThat(summaries.value[index].roomId).isEqualTo(A_ROOM_ID) assertThat(summaries.value[index].roomId).isEqualTo(A_ROOM_ID)
} }
@Ignore("JNA direct mapping has broken unit tests with FFI fakes") @Test
@Test
fun `Reset removes all entries and add the provided ones`() = runTest { fun `Reset removes all entries and add the provided ones`() = runTest {
summaries.value = listOf( summaries.value = listOf(
aRoomSummary(roomId = A_ROOM_ID), aRoomSummary(roomId = A_ROOM_ID),
@ -186,6 +175,7 @@ class RoomSummaryListProcessorTest {
private fun aRustRoom(roomId: RoomId = A_ROOM_ID) = FakeFfiRoom( private fun aRustRoom(roomId: RoomId = A_ROOM_ID) = FakeFfiRoom(
roomId = roomId, roomId = roomId,
latestEventLambda = { null }, latestEventLambda = { null },
newLatestEventLambda = { LatestEventValue.None }
) )
private fun TestScope.createProcessor() = RoomSummaryListProcessor( private fun TestScope.createProcessor() = RoomSummaryListProcessor(

View file

@ -19,12 +19,10 @@ import kotlinx.coroutines.test.StandardTestDispatcher
import kotlinx.coroutines.test.TestScope import kotlinx.coroutines.test.TestScope
import kotlinx.coroutines.test.runCurrent import kotlinx.coroutines.test.runCurrent
import kotlinx.coroutines.test.runTest import kotlinx.coroutines.test.runTest
import org.junit.Ignore
import org.junit.Test import org.junit.Test
import org.matrix.rustcomponents.sdk.RoomListServiceSyncIndicator import org.matrix.rustcomponents.sdk.RoomListServiceSyncIndicator
import org.matrix.rustcomponents.sdk.RoomListService as RustRoomListService import org.matrix.rustcomponents.sdk.RoomListService as RustRoomListService
@Ignore("JNA direct mapping has broken unit tests with FFI fakes")
@OptIn(ExperimentalCoroutinesApi::class) @OptIn(ExperimentalCoroutinesApi::class)
class RustBaseRoomListServiceTest { class RustBaseRoomListServiceTest {
@Test @Test

View file

@ -18,15 +18,13 @@ import io.element.android.libraries.previewutils.room.aSpaceRoom
import kotlinx.coroutines.flow.MutableSharedFlow import kotlinx.coroutines.flow.MutableSharedFlow
import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.test.runTest import kotlinx.coroutines.test.runTest
import org.junit.Ignore
import org.junit.Test import org.junit.Test
import org.matrix.rustcomponents.sdk.SpaceListUpdate import org.matrix.rustcomponents.sdk.SpaceListUpdate
class RoomSummaryListProcessorTest { class RoomSummaryListProcessorTest {
private val spaceRoomsFlow = MutableStateFlow<List<SpaceRoom>>(emptyList()) private val spaceRoomsFlow = MutableStateFlow<List<SpaceRoom>>(emptyList())
@Ignore("JNA direct mapping has broken unit tests with FFI fakes") @Test
@Test
fun `Append adds new entries at the end of the list`() = runTest { fun `Append adds new entries at the end of the list`() = runTest {
spaceRoomsFlow.value = listOf(aSpaceRoom()) spaceRoomsFlow.value = listOf(aSpaceRoom())
val processor = createProcessor() val processor = createProcessor()
@ -38,8 +36,7 @@ class RoomSummaryListProcessorTest {
assertThat(spaceRoomsFlow.value.subList(1, 4).all { it.roomId == A_ROOM_ID_2 }).isTrue() assertThat(spaceRoomsFlow.value.subList(1, 4).all { it.roomId == A_ROOM_ID_2 }).isTrue()
} }
@Ignore("JNA direct mapping has broken unit tests with FFI fakes") @Test
@Test
fun `PushBack adds a new entry at the end of the list`() = runTest { fun `PushBack adds a new entry at the end of the list`() = runTest {
spaceRoomsFlow.value = listOf(aSpaceRoom()) spaceRoomsFlow.value = listOf(aSpaceRoom())
val processor = createProcessor() val processor = createProcessor()
@ -49,8 +46,7 @@ class RoomSummaryListProcessorTest {
assertThat(spaceRoomsFlow.value.last().roomId).isEqualTo(A_ROOM_ID_2) assertThat(spaceRoomsFlow.value.last().roomId).isEqualTo(A_ROOM_ID_2)
} }
@Ignore("JNA direct mapping has broken unit tests with FFI fakes") @Test
@Test
fun `PushFront inserts a new entry at the start of the list`() = runTest { fun `PushFront inserts a new entry at the start of the list`() = runTest {
spaceRoomsFlow.value = listOf(aSpaceRoom()) spaceRoomsFlow.value = listOf(aSpaceRoom())
val processor = createProcessor() val processor = createProcessor()
@ -60,8 +56,7 @@ class RoomSummaryListProcessorTest {
assertThat(spaceRoomsFlow.value.first().roomId).isEqualTo(A_ROOM_ID_2) assertThat(spaceRoomsFlow.value.first().roomId).isEqualTo(A_ROOM_ID_2)
} }
@Ignore("JNA direct mapping has broken unit tests with FFI fakes") @Test
@Test
fun `Set replaces an entry at some index`() = runTest { fun `Set replaces an entry at some index`() = runTest {
spaceRoomsFlow.value = listOf(aSpaceRoom()) spaceRoomsFlow.value = listOf(aSpaceRoom())
val processor = createProcessor() val processor = createProcessor()
@ -73,8 +68,7 @@ class RoomSummaryListProcessorTest {
assertThat(spaceRoomsFlow.value[index].roomId).isEqualTo(A_ROOM_ID_2) assertThat(spaceRoomsFlow.value[index].roomId).isEqualTo(A_ROOM_ID_2)
} }
@Ignore("JNA direct mapping has broken unit tests with FFI fakes") @Test
@Test
fun `Insert inserts a new entry at the provided index`() = runTest { fun `Insert inserts a new entry at the provided index`() = runTest {
spaceRoomsFlow.value = listOf(aSpaceRoom()) spaceRoomsFlow.value = listOf(aSpaceRoom())
val processor = createProcessor() val processor = createProcessor()
@ -86,8 +80,7 @@ class RoomSummaryListProcessorTest {
assertThat(spaceRoomsFlow.value[index].roomId).isEqualTo(A_ROOM_ID_2) assertThat(spaceRoomsFlow.value[index].roomId).isEqualTo(A_ROOM_ID_2)
} }
@Ignore("JNA direct mapping has broken unit tests with FFI fakes") @Test
@Test
fun `Remove removes an entry at some index`() = runTest { fun `Remove removes an entry at some index`() = runTest {
spaceRoomsFlow.value = listOf( spaceRoomsFlow.value = listOf(
aSpaceRoom(roomId = A_ROOM_ID), aSpaceRoom(roomId = A_ROOM_ID),
@ -102,8 +95,7 @@ class RoomSummaryListProcessorTest {
assertThat(spaceRoomsFlow.value[index].roomId).isEqualTo(A_ROOM_ID_2) assertThat(spaceRoomsFlow.value[index].roomId).isEqualTo(A_ROOM_ID_2)
} }
@Ignore("JNA direct mapping has broken unit tests with FFI fakes") @Test
@Test
fun `PopBack removes an entry at the end of the list`() = runTest { fun `PopBack removes an entry at the end of the list`() = runTest {
spaceRoomsFlow.value = listOf( spaceRoomsFlow.value = listOf(
aSpaceRoom(roomId = A_ROOM_ID), aSpaceRoom(roomId = A_ROOM_ID),
@ -118,8 +110,7 @@ class RoomSummaryListProcessorTest {
assertThat(spaceRoomsFlow.value[index].roomId).isEqualTo(A_ROOM_ID) assertThat(spaceRoomsFlow.value[index].roomId).isEqualTo(A_ROOM_ID)
} }
@Ignore("JNA direct mapping has broken unit tests with FFI fakes") @Test
@Test
fun `PopFront removes an entry at the start of the list`() = runTest { fun `PopFront removes an entry at the start of the list`() = runTest {
spaceRoomsFlow.value = listOf( spaceRoomsFlow.value = listOf(
aSpaceRoom(roomId = A_ROOM_ID), aSpaceRoom(roomId = A_ROOM_ID),
@ -134,8 +125,7 @@ class RoomSummaryListProcessorTest {
assertThat(spaceRoomsFlow.value[index].roomId).isEqualTo(A_ROOM_ID_2) assertThat(spaceRoomsFlow.value[index].roomId).isEqualTo(A_ROOM_ID_2)
} }
@Ignore("JNA direct mapping has broken unit tests with FFI fakes") @Test
@Test
fun `Clear removes all the entries`() = runTest { fun `Clear removes all the entries`() = runTest {
spaceRoomsFlow.value = listOf( spaceRoomsFlow.value = listOf(
aSpaceRoom(roomId = A_ROOM_ID), aSpaceRoom(roomId = A_ROOM_ID),
@ -148,8 +138,7 @@ class RoomSummaryListProcessorTest {
assertThat(spaceRoomsFlow.value).isEmpty() assertThat(spaceRoomsFlow.value).isEmpty()
} }
@Ignore("JNA direct mapping has broken unit tests with FFI fakes") @Test
@Test
fun `Truncate removes all entries after the provided length`() = runTest { fun `Truncate removes all entries after the provided length`() = runTest {
spaceRoomsFlow.value = listOf( spaceRoomsFlow.value = listOf(
aSpaceRoom(roomId = A_ROOM_ID), aSpaceRoom(roomId = A_ROOM_ID),
@ -164,8 +153,7 @@ class RoomSummaryListProcessorTest {
assertThat(spaceRoomsFlow.value[index].roomId).isEqualTo(A_ROOM_ID) assertThat(spaceRoomsFlow.value[index].roomId).isEqualTo(A_ROOM_ID)
} }
@Ignore("JNA direct mapping has broken unit tests with FFI fakes") @Test
@Test
fun `Reset removes all entries and add the provided ones`() = runTest { fun `Reset removes all entries and add the provided ones`() = runTest {
spaceRoomsFlow.value = listOf( spaceRoomsFlow.value = listOf(
aSpaceRoom(roomId = A_ROOM_ID), aSpaceRoom(roomId = A_ROOM_ID),
@ -180,8 +168,7 @@ class RoomSummaryListProcessorTest {
assertThat(spaceRoomsFlow.value[index].roomId).isEqualTo(A_ROOM_ID_3) assertThat(spaceRoomsFlow.value[index].roomId).isEqualTo(A_ROOM_ID_3)
} }
@Ignore("JNA direct mapping has broken unit tests with FFI fakes") @Test
@Test
fun `When there is no replay cache SpaceListUpdateProcessor starts with an empty list`() = runTest { fun `When there is no replay cache SpaceListUpdateProcessor starts with an empty list`() = runTest {
val spaceRoomsSharedFlow = MutableSharedFlow<List<SpaceRoom>>(replay = 1) val spaceRoomsSharedFlow = MutableSharedFlow<List<SpaceRoom>>(replay = 1)
val processor = createProcessor( val processor = createProcessor(

View file

@ -23,15 +23,13 @@ import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.test.TestScope import kotlinx.coroutines.test.TestScope
import kotlinx.coroutines.test.runCurrent import kotlinx.coroutines.test.runCurrent
import kotlinx.coroutines.test.runTest import kotlinx.coroutines.test.runTest
import org.junit.Ignore
import org.junit.Test import org.junit.Test
import org.matrix.rustcomponents.sdk.SpaceListUpdate import org.matrix.rustcomponents.sdk.SpaceListUpdate
import uniffi.matrix_sdk_ui.SpaceRoomListPaginationState import uniffi.matrix_sdk_ui.SpaceRoomListPaginationState
import org.matrix.rustcomponents.sdk.SpaceRoomList as InnerSpaceRoomList import org.matrix.rustcomponents.sdk.SpaceRoomList as InnerSpaceRoomList
class RustSpaceRoomListTest { class RustSpaceRoomListTest {
@Ignore("JNA direct mapping has broken unit tests with FFI fakes") @Test
@Test
fun `paginationStatusFlow emits values`() = runTest { fun `paginationStatusFlow emits values`() = runTest {
val innerSpaceRoomList = FakeFfiSpaceRoomList( val innerSpaceRoomList = FakeFfiSpaceRoomList(
paginationStateResult = { SpaceRoomListPaginationState.Idle(false) } paginationStateResult = { SpaceRoomListPaginationState.Idle(false) }
@ -53,8 +51,7 @@ class RustSpaceRoomListTest {
} }
} }
@Ignore("JNA direct mapping has broken unit tests with FFI fakes") @Test
@Test
fun `spaceRoomsFlow emits values`() = runTest { fun `spaceRoomsFlow emits values`() = runTest {
val innerSpaceRoomList = FakeFfiSpaceRoomList( val innerSpaceRoomList = FakeFfiSpaceRoomList(
paginationStateResult = { SpaceRoomListPaginationState.Idle(false) } paginationStateResult = { SpaceRoomListPaginationState.Idle(false) }
@ -76,8 +73,7 @@ class RustSpaceRoomListTest {
} }
} }
@Ignore("JNA direct mapping has broken unit tests with FFI fakes") @Test
@Test
fun `paginate invokes paginate on the inner class`() = runTest { fun `paginate invokes paginate on the inner class`() = runTest {
val paginateResult = lambdaRecorder<Unit> { } val paginateResult = lambdaRecorder<Unit> { }
val innerSpaceRoomList = FakeFfiSpaceRoomList( val innerSpaceRoomList = FakeFfiSpaceRoomList(

View file

@ -0,0 +1,18 @@
/*
* Copyright (c) 2025 Element Creations Ltd.
*
* SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial.
* Please see LICENSE files in the repository root for full details.
*/
package io.element.android.libraries.matrix.impl.storage
import org.matrix.rustcomponents.sdk.ClientBuilder
class FakeSqliteStoreBuilder : SqliteStoreBuilder {
override fun passphrase(passphrase: String?): SqliteStoreBuilder = this
override fun setupClientBuilder(clientBuilder: ClientBuilder): ClientBuilder {
return clientBuilder
}
}

View file

@ -0,0 +1,16 @@
/*
* Copyright (c) 2025 Element Creations Ltd.
*
* SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial.
* Please see LICENSE files in the repository root for full details.
*/
package io.element.android.libraries.matrix.impl.storage
import io.element.android.libraries.matrix.impl.paths.SessionPaths
class FakeSqliteStoreBuilderProvider : SqliteStoreBuilderProvider {
override fun provide(sessionPaths: SessionPaths): SqliteStoreBuilder {
return FakeSqliteStoreBuilder()
}
}

View file

@ -21,7 +21,6 @@ import kotlinx.coroutines.flow.MutableSharedFlow
import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.test.TestScope import kotlinx.coroutines.test.TestScope
import kotlinx.coroutines.test.runTest import kotlinx.coroutines.test.runTest
import org.junit.Ignore
import org.junit.Test import org.junit.Test
import org.matrix.rustcomponents.sdk.TimelineDiff import org.matrix.rustcomponents.sdk.TimelineDiff
@ -31,8 +30,7 @@ class MatrixTimelineDiffProcessorTest {
private val anEvent = MatrixTimelineItem.Event(A_UNIQUE_ID, anEventTimelineItem()) private val anEvent = MatrixTimelineItem.Event(A_UNIQUE_ID, anEventTimelineItem())
private val anEvent2 = MatrixTimelineItem.Event(A_UNIQUE_ID_2, anEventTimelineItem()) private val anEvent2 = MatrixTimelineItem.Event(A_UNIQUE_ID_2, anEventTimelineItem())
@Ignore("JNA direct mapping has broken unit tests with FFI fakes") @Test
@Test
fun `Append adds new entries at the end of the list`() = runTest { fun `Append adds new entries at the end of the list`() = runTest {
timelineItems.value = listOf(anEvent) timelineItems.value = listOf(anEvent)
val processor = createMatrixTimelineDiffProcessor(timelineItems) val processor = createMatrixTimelineDiffProcessor(timelineItems)
@ -44,8 +42,7 @@ class MatrixTimelineDiffProcessorTest {
) )
} }
@Ignore("JNA direct mapping has broken unit tests with FFI fakes") @Test
@Test
fun `PushBack adds a new entry at the end of the list`() = runTest { fun `PushBack adds a new entry at the end of the list`() = runTest {
timelineItems.value = listOf(anEvent) timelineItems.value = listOf(anEvent)
val processor = createMatrixTimelineDiffProcessor(timelineItems) val processor = createMatrixTimelineDiffProcessor(timelineItems)
@ -57,8 +54,7 @@ class MatrixTimelineDiffProcessorTest {
) )
} }
@Ignore("JNA direct mapping has broken unit tests with FFI fakes") @Test
@Test
fun `PushFront inserts a new entry at the start of the list`() = runTest { fun `PushFront inserts a new entry at the start of the list`() = runTest {
timelineItems.value = listOf(anEvent) timelineItems.value = listOf(anEvent)
val processor = createMatrixTimelineDiffProcessor(timelineItems) val processor = createMatrixTimelineDiffProcessor(timelineItems)
@ -70,8 +66,7 @@ class MatrixTimelineDiffProcessorTest {
) )
} }
@Ignore("JNA direct mapping has broken unit tests with FFI fakes") @Test
@Test
fun `Set replaces an entry at some index`() = runTest { fun `Set replaces an entry at some index`() = runTest {
timelineItems.value = listOf(anEvent, anEvent2) timelineItems.value = listOf(anEvent, anEvent2)
val processor = createMatrixTimelineDiffProcessor(timelineItems) val processor = createMatrixTimelineDiffProcessor(timelineItems)
@ -83,8 +78,7 @@ class MatrixTimelineDiffProcessorTest {
) )
} }
@Ignore("JNA direct mapping has broken unit tests with FFI fakes") @Test
@Test
fun `Insert inserts a new entry at the provided index`() = runTest { fun `Insert inserts a new entry at the provided index`() = runTest {
timelineItems.value = listOf(anEvent, anEvent2) timelineItems.value = listOf(anEvent, anEvent2)
val processor = createMatrixTimelineDiffProcessor(timelineItems) val processor = createMatrixTimelineDiffProcessor(timelineItems)
@ -97,8 +91,7 @@ class MatrixTimelineDiffProcessorTest {
) )
} }
@Ignore("JNA direct mapping has broken unit tests with FFI fakes") @Test
@Test
fun `Remove removes an entry at some index`() = runTest { fun `Remove removes an entry at some index`() = runTest {
timelineItems.value = listOf(anEvent, MatrixTimelineItem.Other, anEvent2) timelineItems.value = listOf(anEvent, MatrixTimelineItem.Other, anEvent2)
val processor = createMatrixTimelineDiffProcessor(timelineItems) val processor = createMatrixTimelineDiffProcessor(timelineItems)
@ -110,8 +103,7 @@ class MatrixTimelineDiffProcessorTest {
) )
} }
@Ignore("JNA direct mapping has broken unit tests with FFI fakes") @Test
@Test
fun `PopBack removes an entry at the end of the list`() = runTest { fun `PopBack removes an entry at the end of the list`() = runTest {
timelineItems.value = listOf(anEvent, anEvent2) timelineItems.value = listOf(anEvent, anEvent2)
val processor = createMatrixTimelineDiffProcessor(timelineItems) val processor = createMatrixTimelineDiffProcessor(timelineItems)
@ -122,8 +114,7 @@ class MatrixTimelineDiffProcessorTest {
) )
} }
@Ignore("JNA direct mapping has broken unit tests with FFI fakes") @Test
@Test
fun `PopFront removes an entry at the start of the list`() = runTest { fun `PopFront removes an entry at the start of the list`() = runTest {
timelineItems.value = listOf(anEvent, anEvent2) timelineItems.value = listOf(anEvent, anEvent2)
val processor = createMatrixTimelineDiffProcessor(timelineItems) val processor = createMatrixTimelineDiffProcessor(timelineItems)
@ -134,8 +125,7 @@ class MatrixTimelineDiffProcessorTest {
) )
} }
@Ignore("JNA direct mapping has broken unit tests with FFI fakes") @Test
@Test
fun `Clear removes all the entries`() = runTest { fun `Clear removes all the entries`() = runTest {
timelineItems.value = listOf(anEvent, anEvent2) timelineItems.value = listOf(anEvent, anEvent2)
val processor = createMatrixTimelineDiffProcessor(timelineItems) val processor = createMatrixTimelineDiffProcessor(timelineItems)
@ -143,8 +133,7 @@ class MatrixTimelineDiffProcessorTest {
assertThat(timelineItems.value).isEmpty() assertThat(timelineItems.value).isEmpty()
} }
@Ignore("JNA direct mapping has broken unit tests with FFI fakes") @Test
@Test
fun `Truncate removes all entries after the provided length`() = runTest { fun `Truncate removes all entries after the provided length`() = runTest {
timelineItems.value = listOf(anEvent, MatrixTimelineItem.Other, anEvent2) timelineItems.value = listOf(anEvent, MatrixTimelineItem.Other, anEvent2)
val processor = createMatrixTimelineDiffProcessor(timelineItems) val processor = createMatrixTimelineDiffProcessor(timelineItems)
@ -155,8 +144,7 @@ class MatrixTimelineDiffProcessorTest {
) )
} }
@Ignore("JNA direct mapping has broken unit tests with FFI fakes") @Test
@Test
fun `Reset removes all entries and add the provided ones`() = runTest { fun `Reset removes all entries and add the provided ones`() = runTest {
timelineItems.value = listOf(anEvent, MatrixTimelineItem.Other, anEvent2) timelineItems.value = listOf(anEvent, MatrixTimelineItem.Other, anEvent2)
val processor = createMatrixTimelineDiffProcessor(timelineItems) val processor = createMatrixTimelineDiffProcessor(timelineItems)

View file

@ -30,13 +30,11 @@ import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.test.TestScope import kotlinx.coroutines.test.TestScope
import kotlinx.coroutines.test.runCurrent import kotlinx.coroutines.test.runCurrent
import kotlinx.coroutines.test.runTest import kotlinx.coroutines.test.runTest
import org.junit.Ignore
import org.junit.Test import org.junit.Test
import org.matrix.rustcomponents.sdk.TimelineDiff import org.matrix.rustcomponents.sdk.TimelineDiff
import uniffi.matrix_sdk.RoomPaginationStatus import uniffi.matrix_sdk.RoomPaginationStatus
import org.matrix.rustcomponents.sdk.Timeline as InnerTimeline import org.matrix.rustcomponents.sdk.Timeline as InnerTimeline
@Ignore("JNA direct mapping has broken unit tests with FFI fakes")
class RustTimelineTest { class RustTimelineTest {
@Test @Test
fun `ensure that the timeline emits new loading item when pagination does not bring new events`() = runTest { fun `ensure that the timeline emits new loading item when pagination does not bring new events`() = runTest {

View file

@ -20,7 +20,6 @@ import kotlinx.coroutines.test.StandardTestDispatcher
import kotlinx.coroutines.test.TestScope import kotlinx.coroutines.test.TestScope
import kotlinx.coroutines.test.runCurrent import kotlinx.coroutines.test.runCurrent
import kotlinx.coroutines.test.runTest import kotlinx.coroutines.test.runTest
import org.junit.Ignore
import org.junit.Test import org.junit.Test
import org.matrix.rustcomponents.sdk.Timeline import org.matrix.rustcomponents.sdk.Timeline
import org.matrix.rustcomponents.sdk.TimelineDiff import org.matrix.rustcomponents.sdk.TimelineDiff
@ -28,8 +27,7 @@ import uniffi.matrix_sdk_ui.EventItemOrigin
@OptIn(ExperimentalCoroutinesApi::class) @OptIn(ExperimentalCoroutinesApi::class)
class TimelineItemsSubscriberTest { class TimelineItemsSubscriberTest {
@Ignore("JNA direct mapping has broken unit tests with FFI fakes") @Test
@Test
fun `when timeline emits an empty list of items, the flow must emits an empty list`() = runTest { fun `when timeline emits an empty list of items, the flow must emits an empty list`() = runTest {
val timelineItems: MutableSharedFlow<List<MatrixTimelineItem>> = val timelineItems: MutableSharedFlow<List<MatrixTimelineItem>> =
MutableSharedFlow(replay = 1, extraBufferCapacity = Int.MAX_VALUE) MutableSharedFlow(replay = 1, extraBufferCapacity = Int.MAX_VALUE)
@ -52,8 +50,7 @@ class TimelineItemsSubscriberTest {
} }
} }
@Ignore("JNA direct mapping has broken unit tests with FFI fakes") @Test
@Test
fun `when timeline emits a non empty list of items, the flow must emits a non empty list`() = runTest { fun `when timeline emits a non empty list of items, the flow must emits a non empty list`() = runTest {
val timelineItems: MutableSharedFlow<List<MatrixTimelineItem>> = val timelineItems: MutableSharedFlow<List<MatrixTimelineItem>> =
MutableSharedFlow(replay = 1, extraBufferCapacity = Int.MAX_VALUE) MutableSharedFlow(replay = 1, extraBufferCapacity = Int.MAX_VALUE)
@ -76,8 +73,7 @@ class TimelineItemsSubscriberTest {
} }
} }
@Ignore("JNA direct mapping has broken unit tests with FFI fakes") @Test
@Test
fun `when timeline emits an item with SYNC origin`() = runTest { fun `when timeline emits an item with SYNC origin`() = runTest {
val timelineItems: MutableSharedFlow<List<MatrixTimelineItem>> = val timelineItems: MutableSharedFlow<List<MatrixTimelineItem>> =
MutableSharedFlow(replay = 1, extraBufferCapacity = Int.MAX_VALUE) MutableSharedFlow(replay = 1, extraBufferCapacity = Int.MAX_VALUE)
@ -108,8 +104,7 @@ class TimelineItemsSubscriberTest {
} }
} }
@Ignore("JNA direct mapping has broken unit tests with FFI fakes") @Test
@Test
fun `multiple subscriptions does not have side effect`() = runTest { fun `multiple subscriptions does not have side effect`() = runTest {
val timelineItemsSubscriber = createTimelineItemsSubscriber() val timelineItemsSubscriber = createTimelineItemsSubscriber()
timelineItemsSubscriber.subscribeIfNeeded() timelineItemsSubscriber.subscribeIfNeeded()