package Ġarrow . meta . quotes . scope . templates Ċ Ċ import Ġarrow . meta . plugin . testing . Code Ċ import Ġarrow . meta . plugin . testing . Compiler Test Ċ import Ġarrow . meta . plugin . testing . Compiler Test . Companion . source Ċ import Ġarrow . meta . plugin . testing . assert This Ċ import Ġarrow . meta . quotes . scope . plugins . Property Plugin Ċ import Ġorg . junit . jupiter . api . Test Ċ Ċ class ĠProperty Test Ġ{ ĊĊĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠ Ġprivate Ġval Ġproperty Ġ= ĊĠĠĠĠĠ Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| Ġ// meta debug ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| Ġclass ĠAddress Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠĠ Ġval Ġname : ĠString Ġ= Ġ" H ol mes , ĠSh er lock " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠĠ Ġprivate Ġvar Ġstreet : ĠString Ġ= Ġ" B aker " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠĠ Ġvar Ġcity : ĠString Ġ= Ġ" L ondon " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠĠ Ġvar Ġstate : ĠString ? Ġ= Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠĠ Ġprivate Ġvar Ġzip : ĠString Ġ= Ġ" 1 2 3 4 5 6 " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| Ġ""" . source ĊĊĠĠĠ Ġprivate Ġval Ġproperty Getter Ġ= ĊĠĠĠĠĠ Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| Ġ// meta debug ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| class ĠAddress Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠ Ġval Ġname : ĠString Ġ= Ġ" H ol mes , ĠSh er lock " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠĠ Ġget () Ġ{ Ġreturn Ġ" The Ġname Ġis " Ġ+ Ġfield Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| } ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| Ġ""" . source ĊĊĠĠĠ Ġprivate Ġval Ġproperty Setter Ġ= ĊĠĠĠĠĠ Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| Ġ// meta debug ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| Ġclass ĠAddress Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠ Ġvar Ġname : ĠString Ġ= Ġ" H ol mes , ĠSh er lock " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġ" The Ġname Ġis " Ġ+ Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| Ġ""" . source ĊĊĠĠĠ Ġprivate Ġval Ġproperty Delegate Ġ= ĊĠĠĠĠĠ Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| Ġ// meta debug ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| Ġclass ĠAddress Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠĠ Ġval Ġname : ĠString Ġby Ġlazy Ġ{ Ġ" H ol mes , ĠSh er lock " Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| Ġ""" . source ĊĊĠĠĠ Ġprivate Ġval Ġproperty Descriptor Ġ= ĊĠĠĠĠĠ Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| Ġ// meta debug ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| Ġclass ĠAddress Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠĠ Ġval Ġdescriptor Evaluation : ĠString Ġ= Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| Ġ""" . source ĊĊĠĠĠ Ġval Ġproperty Expressions Ġ= ĠarrayOf ( property , Ġproperty Getter , Ġproperty Setter , Ġproperty Delegate ) ĊĠ Ġ} ĊĊĠ Ġ@ Test ĊĠ Ġfun Ġ` validate Ġproperty Ġscope Ġproperties `() Ġ{ ĊĠĠĠ Ġvalidate ( property ) ĊĠ Ġ} ĊĊĠ Ġ@ Test ĊĠ Ġfun Ġ` validate Ġproperty Ġgetter Ġscope Ġproperties `() Ġ{ ĊĠĠĠ Ġvalidate ( property Getter ) ĊĠ Ġ} ĊĊĠ Ġ@ Test ĊĠ Ġfun Ġ` validate Ġproperty Ġsetter Ġscope Ġproperties `() Ġ{ ĊĠĠĠ Ġvalidate ( property Setter ) ĊĠ Ġ} ĊĊĠ Ġ@ Test ĊĠ Ġfun Ġ` validate Ġproperty Ġdelegate Ġscope Ġproperties `() Ġ{ ĊĠĠĠ Ġvalidate ( property Delegate ) ĊĠ Ġ} ĊĊĠ Ġ@ Test ĊĠ Ġfun Ġ` validate Ġproperty Ġdescriptor `() Ġ{ ĊĠĠĠ Ġvalidate ( property Descriptor ) ĊĠ Ġ} ĊĊĠ Ġfun Ġvalidate ( source : ĠCode . Source , Ġtransformed Source : ĠCode . Source Ġ= Ġsource ) Ġ{ ĊĠĠĠ Ġassert This ( ĊĠĠĠĠĠ ĠCompiler Test ( ĊĠĠĠĠĠĠĠ Ġconfig Ġ= Ġ{ ĠlistOf ( add Meta Plugins ( Property Plugin ())) Ġ}, ĊĠĠĠĠĠĠĠ Ġcode Ġ= Ġ{ Ġsource Ġ}, ĊĠĠĠĠĠĠĠ Ġassert Ġ= Ġ{ Ġquote Output Matches ( transformed Source ) Ġ} ĊĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ) ĊĠ Ġ} Ċ } Ċ