Skip to content

Commit a19e0f7

Browse files
committed
Added test for non-serializable params
1 parent a21a5cc commit a19e0f7

File tree

4 files changed

+55
-3
lines changed

4 files changed

+55
-3
lines changed

krpc/krpc-test/src/jvmMain/kotlin/kotlinx/rpc/krpc/test/KrpcTestService.kt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@ import kotlinx.coroutines.flow.SharedFlow
99
import kotlinx.coroutines.flow.StateFlow
1010
import kotlinx.rpc.RemoteService
1111
import kotlinx.rpc.annotations.Rpc
12+
import kotlinx.serialization.Contextual
13+
import java.time.LocalDate
1214

1315
@Suppress("detekt.TooManyFunctions")
1416
@Rpc
@@ -28,6 +30,8 @@ interface KrpcTestService : RemoteService {
2830
suspend fun nullable(arg1: String?): TestClass?
2931
suspend fun variance(arg2: TestList<in TestClass>, arg3: TestList2<*>): TestList<out TestClass>?
3032

33+
suspend fun nonSerializableClass(localDate: @Contextual LocalDate): LocalDate
34+
3135
suspend fun incomingStreamSyncCollect(arg1: Flow<String>): Int
3236
suspend fun incomingStreamAsyncCollect(arg1: Flow<String>): Int
3337
suspend fun outgoingStream(): Flow<String>

krpc/krpc-test/src/jvmMain/kotlin/kotlinx/rpc/krpc/test/KrpcTestServiceBackend.kt

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ package kotlinx.rpc.krpc.test
77
import kotlinx.coroutines.*
88
import kotlinx.coroutines.flow.*
99
import kotlinx.serialization.Serializable
10+
import java.time.LocalDate
1011
import kotlin.coroutines.CoroutineContext
1112
import kotlin.coroutines.resumeWithException
1213
import kotlin.test.assertEquals
@@ -79,6 +80,10 @@ class KrpcTestServiceBackend(override val coroutineContext: CoroutineContext) :
7980
return TestList(3)
8081
}
8182

83+
override suspend fun nonSerializableClass(localDate: LocalDate): LocalDate {
84+
return localDate.plusDays(1)
85+
}
86+
8287
override suspend fun incomingStreamSyncCollect(arg1: Flow<String>): Int {
8388
return arg1.count()
8489
}

krpc/krpc-test/src/jvmMain/kotlin/kotlinx/rpc/krpc/test/KrpcTransportTestBase.kt

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,16 +18,44 @@ import kotlinx.rpc.krpc.server.KrpcServer
1818
import kotlinx.rpc.krpc.streamScoped
1919
import kotlinx.rpc.registerService
2020
import kotlinx.rpc.withService
21+
import kotlinx.serialization.KSerializer
22+
import kotlinx.serialization.descriptors.PrimitiveKind
23+
import kotlinx.serialization.descriptors.PrimitiveSerialDescriptor
24+
import kotlinx.serialization.descriptors.SerialDescriptor
25+
import kotlinx.serialization.encoding.Decoder
26+
import kotlinx.serialization.encoding.Encoder
27+
import kotlinx.serialization.modules.SerializersModule
2128
import org.junit.Assert.assertEquals
2229
import org.junit.Rule
2330
import org.junit.rules.Timeout
31+
import java.time.LocalDate
32+
import java.time.format.DateTimeFormatter
2433
import java.util.concurrent.Semaphore
2534
import java.util.concurrent.TimeUnit
2635
import java.util.concurrent.atomic.AtomicBoolean
2736
import kotlin.coroutines.cancellation.CancellationException
2837
import kotlin.test.*
2938

39+
private object LocalDateSerializer : KSerializer<LocalDate> {
40+
override val descriptor: SerialDescriptor = PrimitiveSerialDescriptor("LocalDate", PrimitiveKind.STRING)
41+
42+
override fun serialize(
43+
encoder: Encoder,
44+
value: LocalDate,
45+
) {
46+
encoder.encodeString(value.format(DateTimeFormatter.ISO_DATE))
47+
}
48+
49+
override fun deserialize(decoder: Decoder): LocalDate {
50+
return LocalDate.parse(decoder.decodeString(), DateTimeFormatter.ISO_DATE)
51+
}
52+
}
53+
3054
abstract class KrpcTransportTestBase {
55+
protected val serializersModule = SerializersModule {
56+
contextual(LocalDate::class) { LocalDateSerializer }
57+
}
58+
3159
protected abstract val serializationConfig: KrpcSerialFormatConfiguration.() -> Unit
3260

3361
private val serverConfig by lazy {
@@ -112,6 +140,15 @@ abstract class KrpcTransportTestBase {
112140
}
113141
}
114142

143+
@Test
144+
fun nonSerializableParameter() {
145+
runBlocking {
146+
val localDate = LocalDate.of(2001, 8, 23)
147+
val result = client.nonSerializableClass(localDate)
148+
assertEquals(localDate.plusDays(1), result)
149+
}
150+
}
151+
115152
@Test
116153
fun doubleGenericReturnType() {
117154
val result = runBlocking { client.doubleGenericReturnType() }

krpc/krpc-test/src/jvmTest/kotlin/kotlinx/rpc/krpc/test/LocalTransportTest.kt

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,22 +23,28 @@ abstract class LocalTransportTest : KrpcTransportTestBase() {
2323

2424
class JsonLocalTransportTest : LocalTransportTest() {
2525
override val serializationConfig: KrpcSerialFormatConfiguration.() -> Unit = {
26-
json()
26+
json {
27+
serializersModule = this@JsonLocalTransportTest.serializersModule
28+
}
2729
}
2830
}
2931

3032
class CborLocalTransportTest : LocalTransportTest() {
3133
@OptIn(ExperimentalSerializationApi::class)
3234
override val serializationConfig: KrpcSerialFormatConfiguration.() -> Unit = {
33-
cbor()
35+
cbor {
36+
serializersModule = this@CborLocalTransportTest.serializersModule
37+
}
3438
}
3539
}
3640

3741
@Suppress("detekt.EmptyFunctionBlock")
3842
class ProtoBufLocalTransportTest : LocalTransportTest() {
3943
@OptIn(ExperimentalSerializationApi::class)
4044
override val serializationConfig: KrpcSerialFormatConfiguration.() -> Unit = {
41-
protobuf()
45+
protobuf {
46+
serializersModule = this@ProtoBufLocalTransportTest.serializersModule
47+
}
4248
}
4349

4450
// 'null' is not supported in ProtoBuf

0 commit comments

Comments
 (0)