Skip to content

Commit 687cbb5

Browse files
committed
Add Kotlin unit tests to swift-codable fixture
1 parent 4077557 commit 687cbb5

File tree

3 files changed

+69
-1
lines changed

3 files changed

+69
-1
lines changed
Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
/* This Source Code Form is subject to the terms of the Mozilla Public
2+
* License, v. 2.0. If a copy of the MPL was not distributed with this
3+
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
4+
5+
import kotlinx.serialization.*
6+
import kotlinx.serialization.json.*
7+
import uniffi.codable_test.*
8+
9+
val simpleRecord = SimpleRecord(
10+
string = "Test",
11+
boolean = true,
12+
integer = 1,
13+
floatVar = 1.1,
14+
vec = listOf(true),
15+
)
16+
17+
val jsonSimpleRecord = Json.encodeToString(simpleRecord)
18+
val deserializedSimpleRecord = Json.decodeFromString<SimpleRecord>(jsonSimpleRecord)
19+
assert(deserializedSimpleRecord.string == "Test")
20+
assert(deserializedSimpleRecord.boolean)
21+
assert(deserializedSimpleRecord.integer == 1)
22+
assert(deserializedSimpleRecord.floatVar == 1.1)
23+
assert(deserializedSimpleRecord.vec == listOf(true))
24+
25+
// MultiLayerRecord
26+
val multilayer = MultiLayerRecord(
27+
simpleEnum = SimpleEnum.ONE,
28+
reprU8 = ReprU8.TWO,
29+
simpleRecord = simpleRecord,
30+
)
31+
32+
val jsonMultiLayerRecord = Json.encodeToString(multilayer)
33+
val deserializedMultiLayerRecord = Json.decodeFromString<MultiLayerRecord>(jsonMultiLayerRecord)
34+
assert(deserializedMultiLayerRecord.simpleEnum == SimpleEnum.ONE)
35+
assert(deserializedMultiLayerRecord.reprU8 == ReprU8.TWO)
36+
assert(deserializedMultiLayerRecord.simpleRecord == simpleRecord)
37+
38+
// RecordWithOptionals
39+
val optionals = RecordWithOptionals(
40+
string = null,
41+
boolean = null,
42+
integer = null,
43+
floatVar = null,
44+
vec = listOf("A", "B"),
45+
)
46+
47+
val implicitNulls = Json { explicitNulls = false }
48+
val jsonRecordWithOptionals = implicitNulls.encodeToString(optionals)
49+
assert(jsonRecordWithOptionals == """{"vec":["A","B"]}""")
50+
51+
// ComplexEnum
52+
val withClassDiscriminator = Json { classDiscriminator = "#class" }
53+
val complexEnum = ComplexEnum.String("test")
54+
val jsonComplexEnum = withClassDiscriminator.encodeToString<ComplexEnum>(complexEnum)
55+
val deserializedComplexEnum = withClassDiscriminator.decodeFromString<ComplexEnum>(jsonComplexEnum)
56+
assert(deserializedComplexEnum == ComplexEnum.String("test"))
57+
58+
// SimpleError: Exceptions are not serializable in Kotlin
59+
// val simpleError = SimpleError.OsError
60+
// val jsonSimpleError = Json.encodeToString(simpleError)
61+
// val deserializedSimpleError = Json.decodeFromString<SimpleError>(jsonSimpleError)
62+
// assert(deserializedSimpleError == SimpleError.OsError)
Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1,4 @@
1-
uniffi::build_foreign_language_testcases!("tests/bindings/test_codable.swift",);
1+
uniffi::build_foreign_language_testcases!(
2+
"tests/bindings/test_codable.kts",
3+
"tests/bindings/test_codable.swift",
4+
);

fixtures/swift-codable/uniffi.toml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,5 @@
1+
[bindings.kotlin]
2+
generate_serializable_types = true
3+
14
[bindings.swift]
25
generate_codable_conformance = true

0 commit comments

Comments
 (0)