Rename classes overriding classes from the FFI layer. (#4817)

* Rename classes overriding classes from the FFI layer.

* For other Konsist test.
This commit is contained in:
Benoit Marty 2025-06-04 16:13:57 +02:00 committed by GitHub
parent 3ae8d77c9a
commit 7a3db35ccb
43 changed files with 155 additions and 143 deletions

View file

@ -7,11 +7,11 @@
package io.element.android.libraries.matrix.impl package io.element.android.libraries.matrix.impl
import io.element.android.libraries.matrix.impl.fixtures.fakes.FakeRustClientBuilder import io.element.android.libraries.matrix.impl.fixtures.fakes.FakeFfiClientBuilder
import org.matrix.rustcomponents.sdk.ClientBuilder import org.matrix.rustcomponents.sdk.ClientBuilder
class FakeClientBuilderProvider : ClientBuilderProvider { class FakeClientBuilderProvider : ClientBuilderProvider {
override fun provide(): ClientBuilder { override fun provide(): ClientBuilder {
return FakeRustClientBuilder() return FakeFfiClientBuilder()
} }
} }

View file

@ -9,8 +9,8 @@ package io.element.android.libraries.matrix.impl
import com.google.common.truth.Truth.assertThat import com.google.common.truth.Truth.assertThat
import io.element.android.libraries.featureflag.test.FakeFeatureFlagService import io.element.android.libraries.featureflag.test.FakeFeatureFlagService
import io.element.android.libraries.matrix.impl.fixtures.fakes.FakeRustClient import io.element.android.libraries.matrix.impl.fixtures.fakes.FakeFfiClient
import io.element.android.libraries.matrix.impl.fixtures.fakes.FakeRustSyncService import io.element.android.libraries.matrix.impl.fixtures.fakes.FakeFfiSyncService
import io.element.android.libraries.matrix.impl.room.FakeTimelineEventTypeFilterFactory import io.element.android.libraries.matrix.impl.room.FakeTimelineEventTypeFilterFactory
import io.element.android.libraries.matrix.test.A_DEVICE_ID import io.element.android.libraries.matrix.test.A_DEVICE_ID
import io.element.android.libraries.matrix.test.A_USER_ID import io.element.android.libraries.matrix.test.A_USER_ID
@ -40,7 +40,7 @@ class RustMatrixClientTest {
val clearCachesResult = lambdaRecorder<Unit> { } val clearCachesResult = lambdaRecorder<Unit> { }
val closeResult = lambdaRecorder<Unit> { } val closeResult = lambdaRecorder<Unit> { }
val client = createRustMatrixClient( val client = createRustMatrixClient(
client = FakeRustClient( client = FakeFfiClient(
clearCachesResult = clearCachesResult, clearCachesResult = clearCachesResult,
closeResult = closeResult, closeResult = closeResult,
) )
@ -52,7 +52,7 @@ class RustMatrixClientTest {
} }
private fun TestScope.createRustMatrixClient( private fun TestScope.createRustMatrixClient(
client: Client = FakeRustClient(), client: Client = FakeFfiClient(),
sessionStore: SessionStore = InMemorySessionStore(), sessionStore: SessionStore = InMemorySessionStore(),
) = RustMatrixClient( ) = RustMatrixClient(
innerClient = client, innerClient = client,
@ -62,7 +62,7 @@ class RustMatrixClientTest {
sessionDelegate = aRustClientSessionDelegate( sessionDelegate = aRustClientSessionDelegate(
sessionStore = sessionStore, sessionStore = sessionStore,
), ),
innerSyncService = FakeRustSyncService(), innerSyncService = FakeFfiSyncService(),
dispatchers = testCoroutineDispatchers(), dispatchers = testCoroutineDispatchers(),
baseCacheDirectory = File(""), baseCacheDirectory = File(""),
clock = FakeSystemClock(), clock = FakeSystemClock(),

View file

@ -9,14 +9,14 @@ 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.FakeRustHomeserverLoginDetails import io.element.android.libraries.matrix.impl.fixtures.fakes.FakeFfiHomeserverLoginDetails
import org.junit.Test import org.junit.Test
class HomeserverDetailsKtTest { class HomeserverDetailsKtTest {
@Test @Test
fun `map should be correct`() { fun `map should be correct`() {
// Given // Given
val homeserverLoginDetails = FakeRustHomeserverLoginDetails( val homeserverLoginDetails = FakeFfiHomeserverLoginDetails(
url = "https://example.org", url = "https://example.org",
supportsPasswordLogin = true, supportsPasswordLogin = true,
supportsOidcLogin = false supportsOidcLogin = false

View file

@ -8,7 +8,7 @@
package io.element.android.libraries.matrix.impl.auth.qrlogin 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.FakeQrCodeData 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.Test import org.junit.Test
@ -16,7 +16,7 @@ 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`() {
val sut = SdkQrCodeLoginData( val sut = SdkQrCodeLoginData(
rustQrCodeData = FakeQrCodeData( rustQrCodeData = FakeFfiQrCodeData(
serverNameResult = { null }, serverNameResult = { null },
), ),
) )
@ -26,7 +26,7 @@ class SdkQrCodeLoginDataTest {
@Test @Test
fun `getServer reads the value from the Rust side`() { fun `getServer reads the value from the Rust side`() {
val sut = SdkQrCodeLoginData( val sut = SdkQrCodeLoginData(
rustQrCodeData = FakeQrCodeData( rustQrCodeData = FakeFfiQrCodeData(
serverNameResult = { A_HOMESERVER_URL }, serverNameResult = { A_HOMESERVER_URL },
), ),
) )

View file

@ -7,7 +7,7 @@
package io.element.android.libraries.matrix.impl.fixtures.factories package io.element.android.libraries.matrix.impl.fixtures.factories
import io.element.android.libraries.matrix.impl.fixtures.fakes.FakeRustLazyTimelineItemProvider import io.element.android.libraries.matrix.impl.fixtures.fakes.FakeFfiLazyTimelineItemProvider
import io.element.android.libraries.matrix.test.AN_EVENT_ID import io.element.android.libraries.matrix.test.AN_EVENT_ID
import io.element.android.libraries.matrix.test.A_USER_ID import io.element.android.libraries.matrix.test.A_USER_ID
import org.matrix.rustcomponents.sdk.EventOrTransactionId import org.matrix.rustcomponents.sdk.EventOrTransactionId
@ -50,7 +50,7 @@ fun aRustEventTimelineItem(
readReceipts = readReceipts, readReceipts = readReceipts,
origin = origin, origin = origin,
localCreatedAt = localCreatedAt, localCreatedAt = localCreatedAt,
lazyProvider = FakeRustLazyTimelineItemProvider( lazyProvider = FakeFfiLazyTimelineItemProvider(
debugInfo = debugInfo, debugInfo = debugInfo,
shieldsState = shieldsState, shieldsState = shieldsState,
) )

View file

@ -8,7 +8,7 @@
package io.element.android.libraries.matrix.impl.fixtures.factories package io.element.android.libraries.matrix.impl.fixtures.factories
import io.element.android.libraries.matrix.api.core.ThreadId import io.element.android.libraries.matrix.api.core.ThreadId
import io.element.android.libraries.matrix.impl.fixtures.fakes.FakeRustTimelineEvent import io.element.android.libraries.matrix.impl.fixtures.fakes.FakeFfiTimelineEvent
import io.element.android.libraries.matrix.test.A_ROOM_NAME import io.element.android.libraries.matrix.test.A_ROOM_NAME
import io.element.android.libraries.matrix.test.A_USER_NAME import io.element.android.libraries.matrix.test.A_USER_NAME
import org.matrix.rustcomponents.sdk.JoinRule import org.matrix.rustcomponents.sdk.JoinRule
@ -65,7 +65,7 @@ fun aRustNotificationRoomInfo(
) )
fun aRustNotificationEventTimeline( fun aRustNotificationEventTimeline(
event: TimelineEvent = FakeRustTimelineEvent(), event: TimelineEvent = FakeFfiTimelineEvent(),
) = NotificationEvent.Timeline( ) = NotificationEvent.Timeline(
event = event, event = event,
) )

View file

@ -30,12 +30,12 @@ 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
class FakeRustClient( class FakeFfiClient(
private val userId: String = A_USER_ID.value, private val userId: String = A_USER_ID.value,
private val deviceId: String = A_DEVICE_ID.value, private val deviceId: String = A_DEVICE_ID.value,
private val notificationClient: NotificationClient = FakeRustNotificationClient(), private val notificationClient: NotificationClient = FakeFfiNotificationClient(),
private val notificationSettings: NotificationSettings = FakeRustNotificationSettings(), private val notificationSettings: NotificationSettings = FakeFfiNotificationSettings(),
private val encryption: Encryption = FakeRustEncryption(), private val encryption: Encryption = FakeFfiEncryption(),
private val session: Session = aRustSession(), private val session: Session = aRustSession(),
private val clearCachesResult: () -> Unit = { lambdaError() }, private val clearCachesResult: () -> Unit = { lambdaError() },
private val withUtdHook: (UnableToDecryptDelegate) -> Unit = { lambdaError() }, private val withUtdHook: (UnableToDecryptDelegate) -> Unit = { lambdaError() },
@ -47,11 +47,11 @@ class FakeRustClient(
override suspend fun getNotificationSettings(): NotificationSettings = notificationSettings override suspend fun getNotificationSettings(): NotificationSettings = notificationSettings
override fun encryption(): Encryption = encryption override fun encryption(): Encryption = encryption
override fun session(): Session = session override fun session(): Session = session
override fun setDelegate(delegate: ClientDelegate?): TaskHandle = FakeRustTaskHandle() override fun setDelegate(delegate: ClientDelegate?): TaskHandle = FakeFfiTaskHandle()
override suspend fun cachedAvatarUrl(): String? = null override suspend fun cachedAvatarUrl(): String? = null
override suspend fun restoreSession(session: Session) = Unit override suspend fun restoreSession(session: Session) = Unit
override fun syncService(): SyncServiceBuilder = FakeRustSyncServiceBuilder() override fun syncService(): SyncServiceBuilder = FakeFfiSyncServiceBuilder()
override fun roomDirectorySearch(): RoomDirectorySearch = FakeRustRoomDirectorySearch() override fun roomDirectorySearch(): RoomDirectorySearch = FakeFfiRoomDirectorySearch()
override suspend fun setPusher( override suspend fun setPusher(
identifiers: PusherIdentifiers, identifiers: PusherIdentifiers,
kind: PusherKind, kind: PusherKind,
@ -64,12 +64,12 @@ class FakeRustClient(
override suspend fun deletePusher(identifiers: PusherIdentifiers) = Unit override suspend fun deletePusher(identifiers: PusherIdentifiers) = Unit
override suspend fun clearCaches() = simulateLongTask { clearCachesResult() } override suspend fun clearCaches() = simulateLongTask { clearCachesResult() }
override suspend fun setUtdDelegate(utdDelegate: UnableToDecryptDelegate) = withUtdHook(utdDelegate) override suspend fun setUtdDelegate(utdDelegate: UnableToDecryptDelegate) = withUtdHook(utdDelegate)
override suspend fun getSessionVerificationController(): SessionVerificationController = FakeRustSessionVerificationController() override suspend fun getSessionVerificationController(): SessionVerificationController = FakeFfiSessionVerificationController()
override suspend fun ignoredUsers(): List<String> { override suspend fun ignoredUsers(): List<String> {
return emptyList() return emptyList()
} }
override fun subscribeToIgnoredUsers(listener: IgnoredUsersListener): TaskHandle { override fun subscribeToIgnoredUsers(listener: IgnoredUsersListener): TaskHandle {
return FakeRustTaskHandle() return FakeFfiTaskHandle()
} }
override suspend fun getProfile(userId: String): UserProfile { override suspend fun getProfile(userId: String): UserProfile {

View file

@ -20,7 +20,7 @@ import uniffi.matrix_sdk.BackupDownloadStrategy
import uniffi.matrix_sdk_crypto.CollectStrategy import uniffi.matrix_sdk_crypto.CollectStrategy
import uniffi.matrix_sdk_crypto.TrustRequirement import uniffi.matrix_sdk_crypto.TrustRequirement
class FakeRustClientBuilder : ClientBuilder(NoPointer) { class FakeFfiClientBuilder : ClientBuilder(NoPointer) {
override fun addRootCertificates(certificates: List<ByteArray>) = this override fun addRootCertificates(certificates: List<ByteArray>) = this
override fun autoEnableBackups(autoEnableBackups: Boolean) = this override fun autoEnableBackups(autoEnableBackups: Boolean) = this
override fun autoEnableCrossSigning(autoEnableCrossSigning: Boolean) = this override fun autoEnableCrossSigning(autoEnableCrossSigning: Boolean) = this
@ -43,10 +43,10 @@ class FakeRustClientBuilder : ClientBuilder(NoPointer) {
override fun username(username: String) = this override fun username(username: String) = this
override suspend fun buildWithQrCode(qrCodeData: QrCodeData, oidcConfiguration: OidcConfiguration, progressListener: QrLoginProgressListener): Client { override suspend fun buildWithQrCode(qrCodeData: QrCodeData, oidcConfiguration: OidcConfiguration, progressListener: QrLoginProgressListener): Client {
return FakeRustClient() return FakeFfiClient()
} }
override suspend fun build(): Client { override suspend fun build(): Client {
return FakeRustClient(withUtdHook = {}) return FakeFfiClient(withUtdHook = {})
} }
} }

View file

@ -17,13 +17,13 @@ import org.matrix.rustcomponents.sdk.RecoveryStateListener
import org.matrix.rustcomponents.sdk.TaskHandle import org.matrix.rustcomponents.sdk.TaskHandle
import org.matrix.rustcomponents.sdk.VerificationStateListener import org.matrix.rustcomponents.sdk.VerificationStateListener
class FakeRustEncryption : Encryption(NoPointer) { class FakeFfiEncryption : Encryption(NoPointer) {
override fun verificationStateListener(listener: VerificationStateListener): TaskHandle { override fun verificationStateListener(listener: VerificationStateListener): TaskHandle {
return FakeRustTaskHandle() return FakeFfiTaskHandle()
} }
override fun recoveryStateListener(listener: RecoveryStateListener): TaskHandle { override fun recoveryStateListener(listener: RecoveryStateListener): TaskHandle {
return FakeRustTaskHandle() return FakeFfiTaskHandle()
} }
override suspend fun waitForE2eeInitializationTasks() = simulateLongTask {} override suspend fun waitForE2eeInitializationTasks() = simulateLongTask {}
@ -41,6 +41,6 @@ class FakeRustEncryption : Encryption(NoPointer) {
} }
override fun backupStateListener(listener: BackupStateListener): TaskHandle { override fun backupStateListener(listener: BackupStateListener): TaskHandle {
return FakeRustTaskHandle() return FakeFfiTaskHandle()
} }
} }

View file

@ -10,7 +10,7 @@ package io.element.android.libraries.matrix.impl.fixtures.fakes
import org.matrix.rustcomponents.sdk.HomeserverLoginDetails import org.matrix.rustcomponents.sdk.HomeserverLoginDetails
import org.matrix.rustcomponents.sdk.NoPointer import org.matrix.rustcomponents.sdk.NoPointer
class FakeRustHomeserverLoginDetails( class FakeFfiHomeserverLoginDetails(
private val url: String = "https://example.org", private val url: String = "https://example.org",
private val supportsPasswordLogin: Boolean = true, private val supportsPasswordLogin: Boolean = true,
private val supportsOidcLogin: Boolean = false private val supportsOidcLogin: Boolean = false

View file

@ -14,7 +14,7 @@ import org.matrix.rustcomponents.sdk.NoPointer
import org.matrix.rustcomponents.sdk.SendHandle import org.matrix.rustcomponents.sdk.SendHandle
import org.matrix.rustcomponents.sdk.ShieldState import org.matrix.rustcomponents.sdk.ShieldState
class FakeRustLazyTimelineItemProvider( class FakeFfiLazyTimelineItemProvider(
private val debugInfo: EventTimelineItemDebugInfo = anEventTimelineItemDebugInfo(), private val debugInfo: EventTimelineItemDebugInfo = anEventTimelineItemDebugInfo(),
private val shieldsState: ShieldState? = null, private val shieldsState: ShieldState? = null,
) : LazyTimelineItemProvider(NoPointer) { ) : LazyTimelineItemProvider(NoPointer) {

View file

@ -12,7 +12,7 @@ import org.matrix.rustcomponents.sdk.NotificationClient
import org.matrix.rustcomponents.sdk.NotificationItem import org.matrix.rustcomponents.sdk.NotificationItem
import org.matrix.rustcomponents.sdk.NotificationItemsRequest import org.matrix.rustcomponents.sdk.NotificationItemsRequest
class FakeRustNotificationClient( class FakeFfiNotificationClient(
var notificationItemResult: Map<String, NotificationItem> = emptyMap(), var notificationItemResult: Map<String, NotificationItem> = emptyMap(),
) : NotificationClient(NoPointer) { ) : NotificationClient(NoPointer) {
override suspend fun getNotifications(requests: List<NotificationItemsRequest>): Map<String, NotificationItem> { override suspend fun getNotifications(requests: List<NotificationItemsRequest>): Map<String, NotificationItem> {

View file

@ -13,7 +13,7 @@ import org.matrix.rustcomponents.sdk.NotificationSettings
import org.matrix.rustcomponents.sdk.NotificationSettingsDelegate import org.matrix.rustcomponents.sdk.NotificationSettingsDelegate
import org.matrix.rustcomponents.sdk.RoomNotificationSettings import org.matrix.rustcomponents.sdk.RoomNotificationSettings
class FakeRustNotificationSettings( class FakeFfiNotificationSettings(
private val roomNotificationSettings: RoomNotificationSettings = aRustRoomNotificationSettings(), private val roomNotificationSettings: RoomNotificationSettings = aRustRoomNotificationSettings(),
) : NotificationSettings(NoPointer) { ) : NotificationSettings(NoPointer) {
private var delegate: NotificationSettingsDelegate? = null private var delegate: NotificationSettingsDelegate? = null

View file

@ -11,7 +11,7 @@ import io.element.android.tests.testutils.lambda.lambdaError
import org.matrix.rustcomponents.sdk.NoPointer import org.matrix.rustcomponents.sdk.NoPointer
import org.matrix.rustcomponents.sdk.QrCodeData import org.matrix.rustcomponents.sdk.QrCodeData
class FakeQrCodeData( class FakeFfiQrCodeData(
private val serverNameResult: () -> String? = { lambdaError() }, private val serverNameResult: () -> String? = { lambdaError() },
) : QrCodeData(NoPointer) { ) : QrCodeData(NoPointer) {
override fun serverName(): String? { override fun serverName(): String? {

View file

@ -17,7 +17,7 @@ import org.matrix.rustcomponents.sdk.Room
import org.matrix.rustcomponents.sdk.RoomInfo import org.matrix.rustcomponents.sdk.RoomInfo
import org.matrix.rustcomponents.sdk.RoomMembersIterator import org.matrix.rustcomponents.sdk.RoomMembersIterator
class FakeRustRoom( class FakeFfiRoom(
private val roomId: RoomId = A_ROOM_ID, private val roomId: RoomId = A_ROOM_ID,
private val getMembers: () -> RoomMembersIterator = { lambdaError() }, private val getMembers: () -> RoomMembersIterator = { lambdaError() },
private val getMembersNoSync: () -> RoomMembersIterator = { lambdaError() }, private val getMembersNoSync: () -> RoomMembersIterator = { lambdaError() },

View file

@ -14,7 +14,7 @@ import org.matrix.rustcomponents.sdk.RoomDirectorySearchEntriesListener
import org.matrix.rustcomponents.sdk.RoomDirectorySearchEntryUpdate import org.matrix.rustcomponents.sdk.RoomDirectorySearchEntryUpdate
import org.matrix.rustcomponents.sdk.TaskHandle import org.matrix.rustcomponents.sdk.TaskHandle
class FakeRustRoomDirectorySearch( class FakeFfiRoomDirectorySearch(
var isAtLastPage: Boolean = false, var isAtLastPage: Boolean = false,
) : RoomDirectorySearch(NoPointer) { ) : RoomDirectorySearch(NoPointer) {
override suspend fun isAtLastPage(): Boolean { override suspend fun isAtLastPage(): Boolean {
@ -28,7 +28,7 @@ class FakeRustRoomDirectorySearch(
override suspend fun results(listener: RoomDirectorySearchEntriesListener): TaskHandle { override suspend fun results(listener: RoomDirectorySearchEntriesListener): TaskHandle {
this.listener = listener this.listener = listener
return FakeRustTaskHandle() return FakeFfiTaskHandle()
} }
fun emitResult(roomEntriesUpdate: List<RoomDirectorySearchEntryUpdate>) { fun emitResult(roomEntriesUpdate: List<RoomDirectorySearchEntryUpdate>) {

View file

@ -10,4 +10,4 @@ package io.element.android.libraries.matrix.impl.fixtures.fakes
import org.matrix.rustcomponents.sdk.NoPointer import org.matrix.rustcomponents.sdk.NoPointer
import org.matrix.rustcomponents.sdk.RoomList import org.matrix.rustcomponents.sdk.RoomList
class FakeRustRoomList : RoomList(NoPointer) class FakeFfiRoomList : RoomList(NoPointer)

View file

@ -15,9 +15,9 @@ import org.matrix.rustcomponents.sdk.RoomListServiceSyncIndicator
import org.matrix.rustcomponents.sdk.RoomListServiceSyncIndicatorListener import org.matrix.rustcomponents.sdk.RoomListServiceSyncIndicatorListener
import org.matrix.rustcomponents.sdk.TaskHandle import org.matrix.rustcomponents.sdk.TaskHandle
class FakeRustRoomListService : RoomListService(NoPointer) { class FakeFfiRoomListService : RoomListService(NoPointer) {
override suspend fun allRooms(): RoomList { override suspend fun allRooms(): RoomList {
return FakeRustRoomList() return FakeFfiRoomList()
} }
private var listener: RoomListServiceSyncIndicatorListener? = null private var listener: RoomListServiceSyncIndicatorListener? = null
@ -27,7 +27,7 @@ class FakeRustRoomListService : RoomListService(NoPointer) {
listener: RoomListServiceSyncIndicatorListener, listener: RoomListServiceSyncIndicatorListener,
): TaskHandle { ): TaskHandle {
this.listener = listener this.listener = listener
return FakeRustTaskHandle() return FakeFfiTaskHandle()
} }
fun emitRoomListServiceSyncIndicator(syncIndicator: RoomListServiceSyncIndicator) { fun emitRoomListServiceSyncIndicator(syncIndicator: RoomListServiceSyncIndicator) {
@ -35,6 +35,6 @@ class FakeRustRoomListService : RoomListService(NoPointer) {
} }
override fun state(listener: RoomListServiceStateListener): TaskHandle { override fun state(listener: RoomListServiceStateListener): TaskHandle {
return FakeRustTaskHandle() return FakeFfiTaskHandle()
} }
} }

View file

@ -11,7 +11,7 @@ import org.matrix.rustcomponents.sdk.NoPointer
import org.matrix.rustcomponents.sdk.RoomMember import org.matrix.rustcomponents.sdk.RoomMember
import org.matrix.rustcomponents.sdk.RoomMembersIterator import org.matrix.rustcomponents.sdk.RoomMembersIterator
class FakeRustRoomMembersIterator( class FakeFfiRoomMembersIterator(
private var members: List<RoomMember>? = null private var members: List<RoomMember>? = null
) : RoomMembersIterator(NoPointer) { ) : RoomMembersIterator(NoPointer) {
override fun len(): UInt { override fun len(): UInt {

View file

@ -11,6 +11,6 @@ import org.matrix.rustcomponents.sdk.NoPointer
import org.matrix.rustcomponents.sdk.SessionVerificationController import org.matrix.rustcomponents.sdk.SessionVerificationController
import org.matrix.rustcomponents.sdk.SessionVerificationControllerDelegate import org.matrix.rustcomponents.sdk.SessionVerificationControllerDelegate
class FakeRustSessionVerificationController : SessionVerificationController(NoPointer) { class FakeFfiSessionVerificationController : SessionVerificationController(NoPointer) {
override fun setDelegate(delegate: SessionVerificationControllerDelegate?) {} override fun setDelegate(delegate: SessionVerificationControllerDelegate?) {}
} }

View file

@ -13,12 +13,12 @@ import org.matrix.rustcomponents.sdk.SyncService
import org.matrix.rustcomponents.sdk.SyncServiceStateObserver import org.matrix.rustcomponents.sdk.SyncServiceStateObserver
import org.matrix.rustcomponents.sdk.TaskHandle import org.matrix.rustcomponents.sdk.TaskHandle
class FakeRustSyncService( class FakeFfiSyncService(
private val roomListService: RoomListService = FakeRustRoomListService(), private val roomListService: RoomListService = FakeFfiRoomListService(),
) : SyncService(NoPointer) { ) : SyncService(NoPointer) {
override fun roomListService(): RoomListService = roomListService override fun roomListService(): RoomListService = roomListService
override fun state(listener: SyncServiceStateObserver): TaskHandle { override fun state(listener: SyncServiceStateObserver): TaskHandle {
return FakeRustTaskHandle() return FakeFfiTaskHandle()
} }
override suspend fun stop() {} override suspend fun stop() {}
} }

View file

@ -11,7 +11,7 @@ import org.matrix.rustcomponents.sdk.NoPointer
import org.matrix.rustcomponents.sdk.SyncService import org.matrix.rustcomponents.sdk.SyncService
import org.matrix.rustcomponents.sdk.SyncServiceBuilder import org.matrix.rustcomponents.sdk.SyncServiceBuilder
class FakeRustSyncServiceBuilder : SyncServiceBuilder(NoPointer) { class FakeFfiSyncServiceBuilder : SyncServiceBuilder(NoPointer) {
override fun withOfflineMode(): SyncServiceBuilder = this override fun withOfflineMode(): SyncServiceBuilder = this
override suspend fun finish(): SyncService = FakeRustSyncService() override suspend fun finish(): SyncService = FakeFfiSyncService()
} }

View file

@ -10,7 +10,7 @@ package io.element.android.libraries.matrix.impl.fixtures.fakes
import org.matrix.rustcomponents.sdk.NoPointer import org.matrix.rustcomponents.sdk.NoPointer
import org.matrix.rustcomponents.sdk.TaskHandle import org.matrix.rustcomponents.sdk.TaskHandle
class FakeRustTaskHandle : TaskHandle(NoPointer) { class FakeFfiTaskHandle : TaskHandle(NoPointer) {
override fun cancel() = Unit override fun cancel() = Unit
override fun destroy() = Unit override fun destroy() = Unit
} }

View file

@ -15,11 +15,11 @@ import org.matrix.rustcomponents.sdk.TimelineDiff
import org.matrix.rustcomponents.sdk.TimelineListener import org.matrix.rustcomponents.sdk.TimelineListener
import uniffi.matrix_sdk.RoomPaginationStatus import uniffi.matrix_sdk.RoomPaginationStatus
class FakeRustTimeline : Timeline(NoPointer) { class FakeFfiTimeline : Timeline(NoPointer) {
private var listener: TimelineListener? = null private var listener: TimelineListener? = null
override suspend fun addListener(listener: TimelineListener): TaskHandle { override suspend fun addListener(listener: TimelineListener): TaskHandle {
this.listener = listener this.listener = listener
return FakeRustTaskHandle() return FakeFfiTaskHandle()
} }
fun emitDiff(diff: List<TimelineDiff>) { fun emitDiff(diff: List<TimelineDiff>) {
@ -29,7 +29,7 @@ class FakeRustTimeline : Timeline(NoPointer) {
private var paginationStatusListener: PaginationStatusListener? = null private var paginationStatusListener: PaginationStatusListener? = null
override suspend fun subscribeToBackPaginationStatus(listener: PaginationStatusListener): TaskHandle { override suspend fun subscribeToBackPaginationStatus(listener: PaginationStatusListener): TaskHandle {
this.paginationStatusListener = listener this.paginationStatusListener = listener
return FakeRustTaskHandle() return FakeFfiTaskHandle()
} }
fun emitPaginationStatus(status: RoomPaginationStatus) { fun emitPaginationStatus(status: RoomPaginationStatus) {

View file

@ -14,9 +14,9 @@ import org.matrix.rustcomponents.sdk.TimelineChange
import org.matrix.rustcomponents.sdk.TimelineDiff import org.matrix.rustcomponents.sdk.TimelineDiff
import org.matrix.rustcomponents.sdk.TimelineItem import org.matrix.rustcomponents.sdk.TimelineItem
class FakeRustTimelineDiff( class FakeFfiTimelineDiff(
private val change: TimelineChange, private val change: TimelineChange,
private val item: TimelineItem? = FakeRustTimelineItem() private val item: TimelineItem? = FakeFfiTimelineItem()
) : TimelineDiff(NoPointer) { ) : TimelineDiff(NoPointer) {
override fun change() = change override fun change() = change
override fun append(): List<TimelineItem>? = item?.let { listOf(it) } override fun append(): List<TimelineItem>? = item?.let { listOf(it) }

View file

@ -14,7 +14,7 @@ import org.matrix.rustcomponents.sdk.NoPointer
import org.matrix.rustcomponents.sdk.TimelineEvent import org.matrix.rustcomponents.sdk.TimelineEvent
import org.matrix.rustcomponents.sdk.TimelineEventType import org.matrix.rustcomponents.sdk.TimelineEventType
class FakeRustTimelineEvent( class FakeFfiTimelineEvent(
val timestamp: ULong = A_FAKE_TIMESTAMP.toULong(), val timestamp: ULong = A_FAKE_TIMESTAMP.toULong(),
val timelineEventType: TimelineEventType = aRustTimelineEventTypeMessageLike(), val timelineEventType: TimelineEventType = aRustTimelineEventTypeMessageLike(),
val senderId: String = A_USER_ID_2.value, val senderId: String = A_USER_ID_2.value,

View file

@ -10,4 +10,4 @@ package io.element.android.libraries.matrix.impl.fixtures.fakes
import org.matrix.rustcomponents.sdk.NoPointer import org.matrix.rustcomponents.sdk.NoPointer
import org.matrix.rustcomponents.sdk.TimelineEventTypeFilter import org.matrix.rustcomponents.sdk.TimelineEventTypeFilter
class FakeRustTimelineEventTypeFilter : TimelineEventTypeFilter(NoPointer) class FakeFfiTimelineEventTypeFilter : TimelineEventTypeFilter(NoPointer)

View file

@ -13,7 +13,7 @@ import org.matrix.rustcomponents.sdk.TimelineItem
import org.matrix.rustcomponents.sdk.TimelineUniqueId import org.matrix.rustcomponents.sdk.TimelineUniqueId
import org.matrix.rustcomponents.sdk.VirtualTimelineItem import org.matrix.rustcomponents.sdk.VirtualTimelineItem
class FakeRustTimelineItem( class FakeFfiTimelineItem(
private val asEventResult: EventTimelineItem? = null, private val asEventResult: EventTimelineItem? = null,
) : TimelineItem(NoPointer) { ) : TimelineItem(NoPointer) {
override fun asEvent(): EventTimelineItem? = asEventResult override fun asEvent(): EventTimelineItem? = asEventResult

View file

@ -11,7 +11,7 @@ import com.google.common.truth.Truth.assertThat
import io.element.android.libraries.matrix.api.notification.NotificationContent import io.element.android.libraries.matrix.api.notification.NotificationContent
import io.element.android.libraries.matrix.api.timeline.item.event.TextMessageType import io.element.android.libraries.matrix.api.timeline.item.event.TextMessageType
import io.element.android.libraries.matrix.impl.fixtures.factories.aRustNotificationItem import io.element.android.libraries.matrix.impl.fixtures.factories.aRustNotificationItem
import io.element.android.libraries.matrix.impl.fixtures.fakes.FakeRustNotificationClient import io.element.android.libraries.matrix.impl.fixtures.fakes.FakeFfiNotificationClient
import io.element.android.libraries.matrix.test.AN_EVENT_ID import io.element.android.libraries.matrix.test.AN_EVENT_ID
import io.element.android.libraries.matrix.test.A_MESSAGE import io.element.android.libraries.matrix.test.A_MESSAGE
import io.element.android.libraries.matrix.test.A_ROOM_ID import io.element.android.libraries.matrix.test.A_ROOM_ID
@ -28,7 +28,7 @@ import org.matrix.rustcomponents.sdk.NotificationClient
class RustNotificationServiceTest { class RustNotificationServiceTest {
@Test @Test
fun test() = runTest { fun test() = runTest {
val notificationClient = FakeRustNotificationClient( val notificationClient = FakeFfiNotificationClient(
notificationItemResult = mapOf(AN_EVENT_ID.value to aRustNotificationItem()), notificationItemResult = mapOf(AN_EVENT_ID.value to aRustNotificationItem()),
) )
val sut = createRustNotificationService( val sut = createRustNotificationService(
@ -48,7 +48,7 @@ class RustNotificationServiceTest {
} }
private fun TestScope.createRustNotificationService( private fun TestScope.createRustNotificationService(
notificationClient: NotificationClient = FakeRustNotificationClient(), notificationClient: NotificationClient = FakeFfiNotificationClient(),
clock: SystemClock = FakeSystemClock(), clock: SystemClock = FakeSystemClock(),
) = ) =
RustNotificationService( RustNotificationService(

View file

@ -9,8 +9,8 @@ package io.element.android.libraries.matrix.impl.notificationsettings
import com.google.common.truth.Truth.assertThat import com.google.common.truth.Truth.assertThat
import io.element.android.libraries.matrix.api.room.RoomNotificationMode import io.element.android.libraries.matrix.api.room.RoomNotificationMode
import io.element.android.libraries.matrix.impl.fixtures.fakes.FakeRustClient import io.element.android.libraries.matrix.impl.fixtures.fakes.FakeFfiClient
import io.element.android.libraries.matrix.impl.fixtures.fakes.FakeRustNotificationSettings import io.element.android.libraries.matrix.impl.fixtures.fakes.FakeFfiNotificationSettings
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.testCoroutineDispatchers import io.element.android.tests.testutils.testCoroutineDispatchers
import kotlinx.coroutines.test.TestScope import kotlinx.coroutines.test.TestScope
@ -32,9 +32,9 @@ class RustNotificationSettingsServiceTest {
} }
private fun TestScope.createRustNotificationSettingsService( private fun TestScope.createRustNotificationSettingsService(
notificationSettings: NotificationSettings = FakeRustNotificationSettings(), notificationSettings: NotificationSettings = FakeFfiNotificationSettings(),
) = RustNotificationSettingsService( ) = RustNotificationSettingsService(
client = FakeRustClient( client = FakeFfiClient(
notificationSettings = notificationSettings, notificationSettings = notificationSettings,
), ),
sessionCoroutineScope = this, sessionCoroutineScope = this,

View file

@ -9,7 +9,7 @@ package io.element.android.libraries.matrix.impl.pushers
import io.element.android.libraries.matrix.api.pusher.SetHttpPusherData import io.element.android.libraries.matrix.api.pusher.SetHttpPusherData
import io.element.android.libraries.matrix.api.pusher.UnsetHttpPusherData import io.element.android.libraries.matrix.api.pusher.UnsetHttpPusherData
import io.element.android.libraries.matrix.impl.fixtures.fakes.FakeRustClient 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.Test import org.junit.Test
@ -18,7 +18,7 @@ class RustPushersServiceTest {
@Test @Test
fun `setPusher should invoke the client method`() = runTest { fun `setPusher should invoke the client method`() = runTest {
val sut = RustPushersService( val sut = RustPushersService(
client = FakeRustClient(), client = FakeFfiClient(),
dispatchers = testCoroutineDispatchers() dispatchers = testCoroutineDispatchers()
) )
sut.setHttpPusher( sut.setHttpPusher(
@ -29,7 +29,7 @@ class RustPushersServiceTest {
@Test @Test
fun `unsetPusher should invoke the client method`() = runTest { fun `unsetPusher should invoke the client method`() = runTest {
val sut = RustPushersService( val sut = RustPushersService(
client = FakeRustClient(), client = FakeFfiClient(),
dispatchers = testCoroutineDispatchers() dispatchers = testCoroutineDispatchers()
) )
sut.unsetHttpPusher( sut.unsetHttpPusher(

View file

@ -8,11 +8,11 @@
package io.element.android.libraries.matrix.impl.room package io.element.android.libraries.matrix.impl.room
import io.element.android.libraries.matrix.api.room.StateEventType import io.element.android.libraries.matrix.api.room.StateEventType
import io.element.android.libraries.matrix.impl.fixtures.fakes.FakeRustTimelineEventTypeFilter import io.element.android.libraries.matrix.impl.fixtures.fakes.FakeFfiTimelineEventTypeFilter
import org.matrix.rustcomponents.sdk.TimelineEventTypeFilter import org.matrix.rustcomponents.sdk.TimelineEventTypeFilter
class FakeTimelineEventTypeFilterFactory : TimelineEventTypeFilterFactory { class FakeTimelineEventTypeFilterFactory : TimelineEventTypeFilterFactory {
override fun create(listStateEventType: List<StateEventType>): TimelineEventTypeFilter { override fun create(listStateEventType: List<StateEventType>): TimelineEventTypeFilter {
return FakeRustTimelineEventTypeFilter() return FakeFfiTimelineEventTypeFilter()
} }
} }

View file

@ -14,8 +14,8 @@ import io.element.android.libraries.matrix.api.room.CurrentUserMembership
import io.element.android.libraries.matrix.api.room.RoomInfo import io.element.android.libraries.matrix.api.room.RoomInfo
import io.element.android.libraries.matrix.api.room.RoomMembershipObserver import io.element.android.libraries.matrix.api.room.RoomMembershipObserver
import io.element.android.libraries.matrix.api.timeline.item.event.MembershipChange import io.element.android.libraries.matrix.api.timeline.item.event.MembershipChange
import io.element.android.libraries.matrix.impl.fixtures.fakes.FakeRustRoom import io.element.android.libraries.matrix.impl.fixtures.fakes.FakeFfiRoom
import io.element.android.libraries.matrix.impl.fixtures.fakes.FakeRustRoomListService import io.element.android.libraries.matrix.impl.fixtures.fakes.FakeFfiRoomListService
import io.element.android.libraries.matrix.test.A_DEVICE_ID import io.element.android.libraries.matrix.test.A_DEVICE_ID
import io.element.android.libraries.matrix.test.A_SESSION_ID import io.element.android.libraries.matrix.test.A_SESSION_ID
import io.element.android.libraries.matrix.test.room.aRoomInfo import io.element.android.libraries.matrix.test.room.aRoomInfo
@ -41,7 +41,7 @@ class RustBaseRoomTest {
val roomMembershipObserver = RoomMembershipObserver() val roomMembershipObserver = RoomMembershipObserver()
val rustBaseRoom = createRustBaseRoom( val rustBaseRoom = createRustBaseRoom(
initialRoomInfo = aRoomInfo(currentUserMembership = CurrentUserMembership.JOINED), initialRoomInfo = aRoomInfo(currentUserMembership = CurrentUserMembership.JOINED),
innerRoom = FakeRustRoom( innerRoom = FakeFfiRoom(
leaveLambda = { leaveLambda = {
// Simulate a successful leave // Simulate a successful leave
} }
@ -61,7 +61,7 @@ class RustBaseRoomTest {
val roomMembershipObserver = RoomMembershipObserver() val roomMembershipObserver = RoomMembershipObserver()
val rustBaseRoom = createRustBaseRoom( val rustBaseRoom = createRustBaseRoom(
initialRoomInfo = aRoomInfo(currentUserMembership = CurrentUserMembership.KNOCKED), initialRoomInfo = aRoomInfo(currentUserMembership = CurrentUserMembership.KNOCKED),
innerRoom = FakeRustRoom( innerRoom = FakeFfiRoom(
leaveLambda = { leaveLambda = {
// Simulate a successful leave // Simulate a successful leave
} }
@ -81,7 +81,7 @@ class RustBaseRoomTest {
val roomMembershipObserver = RoomMembershipObserver() val roomMembershipObserver = RoomMembershipObserver()
val rustBaseRoom = createRustBaseRoom( val rustBaseRoom = createRustBaseRoom(
initialRoomInfo = aRoomInfo(currentUserMembership = CurrentUserMembership.INVITED), initialRoomInfo = aRoomInfo(currentUserMembership = CurrentUserMembership.INVITED),
innerRoom = FakeRustRoom( innerRoom = FakeFfiRoom(
leaveLambda = { leaveLambda = {
// Simulate a successful leave // Simulate a successful leave
} }
@ -101,7 +101,7 @@ class RustBaseRoomTest {
val roomMembershipObserver = RoomMembershipObserver() val roomMembershipObserver = RoomMembershipObserver()
val rustBaseRoom = createRustBaseRoom( val rustBaseRoom = createRustBaseRoom(
initialRoomInfo = aRoomInfo(currentUserMembership = CurrentUserMembership.INVITED), initialRoomInfo = aRoomInfo(currentUserMembership = CurrentUserMembership.INVITED),
innerRoom = FakeRustRoom( innerRoom = FakeFfiRoom(
leaveLambda = { error("Leave failed") } leaveLambda = { error("Leave failed") }
), ),
roomMembershipObserver = roomMembershipObserver, roomMembershipObserver = roomMembershipObserver,
@ -127,7 +127,7 @@ class RustBaseRoomTest {
private fun TestScope.createRustBaseRoom( private fun TestScope.createRustBaseRoom(
initialRoomInfo: RoomInfo = aRoomInfo(), initialRoomInfo: RoomInfo = aRoomInfo(),
innerRoom: FakeRustRoom = FakeRustRoom(), innerRoom: FakeFfiRoom = FakeFfiRoom(),
roomMembershipObserver: RoomMembershipObserver = RoomMembershipObserver(), roomMembershipObserver: RoomMembershipObserver = RoomMembershipObserver(),
): RustBaseRoom { ): RustBaseRoom {
val dispatchers = testCoroutineDispatchers() val dispatchers = testCoroutineDispatchers()
@ -137,7 +137,7 @@ class RustBaseRoomTest {
innerRoom = innerRoom, innerRoom = innerRoom,
coroutineDispatchers = dispatchers, coroutineDispatchers = dispatchers,
roomSyncSubscriber = RoomSyncSubscriber( roomSyncSubscriber = RoomSyncSubscriber(
roomListService = FakeRustRoomListService(), roomListService = FakeFfiRoomListService(),
dispatchers = dispatchers, dispatchers = dispatchers,
), ),
roomMembershipObserver = roomMembershipObserver, roomMembershipObserver = roomMembershipObserver,

View file

@ -12,8 +12,8 @@ import com.google.common.truth.Truth.assertThat
import io.element.android.libraries.matrix.api.room.RoomMembersState import io.element.android.libraries.matrix.api.room.RoomMembersState
import io.element.android.libraries.matrix.api.room.roomMembers import io.element.android.libraries.matrix.api.room.roomMembers
import io.element.android.libraries.matrix.impl.fixtures.factories.aRustRoomMember import io.element.android.libraries.matrix.impl.fixtures.factories.aRustRoomMember
import io.element.android.libraries.matrix.impl.fixtures.fakes.FakeRustRoom import io.element.android.libraries.matrix.impl.fixtures.fakes.FakeFfiRoom
import io.element.android.libraries.matrix.impl.fixtures.fakes.FakeRustRoomMembersIterator import io.element.android.libraries.matrix.impl.fixtures.fakes.FakeFfiRoomMembersIterator
import io.element.android.libraries.matrix.impl.room.member.RoomMemberListFetcher.Source.CACHE import io.element.android.libraries.matrix.impl.room.member.RoomMemberListFetcher.Source.CACHE
import io.element.android.libraries.matrix.impl.room.member.RoomMemberListFetcher.Source.CACHE_AND_SERVER import io.element.android.libraries.matrix.impl.room.member.RoomMemberListFetcher.Source.CACHE_AND_SERVER
import io.element.android.libraries.matrix.impl.room.member.RoomMemberListFetcher.Source.SERVER import io.element.android.libraries.matrix.impl.room.member.RoomMemberListFetcher.Source.SERVER
@ -28,8 +28,8 @@ import org.junit.Test
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 {
val room = FakeRustRoom(getMembersNoSync = { val room = FakeFfiRoom(getMembersNoSync = {
FakeRustRoomMembersIterator( FakeFfiRoomMembersIterator(
listOf( listOf(
aRustRoomMember(A_USER_ID), aRustRoomMember(A_USER_ID),
aRustRoomMember(A_USER_ID_2), aRustRoomMember(A_USER_ID_2),
@ -55,8 +55,8 @@ class RoomMemberListFetcherTest {
@Test @Test
fun `fetchRoomMembers with CACHE source - emits empty list, if no members exist`() = runTest { fun `fetchRoomMembers with CACHE source - emits empty list, if no members exist`() = runTest {
val room = FakeRustRoom(getMembersNoSync = { val room = FakeFfiRoom(getMembersNoSync = {
FakeRustRoomMembersIterator(emptyList()) FakeFfiRoomMembersIterator(emptyList())
}) })
val fetcher = RoomMemberListFetcher(room, Dispatchers.Default) val fetcher = RoomMemberListFetcher(room, Dispatchers.Default)
@ -70,7 +70,7 @@ class RoomMemberListFetcherTest {
@Test @Test
fun `fetchRoomMembers with CACHE source - emits Error on error found`() = runTest { fun `fetchRoomMembers with CACHE source - emits Error on error found`() = runTest {
val room = FakeRustRoom(getMembersNoSync = { val room = FakeFfiRoom(getMembersNoSync = {
error("Some unexpected issue") error("Some unexpected issue")
}) })
@ -85,8 +85,8 @@ class RoomMemberListFetcherTest {
@Test @Test
fun `fetchRoomMembers with CACHE source - emits all items at once`() = runTest { fun `fetchRoomMembers with CACHE source - emits all items at once`() = runTest {
val room = FakeRustRoom(getMembersNoSync = { val room = FakeFfiRoom(getMembersNoSync = {
FakeRustRoomMembersIterator( FakeFfiRoomMembersIterator(
listOf( listOf(
aRustRoomMember(A_USER_ID), aRustRoomMember(A_USER_ID),
aRustRoomMember(A_USER_ID_2), aRustRoomMember(A_USER_ID_2),
@ -112,8 +112,8 @@ class RoomMemberListFetcherTest {
@Test @Test
fun `fetchRoomMembers with SERVER source - emits only new members, if any`() = runTest { fun `fetchRoomMembers with SERVER source - emits only new members, if any`() = runTest {
val room = FakeRustRoom(getMembers = { val room = FakeFfiRoom(getMembers = {
FakeRustRoomMembersIterator( FakeFfiRoomMembersIterator(
listOf( listOf(
aRustRoomMember(A_USER_ID), aRustRoomMember(A_USER_ID),
aRustRoomMember(A_USER_ID_2), aRustRoomMember(A_USER_ID_2),
@ -134,7 +134,7 @@ class RoomMemberListFetcherTest {
@Test @Test
fun `fetchRoomMembers with SERVER source - on error it emits an Error item`() = runTest { fun `fetchRoomMembers with SERVER source - on error it emits an Error item`() = runTest {
val room = FakeRustRoom(getMembers = { error("An unexpected error") }) val room = FakeFfiRoom(getMembers = { error("An unexpected error") })
val fetcher = RoomMemberListFetcher(room, Dispatchers.Default) val fetcher = RoomMemberListFetcher(room, Dispatchers.Default)
fetcher.membersFlow.test { fetcher.membersFlow.test {
@ -148,12 +148,12 @@ class RoomMemberListFetcherTest {
@Test @Test
fun `fetchRoomMembers with CACHE_AND_SERVER source - returns cached items first, then new ones`() = runTest { fun `fetchRoomMembers with CACHE_AND_SERVER source - returns cached items first, then new ones`() = runTest {
val room = FakeRustRoom( val room = FakeFfiRoom(
getMembersNoSync = { getMembersNoSync = {
FakeRustRoomMembersIterator(listOf(aRustRoomMember(A_USER_ID_4))) FakeFfiRoomMembersIterator(listOf(aRustRoomMember(A_USER_ID_4)))
}, },
getMembers = { getMembers = {
FakeRustRoomMembersIterator( FakeFfiRoomMembersIterator(
listOf( listOf(
aRustRoomMember(A_USER_ID), aRustRoomMember(A_USER_ID),
aRustRoomMember(A_USER_ID_2), aRustRoomMember(A_USER_ID_2),

View file

@ -11,7 +11,7 @@ import app.cash.turbine.test
import com.google.common.truth.Truth.assertThat import com.google.common.truth.Truth.assertThat
import io.element.android.libraries.matrix.api.roomdirectory.RoomDirectoryList import io.element.android.libraries.matrix.api.roomdirectory.RoomDirectoryList
import io.element.android.libraries.matrix.impl.fixtures.factories.aRustRoomDescription import io.element.android.libraries.matrix.impl.fixtures.factories.aRustRoomDescription
import io.element.android.libraries.matrix.impl.fixtures.fakes.FakeRustRoomDirectorySearch import io.element.android.libraries.matrix.impl.fixtures.fakes.FakeFfiRoomDirectorySearch
import io.element.android.libraries.matrix.test.A_ROOM_ID_2 import io.element.android.libraries.matrix.test.A_ROOM_ID_2
import kotlinx.coroutines.ExperimentalCoroutinesApi import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.test.StandardTestDispatcher import kotlinx.coroutines.test.StandardTestDispatcher
@ -26,7 +26,7 @@ import org.matrix.rustcomponents.sdk.RoomDirectorySearchEntryUpdate
class RustBaseRoomDirectoryListTest { class RustBaseRoomDirectoryListTest {
@Test @Test
fun `check that the state emits the expected values`() = runTest { fun `check that the state emits the expected values`() = runTest {
val roomDirectorySearch = FakeRustRoomDirectorySearch() val roomDirectorySearch = FakeFfiRoomDirectorySearch()
val mapper = RoomDescriptionMapper() val mapper = RoomDescriptionMapper()
val sut = createRustRoomDirectoryList( val sut = createRustRoomDirectoryList(
roomDirectorySearch = roomDirectorySearch, roomDirectorySearch = roomDirectorySearch,
@ -78,7 +78,7 @@ class RustBaseRoomDirectoryListTest {
} }
private fun TestScope.createRustRoomDirectoryList( private fun TestScope.createRustRoomDirectoryList(
roomDirectorySearch: RoomDirectorySearch = FakeRustRoomDirectorySearch(), roomDirectorySearch: RoomDirectorySearch = FakeFfiRoomDirectorySearch(),
) = RustRoomDirectoryList( ) = RustRoomDirectoryList(
inner = roomDirectorySearch, inner = roomDirectorySearch,
coroutineScope = backgroundScope, coroutineScope = backgroundScope,

View file

@ -7,7 +7,7 @@
package io.element.android.libraries.matrix.impl.roomdirectory package io.element.android.libraries.matrix.impl.roomdirectory
import io.element.android.libraries.matrix.impl.fixtures.fakes.FakeRustClient 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.Test import org.junit.Test
@ -15,7 +15,7 @@ import org.junit.Test
class RustBaseRoomDirectoryServiceTest { class RustBaseRoomDirectoryServiceTest {
@Test @Test
fun test() = runTest { fun test() = runTest {
val client = FakeRustClient() val client = FakeFfiClient()
val sut = RustRoomDirectoryService( val sut = RustRoomDirectoryService(
client = client, client = client,
sessionDispatcher = StandardTestDispatcher(testScheduler), sessionDispatcher = StandardTestDispatcher(testScheduler),

View file

@ -7,8 +7,8 @@
package io.element.android.libraries.matrix.impl.roomlist package io.element.android.libraries.matrix.impl.roomlist
import io.element.android.libraries.matrix.impl.fixtures.fakes.FakeRustRoomList import io.element.android.libraries.matrix.impl.fixtures.fakes.FakeFfiRoomList
import io.element.android.libraries.matrix.impl.fixtures.fakes.FakeRustRoomListService import io.element.android.libraries.matrix.impl.fixtures.fakes.FakeFfiRoomListService
import kotlinx.coroutines.test.runTest import kotlinx.coroutines.test.runTest
import org.junit.Test import org.junit.Test
import kotlin.coroutines.EmptyCoroutineContext import kotlin.coroutines.EmptyCoroutineContext
@ -17,14 +17,14 @@ class RoomListFactoryTest {
@Test @Test
fun `createRoomList should work`() = runTest { fun `createRoomList should work`() = runTest {
val sut = RoomListFactory( val sut = RoomListFactory(
innerRoomListService = FakeRustRoomListService(), innerRoomListService = FakeFfiRoomListService(),
sessionCoroutineScope = backgroundScope, sessionCoroutineScope = backgroundScope,
) )
sut.createRoomList( sut.createRoomList(
pageSize = 10, pageSize = 10,
coroutineContext = EmptyCoroutineContext, coroutineContext = EmptyCoroutineContext,
) { ) {
FakeRustRoomList() FakeFfiRoomList()
} }
} }
} }

View file

@ -10,8 +10,8 @@ package io.element.android.libraries.matrix.impl.roomlist
import com.google.common.truth.Truth.assertThat import com.google.common.truth.Truth.assertThat
import io.element.android.libraries.matrix.api.core.RoomId import io.element.android.libraries.matrix.api.core.RoomId
import io.element.android.libraries.matrix.api.roomlist.RoomSummary import io.element.android.libraries.matrix.api.roomlist.RoomSummary
import io.element.android.libraries.matrix.impl.fixtures.fakes.FakeRustRoom import io.element.android.libraries.matrix.impl.fixtures.fakes.FakeFfiRoom
import io.element.android.libraries.matrix.impl.fixtures.fakes.FakeRustRoomListService import io.element.android.libraries.matrix.impl.fixtures.fakes.FakeFfiRoomListService
import io.element.android.libraries.matrix.test.A_ROOM_ID import io.element.android.libraries.matrix.test.A_ROOM_ID
import io.element.android.libraries.matrix.test.A_ROOM_ID_2 import io.element.android.libraries.matrix.test.A_ROOM_ID_2
import io.element.android.libraries.matrix.test.A_ROOM_ID_3 import io.element.android.libraries.matrix.test.A_ROOM_ID_3
@ -170,14 +170,14 @@ class RoomSummaryListProcessorTest {
assertThat(summaries.value[index].roomId).isEqualTo(A_ROOM_ID_3) assertThat(summaries.value[index].roomId).isEqualTo(A_ROOM_ID_3)
} }
private fun aRustRoom(roomId: RoomId = A_ROOM_ID) = FakeRustRoom( private fun aRustRoom(roomId: RoomId = A_ROOM_ID) = FakeFfiRoom(
roomId = roomId, roomId = roomId,
latestEventLambda = { null }, latestEventLambda = { null },
) )
private fun TestScope.createProcessor() = RoomSummaryListProcessor( private fun TestScope.createProcessor() = RoomSummaryListProcessor(
summaries, summaries,
FakeRustRoomListService(), FakeFfiRoomListService(),
coroutineContext = StandardTestDispatcher(testScheduler), coroutineContext = StandardTestDispatcher(testScheduler),
roomSummaryDetailsFactory = RoomSummaryFactory(), roomSummaryDetailsFactory = RoomSummaryFactory(),
) )

View file

@ -9,7 +9,7 @@ package io.element.android.libraries.matrix.impl.roomlist
import app.cash.turbine.test import app.cash.turbine.test
import com.google.common.truth.Truth.assertThat import com.google.common.truth.Truth.assertThat
import io.element.android.libraries.matrix.api.roomlist.RoomListService import io.element.android.libraries.matrix.api.roomlist.RoomListService
import io.element.android.libraries.matrix.impl.fixtures.fakes.FakeRustRoomListService import io.element.android.libraries.matrix.impl.fixtures.fakes.FakeFfiRoomListService
import io.element.android.libraries.matrix.impl.room.RoomSyncSubscriber import io.element.android.libraries.matrix.impl.room.RoomSyncSubscriber
import io.element.android.tests.testutils.testCoroutineDispatchers import io.element.android.tests.testutils.testCoroutineDispatchers
import kotlinx.coroutines.ExperimentalCoroutinesApi import kotlinx.coroutines.ExperimentalCoroutinesApi
@ -25,7 +25,7 @@ import org.matrix.rustcomponents.sdk.RoomListService as RustRoomListService
class RustBaseRoomListServiceTest { class RustBaseRoomListServiceTest {
@Test @Test
fun `syncIndicator should emit the expected values`() = runTest { fun `syncIndicator should emit the expected values`() = runTest {
val roomListService = FakeRustRoomListService() val roomListService = FakeFfiRoomListService()
val sut = createRustRoomListService( val sut = createRustRoomListService(
roomListService = roomListService, roomListService = roomListService,
) )
@ -42,7 +42,7 @@ class RustBaseRoomListServiceTest {
} }
private fun TestScope.createRustRoomListService( private fun TestScope.createRustRoomListService(
roomListService: RustRoomListService = FakeRustRoomListService(), roomListService: RustRoomListService = FakeFfiRoomListService(),
) = RustRoomListService( ) = RustRoomListService(
innerRoomListService = roomListService, innerRoomListService = roomListService,
sessionDispatcher = StandardTestDispatcher(testScheduler), sessionDispatcher = StandardTestDispatcher(testScheduler),

View file

@ -9,7 +9,7 @@ package io.element.android.libraries.matrix.impl.timeline
import com.google.common.truth.Truth.assertThat import com.google.common.truth.Truth.assertThat
import io.element.android.libraries.matrix.api.timeline.MatrixTimelineItem import io.element.android.libraries.matrix.api.timeline.MatrixTimelineItem
import io.element.android.libraries.matrix.impl.fixtures.fakes.FakeRustTimelineDiff import io.element.android.libraries.matrix.impl.fixtures.fakes.FakeFfiTimelineDiff
import io.element.android.libraries.matrix.impl.timeline.item.event.EventTimelineItemMapper import io.element.android.libraries.matrix.impl.timeline.item.event.EventTimelineItemMapper
import io.element.android.libraries.matrix.impl.timeline.item.event.TimelineEventContentMapper import io.element.android.libraries.matrix.impl.timeline.item.event.TimelineEventContentMapper
import io.element.android.libraries.matrix.impl.timeline.item.virtual.VirtualTimelineItemMapper import io.element.android.libraries.matrix.impl.timeline.item.virtual.VirtualTimelineItemMapper
@ -33,7 +33,7 @@ class MatrixTimelineDiffProcessorTest {
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)
processor.postDiffs(listOf(FakeRustTimelineDiff(change = TimelineChange.APPEND))) processor.postDiffs(listOf(FakeFfiTimelineDiff(change = TimelineChange.APPEND)))
assertThat(timelineItems.value.count()).isEqualTo(2) assertThat(timelineItems.value.count()).isEqualTo(2)
assertThat(timelineItems.value).containsExactly( assertThat(timelineItems.value).containsExactly(
anEvent, anEvent,
@ -45,7 +45,7 @@ class MatrixTimelineDiffProcessorTest {
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)
processor.postDiffs(listOf(FakeRustTimelineDiff(change = TimelineChange.PUSH_BACK))) processor.postDiffs(listOf(FakeFfiTimelineDiff(change = TimelineChange.PUSH_BACK)))
assertThat(timelineItems.value.count()).isEqualTo(2) assertThat(timelineItems.value.count()).isEqualTo(2)
assertThat(timelineItems.value).containsExactly( assertThat(timelineItems.value).containsExactly(
anEvent, anEvent,
@ -57,7 +57,7 @@ class MatrixTimelineDiffProcessorTest {
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)
processor.postDiffs(listOf(FakeRustTimelineDiff(change = TimelineChange.PUSH_FRONT))) processor.postDiffs(listOf(FakeFfiTimelineDiff(change = TimelineChange.PUSH_FRONT)))
assertThat(timelineItems.value.count()).isEqualTo(2) assertThat(timelineItems.value.count()).isEqualTo(2)
assertThat(timelineItems.value).containsExactly( assertThat(timelineItems.value).containsExactly(
MatrixTimelineItem.Other, MatrixTimelineItem.Other,
@ -69,7 +69,7 @@ class MatrixTimelineDiffProcessorTest {
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)
processor.postDiffs(listOf(FakeRustTimelineDiff(change = TimelineChange.SET))) processor.postDiffs(listOf(FakeFfiTimelineDiff(change = TimelineChange.SET)))
assertThat(timelineItems.value.count()).isEqualTo(2) assertThat(timelineItems.value.count()).isEqualTo(2)
assertThat(timelineItems.value).containsExactly( assertThat(timelineItems.value).containsExactly(
anEvent, anEvent,
@ -81,7 +81,7 @@ class MatrixTimelineDiffProcessorTest {
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)
processor.postDiffs(listOf(FakeRustTimelineDiff(change = TimelineChange.INSERT))) processor.postDiffs(listOf(FakeFfiTimelineDiff(change = TimelineChange.INSERT)))
assertThat(timelineItems.value.count()).isEqualTo(3) assertThat(timelineItems.value.count()).isEqualTo(3)
assertThat(timelineItems.value).containsExactly( assertThat(timelineItems.value).containsExactly(
anEvent, anEvent,
@ -94,7 +94,7 @@ class MatrixTimelineDiffProcessorTest {
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)
processor.postDiffs(listOf(FakeRustTimelineDiff(change = TimelineChange.REMOVE))) processor.postDiffs(listOf(FakeFfiTimelineDiff(change = TimelineChange.REMOVE)))
assertThat(timelineItems.value.count()).isEqualTo(2) assertThat(timelineItems.value.count()).isEqualTo(2)
assertThat(timelineItems.value).containsExactly( assertThat(timelineItems.value).containsExactly(
anEvent, anEvent,
@ -106,7 +106,7 @@ class MatrixTimelineDiffProcessorTest {
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)
processor.postDiffs(listOf(FakeRustTimelineDiff(change = TimelineChange.POP_BACK))) processor.postDiffs(listOf(FakeFfiTimelineDiff(change = TimelineChange.POP_BACK)))
assertThat(timelineItems.value.count()).isEqualTo(1) assertThat(timelineItems.value.count()).isEqualTo(1)
assertThat(timelineItems.value).containsExactly( assertThat(timelineItems.value).containsExactly(
anEvent, anEvent,
@ -117,7 +117,7 @@ class MatrixTimelineDiffProcessorTest {
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)
processor.postDiffs(listOf(FakeRustTimelineDiff(change = TimelineChange.POP_FRONT))) processor.postDiffs(listOf(FakeFfiTimelineDiff(change = TimelineChange.POP_FRONT)))
assertThat(timelineItems.value.count()).isEqualTo(1) assertThat(timelineItems.value.count()).isEqualTo(1)
assertThat(timelineItems.value).containsExactly( assertThat(timelineItems.value).containsExactly(
anEvent2, anEvent2,
@ -128,7 +128,7 @@ class MatrixTimelineDiffProcessorTest {
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)
processor.postDiffs(listOf(FakeRustTimelineDiff(change = TimelineChange.CLEAR))) processor.postDiffs(listOf(FakeFfiTimelineDiff(change = TimelineChange.CLEAR)))
assertThat(timelineItems.value).isEmpty() assertThat(timelineItems.value).isEmpty()
} }
@ -136,7 +136,7 @@ class MatrixTimelineDiffProcessorTest {
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)
processor.postDiffs(listOf(FakeRustTimelineDiff(change = TimelineChange.TRUNCATE))) processor.postDiffs(listOf(FakeFfiTimelineDiff(change = TimelineChange.TRUNCATE)))
assertThat(timelineItems.value.count()).isEqualTo(1) assertThat(timelineItems.value.count()).isEqualTo(1)
assertThat(timelineItems.value).containsExactly( assertThat(timelineItems.value).containsExactly(
anEvent, anEvent,
@ -147,7 +147,7 @@ class MatrixTimelineDiffProcessorTest {
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)
processor.postDiffs(listOf(FakeRustTimelineDiff(change = TimelineChange.RESET))) processor.postDiffs(listOf(FakeFfiTimelineDiff(change = TimelineChange.RESET)))
assertThat(timelineItems.value.count()).isEqualTo(1) assertThat(timelineItems.value.count()).isEqualTo(1)
assertThat(timelineItems.value).containsExactly( assertThat(timelineItems.value).containsExactly(
MatrixTimelineItem.Other, MatrixTimelineItem.Other,

View file

@ -16,9 +16,9 @@ import io.element.android.libraries.matrix.api.room.JoinedRoom
import io.element.android.libraries.matrix.api.timeline.MatrixTimelineItem import io.element.android.libraries.matrix.api.timeline.MatrixTimelineItem
import io.element.android.libraries.matrix.api.timeline.Timeline import io.element.android.libraries.matrix.api.timeline.Timeline
import io.element.android.libraries.matrix.api.timeline.item.virtual.VirtualTimelineItem import io.element.android.libraries.matrix.api.timeline.item.virtual.VirtualTimelineItem
import io.element.android.libraries.matrix.impl.fixtures.fakes.FakeRustRoomListService import io.element.android.libraries.matrix.impl.fixtures.fakes.FakeFfiRoomListService
import io.element.android.libraries.matrix.impl.fixtures.fakes.FakeRustTimeline import io.element.android.libraries.matrix.impl.fixtures.fakes.FakeFfiTimeline
import io.element.android.libraries.matrix.impl.fixtures.fakes.FakeRustTimelineDiff import io.element.android.libraries.matrix.impl.fixtures.fakes.FakeFfiTimelineDiff
import io.element.android.libraries.matrix.impl.room.RoomContentForwarder import io.element.android.libraries.matrix.impl.room.RoomContentForwarder
import io.element.android.libraries.matrix.test.room.FakeJoinedRoom import io.element.android.libraries.matrix.test.room.FakeJoinedRoom
import io.element.android.libraries.matrix.test.room.aRoomInfo import io.element.android.libraries.matrix.test.room.aRoomInfo
@ -40,7 +40,7 @@ import org.matrix.rustcomponents.sdk.Timeline as InnerTimeline
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 {
val inner = FakeRustTimeline() val inner = FakeFfiTimeline()
val systemClock = FakeSystemClock() val systemClock = FakeSystemClock()
val sut = createRustTimeline( val sut = createRustTimeline(
inner = inner, inner = inner,
@ -51,7 +51,7 @@ class RustTimelineTest {
runCurrent() runCurrent()
inner.emitDiff( inner.emitDiff(
listOf( listOf(
FakeRustTimelineDiff( FakeFfiTimelineDiff(
item = null, item = null,
change = TimelineChange.RESET, change = TimelineChange.RESET,
) )
@ -106,7 +106,7 @@ private fun TestScope.createRustTimeline(
joinedRoom: JoinedRoom = FakeJoinedRoom().apply { givenRoomInfo(aRoomInfo()) }, joinedRoom: JoinedRoom = FakeJoinedRoom().apply { givenRoomInfo(aRoomInfo()) },
coroutineScope: CoroutineScope = backgroundScope, coroutineScope: CoroutineScope = backgroundScope,
dispatcher: CoroutineDispatcher = testCoroutineDispatchers().io, dispatcher: CoroutineDispatcher = testCoroutineDispatchers().io,
roomContentForwarder: RoomContentForwarder = RoomContentForwarder(FakeRustRoomListService()), roomContentForwarder: RoomContentForwarder = RoomContentForwarder(FakeFfiRoomListService()),
featureFlagsService: FeatureFlagService = FakeFeatureFlagService(), featureFlagsService: FeatureFlagService = FakeFeatureFlagService(),
onNewSyncedEvent: () -> Unit = {}, onNewSyncedEvent: () -> Unit = {},
): RustTimeline { ): RustTimeline {

View file

@ -11,9 +11,9 @@ import app.cash.turbine.test
import com.google.common.truth.Truth.assertThat import com.google.common.truth.Truth.assertThat
import io.element.android.libraries.matrix.api.timeline.MatrixTimelineItem import io.element.android.libraries.matrix.api.timeline.MatrixTimelineItem
import io.element.android.libraries.matrix.impl.fixtures.factories.aRustEventTimelineItem import io.element.android.libraries.matrix.impl.fixtures.factories.aRustEventTimelineItem
import io.element.android.libraries.matrix.impl.fixtures.fakes.FakeRustTimeline import io.element.android.libraries.matrix.impl.fixtures.fakes.FakeFfiTimeline
import io.element.android.libraries.matrix.impl.fixtures.fakes.FakeRustTimelineDiff import io.element.android.libraries.matrix.impl.fixtures.fakes.FakeFfiTimelineDiff
import io.element.android.libraries.matrix.impl.fixtures.fakes.FakeRustTimelineItem import io.element.android.libraries.matrix.impl.fixtures.fakes.FakeFfiTimelineItem
import io.element.android.tests.testutils.lambda.lambdaError import io.element.android.tests.testutils.lambda.lambdaError
import io.element.android.tests.testutils.lambda.lambdaRecorder import io.element.android.tests.testutils.lambda.lambdaRecorder
import kotlinx.coroutines.CompletableDeferred import kotlinx.coroutines.CompletableDeferred
@ -35,7 +35,7 @@ class TimelineItemsSubscriberTest {
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)
val timeline = FakeRustTimeline() val timeline = FakeFfiTimeline()
val timelineItemsSubscriber = createTimelineItemsSubscriber( val timelineItemsSubscriber = createTimelineItemsSubscriber(
timeline = timeline, timeline = timeline,
timelineItems = timelineItems, timelineItems = timelineItems,
@ -44,7 +44,7 @@ class TimelineItemsSubscriberTest {
timelineItemsSubscriber.subscribeIfNeeded() timelineItemsSubscriber.subscribeIfNeeded()
// Wait for the listener to be set. // Wait for the listener to be set.
runCurrent() runCurrent()
timeline.emitDiff(listOf(FakeRustTimelineDiff(item = null, change = TimelineChange.RESET))) timeline.emitDiff(listOf(FakeFfiTimelineDiff(item = null, change = TimelineChange.RESET)))
val final = awaitItem() val final = awaitItem()
assertThat(final).isEmpty() assertThat(final).isEmpty()
timelineItemsSubscriber.unsubscribeIfNeeded() timelineItemsSubscriber.unsubscribeIfNeeded()
@ -55,7 +55,7 @@ class TimelineItemsSubscriberTest {
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)
val timeline = FakeRustTimeline() val timeline = FakeFfiTimeline()
val timelineItemsSubscriber = createTimelineItemsSubscriber( val timelineItemsSubscriber = createTimelineItemsSubscriber(
timeline = timeline, timeline = timeline,
timelineItems = timelineItems, timelineItems = timelineItems,
@ -64,7 +64,7 @@ class TimelineItemsSubscriberTest {
timelineItemsSubscriber.subscribeIfNeeded() timelineItemsSubscriber.subscribeIfNeeded()
// Wait for the listener to be set. // Wait for the listener to be set.
runCurrent() runCurrent()
timeline.emitDiff(listOf(FakeRustTimelineDiff(item = FakeRustTimelineItem(), change = TimelineChange.RESET))) timeline.emitDiff(listOf(FakeFfiTimelineDiff(item = FakeFfiTimelineItem(), change = TimelineChange.RESET)))
val final = awaitItem() val final = awaitItem()
assertThat(final).isNotEmpty() assertThat(final).isNotEmpty()
timelineItemsSubscriber.unsubscribeIfNeeded() timelineItemsSubscriber.unsubscribeIfNeeded()
@ -75,7 +75,7 @@ class TimelineItemsSubscriberTest {
fun `when timeline emits an item with SYNC origin, the callback onNewSyncedEvent is invoked`() = runTest { fun `when timeline emits an item with SYNC origin, the callback onNewSyncedEvent is invoked`() = 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)
val timeline = FakeRustTimeline() val timeline = FakeFfiTimeline()
val onNewSyncedEventRecorder = lambdaRecorder<Unit> { } val onNewSyncedEventRecorder = lambdaRecorder<Unit> { }
val timelineItemsSubscriber = createTimelineItemsSubscriber( val timelineItemsSubscriber = createTimelineItemsSubscriber(
timeline = timeline, timeline = timeline,
@ -88,8 +88,8 @@ class TimelineItemsSubscriberTest {
runCurrent() runCurrent()
timeline.emitDiff( timeline.emitDiff(
listOf( listOf(
FakeRustTimelineDiff( FakeFfiTimelineDiff(
item = FakeRustTimelineItem( item = FakeFfiTimelineItem(
asEventResult = aRustEventTimelineItem(origin = EventItemOrigin.SYNC), asEventResult = aRustEventTimelineItem(origin = EventItemOrigin.SYNC),
), ),
change = TimelineChange.RESET, change = TimelineChange.RESET,
@ -114,7 +114,7 @@ class TimelineItemsSubscriberTest {
} }
private fun TestScope.createTimelineItemsSubscriber( private fun TestScope.createTimelineItemsSubscriber(
timeline: Timeline = FakeRustTimeline(), timeline: Timeline = FakeFfiTimeline(),
timelineItems: MutableSharedFlow<List<MatrixTimelineItem>> = MutableSharedFlow(replay = 1, extraBufferCapacity = Int.MAX_VALUE), timelineItems: MutableSharedFlow<List<MatrixTimelineItem>> = MutableSharedFlow(replay = 1, extraBufferCapacity = Int.MAX_VALUE),
initLatch: CompletableDeferred<Unit> = CompletableDeferred(), initLatch: CompletableDeferred<Unit> = CompletableDeferred(),
isTimelineInitialized: MutableStateFlow<Boolean> = MutableStateFlow(false), isTimelineInitialized: MutableStateFlow<Boolean> = MutableStateFlow(false),

View file

@ -15,6 +15,7 @@ import com.lemonappdev.konsist.api.ext.list.withAllParentsOf
import com.lemonappdev.konsist.api.ext.list.withAnnotationNamed import com.lemonappdev.konsist.api.ext.list.withAnnotationNamed
import com.lemonappdev.konsist.api.ext.list.withNameContaining import com.lemonappdev.konsist.api.ext.list.withNameContaining
import com.lemonappdev.konsist.api.ext.list.withNameEndingWith import com.lemonappdev.konsist.api.ext.list.withNameEndingWith
import com.lemonappdev.konsist.api.ext.list.withPackage
import com.lemonappdev.konsist.api.ext.list.withoutName import com.lemonappdev.konsist.api.ext.list.withoutName
import com.lemonappdev.konsist.api.ext.list.withoutNameStartingWith import com.lemonappdev.konsist.api.ext.list.withoutNameStartingWith
import com.lemonappdev.konsist.api.verify.assertEmpty import com.lemonappdev.konsist.api.verify.assertEmpty
@ -89,9 +90,9 @@ class KonsistClassNameTest {
) )
.assertTrue { .assertTrue {
val interfaceName = it.name val interfaceName = it.name
.replace("FakeRust", "") .replace("FakeFfi", "")
.replace("Fake", "") .replace("Fake", "")
val result = (it.name.startsWith("Fake") || it.name.startsWith("FakeRust")) && val result = it.name.startsWith("Fake") &&
it.parents().any { parent -> it.parents().any { parent ->
val parentName = parent.name.replace(".", "") val parentName = parent.name.replace(".", "")
parentName == interfaceName parentName == interfaceName
@ -106,6 +107,17 @@ class KonsistClassNameTest {
assertThat(failingCases).isEqualTo(failingCasesList.size) assertThat(failingCases).isEqualTo(failingCasesList.size)
} }
@Test
fun `All Classes that override a class from the Ffi layer must have 'FakeFfi' prefix`() {
Konsist.scopeFromTest()
.classes()
.withPackage("io.element.android.libraries.matrix.impl.fixtures.fakes")
.assertTrue { klass ->
val parentName = klass.parents().firstOrNull()?.name.orEmpty()
klass.name == "FakeFfi$parentName"
}
}
@Test @Test
fun `Class implementing interface should have name not end with 'Impl' but start with 'Default'`() { fun `Class implementing interface should have name not end with 'Impl' but start with 'Default'`() {
Konsist.scopeFromProject() Konsist.scopeFromProject()