1+ package xyz.xenondevs.cbf
2+
3+ import org.junit.jupiter.api.Test
4+ import org.junit.jupiter.api.assertDoesNotThrow
5+ import xyz.xenondevs.cbf.io.ByteReader
6+ import xyz.xenondevs.cbf.io.ByteWriter
7+ import xyz.xenondevs.cbf.serializer.BinarySerializer
8+ import java.util.concurrent.atomic.AtomicReference
9+
10+ class PlatformTypesSerializerSelectionTest {
11+
12+ private class Foo1
13+ private class Foo2
14+ private class Foo3
15+
16+ @Test
17+ fun `test retrieving non-platform type serializer after registering as platform type` () {
18+ val serializer = platformTypeSerializer(AtomicReference (Foo1 ())) // BinarySerializer<Foo1!>
19+ Cbf .registerSerializer(serializer)
20+
21+ assertDoesNotThrow { Cbf .getSerializer<Foo1 >() }
22+ }
23+
24+ @Test
25+ fun `test retrieving platform type serializer after registering as platform type` () {
26+ val ref = AtomicReference (Foo2 ())
27+ val serializer = platformTypeSerializer(ref) // BinarySerializer<Foo2!>
28+ Cbf .registerSerializer(serializer)
29+
30+ assertDoesNotThrow { Cbf .getSerializerLike(ref) }
31+ }
32+
33+ @Test
34+ fun `test retrieving platform type serializer after registering as non-platform type` () {
35+ val serializer = object : BinarySerializer <Foo3 > {
36+ override fun read (reader : ByteReader ) = throw UnsupportedOperationException ()
37+ override fun write (obj : Foo3 ? , writer : ByteWriter ) = throw UnsupportedOperationException ()
38+ override fun copy (obj : Foo3 ? ) = throw UnsupportedOperationException ()
39+ }
40+ Cbf .registerSerializer(serializer)
41+
42+ assertDoesNotThrow { Cbf .getSerializerLike(AtomicReference (Foo3 ())) }
43+ }
44+
45+ private fun <T : Any > platformTypeSerializer (atomicRef : AtomicReference <T >): BinarySerializer <T > {
46+ return object : BinarySerializer <T > {
47+ override fun read (reader : ByteReader ) = throw UnsupportedOperationException ()
48+ override fun write (obj : T ? , writer : ByteWriter ) = throw UnsupportedOperationException ()
49+ override fun copy (obj : T ? ) = throw UnsupportedOperationException ()
50+ }
51+ }
52+
53+ private inline fun <reified T : Any > Cbf.getSerializerLike (atomicRef : AtomicReference <T >): BinarySerializer <T > {
54+ return Cbf .getSerializer<T >()
55+ }
56+
57+ }
0 commit comments