package Ġcom . github . sal om on br ys . kot son Ċ Ċ import Ġcom . google . gson . Gson Builder Ċ import Ġcom . google . gson . JsonArray Ċ import Ġcom . google . gson . JsonObject Ċ import Ġcom . google . gson . Json Syntax Exception Ċ import Ġorg . jetbrains . spe k . api . Spe k Ċ import Ġorg . jetbrains . spe k . api . dsl . given Ċ import Ġorg . jetbrains . spe k . api . dsl . it Ċ import Ġorg . jetbrains . spe k . api . dsl . on Ċ import Ġjava . lang . reflect . Parameterized Type Ċ import Ġkotlin . test . assertEquals Ċ import Ġkotlin . test . assert Fails With Ċ import Ġkotlin . test . assertTrue Ċ Ċ class ĠSD Registration Specs Ġ: ĠSpe k ({ ĊĊĠĠĠ Ġgiven (" a Ġnon - generic Ġtype Ġadapter ") Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġgson Ġ= ĠGson Builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. register Type Adapter < Person > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġserialize Ġ{ Ġjson Array ( it . src . name , Ġit . src . age ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdeserialize Ġ{ ĠPerson ( it . json [ 0 ]. string , Ġit . json [ 1 ]. int ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. create () ĊĊĠĠĠĠĠĠĠ Ġon (" serialization ") Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġit (" should Ġserialize Ġaccordingly ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġjson Ġ= Ġgson . toJson Tree ( Person (" Sal om on ", Ġ 2 9 )) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertTrue ( json Ġis ĠJson Array ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals (" Sal om on ", Ġjson [ 0 ]. string ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( 2 9 , Ġjson [ 1 ]. int ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġon (" de serialization ") Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġit (" should Ġdeserialize Ġaccordingly ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġperson Ġ= Ġgson . fromJson < Person >(" [\" Sal om on \", Ġ 2 9 ]") ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( Person (" Sal om on ", Ġ 2 9 ), Ġperson ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġgiven (" a Ġspecialized Ġtype Ġadapter ") Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġgson Ġ= ĠGson Builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. register Type Adapter < Generic Person < Int >> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġserialize Ġ{ Ġjson Array ( it . src . name , Ġit . src . info ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdeserialize Ġ{ ĠGeneric Person ( it . json [ 0 ]. string , Ġit . json [ 1 ]. int ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. create () ĊĊĠĠĠĠĠĠĠ Ġon (" serial iz att ion ") Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġit (" should Ġserialize Ġspecific Ġtype Ġaccordingly ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġjson Ġ= Ġgson . typed ToJson Tree ( Generic Person (" Sal om on ", Ġ 2 9 )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertTrue ( json Ġis ĠJson Array ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals (" Sal om on ", Ġjson [ 0 ]. string ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( 2 9 , Ġjson [ 1 ]. int ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġit (" should Ġnot Ġserialize Ġdifferently Ġparameter ized Ġtype Ġaccordingly ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġjson Ġ= Ġgson . typed ToJson Tree ( Generic Person (" Sal om on ", Ġ" B ry s ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertTrue ( json Ġis ĠJsonObject ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġon (" de serialization ") Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġit (" should Ġdeserialize Ġspecific Ġtype Ġaccordingly ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġperson Ġ= Ġgson . fromJson < Generic Person < Int >> ("[ \" Sal om on \", Ġ 2 9 ]") ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( Generic Person (" Sal om on ", Ġ 2 9 ), Ġperson ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġit (" Should Ġnot Ġdeserialize Ġdifferently Ġparameter ized Ġtype Ġaccordingly ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġassert Fails With < Json Syntax Exception > Ġ{ Ġgson . fromJson < Generic Person < String >> ("[ \" Sal om on \", Ġ\" B ry s \"] ") Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġgiven (" a Ġgeneric Ġtype Ġadapter ") Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġgson Ġ= ĠGson Builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. register Type Adapter < Generic Person <* >> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġserialize Ġ{ Ġjson Array ( it . src . name , Ġit . src . info ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdeserialize Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġinfo Type Ġ= Ġ( it . type Ġas ĠParameter ized Type ). actual Type Arguments [ 0 ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠGeneric Person ( it . json [ 0 ]. string , Ġit . context . deserialize < Any >( it . json [ 1 ], Ġinfo Type )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. create () ĊĊĠĠĠĠĠĠĠ Ġon (" serialization ") Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġit (" should Ġserialize Ġany Ġparameter ized Ġtype Ġaccordingly Ġ( 1 )") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġjson Ġ= Ġgson . typed ToJson Tree ( Generic Person (" Sal om on ", Ġ 2 9 )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertTrue ( json Ġis ĠJson Array ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals (" Sal om on ", Ġjson [ 0 ]. string ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( 2 9 , Ġjson [ 1 ]. int ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġit (" should Ġserialize Ġany Ġparameter ized Ġtype Ġaccordingly Ġ( 2 )") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġjson Ġ= Ġgson . typed ToJson Tree ( Generic Person (" Sal om on ", Ġ" B ry s ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertTrue ( json Ġis ĠJson Array ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals (" Sal om on ", Ġjson [ 0 ]. string ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals (" B ry s ", Ġjson [ 1 ]. string ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġon (" de serialization ") Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġit (" should Ġdeserialize Ġany Ġparameter ized Ġtype Ġaccordingly Ġ( 1 )") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġperson Ġ= Ġgson . fromJson < Generic Person < Int >> ("[ \" Sal om on \", Ġ 2 9 ]") ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( Generic Person (" Sal om on ", Ġ 2 9 ), Ġperson ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġit (" should Ġdeserialize Ġany Ġparameter ized Ġtype Ġaccordingly Ġ( 2 )") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġperson Ġ= Ġgson . fromJson < Generic Person < String >> ("[ \" Sal om on \", Ġ\" B ry s \"] ") ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( Generic Person (" Sal om on ", Ġ" B ry s "), Ġperson ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ Ċ }) Ċ