Skip to content

Commit 22eb624

Browse files
committed
Raise Jvm test coverage
1 parent fea645a commit 22eb624

File tree

2 files changed

+102
-6
lines changed

2 files changed

+102
-6
lines changed
Lines changed: 98 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,98 @@
1+
package kotlinx.serialization.csv.example
2+
3+
import kotlinx.coroutines.test.runTest
4+
import kotlinx.serialization.ExperimentalSerializationApi
5+
import kotlinx.serialization.builtins.ListSerializer
6+
import kotlinx.serialization.csv.Csv
7+
import kotlinx.serialization.csv.decodeFrom
8+
import kotlinx.serialization.csv.encodeTo
9+
import kotlinx.serialization.csv.example.Tire.Axis.FRONT
10+
import kotlinx.serialization.csv.example.Tire.Side.LEFT
11+
import kotlinx.serialization.csv.recordReader
12+
import kotlinx.serialization.csv.recordWriter
13+
import kotlinx.serialization.modules.SerializersModule
14+
import java.io.ByteArrayInputStream
15+
import java.io.ByteArrayOutputStream
16+
import kotlin.io.bufferedReader
17+
import kotlin.io.bufferedWriter
18+
import kotlin.test.Test
19+
import kotlin.test.assertEquals
20+
import kotlin.use
21+
import kotlin.uuid.Uuid
22+
23+
@OptIn(ExperimentalSerializationApi::class)
24+
internal class CsvJvmTest {
25+
26+
private val tasla = Vehicle(
27+
uuid = Uuid.parse("f9682dcb-30f7-4e88-915e-60e3b2758da7"),
28+
type = VehicleType.CAR,
29+
brand = "Tesla",
30+
)
31+
32+
private val porsche = Vehicle(
33+
uuid = Uuid.parse("5e1afd88-97a2-4373-a83c-44a49c552abd"),
34+
type = VehicleType.CAR,
35+
brand = "Porsche",
36+
)
37+
38+
private val testData = listOf(
39+
VehiclePartRecord(101, tasla, Tire(FRONT, LEFT, 245, 35, 21), 0.25),
40+
VehiclePartRecord(201, porsche, Oil(20, 50), 0.2),
41+
)
42+
43+
private val csv = Csv {
44+
serializersModule = SerializersModule {
45+
polymorphic(Part::class, Tire::class, Tire.serializer())
46+
polymorphic(Part::class, Oil::class, Oil.serializer())
47+
}
48+
}
49+
50+
private val serializer = ListSerializer(VehiclePartRecord.serializer())
51+
52+
@Test
53+
fun test_Csv_encodeTo_InputOutputStream() = runTest {
54+
val output = ByteArrayOutputStream().use { output ->
55+
csv.encodeTo(serializer, testData, output)
56+
output.toByteArray()
57+
}
58+
59+
val result = ByteArrayInputStream(output).use { input ->
60+
csv.decodeFrom(serializer, input).toList()
61+
}
62+
63+
assertEquals(testData, result)
64+
}
65+
66+
@Test
67+
fun test_Csv_decodeFrom_ReaderWriter() = runTest {
68+
val output = ByteArrayOutputStream().use { output ->
69+
output.bufferedWriter().use { writer ->
70+
csv.encodeTo(serializer, testData, writer)
71+
}
72+
output.toByteArray()
73+
}
74+
75+
val result = ByteArrayInputStream(output).use { input ->
76+
csv.decodeFrom(serializer, input.bufferedReader()).toList()
77+
}
78+
79+
assertEquals(testData, result)
80+
}
81+
82+
@Test
83+
fun test_Csv_recordReaderWriter_InputOutputStream() = runTest {
84+
val serializer = VehiclePartRecord.serializer()
85+
86+
val output = ByteArrayOutputStream().use { output ->
87+
val writer = csv.recordWriter(serializer, output)
88+
testData.forEach(writer::write)
89+
output.toByteArray()
90+
}
91+
92+
val result = ByteArrayInputStream(output).use { input ->
93+
csv.recordReader(serializer, input).asSequence().toList()
94+
}
95+
96+
assertEquals(testData, result)
97+
}
98+
}

library/src/jvmTest/kotlin/kotlinx/serialization/csv/example/SteamingTest.kt

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,6 @@ import kotlinx.serialization.csv.example.Tire.Side.LEFT
1212
import kotlinx.serialization.csv.example.Tire.Side.RIGHT
1313
import kotlinx.serialization.csv.recordReader
1414
import kotlinx.serialization.csv.recordWriter
15-
import kotlinx.serialization.csv.sink.CsvSink
16-
import kotlinx.serialization.csv.source.CsvSource
1715
import kotlinx.serialization.modules.SerializersModule
1816
import java.io.PipedReader
1917
import java.io.PipedWriter
@@ -67,8 +65,8 @@ class SteamingTest {
6765
val input = PipedReader()
6866
val output = PipedWriter(input)
6967

70-
val writer = csv.recordWriter(VehiclePartRecord.serializer(), CsvSink(output))
71-
val reader = csv.recordReader(VehiclePartRecord.serializer(), CsvSource(input))
68+
val writer = csv.recordWriter(VehiclePartRecord.serializer(), output)
69+
val reader = csv.recordReader(VehiclePartRecord.serializer(), input)
7270

7371
val readerTask = async(Dispatchers.IO) {
7472
reader.asSequence().toList()
@@ -108,15 +106,15 @@ class SteamingTest {
108106
val output = PipedWriter(input)
109107

110108
val readerTask = async(Dispatchers.IO) {
111-
val reader = csv.recordReader(Tire.serializer(), CsvSource(input))
109+
val reader = csv.recordReader(Tire.serializer(), input)
112110
reader.asSequence().onEach {
113111
println("Read $it")
114112
}.toList()
115113
}
116114

117115
val writerTask = async(Dispatchers.IO) {
118116
output.buffered().use { output ->
119-
val writer = csv.recordWriter(Tire.serializer(), CsvSink(output))
117+
val writer = csv.recordWriter(Tire.serializer(), output)
120118
testData.forEach {
121119
println("Writing $it")
122120
writer.write(it)

0 commit comments

Comments
 (0)