package Ġorg . c ata fr at ta . str uk t . processor Ċ Ċ import Ġcom . squareup . kotlin po et . metadata . Kotlin Po et Metadata Preview Ċ import Ġcom . tsch uch ort . compile testing . Kotlin Compilation Ċ import Ġcom . tsch uch ort . compile testing . SourceFile Ċ import Ġorg . c ata fr at ta . str uk t . common . Codec Naming Strategy Ċ import Ġorg . junit . Assert Ċ import Ġorg . junit . Test Ċ import Ġjava . io . File Ċ Ċ @ Kotlin Po et Metadata Preview Ċ class ĠStruct Processor Test Ġ{ ĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Valid () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcompiler Ġ= ĠKotlin Compilation (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsources Ġ= ĠlistOf ( test Source ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġannotation Processors Ġ= ĠlistOf ( Struct Processor ()) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġj vm Target Ġ= Ġ" 1 . 8 " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinherit Class Path Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmessage OutputStream Ġ= ĠSystem . out ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġcompiler . compile () ĊĠĠĠĠĠĠĠ ĠAssert . assertEquals ( Kotlin Compilation . ExitCode . OK , Ġresult . exit Code ) ĊĊĠĠĠĠĠĠĠ Ġval Ġpkg Dir Ġ= ĠFile ("${ Codec Naming Strategy . BASE _ PACKAGE }. test ". replace ('.', Ġ'/ ')) ĊĠĠĠĠĠĠĠ Ġval Ġout Base Dir Ġ= Ġcompiler . k apt Kotlin Generated Dir . resolve ( pkg Dir ) ĊĊĠĠĠĠĠĠĠ ĠAssert . assertTrue ( out Base Dir . resolve (" Some Struct _ Codec . kt "). exists ()) ĊĠĠĠĠĠĠĠ ĠAssert . assertFalse ( out Base Dir . resolve (" Not AS tr uct _ Codec . kt "). exists ()) ĊĊĠĠĠĠĠĠĠ Ġcompiler . working Dir . delete Re cursively () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Invalid () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcompiler Ġ= ĠKotlin Compilation (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsources Ġ= ĠlistOf ( test Source , Ġbad Source ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġannotation Processors Ġ= ĠlistOf ( Struct Processor ()) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġj vm Target Ġ= Ġ" 1 . 8 " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinherit Class Path Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmessage OutputStream Ġ= ĠSystem . out ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġcompiler . compile () ĊĠĠĠĠĠĠĠ ĠAssert . assertEquals ( Kotlin Compilation . ExitCode . COMPI L ATION _ ERROR , Ġresult . exit Code ) ĊĊĠĠĠĠĠĠĠ Ġcompiler . working Dir . delete Re cursively () ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtest Source Ġ= ĠSource File . kotlin ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Test Source . kt ", Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpackage Ġtest ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġimport Ġorg . c ata fr at ta . str uk t . Struct ĊĠĠĠĠĠĠĠĠĠĠĠ Ġimport Ġorg . c ata fr at ta . str uk t . Fixed Size ĊĠĠĠĠĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Struct ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdata Ġclass ĠSome Struct ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsome Field : ĠInt , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Fixed Size ( 1 3 3 7 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsome Array : ĠInt Array , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Fixed Size ( 1 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġother Array : ĠArray < Simple Struct > ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Struct ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdata Ġclass ĠSimple Struct ( val Ġsimple Field : ĠInt ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠĠĠĠĠ Ġdata Ġclass ĠNot AS tr uct ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsome Field : ĠInt ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġval Ġbad Source Ġ= ĠSource File . kotlin ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Bad Source . kt ", Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpackage Ġtest ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġimport Ġorg . c ata fr at ta . str uk t . Struct ĊĠĠĠĠĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Struct ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdata Ġclass ĠC yc lic Struct A ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsome Field : ĠC yc lic Struct B ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Struct ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdata Ġclass ĠC yc lic Struct B ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsome Field : ĠC yc lic Struct A ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} Ċ } Ċ