/* Ċ Ġ* Ġ@ (# ) ĠJSON Fun Test . kt Ċ Ġ* Ċ Ġ* Ġjson - kotlin ĠKotlin ĠJSON ĠAuto ĠSerialize / deserialize Ċ Ġ* ĠCopyright Ġ( c ) Ġ 2 0 1 9 , Ġ 2 0 2 0 ĠPeter ĠWall Ċ Ġ* Ċ Ġ* ĠPermission Ġis Ġhereby Ġgranted , Ġfree Ġof Ġcharge , Ġto Ġany Ġperson Ġobtaining Ġa Ġcopy Ċ Ġ* Ġof Ġthis Ġsoftware Ġand Ġassociated Ġdocumentation Ġfiles Ġ( the Ġ" Software "), Ġto Ġdeal Ċ Ġ* Ġin Ġthe ĠSoftware Ġwithout Ġrestriction , Ġincluding Ġwithout Ġlimitation Ġthe Ġrights Ċ Ġ* Ġto Ġuse , Ġcopy , Ġmodify , Ġmerge , Ġpublish , Ġdistribute , Ġsublicense , Ġand / or Ġsell Ċ Ġ* Ġcopies Ġof Ġthe ĠSoftware , Ġand Ġto Ġpermit Ġpersons Ġto Ġwhom Ġthe ĠSoftware Ġis Ċ Ġ* Ġfurnished Ġto Ġdo Ġso , Ġsubject Ġto Ġthe Ġfollowing Ġconditions : Ċ Ġ* Ċ Ġ* ĠThe Ġabove Ġcopyright Ġnotice Ġand Ġthis Ġpermission Ġnotice Ġshall Ġbe Ġincluded Ġin Ġall Ċ Ġ* Ġcopies Ġor Ġsubstantial Ġportions Ġof Ġthe ĠSoftware . Ċ Ġ* Ċ Ġ* ĠTHE ĠSOFTWARE ĠIS ĠPROVIDED Ġ" AS ĠIS ", ĠWITHOUT ĠWARRANTY ĠOF ĠANY ĠKIND , ĠEXPRESS ĠOR Ċ Ġ* ĠIMPLIED , ĠINCLUDING ĠBUT ĠNOT ĠLIMITED ĠTO ĠTHE ĠWARRANTIES ĠOF ĠMERCHANTABILITY , Ċ Ġ* ĠFITNESS ĠFOR ĠA ĠPARTICULAR ĠPURPOSE ĠAND ĠNONINFRINGEMENT . ĠIN ĠNO ĠEVENT ĠSHALL ĠTHE Ċ Ġ* ĠAUTHORS ĠOR ĠCOPYRIGHT ĠHOLDERS ĠBE ĠLIABLE ĠFOR ĠANY ĠCLAIM , ĠDAMAGES ĠOR ĠOTHER Ċ Ġ* ĠLIABILITY , ĠWHETHER ĠIN ĠAN ĠACTION ĠOF ĠCONTRACT , ĠTORT ĠOR ĠOTHERWISE , ĠARISING ĠFROM , Ċ Ġ* ĠOUT ĠOF ĠOR ĠIN ĠCONNECTION ĠWITH ĠTHE ĠSOFTWARE ĠOR ĠTHE ĠUSE ĠOR ĠOTHER ĠDEALINGS ĠIN ĠTHE Ċ Ġ* ĠSOFTWARE . Ċ Ġ*/ Ċ Ċ package Ġnet . p wall . json Ċ Ċ import Ġkotlin . reflect . K Type Projection Ċ import Ġkotlin . reflect . full . create Type Ċ import Ġkotlin . reflect . full . star Project ed Type Ċ import Ġkotlin . test . assertNull Ċ import Ġkotlin . test . expect Ċ import Ġkotlin . test . Test Ċ Ċ import Ġjava . lang . reflect . Type Ċ Ċ class ĠJSON Fun Test Ġ{ ĊĊĠĠĠ Ġ@ Test Ġfun Ġ` make JSON Ġwith Ġas JSON Value Ġshould Ġcreate Ġthe Ġsame ĠJSONObject Ġas Ġexplicit Ġcreation `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġexpected Ġ= ĠJSONObject (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġput Value (" test String ", Ġ" xyz ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġput Value (" test Int ", Ġ 1 2 3 4 5 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġexpect ( expected ) Ġ{ Ġmake JSON (" test String " Ġto Ġ" xyz ". as JSON Value (), Ġ" test Int " Ġto Ġ 1 2 3 4 5 . as JSON Value ()) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test Ġfun Ġ` make JSON Ġwith Ġis JSON Ġshould Ġcreate Ġthe Ġsame ĠJSONObject Ġas Ġexplicit Ġcreation `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġexpected Ġ= ĠJSONObject (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġput Value (" test String ", Ġ" xyz ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġput Value (" test Int ", Ġ 1 2 3 4 5 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġexpect ( expected ) Ġ{ Ġmake JSON (" test String " Ġis JSON Ġ" xyz ", Ġ" test Int " Ġis JSON Ġ 1 2 3 4 5 ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test Ġfun Ġ` as JSON Value Ġshould Ġcorrectly Ġhandle ĠString `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtest String Ġ= Ġ" testing ..." ĊĠĠĠĠĠĠĠ Ġexpect ( JSON String ( test String )) Ġ{ Ġtest String . as JSON Value () Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test Ġfun Ġ` as JSON Value Ġshould Ġcorrectly Ġhandle ĠChar `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtest Char Ġ= Ġ' Q ' ĊĠĠĠĠĠĠĠ Ġexpect ( JSON String (" Q ")) Ġ{ Ġtest Char . as JSON Value () Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test Ġfun Ġ` as JSON Value Ġshould Ġcorrectly Ġhandle ĠInt `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtest Int Ġ= Ġ 9 8 7 6 5 4 3 2 1 ĊĠĠĠĠĠĠĠ Ġexpect ( JSON Int ( test Int )) Ġ{ Ġtest Int . as JSON Value () Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test Ġfun Ġ` as JSON Value Ġshould Ġcorrectly Ġhandle ĠLong `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtest Long Ġ= Ġ 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 ĊĠĠĠĠĠĠĠ Ġexpect ( JSON Long ( test Long )) Ġ{ Ġtest Long . as JSON Value () Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test Ġfun Ġ` as JSON Value Ġshould Ġcorrectly Ġhandle ĠShort `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtest Short : ĠShort Ġ= Ġ 1 2 3 4 ĊĠĠĠĠĠĠĠ Ġexpect ( JSON Int ( test Short . toInt ())) Ġ{ Ġtest Short . as JSON Value () Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test Ġfun Ġ` as JSON Value Ġshould Ġcorrectly Ġhandle ĠByte `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtest Byte : ĠByte Ġ= Ġ 1 2 3 ĊĠĠĠĠĠĠĠ Ġexpect ( JSON Int ( test Byte . toInt ())) Ġ{ Ġtest Byte . as JSON Value () Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test Ġfun Ġ` as JSON Value Ġshould Ġcorrectly Ġhandle ĠFloat `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtest Float Ġ= Ġ 3 . 1 4 1 5 9 F ĊĠĠĠĠĠĠĠ Ġexpect ( JSON Float ( test Float )) Ġ{ Ġtest Float . as JSON Value () Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test Ġfun Ġ` as JSON Value Ġshould Ġcorrectly Ġhandle ĠDouble `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtest Double Ġ= Ġ 3 . 1 4 1 5 9 2 6 5 3 5 8 9 7 9 3 2 3 8 4 6 ĊĠĠĠĠĠĠĠ Ġexpect ( JSON Double ( test Double )) Ġ{ Ġtest Double . as JSON Value () Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test Ġfun Ġ` as JSON Value Ġshould Ġcorrectly Ġhandle ĠBoolean `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtest Boolean Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġexpect ( JSON Boolean ( test Boolean )) Ġ{ Ġtest Boolean . as JSON Value () Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test Ġfun Ġ` is JSON Ġshould Ġcorrectly Ġhandle ĠString `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtest String Ġ= Ġ" what Ġnext ?" ĊĠĠĠĠĠĠĠ Ġexpect (" test String " Ġto ĠJSON String ( test String )) Ġ{ Ġ" test String " Ġis JSON Ġtest String Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test Ġfun Ġ` is JSON Ġshould Ġcorrectly Ġhandle ĠChar `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtest Char Ġ= Ġ' Z ' ĊĠĠĠĠĠĠĠ Ġexpect (" test Char " Ġto ĠJSON String (" Z ")) Ġ{ Ġ" test Char " Ġis JSON Ġtest Char Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test Ġfun Ġ` is JSON Ġshould Ġcorrectly Ġhandle ĠInt `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtest Int Ġ= Ġ 9 8 7 6 5 4 3 2 1 ĊĠĠĠĠĠĠĠ Ġexpect (" test Int " Ġto ĠJSON Int ( test Int )) Ġ{ Ġ" test Int " Ġis JSON Ġtest Int Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test Ġfun Ġ` is JSON Ġshould Ġcorrectly Ġhandle ĠLong `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtest Long Ġ= Ġ 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 ĊĠĠĠĠĠĠĠ Ġexpect (" test Long " Ġto ĠJSON Long ( test Long )) Ġ{ Ġ" test Long " Ġis JSON Ġtest Long Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test Ġfun Ġ` is JSON Ġshould Ġcorrectly Ġhandle ĠShort `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtest Short : ĠShort Ġ= Ġ 1 2 3 4 ĊĠĠĠĠĠĠĠ Ġexpect (" test Short " Ġto ĠJSON Int ( test Short . toInt ())) Ġ{ Ġ" test Short " Ġis JSON Ġtest Short Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test Ġfun Ġ` is JSON Ġshould Ġcorrectly Ġhandle ĠByte `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtest Byte : ĠByte Ġ= Ġ 1 2 3 ĊĠĠĠĠĠĠĠ Ġexpect (" test Byte " Ġto ĠJSON Int ( test Byte . toInt ())) Ġ{ Ġ" test Byte " Ġis JSON Ġtest Byte Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test Ġfun Ġ` is JSON Ġshould Ġcorrectly Ġhandle ĠFloat `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtest Float Ġ= Ġ 3 . 1 4 1 5 9 F ĊĠĠĠĠĠĠĠ Ġexpect (" test Float " Ġto ĠJSON Float ( test Float )) Ġ{ Ġ" test Float " Ġis JSON Ġtest Float Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test Ġfun Ġ` is JSON Ġshould Ġcorrectly Ġhandle ĠDouble `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtest Double Ġ= Ġ 3 . 1 4 1 5 9 2 6 5 3 5 8 9 7 9 3 2 3 8 4 6 ĊĠĠĠĠĠĠĠ Ġexpect (" test Double " Ġto ĠJSON Double ( test Double )) Ġ{ Ġ" test Double " Ġis JSON Ġtest Double Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test Ġfun Ġ` is JSON Ġshould Ġcorrectly Ġhandle ĠBoolean `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtest Boolean Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġexpect (" test Boolean " Ġto ĠJSON Boolean ( test Boolean )) Ġ{ Ġ" test Boolean " Ġis JSON Ġtest Boolean Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test Ġfun Ġ` parse JSON Ġshould Ġcorrectly Ġparse Ġstring `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġjson Ġ= Ġ""" {" field 1 ":" Hi Ġthere ! "," field 2 ": 8 8 8 } """ ĊĠĠĠĠĠĠĠ Ġval Ġexpected : ĠDummy 1 ? Ġ= ĠDummy 1 (" Hi Ġthere !", Ġ 8 8 8 ) ĊĠĠĠĠĠĠĠ Ġexpect ( expected ) Ġ{ Ġjson . parse JSON () Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test Ġfun Ġ` parse JSON Ġshould Ġcorrectly Ġparse Ġstring Ġusing Ġparameter ised Ġtype `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġjson Ġ= Ġ""" {" field 1 ":" Hi Ġthere ! "," field 2 ": 8 8 8 } """ ĊĠĠĠĠĠĠĠ Ġexpect ( Dummy 1 (" Hi Ġthere !", Ġ 8 8 8 )) Ġ{ Ġjson . parse JSON < Dummy 1 >() Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test Ġfun Ġ` parse JSON Ġshould Ġcorrectly Ġparse Ġstring Ġusing Ġexplicit ĠK Class `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġjson Ġ= Ġ""" {" field 1 ":" Hi Ġthere ! "," field 2 ": 8 8 8 } """ ĊĠĠĠĠĠĠĠ Ġexpect ( Dummy 1 (" Hi Ġthere !", Ġ 8 8 8 )) Ġ{ Ġjson . parse JSON ( Dummy 1 :: class ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test Ġfun Ġ` parse JSON Ġshould Ġcorrectly Ġparse Ġstring Ġusing Ġexplicit ĠK Type `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġjson Ġ= Ġ""" {" field 1 ":" Hi Ġthere ! "," field 2 ": 8 8 8 } """ ĊĠĠĠĠĠĠĠ Ġexpect ( Dummy 1 (" Hi Ġthere !", Ġ 8 8 8 )) Ġ{ Ġjson . parse JSON ( Dummy 1 :: class . star Project ed Type ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test Ġfun Ġ` stringify Ġshould Ġwork Ġon Ġany Ġobject `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdummy 1 Ġ= ĠDummy 1 (" Hi Ġthere !", Ġ 8 8 8 ) ĊĠĠĠĠĠĠĠ Ġval Ġexpected Ġ= ĠJSONObject (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġput Value (" field 1 ", Ġ" Hi Ġthere !") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġput Value (" field 2 ", Ġ 8 8 8 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġexpect ( expected ) Ġ{ ĠJSON . parse ( dummy 1 . stringify JSON ()) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test Ġfun Ġ` stringify Ġshould Ġwork Ġon Ġnull `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdummy 1 Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġexpect (" null ") Ġ{ Ġdummy 1 . stringify JSON () Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test Ġfun Ġ` as JSON Value Ġshould Ġcorrectly Ġhandle Ġarbitrary Ġobject `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdummy 1 Ġ= ĠDummy 1 (" Hi Ġthere !", Ġ 8 8 8 ) ĊĠĠĠĠĠĠĠ Ġexpect ( make JSON (" field 1 " Ġis JSON Ġ" Hi Ġthere !", Ġ" field 2 " Ġis JSON Ġ 8 8 8 )) Ġ{ Ġdummy 1 . as JSON Value () Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test Ġfun Ġ` as JSON Value Ġshould Ġcorrectly Ġhandle Ġnull `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdummy 1 Ġ= Ġnull ĊĠĠĠĠĠĠĠ ĠassertNull ( dummy 1 . as JSON Value ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test Ġfun Ġ` target K Type Ġshould Ġcreate Ġcorrect Ġtype `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlist Strings Ġ= ĠlistOf (" abc ", Ġ" def ") ĊĠĠĠĠĠĠĠ Ġval Ġjson Array String Ġ= ĠJSONArray (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Value (" abc ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Value (" def ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġexpect ( list Strings ) Ġ{ ĠJSON Deserializer . deserialize ( target K Type ( List :: class , ĠString :: class ), Ġjson Array String ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test Ġfun Ġ` target K Type Ġshould Ġcreate Ġcorrect Ġcomplex Ġtype `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlist Strings Ġ= ĠlistOf ( listOf (" abc ", Ġ" def ")) ĊĠĠĠĠĠĠĠ Ġval Ġjson Array Array String Ġ= ĠJSONArray (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd ( JSONArray (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd Value (" abc ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd Value (" def ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġexpect ( list Strings ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠJSON Deserializer . deserialize ( target K Type ( List :: class , Ġtarget K Type ( List :: class , ĠString :: class )), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġjson Array Array String ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test Ġfun Ġ` to K Type Ġshould Ġconvert Ġsimple Ġclass `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtype : ĠType Ġ= ĠJava Class 1 :: class . java ĊĠĠĠĠĠĠĠ Ġexpect ( Java Class 1 :: class . star Project ed Type ) Ġ{ Ġtype . to K Type () Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test Ġfun Ġ` to K Type Ġshould Ġconvert Ġparameter ized Ġclass `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfield Ġ= ĠJava Class 2 :: class . java . getField (" field 1 ") ĊĠĠĠĠĠĠĠ Ġval Ġtype : ĠType Ġ= Ġfield . generic Type ĊĠĠĠĠĠĠĠ Ġval Ġexpected Ġ= Ġjava . util . List :: class . create Type ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( K Type Projection . in variant ( Java Class 1 :: class . create Type ( nullable Ġ= Ġtrue )))) ĊĠĠĠĠĠĠĠ Ġexpect ( expected ) Ġ{ Ġtype . to K Type () Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test Ġfun Ġ` to K Type Ġshould Ġconvert Ġparameter ized Ġclass Ġwith Ġextends `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfield Ġ= ĠJava Class 2 :: class . java . getField (" field 2 ") ĊĠĠĠĠĠĠĠ Ġval Ġtype : ĠType Ġ= Ġfield . generic Type ĊĠĠĠĠĠĠĠ Ġval Ġexpected Ġ= Ġjava . util . List :: class . create Type ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( K Type Projection . co variant ( Java Class 1 :: class . create Type ( nullable Ġ= Ġtrue )))) ĊĠĠĠĠĠĠĠ Ġexpect ( expected ) Ġ{ Ġtype . to K Type () Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test Ġfun Ġ` to K Type Ġshould Ġconvert Ġparameter ized Ġclass Ġwith Ġsuper `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfield Ġ= ĠJava Class 2 :: class . java . getField (" field 3 ") ĊĠĠĠĠĠĠĠ Ġval Ġtype : ĠType Ġ= Ġfield . generic Type ĊĠĠĠĠĠĠĠ Ġval Ġexpected Ġ= Ġjava . util . List :: class . create Type ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( K Type Projection . contr av ari ant ( Java Class 1 :: class . create Type ( nullable Ġ= Ġtrue )))) ĊĠĠĠĠĠĠĠ Ġexpect ( expected ) Ġ{ Ġtype . to K Type () Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test Ġfun Ġ` to K Type Ġshould Ġconvert Ġnested Ġparameter ized Ġclass `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfield Ġ= ĠJava Class 2 :: class . java . getField (" field 4 ") ĊĠĠĠĠĠĠĠ Ġval Ġtype : ĠType Ġ= Ġfield . generic Type ĊĠĠĠĠĠĠĠ Ġval Ġexpected Ġ= Ġjava . util . List :: class . create Type ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( K Type Projection . in variant ( java . util . List :: class . create Type ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( K Type Projection . in variant ( Java Class 1 :: class . create Type ( nullable Ġ= Ġtrue ))), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnullable Ġ= Ġtrue )))) ĊĠĠĠĠĠĠĠ Ġexpect ( expected ) Ġ{ Ġtype . to K Type () Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test Ġfun Ġ` to K Type Ġshould Ġconvert Ġnested Ġparameter ized Ġclass Ġwith Ġextends `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfield Ġ= ĠJava Class 2 :: class . java . getField (" field 5 ") ĊĠĠĠĠĠĠĠ Ġval Ġtype : ĠType Ġ= Ġfield . generic Type ĊĠĠĠĠĠĠĠ Ġval Ġexpected Ġ= Ġjava . util . List :: class . create Type ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( K Type Projection . in variant ( java . util . List :: class . create Type ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( K Type Projection . co variant ( Java Class 1 :: class . create Type ( nullable Ġ= Ġtrue ))), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnullable Ġ= Ġtrue )))) ĊĠĠĠĠĠĠĠ Ġexpect ( expected ) Ġ{ Ġtype . to K Type () Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test Ġfun Ġ` decode Ġshould Ġconvert Ġa ĠJSONObject Ġto Ġa Ġspecified Ġtype `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġjson Ġ= ĠJSONObject (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġput Value (" field 1 ", Ġ" ab def ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġput Value (" field 2 ", Ġ 5 4 3 2 1 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġexpected : ĠDummy 1 ? Ġ= ĠDummy 1 (" ab def ", Ġ 5 4 3 2 1 ) ĊĠĠĠĠĠĠĠ Ġexpect ( expected ) Ġ{ Ġjson . deserialize ( Dummy 1 :: class . star Project ed Type ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test Ġfun Ġ` decode Ġshould Ġconvert Ġa ĠJSONObject Ġto Ġa Ġspecified Ġclass `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġjson Ġ= ĠJSONObject (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġput Value (" field 1 ", Ġ" ab def ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġput Value (" field 2 ", Ġ 5 4 3 2 1 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġexpected : ĠDummy 1 ? Ġ= ĠDummy 1 (" ab def ", Ġ 5 4 3 2 1 ) ĊĠĠĠĠĠĠĠ Ġexpect ( expected ) Ġ{ Ġjson . deserialize ( Dummy 1 :: class ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test Ġfun Ġ` decode Ġshould Ġconvert Ġa ĠJSONObject Ġto Ġan Ġimplied Ġclass `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġjson Ġ= ĠJSONObject (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġput Value (" field 1 ", Ġ" ab def ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġput Value (" field 2 ", Ġ 5 4 3 2 1 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġexpected : ĠDummy 1 ? Ġ= ĠDummy 1 (" ab def ", Ġ 5 4 3 2 1 ) ĊĠĠĠĠĠĠĠ Ġexpect ( expected ) Ġ{ Ġjson . deserialize () Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test Ġfun Ġ` decode Ġshould Ġconvert Ġa ĠJSONObject Ġto Ġa Ġspecified ĠJava Ġclass `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġjson Ġ= ĠJSONObject (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġput Value (" field 1 ", Ġ" ab def ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġput Value (" field 2 ", Ġ 5 4 3 2 1 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġexpected : ĠDummy 1 ? Ġ= ĠDummy 1 (" ab def ", Ġ 5 4 3 2 1 ) ĊĠĠĠĠĠĠĠ Ġexpect ( expected ) Ġ{ Ġjson . deserialize ( Dummy 1 :: class . java ) Ġ} ĊĠĠĠ Ġ} Ċ Ċ } Ċ