package Ġlang . tax i . generators . java Ċ Ċ import Ġcom . w inter be . ex pe kt . expect Ċ import Ġlang . tax i . Type Alias Registry Ċ import Ġlang . tax i . annotations . Constraint Ċ import Ġlang . tax i . annotations . DataType Ċ import Ġlang . tax i . annotations . Namespace Ċ import Ġlang . tax i . annotations . ParameterType Ċ import Ġlang . tax i . testing . Test Helpers Ċ import Ġlang . tax i . types . Primitive Type Ċ import Ġorg . junit . Ignore Ċ import Ġorg . junit . Test Ċ import Ġjava . math . BigDecimal Ċ Ċ class ĠData Structure Tests Ġ{ ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġwhen _ struct Mix es Namespaces _ then _ valid Schema Is Generated () Ġ{ ĊĠĠĠĠĠĠĠ Ġ@ DataType (" demo . Client ") ĊĠĠĠĠĠĠĠ Ġdata Ġclass ĠClient (@ field : DataType (" demo . ClientId ") Ġval ĠclientId : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġclient Name : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ@ field : DataType (" is ic . uk . S IC 2 0 0 8 ") Ġval Ġsic Code : ĠString ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġval Ġtax i Def Ġ= ĠT axi Generator (). for Classes ( Client :: class . java ). generate As Strings () ĊĠĠĠĠĠĠĠ Ġval Ġexpected Ġ= Ġ""" Ċ namespace Ġdemo Ġ{ ĊĠĠĠ Ġtype ĠClient Ġ{ ĊĠĠĠĠĠĠĠ ĠclientId Ġ: ĠClient Id Ġas ĠString ĊĠĠĠĠĠĠĠ Ġclient Name Ġ: ĠString ĊĠĠĠĠĠĠĠ Ġsic Code Ġ: Ġis ic . uk . S IC 2 0 0 8 ĊĠĠĠ Ġ} Ċ } Ċ Ċ namespace Ġis ic . uk Ġ{ ĊĠĠĠ Ġtype Ġalias ĠS IC 2 0 0 8 Ġas ĠString Ċ } """ ĊĠĠĠĠĠĠĠ ĠTest Helpers . expect To Compile The Same ( tax i Def , Ġexpected ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġgiven _ struct DoesNot Map Primitive Type _ then _ it Is Mapped To Tax i Pri mat ive () Ġ{ ĊĠĠĠĠĠĠĠ Ġ@ DataType ĊĠĠĠĠĠĠĠ Ġ@ Namespace (" tax i . example ") ĊĠĠĠĠĠĠĠ Ġdata Ġclass ĠClient ( val ĠclientId : ĠString ) ĊĊĠĠĠĠĠĠĠ Ġval Ġtax i Def Ġ= ĠT axi Generator (). for Classes ( Client :: class . java ). generate Model () ĊĠĠĠĠĠĠĠ Ġexpect ( tax i Def . object Type (" tax i . example . Client "). field (" clientId "). type ). to . equal ( Primitive Type . STRING ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġgiven _ type Has Namespace Annotation _ then _ namespace Is Correct ly Defined () Ġ{ ĊĠĠĠĠĠĠĠ Ġ@ DataType ĊĠĠĠĠĠĠĠ Ġ@ Namespace (" tax i . example ") ĊĠĠĠĠĠĠĠ Ġdata Ġclass ĠClient ( val ĠclientId : ĠString ) ĊĊĠĠĠĠĠĠĠ Ġval Ġtax i Def Ġ= ĠT axi Generator (). for Classes ( Client :: class . java ). generate Model () ĊĊĠĠĠĠĠĠĠ Ġexpect ( tax i Def . contains Type (" tax i . example . Client ")). to . equal ( true ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġgiven _ struct That Is Annotated _ then _ schema Is Generated Correct ly () Ġ{ ĊĊĊĠĠĠĠĠĠĠ Ġ@ Namespace (" tax i . example . invoices ") ĊĠĠĠĠĠĠĠ Ġ@ DataType ĊĠĠĠĠĠĠĠ Ġdata Ġclass ĠInvoice (@ field : DataType (" tax i . example . clients . ClientId ") Ġval ĠclientId : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ@ field : DataType (" Invoice Value ") Ġval Ġinvoice Value : ĠBigDecimal , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠJust Ġto Ġtest Ġself - refer ential Ġtypes ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġprevious Invoice : ĠInvoice ?) ĊĊĠĠĠĠĠĠĠ Ġ@ Namespace (" tax i . example . clients ") ĊĠĠĠĠĠĠĠ Ġ@ DataType ĊĠĠĠĠĠĠĠ Ġdata Ġclass ĠClient (@ field : DataType (" ClientId ") Ġval ĠclientId : ĠString ) ĊĊĠĠĠĠĠĠĠ Ġval Ġtax i Def Ġ= ĠT axi Generator (). for Classes ( Invoice :: class . java , ĠClient :: class . java ). generate As Strings () ĊĠĠĠĠĠĠĠ Ġexpect ( tax i Def ). to . have . size ( 2 ) ĊĠĠĠĠĠĠĠ Ġval Ġexpected Ġ= Ġ""" Ċ namespace Ġtax i . example . invoices Ċ type ĠInvoice Ġ{ ĊĠĠĠ ĠclientId Ġ: Ġtax i . example . clients . ClientId ĊĠĠĠ Ġinvoice Value Ġ: ĠInvoice Value Ġas ĠDecimal ĊĠĠĠ Ġprevious Invoice Ġ: ĠInvoice Ċ } Ċ --- Ċ namespace Ġtax i . example . clients Ċ type ĠClient Ġ{ ĊĠĠĠ ĠclientId Ġ: ĠClient Id Ġas ĠString Ċ } Ċ """. split (" --- ") ĊĠĠĠĠĠĠĠ ĠTest Helpers . expect To Compile The Same ( tax i Def , Ġexpected ) ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġgiven _ structure Decl ares Param From Another Namespace _ then _ it Is Parsed To The Namespace Correct ly () Ġ{ ĊĠĠĠĠĠĠĠ Ġ@ DataType (" namespace A . Money ") ĊĠĠĠĠĠĠĠ Ġdata Ġclass ĠMoney ( val Ġamount : ĠBigDecimal ) ĊĊĠĠĠĠĠĠĠ Ġ@ DataType (" namespace B . Invoice ") ĊĠĠĠĠĠĠĠ Ġ// ĠNote Ġ- Ġthis Ġis Ġa Ġredundant Ġ( but Ġstill Ġvalid ) Ġtype Ġalias ĊĠĠĠĠĠĠĠ Ġdata Ġclass ĠInvoice (@ field : DataType (" namespace A . Money ") Ġval Ġmoney : ĠMoney ) ĊĊĠĠĠĠĠĠĠ Ġval Ġtax i Def Ġ= ĠT axi Generator (). for Classes ( Invoice :: class . java , ĠMoney :: class . java ). generate As Strings () ĊĠĠĠĠĠĠĠ Ġval Ġexpected Ġ= Ġ""" Ċ namespace Ġnamespace A Ġ{ ĊĠĠĠ Ġtype ĠMoney Ġ{ ĊĠĠĠĠĠĠ Ġamount Ġ: ĠDecimal ĊĠĠĠ Ġ} Ċ } Ċ namespace Ġnamespace B Ġ{ ĊĠĠĠ Ġtype ĠInvoice Ġ{ ĊĠĠĠĠĠĠ Ġmoney Ġ: Ġnamespace A . Money ĊĠĠĠ Ġ} Ċ } """ ĊĠĠĠĠĠĠĠ ĠTest Helpers . expect To Compile The Same ( tax i Def , Ġexpected ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġgiven _ type Contains Reference To Another Type _ when _ an Empty DataType Annotation Is Used _ then _ the Type Is Mapped Correct ly () Ġ{ ĊĠĠĠĠĠĠĠ Ġ@ DataType (" namespace A . Money ") ĊĠĠĠĠĠĠĠ Ġdata Ġclass ĠMoney ( val Ġamount : ĠBigDecimal ) ĊĊĠĠĠĠĠĠĠ Ġ@ DataType (" namespace B . Invoice ") ĊĠĠĠĠĠĠĠ Ġ// ĠSame Ġtest Ġas Ġabove , Ġbut Ġthe ĠDataType Ġdoesn 't Ġcontain Ġanything Ġ-- Ġshould ĊĠĠĠĠĠĠĠ Ġ// Ġdetect Ġthe Ġdata Ġtype Ġfrom Ġthe Ġannotated Ġvalue Ġon ĠMoney ĊĠĠĠĠĠĠĠ Ġdata Ġclass ĠInvoice (@ field : DataType Ġval Ġmoney : ĠMoney ) ĊĊĠĠĠĠĠĠĠ Ġval Ġtax i Def Ġ= ĠT axi Generator (). for Classes ( Invoice :: class . java , ĠMoney :: class . java ). generate As Strings () ĊĠĠĠĠĠĠĠ Ġval Ġexpected Ġ= Ġ""" Ċ namespace Ġnamespace A Ġ{ ĊĠĠĠ Ġtype ĠMoney Ġ{ ĊĠĠĠĠĠĠ Ġamount Ġ: ĠDecimal ĊĠĠĠ Ġ} Ċ } Ċ namespace Ġnamespace B Ġ{ ĊĠĠĠ Ġtype ĠInvoice Ġ{ ĊĠĠĠĠĠĠ Ġmoney Ġ: Ġnamespace A . Money ĊĠĠĠ Ġ} Ċ } """ ĊĠĠĠĠĠĠĠ ĠTest Helpers . expect To Compile The Same ( tax i Def , Ġexpected ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġgiven _ type Is A ParameterType _ that _ schema Is Generated Correct ly () Ġ{ ĊĠĠĠĠĠĠĠ Ġ@ DataType (" namespace A . Money ") ĊĠĠĠĠĠĠĠ Ġ@ ParameterType ĊĠĠĠĠĠĠĠ Ġdata Ġclass ĠMoney ( val Ġamount : ĠBigDecimal ) ĊĊĠĠĠĠĠĠĠ Ġval Ġtax i Def Ġ= ĠT axi Generator (). for Classes ( Money :: class . java ). generate As Strings () ĊĠĠĠĠĠĠĠ Ġval Ġexpected Ġ= Ġ""" Ċ namespace Ġnamespace A Ġ{ ĊĠĠĠ Ġparameter Ġtype ĠMoney Ġ{ ĊĠĠĠĠĠĠĠ Ġamount Ġ: ĠDecimal ĊĠĠĠ Ġ} Ċ } """ ĊĊĠĠĠĠĠĠĠ ĠTest Helpers . expect To Compile The Same ( tax i Def , Ġexpected ) ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġgiven _ type Exp resses Constraint _ that _ schema Is Generated Correct ly () Ġ{ ĊĠĠĠĠĠĠĠ Ġ@ DataType (" v yne . Money ") ĊĠĠĠĠĠĠĠ Ġdata Ġclass ĠMoney ( val Ġamount : ĠBigDecimal , Ġval Ġcurrency : ĠString ) ĊĊĠĠĠĠĠĠĠ Ġ@ ParameterType ĊĠĠĠĠĠĠĠ Ġ@ DataType (" v yne . Some Request ") ĊĠĠĠĠĠĠĠ Ġdata Ġclass ĠSome Request ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Constraint (" currency Ġ= Ġ' USD '") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġamount : ĠMoney ) ĊĊĠĠĠĠĠĠĠ Ġval Ġtax i Def Ġ= ĠT axi Generator (). for Classes ( Money :: class . java , ĠSome Request :: class . java ). generate As Strings () ĊĠĠĠĠĠĠĠ Ġval Ġexpected Ġ= Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnamespace Ġv yne Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparameter Ġtype ĠSome Request Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġamount Ġ: ĠMoney ( this . currency Ġ= Ġ" USD ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtype ĠMoney Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġamount Ġ: ĠDecimal ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrency Ġ: ĠString ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ċ """ ĊĠĠĠĠĠĠĠ ĠTest Helpers . expect To Compile The Same ( tax i Def , Ġexpected ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġgiven _ type Ext ends Another Type _ that _ schema Is Generated Correct ly () Ġ{ ĊĠĠĠĠĠĠĠ Ġ@ DataType (" v yne . BaseType ") ĊĠĠĠĠĠĠĠ Ġopen Ġclass ĠBase Type ( val Ġname : ĠString ) ĊĊĠĠĠĠĠĠĠ Ġ@ DataType (" v yne . SubType ") ĊĠĠĠĠĠĠĠ Ġclass ĠSub Type ( val Ġage : ĠInt , Ġname : ĠString ) Ġ: ĠBase Type ( name ) ĊĊĠĠĠĠĠĠĠ Ġval Ġexpected Ġ= Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnamespace Ġv yne Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtype ĠBase Type Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ: ĠString ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtype ĠSub Type Ġinherits ĠBase Type Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġage Ġ: ĠInt ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ""" . trim Indent () ĊĊĠĠĠĠĠĠĠ Ġval Ġtax i Def Ġ= ĠT axi Generator (). for Classes ( BaseType :: class . java , ĠSub Type :: class . java ). generate As Strings () ĊĊĠĠĠĠĠĠĠ ĠTest Helpers . expect To Compile The Same ( tax i Def , Ġexpected ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġgiven _ type Implements An Annotated Interface _ that _ schema Is Generated Correct ly () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠNOTE : Ġ ĠThe Ġproperty Ġof Ġ" name " Ġactually Ġappears Ġon Ġthe Ġgenerated ĠBase Type , Ġnot Ġthe Ġgenerated ĠSub Type . ĊĠĠĠĠĠĠĠ Ġ// ĠThis Ġis Ġbecause ĠALL Ġtax i Ġproperties Ġare Ġinherited Ġ( and Ġcan 't Ġbe Ġre - declared ), Ġtherefore Ġit Ġdoesn 't ĊĠĠĠĠĠĠĠ Ġ// Ġmake Ġsense Ġfor Ġthe Ġproperty Ġto Ġappear Ġon Ġthe Ġsubtype . ĊĠĠĠĠĠĠĠ Ġ// ĠNB Ġ- Ġwe Ġmay Ġneed Ġto Ġre visit Ġthis Ġif Ġextensions Ġon Ġinherited Ġfields Ġbecomes Ġa Ġthing , Ġand ĊĠĠĠĠĠĠĠ Ġ// Ġwe Ġhave Ġto Ġam end Ġour Ġdeclarations . ĊĊĠĠĠĠĠĠĠ Ġ@ DataType (" v yne . SubType ") ĊĠĠĠĠĠĠĠ Ġclass ĠSub Type ( val Ġage : ĠInt , Ġoverride Ġval Ġname : ĠString ) Ġ: ĠBase Type ĊĊĠĠĠĠĠĠĠ Ġval Ġexpected Ġ= Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnamespace Ġv yne Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtype ĠBase Type Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ: ĠString ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtype ĠSub Type Ġinherits ĠBase Type Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġage Ġ: ĠInt ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ""" . trim Indent () ĊĊĠĠĠĠĠĠĠ Ġval Ġtax i Def Ġ= ĠT axi Generator (). for Classes ( SubType :: class . java ). generate As Strings () ĊĊĠĠĠĠĠĠĠ ĠTest Helpers . expect To Compile The Same ( tax i Def , Ġexpected ) ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġgiven _ type Is Collection _ that _ schema Is Generated Correct ly () Ġ{ ĊĠĠĠĠĠĠĠ Ġ@ DataType (" foo . Person ") ĊĠĠĠĠĠĠĠ Ġdata Ġclass ĠPerson ( val Ġname : ĠString ) ĊĊĠĠĠĠĠĠĠ Ġ@ DataType (" foo . Address Book ") ĊĠĠĠĠĠĠĠ Ġdata Ġclass ĠAddress Book ( val Ġpeople List : ĠList < Person >, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpeople Set : ĠSet < Person >) ĊĊĠĠĠĠĠĠĠ Ġval Ġtax i Def Ġ= ĠT axi Generator (). for Classes ( Address Book :: class . java ). generate As Strings () ĊĊĠĠĠĠĠĠĠ Ġval Ġexpected Ġ= Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnamespace Ġfoo Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtype ĠPerson Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ: ĠString ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtype ĠAddress Book Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpeople List Ġ: ĠPerson [] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpeople Set Ġ: ĠPerson [] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ""" . trim Indent () ĊĠĠĠĠĠĠĠ ĠTest Helpers . expect To Compile The Same ( tax i Def , Ġexpected ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġgiven _ type Contains Enum _ that _ schema Is Generated Correct ly () Ġ{ ĊĊĠĠĠĠĠĠĠ Ġ@ DataType (" foo . Book ") ĊĠĠĠĠĠĠĠ Ġdata Ġclass ĠBook ( val Ġtitle : ĠString , Ġval Ġclassification : ĠClassification ) ĊĊĠĠĠĠĠĠĠ Ġval Ġtax i Def Ġ= ĠT axi Generator (). for Classes ( Book :: class . java ). generate As Strings () ĊĊĠĠĠĠĠĠĠ Ġ// ĠNote : ĠIt 's Ġactually Ġwrong Ġthat ĠClassification Ġends Ġup Ġin Ġthe Ġfoo Ġnamespace . ĊĠĠĠĠĠĠĠ Ġ// ĠBut , ĠI 'll Ġfix Ġthat Ġlater . ĊĠĠĠĠĠĠĠ Ġval Ġexpected Ġ= Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnamespace Ġfoo Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġenum ĠClassification Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFI CTION , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠNON _ FI CTION ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtype ĠBook Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtitle : String ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclassification : Classification ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ""" . trim Indent () ĊĊĠĠĠĠĠĠĠ ĠTest Helpers . expect To Compile The Same ( tax i Def , Ġexpected ) ĊĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġ@ Ignore (" Needs Ġinvestigation Ġ- Ġlooks Ġlike Ġtype Ġaliases Ġnot Ġbeing Ġregistered Ġcorrectly Ġ- Ġis Ġthe Ġplugin Ġrunning Ġin Ġthe Ġbuild ?") ĊĠĠĠ Ġfun Ġgiven _ type Decl ares Field Using Type Alias _ then _ type Alias Is Correct ly Emit ted () Ġ{ ĊĠĠĠĠĠĠĠ ĠType Alias Registry . register ( Type Aliases :: class ) ĊĠĠĠĠĠĠĠ Ġval Ġtax i Def Ġ= ĠT axi Generator (). for Classes ( Car :: class . java ). generate As Strings () ĊĠĠĠĠĠĠĠ Ġval Ġexpected Ġ= Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnamespace Ġfoo Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtype Ġalias ĠPerson Name Ġas ĠString ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtype ĠPerson Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ: ĠPerson Name ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtype Ġalias ĠAd ult Ġas ĠPerson ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtype ĠCar Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdriver Ġ: ĠAd ult ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpass enger Ġ: ĠPerson ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ""" . trim Indent () ĊĊĠĠĠĠĠĠĠ ĠTest Helpers . expect To Compile The Same ( tax i Def , Ġexpected ) ĊĠĠĠ Ġ} ĊĊĠĠ Ġ@ Ignore (" Needs Ġinvestigation Ġ- Ġlooks Ġlike Ġtype Ġaliases Ġnot Ġbeing Ġregistered Ġcorrectly Ġ- Ġis Ġthe Ġplugin Ġrunning Ġin Ġthe Ġbuild ?") ĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġgiven _ type Alias Maps ToList _ then _ it Is Mapped Correct ly () Ġ{ ĊĠĠĠĠĠĠĠ ĠType Alias Registry . register ( Type Aliases :: class ) ĊĊĠĠĠĠĠĠĠ Ġ@ DataType (" foo . Bus ") ĊĠĠĠĠĠĠĠ Ġdata Ġclass ĠBus ( val Ġpass engers : ĠPass engers ) ĊĊĠĠĠĠĠĠĠ Ġval Ġtax i Def Ġ= ĠT axi Generator (). for Classes ( Bus :: class . java ). generate As Strings () ĊĠĠĠĠĠĠĠ Ġval Ġexpected Ġ= Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnamespace Ġfoo Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġtype ĠBus Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpass engers Ġ: ĠPass engers ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġtype ĠPerson Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ: ĠPerson Name ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġtype Ġalias ĠPerson Name Ġas ĠString ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtype Ġalias ĠPass engers Ġas ĠPerson [] ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠĠĠĠĠ ĠTest Helpers . expect To Compile The Same ( tax i Def , Ġexpected ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġgiven _ fieldName Is Reserved Word _ then _ it Is Esc aped () Ġ{ ĊĠĠĠĠĠĠĠ Ġ@ DataType (" foo . Example ") ĊĠĠĠĠĠĠĠ Ġdata Ġclass ĠExample ( val Ġtype : String ) ĊĊĠĠĠĠĠĠĠ Ġval Ġtax i Def Ġ= ĠT axi Generator (). for Classes ( Example :: class . java ). generate As Strings () ĊĠĠĠĠĠĠĠ Ġval Ġexpected Ġ= Ġ""" Ċ namespace Ġfoo Ġ{ ĊĠĠĠ Ġtype ĠExample Ġ{ ĊĠĠĠĠĠĠĠ Ġ` type ` Ġ: ĠString ĊĠĠĠ Ġ} Ċ } ĊĠĠĠĠĠĠĠ Ġ""" . trim Indent () ĊĠĠĠĠĠĠĠ ĠTest Helpers . expect To Compile The Same ( tax i Def , Ġexpected ) ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġgiven _ dataType Indic ates Type Is Closed _ then _ it Is Marked As Closed In Generated Tax i () Ġ{ ĊĠĠĠĠĠĠĠ Ġ@ DataType (" foo . Money ", Ġclosed Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠ Ġdata Ġclass ĠMoney ( val Ġcurrency : String , Ġval Ġamount : Int ) ĊĊĠĠĠĠĠĠĠ Ġval Ġtax i Def Ġ= ĠT axi Generator (). for Classes ( Money :: class . java ). generate As Strings () ĊĠĠĠĠĠĠĠ Ġval Ġexpected Ġ= Ġ""" Ċ namespace Ġfoo Ġ{ ĊĠĠĠ Ġclosed Ġtype ĠMoney Ġ{ ĊĠĠĠĠĠĠĠ Ġcurrency Ġ: ĠString ĊĠĠĠĠĠĠĠ Ġamount Ġ: ĠInt ĊĠĠĠ Ġ} Ċ } ĊĠĠĠĠĠĠĠ Ġ""" . trim Indent () ĊĠĠĠĠĠĠĠ ĠTest Helpers . expect To Compile The Same ( tax i Def , Ġexpected ) ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ@ DataType (" foo . Classification ") ĊĠĠĠ Ġenum Ġclass ĠClassification Ġ{ ĊĠĠĠĠĠĠĠ ĠFI CTION , ĠNON _ FI CTION ĊĠĠĠ Ġ} ĊĊ Ċ } Ċ Ċ @ DataType (" foo . Person ") Ċ data Ġclass ĠPerson ( val Ġname : ĠPerson Name ) Ċ Ċ @ DataType Ċ @ Namespace (" foo ") Ċ data Ġclass ĠCar ( val Ġdriver : ĠAd ult , Ġval Ġpass enger : ĠPerson ) ĊĊ Ċ @ DataType (" foo . Person Name ") Ċ type alias ĠPerson Name Ġ= ĠString Ċ Ċ @ DataType (" foo . Ad ult ") Ċ type alias ĠAd ult Ġ= ĠPerson Ċ Ċ @ DataType (" foo . Pass engers ") Ċ type alias ĠPass engers Ġ= ĠList < Person > Ċ Ċ @ DataType (" v yne . BaseType ") Ċ interface ĠBase Type Ġ{ ĊĠĠĠ Ġval Ġname : ĠString ; Ċ } Ċ