diff --git a/mvikotlin/src/commonMain/kotlin/com/arkivanov/mvikotlin/core/instancekeeper/InstanceKeeperExt.kt b/mvikotlin/src/commonMain/kotlin/com/arkivanov/mvikotlin/core/instancekeeper/InstanceKeeperExt.kt index afe29446..fd2e8c0f 100644 --- a/mvikotlin/src/commonMain/kotlin/com/arkivanov/mvikotlin/core/instancekeeper/InstanceKeeperExt.kt +++ b/mvikotlin/src/commonMain/kotlin/com/arkivanov/mvikotlin/core/instancekeeper/InstanceKeeperExt.kt @@ -3,6 +3,7 @@ package com.arkivanov.mvikotlin.core.instancekeeper import com.arkivanov.essenty.instancekeeper.InstanceKeeper import com.arkivanov.essenty.instancekeeper.getOrCreate import com.arkivanov.mvikotlin.core.store.Store +import kotlin.reflect.typeOf fun > InstanceKeeper.getStore(key: Any, factory: () -> T): T = getOrCreate(key = key) { @@ -10,7 +11,7 @@ fun > InstanceKeeper.getStore(key: Any, factory: () -> T): T }.store inline fun > InstanceKeeper.getStore(noinline factory: () -> T): T = - getStore(key = T::class, factory = factory) + getStore(key = typeOf(), factory = factory) private class StoreInstance>( val store: T diff --git a/mvikotlin/src/commonTest/kotlin/com/arkivanov/mvikotlin/core/instancekeeper/InstanceKeeperExtTest.kt b/mvikotlin/src/commonTest/kotlin/com/arkivanov/mvikotlin/core/instancekeeper/InstanceKeeperExtTest.kt new file mode 100644 index 00000000..33091b3d --- /dev/null +++ b/mvikotlin/src/commonTest/kotlin/com/arkivanov/mvikotlin/core/instancekeeper/InstanceKeeperExtTest.kt @@ -0,0 +1,55 @@ +package com.arkivanov.mvikotlin.core.instancekeeper + +import com.arkivanov.essenty.instancekeeper.InstanceKeeperDispatcher +import com.arkivanov.mvikotlin.core.rx.Disposable +import com.arkivanov.mvikotlin.core.rx.Observer +import com.arkivanov.mvikotlin.core.store.Store +import kotlin.test.Test +import kotlin.test.assertNotSame +import kotlin.test.assertSame + +@Suppress("TestFunctionName") +class InstanceKeeperExtTest { + + private val keeper = InstanceKeeperDispatcher() + + @Test + fun WHEN_getStore_with_same_type_THEN_same_instance() { + val store1 = keeper.getStore { store() } + val store2 = keeper.getStore { store() } + + assertSame(store1, store2) + } + + @Test + fun WHEN_getStore_with_different_types_THEN_instances_not_same() { + val store1 = keeper.getStore { store() } + val store2 = keeper.getStore { store() } + + assertNotSame>(store1, store2) + } + + private fun store(): Store = + object : Store { + override val state: State get() = error("Not implemented") + override val isDisposed: Boolean get() = error("Not implemented") + + override fun states(observer: Observer): Disposable = + error("Not implemented") + + override fun labels(observer: Observer