/* Ċ Ġ* ĠCopyright Ġ 2 0 1 8 ĠJetBrains Ġs . r . o . Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* Ġ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 Ġkotlinx . serialization Ċ Ċ import Ġkotlin . test .* Ċ Ċ class ĠMapper Test Ġ{ ĊĊĠĠĠ Ġ@ Serializable ĊĠĠĠ Ġdata Ġclass ĠData ( val Ġlist : ĠList < String >, Ġval Ġproperty : ĠString ) ĊĊĠĠĠ Ġ@ Serializable ĊĠĠĠ Ġdata Ġclass ĠRecursive ( val Ġdata : ĠData , Ġval Ġproperty : ĠString ) ĊĊĠĠĠ Ġ@ Serializable ĊĠĠĠ Ġdata Ġclass ĠNullable Data ( val Ġnullable : ĠString ?, Ġval Ġnullable 2 : ĠString ?, Ġval Ġproperty : ĠString ) ĊĊĠĠĠ Ġ@ Serializable ĊĠĠĠ Ġdata Ġclass ĠCategory ( var Ġname : ĠString ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġsub Category : ĠSub Category ? Ġ= Ġnull ) ĊĊĠĠĠ Ġ@ Serializable ĊĠĠĠ Ġdata Ġclass ĠSub Category ( var Ġname : ĠString ? Ġ= Ġnull ) ĊĊĠĠĠ Ġ@ Serializable ĊĠĠĠ Ġdata Ġclass ĠData With Map ( val Ġmap : ĠMap < String , ĠInt >) ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest List Tag Stack () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdata Ġ= ĠData ( listOf (" element 1 "), Ġ" property ") ĊĊĠĠĠĠĠĠĠ Ġval Ġmap Ġ= ĠMapper . map ( data ) ĊĠĠĠĠĠĠĠ Ġval Ġun map Ġ= ĠMapper . un map < Data >( map ) ĊĊĠĠĠĠĠĠĠ ĠassertEquals ( data . list , Ġun map . list ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( data . property , Ġun map . property ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Recursive Block Tag () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġrecursive Ġ= ĠRecursive ( Data ( listOf (" l 1 "), Ġ" property "), Ġ" string ") ĊĊĠĠĠĠĠĠĠ Ġval Ġmap Ġ= ĠMapper . map ( recursive ) ĊĠĠĠĠĠĠĠ Ġval Ġun map Ġ= ĠMapper . un map < Recursive >( map ) ĊĊĠĠĠĠĠĠĠ ĠassertEquals ( recursive . data . list , Ġun map . data . list ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( recursive . data . property , Ġun map . data . property ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( recursive . property , Ġun map . property ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Nullable Tag Stack () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdata Ġ= ĠNullable Data ( null , Ġnull , Ġ" property ") ĊĊĠĠĠĠĠĠĠ Ġval Ġmap Ġ= ĠMapper . map Nullable ( data ) ĊĠĠĠĠĠĠĠ Ġval Ġun map Ġ= ĠMapper . un map Nullable < Nullable Data >( map ) ĊĊĠĠĠĠĠĠĠ ĠassertEquals ( data . nullable , Ġun map . nullable ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( data . nullable 2 , Ġun map . nullable 2 ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( data . property , Ġun map . property ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Nested Null () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcategory Ġ= ĠCategory ( name Ġ= Ġ" Name ") ĊĠĠĠĠĠĠĠ Ġval Ġmap Ġ= ĠMapper . map Nullable ( category ) ĊĠĠĠĠĠĠĠ Ġval Ġre created Category Ġ= ĠMapper . un map Nullable < Category >( map ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( category , Ġre created Category ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Nested Nullable () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcategory Ġ= ĠCategory ( name Ġ= Ġ" Name ", Ġsub Category Ġ= ĠSub Category ()) ĊĠĠĠĠĠĠĠ Ġval Ġmap Ġ= ĠMapper . map Nullable ( category ) ĊĠĠĠĠĠĠĠ Ġval Ġre created Category Ġ= ĠMapper . un map Nullable < Category >( map ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( category , Ġre created Category ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġfails On Incorrect Maps () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmap : ĠMap < String , ĠAny ?> Ġ= Ġmap Of (" name " Ġto Ġ" Name ") ĊĠĠĠĠĠĠĠ Ġassert Fails With < NoSuch ElementException > Ġ{ ĠMapper . un map Nullable < Category >( map ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġworks With Nested Map () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmap 0 Ġ= ĠData With Map ( map Of ()) ĊĠĠĠĠĠĠĠ Ġval Ġmap 1 Ġ= ĠData With Map ( map Of (" one " Ġto Ġ 1 )) ĊĠĠĠĠĠĠĠ Ġval Ġmap 2 Ġ= ĠData With Map ( map Of (" one " Ġto Ġ 1 , Ġ" two " Ġto Ġ 2 )) ĊĊĠĠĠĠĠĠĠ Ġfun Ġdo Test ( testData : ĠData With Map ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmap Ġ= ĠMapper . map ( Data With Map . serializer (), ĠtestData ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġd 2 Ġ= ĠMapper . un map ( Data With Map . serializer (), Ġmap ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( testData , Ġd 2 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġdo Test ( map 0 ) ĊĠĠĠĠĠĠĠ Ġdo Test ( map 1 ) ĊĠĠĠĠĠĠĠ Ġdo Test ( map 2 ) ĊĠĠĠ Ġ} Ċ } Ċ