package Ġcom . t ess . core . network Ċ Ċ import Ġarrow . core . or Null Ċ import Ġcom . fasterxml . jackson . annotation . JsonIgnore Properties Ċ import Ġcom . fasterxml . jackson . annotation . JsonInclude Ċ import Ġcom . fasterxml . jackson . annotation . JsonProperty Ċ import Ġio . kot lint est . assertions . arrow . either . shouldBe Left Ċ import Ġio . kot lint est . assertions . arrow . either . shouldBe Right Ċ import Ġio . kot lint est . shouldBe Ċ import Ġjava . util . Arrays Ċ import Ġorg . junit . Test Ċ Ċ class ĠObject Parser Impl Test Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġsut Ġ= ĠObject Parser Impl () ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Should Ġparse Ġjson Ġstring Ġto Ġobject `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġjson Ġ= Ġ"{\" string \":\" string \",\" int \": 1 ,\" boolean \": true ,\" long \": 3 }" ĊĊĠĠĠĠĠĠĠ Ġval Ġactual Ġ= Ġsut . parse Json < Test Json Class >( json ) ĊĊĠĠĠĠĠĠĠ Ġval Ġexpected Ġ= ĠTest Json Class (" string ", Ġ 1 , Ġtrue , Ġ 3 , Ġnull ) ĊĊĠĠĠĠĠĠĠ Ġactual . shouldBe Right ( expected ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Should Ġparse Ġjson Ġstring Ġcomplex Ġobject `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġjson Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"{\" string \":\" string \",\" int \":\" 1 \",\" boolean \":\" true \",\" long \":\" 3 \",\" obj \":{\" new String \":\" new String \",\" new Int \":\" 3 \" }}" ĊĊĠĠĠĠĠĠĠ Ġval Ġactual Ġ= Ġsut . parse Json < Test Json Class >( json ) ĊĊĠĠĠĠĠĠĠ Ġval Ġexpected Ġ= ĠTest Json Class ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" string ", Ġ 1 , Ġtrue , Ġ 3 , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTest Internal Json Class ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" new String ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 3 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġactual . shouldBe Right ( expected ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Should Ġfail Ġparsing Ġstring Ġwithout Ġcrash `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġjson Ġ= Ġ"" ĊĊĠĠĠĠĠĠĠ Ġsut . parse Json < Test Json Class >( json ). shouldBe Left () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Should Ġparse Ġjson Ġmap Ġto Ġobject `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġjson Ġ= Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" string " Ġto Ġ" string ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" int " Ġto Ġ" 1 ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" boolean " Ġto Ġ" true ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" long " Ġto Ġ" 3 " ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġval Ġactual Ġ= Ġsut . parse Json < Test Json Class >( json ) ĊĊĠĠĠĠĠĠĠ Ġval Ġexpected Ġ= ĠTest Json Class (" string ", Ġ 1 , Ġtrue , Ġ 3 , Ġnull ) ĊĊĠĠĠĠĠĠĠ Ġactual . shouldBe Right ( expected ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Should Ġparse Ġjson Ġmap Ġcomplex Ġobject `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġjson Ġ= Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" string " Ġto Ġ" string ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" int " Ġto Ġ" 1 ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" boolean " Ġto Ġ" true ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" long " Ġto Ġ" 3 ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" obj " Ġto Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" new String " Ġto Ġ" new String ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" new Int " Ġto Ġ" 3 " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġval Ġactual Ġ= Ġsut . parse Json < Test Json Class >( json ) ĊĊĠĠĠĠĠĠĠ Ġval Ġexpected Ġ= ĠTest Json Class ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" string ", Ġ 1 , Ġtrue , Ġ 3 , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTest Internal Json Class ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" new String ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 3 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġactual . shouldBe Right ( expected ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Should Ġfail Ġparsing Ġmap Ġwithout Ġcrash `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġjson : ĠMap < String , ĠString > Ġ= Ġmap Of () ĊĊĠĠĠĠĠĠĠ Ġsut . parse Json < Test Json Class >( json ). shouldBe Left () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Should Ġconvert Ġobject Ġto Ġjson Ġstring `() Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġactual Ġ= Ġsut ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. toJSON String ( Test Json Class (" string ", Ġ 1 , Ġtrue , Ġ 3 , Ġnull )) ĊĊĠĠĠĠĠĠĠ Ġval Ġexpected Ġ= Ġ"{\" string \":\" string \",\" int \": 1 ,\" boolean \": true ,\" long \": 3 }" ĊĊĠĠĠĠĠĠĠ Ġactual . shouldBe Right ( expected ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Should Ġconvert Ġobject Ġto Ġjson Ġbyte Ġarray `() Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġactual Ġ= Ġsut ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. toJSON Bytes ( Test Json Class (" string ", Ġ 1 , Ġtrue , Ġ 3 , Ġnull )) ĊĊĠĠĠĠĠĠĠ Ġval Ġexpected Ġ= Ġ"{\" string \":\" string \",\" int \": 1 ,\" boolean \": true ,\" long \": 3 }". toByteArray () ĊĊĠĠĠĠĠĠĠ ĠArrays . equals ( expected , Ġactual . or Null ()) ĠshouldBe Ġtrue ĊĠĠĠ Ġ} Ċ } Ċ Ċ @ JsonIgnore Properties ( ignore Unknown Ġ= Ġtrue ) Ċ @ JsonInclude ( JsonInclude . Include . NON _ NULL ) Ċ private Ġdata Ġclass ĠTest Json Class ( ĊĠĠĠ Ġ@ JsonProperty (" string ") Ġval Ġstring : ĠString , ĊĠĠĠ Ġ@ JsonProperty (" int ") Ġval Ġint : ĠInt , ĊĠĠĠ Ġ@ JsonProperty (" boolean ") Ġval Ġboolean : ĠBoolean ?, ĊĠĠĠ Ġ@ JsonProperty (" long ") Ġval Ġlong : ĠLong , ĊĠĠĠ Ġ@ JsonProperty (" obj ") Ġval Ġobj : ĠTest Internal Json Class ? Ġ= Ġnull Ċ ) Ċ Ċ @ JsonIgnore Properties ( ignore Unknown Ġ= Ġtrue ) Ċ @ JsonInclude ( JsonInclude . Include . NON _ NULL ) Ċ private Ġdata Ġclass ĠTest Internal Json Class ( ĊĠĠĠ Ġ@ JsonProperty (" new String ") Ġval Ġstring : ĠString ? Ġ= Ġnull , ĊĠĠĠ Ġ@ JsonProperty (" new Int ") Ġval Ġint : ĠInt ? Ġ= Ġnull Ċ ) Ċ