/* Ċ Ġ* ĠCopyright Ġ( c ) Ġ 2 0 2 0 . Ċ Ġ* Ċ Ġ* ĠThis Ġfile Ġis Ġpart Ġof Ġxml util . Ċ Ġ* Ċ Ġ* ĠThis Ġfile Ġis Ġlic enced Ġto Ġyou Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ċ Ġ* Ġ" License "); Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ċ Ġ* Ġwith Ġthe ĠLicense . Ġ ĠYou Ġshould Ġhave Ġreceived Ġa Ġcopy Ġof Ġthe Ġlicense Ġwith Ġthe Ġsource Ġdistribution . Ċ Ġ* ĠAlternatively , Ġyou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* ĠĠ Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ċ Ġ* Ġsoftware Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ċ Ġ* Ġ" AS ĠIS " ĠBASIS , ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY Ċ Ġ* ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ġ ĠSee Ġthe ĠLicense Ġfor Ġthe Ċ Ġ* Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ġlimitations Ċ Ġ* Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ Ċ package Ġnl . adapt ivity . xml util . serialization Ċ Ċ import Ġkotlinx . serialization . json . Json Ċ import Ġnl . adapt ivity . xml util . Xml Streaming Ċ import Ġorg . junit . jupiter . api . Test Ċ import Ġorg . xml unit . assertj . Xml Assert Ċ import Ġorg . xml unit . builder . Input Ċ import Ġjavax . xml . parsers . Document BuilderFactory Ċ import Ġjavax . xml . transform . dom . DOM Source Ċ import Ġkotlin . test . assertEquals Ċ Ċ class ĠJ vm Serialization Test Ġ{ ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` deserialize ĠDOM Ġnode Ġfrom Ġxml `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcontent Text Ġ= Ġ"< tag > some Ġtext Ġ< b > some Ġbold Ġtext < i > some Ġbold Ġitalic Ġtext </ i ></ b ></ tag >" ĊĠĠĠĠĠĠĠ Ġval Ġdoc Ġ= ĠDocument BuilderFactory . newInstance (). apply Ġ{ Ġis Namespace Aware Ġ= Ġtrue Ġ}. new Document Builder (). new Document () ĊĠĠĠĠĠĠĠ Ġval Ġexpected Obj Ġ= Ġdoc . createElement NS ("", Ġ" tag "). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġappend Child ( doc . createTextNode (" some Ġtext Ġ")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġappend Child ( doc . createElement NS (" "," b "). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġappend Child ( doc . createTextNode (" some Ġbold Ġtext ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġappend Child ( doc . createElement NS ("", Ġ" i "). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġappend Child ( doc . createTextNode (" some Ġbold Ġitalic Ġtext ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġxml Ġ= ĠXML Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġauto Pol ymorphic Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġdeserialized Ġ= Ġxml . decode FromString ( Element Serializer , Ġcontent Text ) ĊĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġexpected Ġ= ĠInput . from Node ( expected Obj ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġactual Ġ= ĠInput . from Node ( de serialized ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠ ĠXml Assert . ĊĠĠĠĠĠĠĠĠĠĠĠ ĠXml Assert . assertThat ( expected ). and ( actual ). are Ident ical () Ċ Ċ // ĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( expected Obj , Ġdeserialized ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠAssertionError ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġexpected Txt Ġ= ĠXml Streaming . toString ( DOM Source ( expected Obj )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġactual Txt Ġ= ĠXml Streaming . toString ( DOM Source ( de serialized )) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( expected Txt , Ġactual Txt ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow Ġe Ġ// Ġif Ġwe Ġreach Ġhere , Ġthrow Ġanyway ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` serialize ĠDOM Ġcontent Ġto Ġxml `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġexpected Ġ= Ġ"< tag > some Ġtext Ġ< b > some Ġbold Ġtext < i > some Ġbold Ġitalic Ġtext </ i ></ b ></ tag >" ĊĠĠĠĠĠĠĠ Ġval Ġdoc Ġ= ĠDocument BuilderFactory . newInstance (). new Document Builder (). new Document () ĊĠĠĠĠĠĠĠ Ġval Ġelement Ġ= Ġdoc . createElement (" tag "). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġappend Child ( doc . createTextNode (" some Ġtext Ġ")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġappend Child ( doc . createElement (" b "). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġappend Child ( doc . createTextNode (" some Ġbold Ġtext ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġappend Child ( doc . createElement (" i "). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġappend Child ( doc . createTextNode (" some Ġbold Ġitalic Ġtext ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġxml Ġ= ĠXML () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġindent String Ġ= Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġauto Pol ymorphic Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġserialized Ġ= Ġxml . encode ToString ( Element Serializer , Ġelement ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( expected , Ġserialized ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` serialize ĠDOM Ġcontent Ġto Ġjson `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġexpected Ġ= Ġ"{\" local name \":\" tag \",\" attributes \": {}, \" content \": [[ \" text \",\" some Ġtext Ġ\ "], [\" element \", {\" local name \":\" b \",\" attributes \": {}, \" content \": [[ \" text \",\" some Ġbold Ġtext \" ],[ \" element \", {\" local name \":\" i \",\" attributes \": {}, \" content \": [[ \" text \",\" some Ġbold Ġitalic Ġtext \"] ]} ]] } ]] }" ĊĠĠĠĠĠĠĠ Ġval Ġdoc Ġ= ĠDocument BuilderFactory . newInstance (). new Document Builder (). new Document () ĊĠĠĠĠĠĠĠ Ġval Ġelement Ġ= Ġdoc . createElement (" tag "). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġappend Child ( doc . createTextNode (" some Ġtext Ġ")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġappend Child ( doc . createElement (" b "). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġappend Child ( doc . createTextNode (" some Ġbold Ġtext ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġappend Child ( doc . createElement (" i "). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġappend Child ( doc . createTextNode (" some Ġbold Ġitalic Ġtext ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġjson Ġ= ĠJson ĊĊĠĠĠĠĠĠĠ Ġval Ġserialized Ġ= Ġjson . encode ToString ( Element Serializer , Ġelement ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( expected , Ġserialized ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` deserialize ĠDOM Ġnode Ġfrom Ġjson `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcontent Text Ġ= Ġ"{\" local name \":\" tag \",\" attributes \": {}, \" content \": [[ \" text \",\" some Ġtext Ġ\ "], [\" element \", {\" local name \":\" b \",\" attributes \": {}, \" content \": [[ \" text \",\" some Ġbold Ġtext \" ],[ \" element \", {\" local name \":\" i \",\" attributes \": {}, \" content \": [[ \" text \",\" some Ġbold Ġitalic Ġtext \"] ]} ]] } ]] }" ĊĠĠĠĠĠĠĠ Ġval Ġdoc Ġ= ĠDocument BuilderFactory . newInstance (). apply Ġ{ Ġis Namespace Aware Ġ= Ġtrue Ġ}. new Document Builder (). new Document () ĊĠĠĠĠĠĠĠ Ġval Ġexpected Obj Ġ= Ġdoc . createElement NS ("", Ġ" tag "). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġappend Child ( doc . createTextNode (" some Ġtext Ġ")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġappend Child ( doc . createElement NS (" "," b "). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġappend Child ( doc . createTextNode (" some Ġbold Ġtext ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġappend Child ( doc . createElement NS ("", Ġ" i "). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġappend Child ( doc . createTextNode (" some Ġbold Ġitalic Ġtext ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġjson Ġ= ĠJson Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Len ient Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġdeserialized Ġ= Ġjson . decode FromString ( Element Serializer , Ġcontent Text ) ĊĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġexpected Ġ= ĠInput . from Node ( expected Obj ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġactual Ġ= ĠInput . from Node ( de serialized ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠ ĠXml Assert . ĊĠĠĠĠĠĠĠĠĠĠĠ ĠXml Assert . assertThat ( expected ). and ( actual ). are Ident ical () Ċ Ċ // ĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( expected Obj , Ġdeserialized ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠAssertionError ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġexpected Txt Ġ= ĠXml Streaming . toString ( DOM Source ( expected Obj )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġactual Txt Ġ= ĠXml Streaming . toString ( DOM Source ( de serialized )) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( expected Txt , Ġactual Txt ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow Ġe Ġ// Ġif Ġwe Ġreach Ġhere , Ġthrow Ġanyway ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ Ċ } Ċ