/* Ċ Ġ* ĠCopyright Ġ( c ) Ġ 2 0 2 2 ĠT ats u ya ĠM aki Ċ Ġ* Ċ Ġ* Ġ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 Ġio . t 2 8 . kotlin ify . lang Ċ Ċ import Ġcom . google . common . truth . Truth . assertThat Ċ import Ġio . t 2 8 . kotlin ify . assertThat Ċ import Ġio . t 2 8 . kotlin ify . lang . impl . Property Element Impl Ċ import Ġio . t 2 8 . kotlin ify . lang . impl . StringValue Ċ import Ġio . t 2 8 . kotlin ify . lang . impl . Type Element Impl Ċ import Ġkotlinx . serialization . Serial Name Ċ import Ġkotlinx . serialization . Serializable Ċ import Ġorg . junit . jupiter . api . BeforeEach Ċ import Ġorg . junit . jupiter . api . Nested Ċ import Ġorg . junit . jupiter . api . Test Ċ Ċ internal Ġclass ĠElements Test Ġ{ ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġannotated Element : ĠAnnot ated Element ĊĊĠĠĠ Ġ@ BeforeEach ĊĠĠĠ Ġfun ĠsetUp () Ġ{ ĊĠĠĠĠĠĠĠ Ġannotated Element Ġ= ĠType Element Impl ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ= Ġ" Example ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġkind Ġ= ĠType Kind . CLASS , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġannotations Ġ= ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġannotation < Serializable >() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Nested ĊĠĠĠ Ġinner Ġclass ĠHas Annotation Test Ġ{ ĊĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠ Ġfun Ġ` should Ġreturn Ġtrue Ġwhen Ġthe Ġannotation Ġexists `() Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠAct ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġactual Ġ= Ġannotated Element . has Annotation < Serializable >() ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠAssert ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( actual ). isTrue () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠ Ġfun Ġ` should Ġreturn Ġtrue Ġwhen Ġthe Ġannotation Ġdoes Ġnot Ġexist `() Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠAct ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġactual Ġ= Ġannotated Element . has Annotation < Deprecated >() ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠAssert ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( actual ). isFalse () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Nested ĊĠĠĠ Ġinner Ġclass ĠFind Annotations Test Ġ{ ĊĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠ Ġfun Ġ` should Ġreturn Ġmatched Ġannotations `() Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠAct ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġactual Ġ= Ġannotated Element . find Annotations Ġ{ Ġannotation Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġannotation . members . isEmpty () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠAssert ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( actual ). has Size ( 1 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Nested ĊĠĠĠ Ġinner Ġclass ĠAnnotation Test Ġ{ ĊĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠ Ġfun Ġ` should Ġinstantiate ĠAnnotation Value Ġwith ĠK Class `() Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠAct ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġactual Ġ= Ġannotation < Serial Name >() ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠAssert ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( actual ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhas Type < Serial Name >() ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmembers (). isEmpty () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠ Ġfun Ġ` should Ġinstantiate ĠAnnotation Value Ġwith ĠK Class Ġand Ġmembers `() Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠAct ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġactual Ġ= Ġannotation < Serial Name >( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| value Ġ= Ġ"_ name " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" . trim Margin () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠAssert ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( actual ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhas Type < Serial Name >() ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmembers (). has Size ( 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmember At ( 0 ). isEqualTo ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| value Ġ= Ġ"_ name " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ""" . trim Margin () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Nested ĊĠĠĠ Ġinner Ġclass ĠHas Properties Test Ġ{ ĊĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠ Ġfun Ġ` should Ġreturn Ġtrue Ġwhen Ġproperty Ġexists `() Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠArrange ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtype Element Ġ= ĠType Element Impl ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ= Ġ" Example ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġkind Ġ= ĠType Kind . CLASS , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġproperties Ġ= ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠProperty Element Impl ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtype Ġ= ĠString Value (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ= Ġ" name ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoriginal Name Ġ= Ġ"_ name " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠAct ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġactual Ġ= Ġtype Element . has Properties () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠAssert ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( actual ). isTrue () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠ Ġfun Ġ` should Ġreturn Ġfalse Ġwhen Ġproperty Ġdoes Ġnot Ġexist `() Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠArrange ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtype Element Ġ= ĠType Element Impl ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ= Ġ" Example ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġkind Ġ= ĠType Kind . CLASS , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġproperties Ġ= Ġempty List () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠAct ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġactual Ġ= Ġtype Element . has Properties () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠAssert ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( actual ). isFalse () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ