/* Ċ Ġ* ĠCopyright Ġ 2 0 1 7 - 2 0 1 8 ĠJetBrains Ġs . r . o . ĠUse Ġof Ġthis Ġsource Ġcode Ġis Ġgoverned Ġby Ġthe ĠApache Ġ 2 . 0 Ġlicense . Ċ Ġ*/ Ċ @ file : Context ual Serialization ( Json Custom Serial izers Test . B :: class ) Ċ Ċ package Ġkotlinx . serialization . json Ċ Ċ import Ġkotlinx . serialization .* Ċ import Ġkotlinx . serialization . modules . serializers Module Of Ċ import Ġkotlinx . serialization . internal .* Ċ import Ġkotlin . test . Test Ċ import Ġkotlin . test . assertEquals Ċ Ċ class ĠJson Custom Serial izers Test Ġ: ĠJson TestBase () Ġ{ ĊĠĠĠĠĊĠĠĠ Ġ@ Serializable ĊĠĠĠ Ġdata Ġclass ĠA (@ Serial Id ( 1 ) Ġval Ġb : ĠB ) ĊĊĠĠĠ Ġdata Ġclass ĠB (@ Serial Id ( 1 ) Ġval Ġvalue : ĠInt ) ĊĊĠĠĠ Ġobject ĠB Serializer Ġ: ĠK Serializer < B > Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġserialize ( encoder : ĠEncoder , Ġobj : ĠB ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġencoder . encode Int ( obj . value ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġdeserialize ( decoder : ĠDecoder ): ĠB Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠB ( decoder . decode Int ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġdescriptor : ĠSerial Descriptor Ġ= Ġobject Ġ: ĠSerial Class Desc Impl (" B ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġval Ġkind : ĠSerial Kind ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget () Ġ= ĠPrimitive Kind . INT ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Serializable ĊĠĠĠ Ġdata Ġclass ĠB List (@ Serial Id ( 1 ) Ġval Ġbs : ĠList < B >) ĊĊĠĠĠ Ġ@ Serializable ĊĠĠĠ Ġdata Ġclass ĠC (@ Serial Id ( 1 ) Ġval Ġa : ĠInt Ġ= Ġ 3 1 , Ġ@ Serial Id ( 2 ) Ġval Ġb : ĠInt Ġ= Ġ 4 2 ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ@ Serializer ( for Class Ġ= ĠC :: class ) ĊĠĠĠĠĠĠĠ Ġcompanion Ġobject : ĠK Serializer < C > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġserialize ( encoder : ĠEncoder , Ġobj : ĠC ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġelem Output Ġ= Ġencoder . begin Structure ( descriptor ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelem Output . encode Int Element ( descriptor , Ġ 1 , Ġobj . b ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( obj . a Ġ!= Ġ 3 1 ) Ġelem Output . encode Int Element ( descriptor , Ġ 0 , Ġobj . a ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelem Output . end Structure ( descriptor ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Serializable ĊĠĠĠ Ġdata Ġclass ĠC List 1 (@ Serial Id ( 1 ) Ġval Ġc : ĠList < C >) ĊĊĠĠĠ Ġ@ Serializable ĊĠĠĠ Ġdata Ġclass ĠC List 2 (@ Serial Id ( 1 ) Ġval Ġd : ĠInt Ġ= Ġ 5 , Ġ@ Serial Id ( 2 ) Ġval Ġc : ĠList < C >) Ġ{ ĊĠĠĠĠĠĠĠ Ġ@ Serializer ( for Class Ġ= ĠC List 2 :: class ) ĊĠĠĠĠĠĠĠ Ġcompanion Ġobject : ĠK Serializer < C List 2 > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġserialize ( encoder : ĠEncoder , Ġobj : ĠC List 2 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġelem Output Ġ= Ġencoder . begin Structure ( descriptor ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelem Output . encode Serializable Element ( descriptor , Ġ 1 , ĠC . list , Ġobj . c ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( obj . d Ġ!= Ġ 5 ) Ġelem Output . encode Int Element ( descriptor , Ġ 0 , Ġobj . d ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelem Output . end Structure ( descriptor ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Serializable ĊĠĠĠ Ġdata Ġclass ĠC List 3 (@ Serial Id ( 1 ) Ġval Ġe : ĠList < C > Ġ= Ġempty List (), Ġ@ Serial Id ( 2 ) Ġval Ġf : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ@ Serializer ( for Class Ġ= ĠC List 3 :: class ) ĊĠĠĠĠĠĠĠ Ġcompanion Ġobject : ĠK Serializer < C List 3 > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġserialize ( encoder : ĠEncoder , Ġobj : ĠC List 3 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġelem Output Ġ= Ġencoder . begin Structure ( descriptor ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( obj . e . isNotEmpty ()) Ġelem Output . encode Serializable Element ( descriptor , Ġ 0 , ĠC . list , Ġobj . e ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelem Output . encode Int Element ( descriptor , Ġ 1 , Ġobj . f ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelem Output . end Structure ( descriptor ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Serializable ĊĠĠĠ Ġdata Ġclass ĠC List 4 (@ Serial Id ( 1 ) Ġval Ġg : ĠList < C > Ġ= Ġempty List (), Ġ@ Serial Id ( 2 ) Ġval Ġh : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ@ Serializer ( for Class Ġ= ĠC List 4 :: class ) ĊĠĠĠĠĠĠĠ Ġcompanion Ġobject : ĠK Serializer < C List 4 > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġserialize ( encoder : ĠEncoder , Ġobj : ĠC List 4 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġelem Output Ġ= Ġencoder . begin Structure ( descriptor ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelem Output . encode Int Element ( descriptor , Ġ 1 , Ġobj . h ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( obj . g . isNotEmpty ()) Ġelem Output . encode Serializable Element ( descriptor , Ġ 0 , ĠC . list , Ġobj . g ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelem Output . end Structure ( descriptor ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Serializable ĊĠĠĠ Ġdata Ġclass ĠC List 5 (@ Serial Id ( 1 ) Ġval Ġg : ĠList < Int > Ġ= Ġempty List (), Ġ@ Serial Id ( 2 ) Ġval Ġh : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ@ Serializer ( for Class Ġ= ĠC List 5 :: class ) ĊĠĠĠĠĠĠĠ Ġcompanion Ġobject : ĠK Serializer < C List 5 > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġserialize ( encoder : ĠEncoder , Ġobj : ĠC List 5 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġelem Output Ġ= Ġencoder . begin Structure ( descriptor ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelem Output . encode Int Element ( descriptor , Ġ 1 , Ġobj . h ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( obj . g . isNotEmpty ()) Ġelem Output . encode Serializable Element ( descriptor , Ġ 0 , ĠInt Serializer . list , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġobj . g ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelem Output . end Structure ( descriptor ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġmodule With B Ġ= Ġserializers Module Of ( B :: class , ĠB Serializer ) ĊĊĠĠĠ Ġprivate Ġfun Ġcreate Json With B () Ġ= ĠJson Ġ{ Ġun quoted Ġ= Ġtrue ; Ġserial Module Ġ= Ġmodule With B Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Write Custom () Ġ= Ġparame tri zed Test Ġ{ Ġuse Streaming Ġ-> ĊĠĠĠĠĠĠĠ Ġval Ġa Ġ= ĠA ( B ( 2 )) ĊĠĠĠĠĠĠĠ Ġval Ġj Ġ= Ġcreate Json With B () ĊĠĠĠĠĠĠĠ Ġval Ġs Ġ= Ġj . stringify ( a , Ġuse Streaming ) ĊĠĠĠĠĠĠĠ ĠassertEquals ("{ b : 2 }", Ġs ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Read Custom () Ġ= Ġparame tri zed Test Ġ{ Ġuse Streaming Ġ-> ĊĠĠĠĠĠĠĠ Ġval Ġa Ġ= ĠA ( B ( 2 )) ĊĠĠĠĠĠĠĠ Ġval Ġj Ġ= Ġcreate Json With B () ĊĠĠĠĠĠĠĠ Ġval Ġs Ġ= Ġj . parse < A >(" { b : 2 }", Ġuse Streaming ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( a , Ġs ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Write Custom List () Ġ= Ġparame tri zed Test Ġ{ Ġuse Streaming Ġ-> ĊĠĠĠĠĠĠĠ Ġval Ġobj Ġ= ĠB List ( listOf ( B ( 1 ), ĠB ( 2 ), ĠB ( 3 ))) ĊĠĠĠĠĠĠĠ Ġval Ġj Ġ= Ġcreate Json With B () ĊĠĠĠĠĠĠĠ Ġval Ġs Ġ= Ġj . stringify ( obj , Ġuse Streaming ) ĊĠĠĠĠĠĠĠ ĠassertEquals ("{ bs :[ 1 , 2 , 3 ] }", Ġs ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Read Custom List () Ġ= Ġparame tri zed Test Ġ{ Ġuse Streaming Ġ-> ĊĠĠĠĠĠĠĠ Ġval Ġobj Ġ= ĠB List ( listOf ( B ( 1 ), ĠB ( 2 ), ĠB ( 3 ))) ĊĠĠĠĠĠĠĠ Ġval Ġj Ġ= Ġcreate Json With B () ĊĠĠĠĠĠĠĠ Ġval Ġbs Ġ= Ġj . parse < B List >(" { bs :[ 1 , 2 , 3 ] }", Ġuse Streaming ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( obj , Ġbs ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Write Custom List Root Level () Ġ= Ġparame tri zed Test Ġ{ Ġuse Streaming Ġ-> ĊĠĠĠĠĠĠĠ Ġval Ġobj Ġ= ĠlistOf ( B ( 1 ), ĠB ( 2 ), ĠB ( 3 )) ĊĠĠĠĠĠĠĠ Ġval Ġj Ġ= Ġcreate Json With B () ĊĠĠĠĠĠĠĠ Ġval Ġs Ġ= Ġj . stringify ( B Serializer . list , Ġobj , Ġuse Streaming ) ĊĠĠĠĠĠĠĠ ĠassertEquals ("[ 1 , 2 , 3 ]", Ġs ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Read Custom List Root Level () Ġ= Ġparame tri zed Test Ġ{ Ġuse Streaming Ġ-> ĊĠĠĠĠĠĠĠ Ġval Ġobj Ġ= ĠlistOf ( B ( 1 ), ĠB ( 2 ), ĠB ( 3 )) ĊĠĠĠĠĠĠĠ Ġval Ġj Ġ= Ġcreate Json With B () ĊĠĠĠĠĠĠĠ Ġval Ġbs Ġ= Ġj . parse ( B Serializer . list , Ġ"[ 1 , 2 , 3 ]", Ġuse Streaming ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( obj , Ġbs ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Write Custom In verted Order () Ġ= Ġparame tri zed Test Ġ{ Ġuse Streaming Ġ-> ĊĠĠĠĠĠĠĠ Ġval Ġobj Ġ= ĠC ( 1 , Ġ 2 ) ĊĠĠĠĠĠĠĠ Ġval Ġs Ġ= Ġun quoted . stringify ( obj , Ġuse Streaming ) ĊĠĠĠĠĠĠĠ ĠassertEquals ("{ b : 2 , a : 1 }", Ġs ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Write Custom O mit Default () Ġ= Ġparame tri zed Test Ġ{ Ġuse Streaming Ġ-> ĊĠĠĠĠĠĠĠ Ġval Ġobj Ġ= ĠC ( b Ġ= Ġ 2 ) ĊĠĠĠĠĠĠĠ Ġval Ġs Ġ= Ġun quoted . stringify ( obj , Ġuse Streaming ) ĊĠĠĠĠĠĠĠ ĠassertEquals ("{ b : 2 }", Ġs ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Read Custom In verted Order () Ġ= Ġparame tri zed Test Ġ{ Ġuse Streaming Ġ-> ĊĠĠĠĠĠĠĠ Ġval Ġobj Ġ= ĠC ( 1 , Ġ 2 ) ĊĠĠĠĠĠĠĠ Ġval Ġs Ġ= Ġun quoted . parse < C >(" { b : 2 , a : 1 }", Ġuse Streaming ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( obj , Ġs ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Read Custom O mit Default () Ġ= Ġparame tri zed Test Ġ{ Ġuse Streaming Ġ-> ĊĠĠĠĠĠĠĠ Ġval Ġobj Ġ= ĠC ( b Ġ= Ġ 2 ) ĊĠĠĠĠĠĠĠ Ġval Ġj Ġ= ĠJson Ġ{ Ġun quoted Ġ= Ġtrue Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġs Ġ= Ġj . parse < C >(" { b : 2 }", Ġuse Streaming ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( obj , Ġs ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Write ListOf Optional () Ġ= Ġparame tri zed Test Ġ{ Ġuse Streaming Ġ-> ĊĠĠĠĠĠĠĠ Ġval Ġobj Ġ= ĠlistOf ( C ( a Ġ= Ġ 1 ), ĠC ( b Ġ= Ġ 2 ), ĠC ( 3 , Ġ 4 )) ĊĠĠĠĠĠĠĠ Ġval Ġs Ġ= Ġun quoted . stringify ( C . list , Ġobj , Ġuse Streaming ) ĊĠĠĠĠĠĠĠ ĠassertEquals (" [{ b : 4 2 , a : 1 },{ b : 2 },{ b : 4 , a : 3 } ]", Ġs ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Read ListOf Optional () Ġ= Ġparame tri zed Test Ġ{ Ġuse Streaming Ġ-> ĊĠĠĠĠĠĠĠ Ġval Ġobj Ġ= ĠlistOf ( C ( a Ġ= Ġ 1 ), ĠC ( b Ġ= Ġ 2 ), ĠC ( 3 , Ġ 4 )) ĊĠĠĠĠĠĠĠ Ġval Ġj Ġ= Ġ"[ { b : 4 2 , a : 1 },{ b : 2 },{ b : 4 , a : 3 }] " ĊĠĠĠĠĠĠĠ Ġval Ġs Ġ= Ġun quoted . parse ( C . list , Ġj , Ġuse Streaming ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( obj , Ġs ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Write Optional List 1 () Ġ= Ġparame tri zed Test Ġ{ Ġuse Streaming Ġ-> ĊĠĠĠĠĠĠĠ Ġval Ġobj Ġ= ĠC List 1 ( listOf ( C ( a Ġ= Ġ 1 ), ĠC ( b Ġ= Ġ 2 ), ĠC ( 3 , Ġ 4 ))) ĊĠĠĠĠĠĠĠ Ġval Ġs Ġ= Ġun quoted . stringify ( obj , Ġuse Streaming ) ĊĠĠĠĠĠĠĠ ĠassertEquals ("{ c : [{ b : 4 2 , a : 1 },{ b : 2 },{ b : 4 , a : 3 }] }", Ġs ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Write Optional List 1 Quoted () Ġ= Ġparame tri zed Test Ġ{ Ġuse Streaming Ġ-> ĊĠĠĠĠĠĠĠ Ġval Ġobj Ġ= ĠC List 1 ( listOf ( C ( a Ġ= Ġ 1 ), ĠC ( b Ġ= Ġ 2 ), ĠC ( 3 , Ġ 4 ))) ĊĠĠĠĠĠĠĠ Ġval Ġs Ġ= ĠJson Ġ{ Ġun quoted Ġ= Ġfalse Ġ}. stringify ( obj , Ġuse Streaming ) ĊĠĠĠĠĠĠĠ ĠassertEquals (""" {" c ":[{" b ": 4 2 ," a ": 1 },{" b ": 2 },{" b ": 4 ," a ": 3 }]} """, Ġs ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Read Optional List 1 () Ġ= Ġparame tri zed Test Ġ{ Ġuse Streaming Ġ-> ĊĠĠĠĠĠĠĠ Ġval Ġobj Ġ= ĠC List 1 ( listOf ( C ( a Ġ= Ġ 1 ), ĠC ( b Ġ= Ġ 2 ), ĠC ( 3 , Ġ 4 ))) ĊĠĠĠĠĠĠĠ Ġval Ġj Ġ= Ġ"{ c : [{ b : 4 2 , a : 1 },{ b : 2 },{ b : 4 , a : 3 }] }" ĊĠĠĠĠĠĠĠ ĠassertEquals ( obj , Ġun quoted . parse ( j , Ġuse Streaming )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Write Optional List 2 a () Ġ= Ġparame tri zed Test Ġ{ Ġuse Streaming Ġ-> ĊĠĠĠĠĠĠĠ Ġval Ġobj Ġ= ĠC List 2 ( 7 , ĠlistOf ( C ( a Ġ= Ġ 5 ), ĠC ( b Ġ= Ġ 6 ), ĠC ( 7 , Ġ 8 ))) ĊĠĠĠĠĠĠĠ Ġval Ġs Ġ= Ġun quoted . stringify ( obj , Ġuse Streaming ) ĊĠĠĠĠĠĠĠ ĠassertEquals ("{ c : [{ b : 4 2 , a : 5 },{ b : 6 },{ b : 8 , a : 7 }], d : 7 }", Ġs ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Read Optional List 2 a () Ġ= Ġparame tri zed Test Ġ{ Ġuse Streaming Ġ-> ĊĠĠĠĠĠĠĠ Ġval Ġobj Ġ= ĠC List 2 ( 7 , ĠlistOf ( C ( a Ġ= Ġ 5 ), ĠC ( b Ġ= Ġ 6 ), ĠC ( 7 , Ġ 8 ))) ĊĠĠĠĠĠĠĠ Ġval Ġj Ġ= Ġ"{ c : [{ b : 4 2 , a : 5 },{ b : 6 },{ b : 8 , a : 7 }], d : 7 }" ĊĠĠĠĠĠĠĠ ĠassertEquals ( obj , Ġun quoted . parse ( j , Ġuse Streaming )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Write Optional List 2 b () Ġ= Ġparame tri zed Test Ġ{ Ġuse Streaming Ġ-> ĊĠĠĠĠĠĠĠ Ġval Ġobj Ġ= ĠC List 2 ( c Ġ= ĠlistOf ( C ( a Ġ= Ġ 5 ), ĠC ( b Ġ= Ġ 6 ), ĠC ( 7 , Ġ 8 ))) ĊĠĠĠĠĠĠĠ Ġval Ġs Ġ= Ġun quoted . stringify ( obj , Ġuse Streaming ) ĊĠĠĠĠĠĠĠ ĠassertEquals ("{ c : [{ b : 4 2 , a : 5 },{ b : 6 },{ b : 8 , a : 7 }] }", Ġs ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Read Optional List 2 b () Ġ= Ġparame tri zed Test Ġ{ Ġuse Streaming Ġ-> ĊĠĠĠĠĠĠĠ Ġval Ġobj Ġ= ĠC List 2 ( c Ġ= ĠlistOf ( C ( a Ġ= Ġ 5 ), ĠC ( b Ġ= Ġ 6 ), ĠC ( 7 , Ġ 8 ))) ĊĠĠĠĠĠĠĠ Ġval Ġj Ġ= Ġ"{ c : [{ b : 4 2 , a : 5 },{ b : 6 },{ b : 8 , a : 7 }] }" ĊĠĠĠĠĠĠĠ ĠassertEquals ( obj , Ġun quoted . parse ( j , Ġuse Streaming )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Write Optional List 3 a () Ġ= Ġparame tri zed Test Ġ{ Ġuse Streaming Ġ-> ĊĠĠĠĠĠĠĠ Ġval Ġobj Ġ= ĠC List 3 ( listOf ( C ( a Ġ= Ġ 1 ), ĠC ( b Ġ= Ġ 2 ), ĠC ( 3 , Ġ 4 )), Ġ 9 9 ) ĊĠĠĠĠĠĠĠ Ġval Ġs Ġ= Ġun quoted . stringify ( obj , Ġuse Streaming ) ĊĠĠĠĠĠĠĠ ĠassertEquals ("{ e : [{ b : 4 2 , a : 1 },{ b : 2 },{ b : 4 , a : 3 }], f : 9 9 }", Ġs ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Read Optional List 3 a () Ġ= Ġparame tri zed Test Ġ{ Ġuse Streaming Ġ-> ĊĠĠĠĠĠĠĠ Ġval Ġobj Ġ= ĠC List 3 ( listOf ( C ( a Ġ= Ġ 1 ), ĠC ( b Ġ= Ġ 2 ), ĠC ( 3 , Ġ 4 )), Ġ 9 9 ) ĊĠĠĠĠĠĠĠ Ġval Ġj Ġ= Ġ"{ e : [{ b : 4 2 , a : 1 },{ b : 2 },{ b : 4 , a : 3 }], f : 9 9 }" ĊĠĠĠĠĠĠĠ ĠassertEquals ( obj , Ġun quoted . parse ( j , Ġuse Streaming )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Write Optional List 3 b () Ġ= Ġparame tri zed Test Ġ{ Ġuse Streaming Ġ-> ĊĠĠĠĠĠĠĠ Ġval Ġobj Ġ= ĠC List 3 ( f = 9 9 ) ĊĠĠĠĠĠĠĠ Ġval Ġs Ġ= Ġun quoted . stringify ( obj , Ġuse Streaming ) ĊĠĠĠĠĠĠĠ ĠassertEquals ("{ f : 9 9 }", Ġs ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Read Optional List 3 b () Ġ= Ġparame tri zed Test Ġ{ Ġuse Streaming Ġ-> ĊĠĠĠĠĠĠĠ Ġval Ġobj Ġ= ĠC List 3 ( f = 9 9 ) ĊĠĠĠĠĠĠĠ Ġval Ġj Ġ= Ġ"{ f : 9 9 }" ĊĠĠĠĠĠĠĠ ĠassertEquals ( obj , Ġun quoted . parse ( j , Ġuse Streaming )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Write Optional List 4 a () Ġ= Ġparame tri zed Test Ġ{ Ġuse Streaming Ġ-> ĊĠĠĠĠĠĠĠ Ġval Ġobj Ġ= ĠC List 4 ( listOf ( C ( a Ġ= Ġ 1 ), ĠC ( b Ġ= Ġ 2 ), ĠC ( 3 , Ġ 4 )), Ġ 5 4 ) ĊĠĠĠĠĠĠĠ Ġval Ġs Ġ= Ġun quoted . stringify ( obj , Ġuse Streaming ) ĊĠĠĠĠĠĠĠ ĠassertEquals ("{ h : 5 4 , g : [{ b : 4 2 , a : 1 },{ b : 2 },{ b : 4 , a : 3 }] }", Ġs ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Read Optional List 4 a () Ġ= Ġparame tri zed Test Ġ{ Ġuse Streaming Ġ-> ĊĠĠĠĠĠĠĠ Ġval Ġobj Ġ= ĠC List 4 ( listOf ( C ( a Ġ= Ġ 1 ), ĠC ( b Ġ= Ġ 2 ), ĠC ( 3 , Ġ 4 )), Ġ 5 4 ) ĊĠĠĠĠĠĠĠ Ġval Ġj Ġ= Ġ"{ h : 5 4 , g : [{ b : 4 2 , a : 1 },{ b : 2 },{ b : 4 , a : 3 }] }" ĊĠĠĠĠĠĠĠ ĠassertEquals ( obj , Ġun quoted . parse ( j , Ġuse Streaming )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Write Optional List 4 b () Ġ= Ġparame tri zed Test Ġ{ Ġuse Streaming Ġ-> ĊĠĠĠĠĠĠĠ Ġval Ġobj Ġ= ĠC List 4 ( h = 9 7 ) ĊĠĠĠĠĠĠĠ Ġval Ġj Ġ= Ġ"{ h : 9 7 }" ĊĠĠĠĠĠĠĠ Ġval Ġs Ġ= Ġun quoted . stringify ( obj , Ġuse Streaming ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( j , Ġs ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Read Optional List 4 b () Ġ= Ġparame tri zed Test Ġ{ Ġuse Streaming Ġ-> ĊĠĠĠĠĠĠĠ Ġval Ġobj Ġ= ĠC List 4 ( h = 9 7 ) ĊĠĠĠĠĠĠĠ Ġval Ġj Ġ= Ġ"{ h : 9 7 }" ĊĠĠĠĠĠĠĠ ĠassertEquals ( obj , Ġun quoted . parse ( j , Ġuse Streaming )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Write Optional List 5 a () Ġ= Ġparame tri zed Test Ġ{ Ġuse Streaming Ġ-> ĊĠĠĠĠĠĠĠ Ġval Ġobj Ġ= ĠC List 5 ( listOf ( 9 , 8 , 7 , 6 , 5 ), Ġ 5 ) ĊĠĠĠĠĠĠĠ Ġval Ġs Ġ= Ġun quoted . stringify ( obj , Ġuse Streaming ) ĊĠĠĠĠĠĠĠ ĠassertEquals ("{ h : 5 , g :[ 9 , 8 , 7 , 6 , 5 ] }", Ġs ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Read Optional List 5 a () Ġ= Ġparame tri zed Test Ġ{ Ġuse Streaming Ġ-> ĊĠĠĠĠĠĠĠ Ġval Ġobj Ġ= ĠC List 5 ( listOf ( 9 , 8 , 7 , 6 , 5 ), Ġ 5 ) ĊĠĠĠĠĠĠĠ Ġval Ġj Ġ= Ġ"{ h : 5 , g :[ 9 , 8 , 7 , 6 , 5 ]}" ĊĠĠĠĠĠĠĠ ĠassertEquals ( obj , Ġun quoted . parse ( j , Ġuse Streaming )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Write Optional List 5 b () Ġ= Ġparame tri zed Test Ġ{ Ġuse Streaming Ġ-> ĊĠĠĠĠĠĠĠ Ġval Ġobj Ġ= ĠC List 5 ( h = 9 9 9 ) ĊĠĠĠĠĠĠĠ Ġval Ġs Ġ= Ġun quoted . stringify ( obj , Ġuse Streaming ) ĊĠĠĠĠĠĠĠ ĠassertEquals ("{ h : 9 9 9 }", Ġs ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Read Optional List 5 b () Ġ= Ġparame tri zed Test Ġ{ Ġuse Streaming Ġ-> ĊĠĠĠĠĠĠĠ Ġval Ġobj Ġ= ĠC List 5 ( h = 9 9 9 ) ĊĠĠĠĠĠĠĠ Ġval Ġj Ġ= Ġ"{ h : 9 9 9 }" ĊĠĠĠĠĠĠĠ ĠassertEquals ( obj , Ġun quoted . parse ( j , Ġuse Streaming )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Map Built ins Test () Ġ= Ġparame tri zed Test Ġ{ Ġuse Streaming Ġ-> ĊĠĠĠĠĠĠĠ Ġval Ġmap Ġ= Ġmap Of ( 1 Ġto Ġ" 1 ", Ġ 2 Ġto Ġ" 2 ") ĊĠĠĠĠĠĠĠ Ġval Ġserial Ġ= Ġ( Int Serializer Ġto ĠString Serializer ). map ĊĠĠĠĠĠĠĠ Ġval Ġs Ġ= ĠJson . un quoted . stringify ( serial , Ġmap , Ġuse Streaming ) ĊĠĠĠĠĠĠĠ ĠassertEquals ("{ 1 : 1 , 2 : 2 }", Ġs ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Resolve At Root Level () Ġ= Ġparame tri zed Test Ġ{ Ġuse Streaming Ġ-> ĊĠĠĠĠĠĠĠ Ġval Ġj Ġ= Ġcreate Json With B () ĊĠĠĠĠĠĠĠ Ġval Ġbs Ġ= Ġj . parse < B >(" 1 ", Ġuse Streaming ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( B ( 1 ), Ġbs ) ĊĠĠĠ Ġ} Ċ } Ċ