Skip to content

Commit f64bdf3

Browse files
committed
Clean up configuration + tests
1 parent 8c3f941 commit f64bdf3

File tree

7 files changed

+62
-16
lines changed

7 files changed

+62
-16
lines changed

packages/library-base/src/commonMain/kotlin/io/realm/kotlin/Configuration.kt

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,17 @@ public fun interface CompactOnLaunchCallback {
5050
public fun shouldCompact(totalBytes: Long, usedBytes: Long): Boolean
5151
}
5252

53+
54+
/**
55+
* TODO
56+
*/
57+
public class TypeAdapterBuilder {
58+
internal val typeAdapters: MutableList<RealmTypeAdapter<*, *>> = mutableListOf()
59+
public fun add(adapter: RealmTypeAdapter<*,*>) {
60+
typeAdapters.add(adapter)
61+
}
62+
}
63+
5364
/**
5465
* This interface is used to write data to a Realm file when the file is first created.
5566
* It will be used in a way similar to using [Realm.writeBlocking].
@@ -197,6 +208,11 @@ public interface Configuration {
197208
*/
198209
public val initialRealmFileConfiguration: InitialRealmFileConfiguration?
199210

211+
/**
212+
* TODO
213+
*/
214+
public val typeAdapters: List<RealmTypeAdapter<*, *>>
215+
200216
/**
201217
* Base class for configuration builders that holds properties available to both
202218
* [RealmConfiguration] and [SyncConfiguration].
@@ -239,7 +255,7 @@ public interface Configuration {
239255
protected var initialDataCallback: InitialDataCallback? = null
240256
protected var inMemory: Boolean = false
241257
protected var initialRealmFileConfiguration: InitialRealmFileConfiguration? = null
242-
protected var typeAdapters: Map<KClass<*>, RealmTypeAdapter<*, *>> = mapOf()
258+
protected var typeAdapters: List<RealmTypeAdapter<*, *>> = listOf()
243259

244260
/**
245261
* Sets the filename of the realm file.

packages/library-base/src/commonMain/kotlin/io/realm/kotlin/RealmConfiguration.kt

Lines changed: 4 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -90,17 +90,12 @@ public interface RealmConfiguration : Configuration {
9090
public fun directory(directoryPath: String): Builder =
9191
apply { this.directory = directoryPath }
9292

93-
// TODO misplaced, move around
94-
public class TypeAdapterBuilder {
95-
internal val adapters: MutableMap<KClass<*>, RealmTypeAdapter<*, *>> = mutableMapOf()
96-
public fun add(adapter: RealmTypeAdapter<*,*>) {
97-
adapters[adapter::class] = adapter
98-
}
99-
}
100-
93+
/**
94+
* TODO
95+
*/
10196
public fun typeAdapters(block: TypeAdapterBuilder.()->Unit): Builder =
10297
apply {
103-
this.typeAdapters = TypeAdapterBuilder().apply(block).adapters
98+
this.typeAdapters = TypeAdapterBuilder().apply(block).typeAdapters
10499
}
105100

106101
/**

packages/library-base/src/commonMain/kotlin/io/realm/kotlin/internal/ConfigurationImpl.kt

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@ public open class ConfigurationImpl(
6969
inMemory: Boolean,
7070
initialRealmFileConfiguration: InitialRealmFileConfiguration?,
7171
logger: ContextLogger,
72-
override val adapters: Map<KClass<*>, RealmTypeAdapter<*, *>>,
72+
override val typeAdapters: List<RealmTypeAdapter<*, *>>,
7373
) : InternalConfiguration {
7474

7575
override val path: String
@@ -104,6 +104,7 @@ public open class ConfigurationImpl(
104104
override val initialDataCallback: InitialDataCallback?
105105
override val inMemory: Boolean
106106
override val initialRealmFileConfiguration: InitialRealmFileConfiguration?
107+
override val typeAdapterMap: Map<KClass<*>, RealmTypeAdapter<*, *>>
107108

108109
override fun createNativeConfiguration(): RealmConfigurationPointer {
109110
val nativeConfig: RealmConfigurationPointer = RealmInterop.realm_config_new()
@@ -150,6 +151,7 @@ public open class ConfigurationImpl(
150151
this.initialDataCallback = initialDataCallback
151152
this.inMemory = inMemory
152153
this.initialRealmFileConfiguration = initialRealmFileConfiguration
154+
this.typeAdapterMap = typeAdapters.associateBy { it::class }
153155

154156
// We need to freeze `compactOnLaunchCallback` reference on initial thread for Kotlin Native
155157
val compactCallback = compactOnLaunchCallback?.let { callback ->

packages/library-base/src/commonMain/kotlin/io/realm/kotlin/internal/Converters.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -267,7 +267,7 @@ public inline fun toRealm(
267267
): Any? {
268268
val adapter = obj.owner.owner
269269
.configuration
270-
.adapters.let { adapters ->
270+
.typeAdapterMap.let { adapters ->
271271
require(adapters.contains(adapterClass)) {"User provided adaptes don't contains adapter ${adapterClass.simpleName}"}
272272
adapters[adapterClass] as RealmTypeAdapter<Any?, Any?>
273273
}
@@ -282,7 +282,7 @@ public inline fun fromRealm(
282282
): Any? {
283283
val adapter = obj.owner.owner
284284
.configuration
285-
.adapters.let { adapters ->
285+
.typeAdapterMap.let { adapters ->
286286
require(adapters.contains(adapterClass)) {"User provided adaptes don't contains adapter ${adapterClass.simpleName}"}
287287
adapters[adapterClass] as RealmTypeAdapter<Any?, Any?>
288288
}

packages/library-base/src/commonMain/kotlin/io/realm/kotlin/internal/InternalConfiguration.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ public interface InternalConfiguration : Configuration {
3737
public val writeDispatcherFactory: CoroutineDispatcherFactory
3838
public val schemaMode: SchemaMode
3939
public val logger: ContextLogger
40-
public val adapters: Map<KClass<*>, RealmTypeAdapter<*, *>>
40+
public val typeAdapterMap: Map<KClass<*>, RealmTypeAdapter<*, *>>
4141

4242
// Temporary work-around for https://github.com/realm/realm-kotlin/issues/724
4343
public val isFlexibleSyncConfiguration: Boolean

packages/library-base/src/commonMain/kotlin/io/realm/kotlin/internal/RealmConfigurationImpl.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ internal class RealmConfigurationImpl(
4949
inMemory: Boolean,
5050
override val initialRealmFileConfiguration: InitialRealmFileConfiguration?,
5151
logger: ContextLogger,
52-
adapters: Map<KClass<*>, RealmTypeAdapter<*, *>>
52+
typeAdapters: List<RealmTypeAdapter<*, *>>
5353
) : ConfigurationImpl(
5454
directory,
5555
name,
@@ -72,6 +72,6 @@ internal class RealmConfigurationImpl(
7272
inMemory,
7373
initialRealmFileConfiguration,
7474
logger,
75-
adapters,
75+
typeAdapters,
7676
),
7777
RealmConfiguration

packages/test-base/src/commonTest/kotlin/io/realm/kotlin/test/common/RealmConfigurationTests.kt

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,13 +34,15 @@ import io.realm.kotlin.test.platform.PlatformUtils
3434
import io.realm.kotlin.test.platform.platformFileSystem
3535
import io.realm.kotlin.test.util.TestLogger
3636
import io.realm.kotlin.test.util.use
37+
import io.realm.kotlin.types.RealmTypeAdapter
3738
import kotlinx.coroutines.CoroutineDispatcher
3839
import kotlinx.coroutines.newSingleThreadContext
3940
import okio.Path.Companion.toPath
4041
import kotlin.random.Random
4142
import kotlin.test.AfterTest
4243
import kotlin.test.BeforeTest
4344
import kotlin.test.Test
45+
import kotlin.test.assertContains
4446
import kotlin.test.assertContentEquals
4547
import kotlin.test.assertEquals
4648
import kotlin.test.assertFailsWith
@@ -493,6 +495,37 @@ class RealmConfigurationTests {
493495
RealmLog.reset()
494496
}
495497

498+
@Test
499+
fun customTypeAdapters_defaultEmpty() {
500+
val typeAdapter = object: RealmTypeAdapter<String, String> {
501+
override fun fromRealm(realmValue: String): String = TODO("Not yet implemented")
502+
503+
override fun toRealm(value: String): String = TODO("Not yet implemented")
504+
}
505+
506+
val config = RealmConfiguration.Builder(setOf())
507+
.build()
508+
509+
assertTrue(config.typeAdapters.isEmpty())
510+
}
511+
512+
@Test
513+
fun defineCustomTypeAdapters() {
514+
val typeAdapter = object: RealmTypeAdapter<String, String> {
515+
override fun fromRealm(realmValue: String): String = TODO("Not yet implemented")
516+
517+
override fun toRealm(value: String): String = TODO("Not yet implemented")
518+
}
519+
520+
val config = RealmConfiguration.Builder(setOf())
521+
.typeAdapters {
522+
add(typeAdapter)
523+
}
524+
.build()
525+
526+
assertContains(config.typeAdapters, typeAdapter)
527+
}
528+
496529
private fun assertFailsWithEncryptionKey(builder: RealmConfiguration.Builder, keyLength: Int) {
497530
val key = Random.nextBytes(keyLength)
498531
assertFailsWith(

0 commit comments

Comments
 (0)