package Ġcom . github . gr 3 g dev . jdbc . generator Ċ Ċ import Ġcom . github . gr 3 g dev . jdbc . Abstract Test Ċ import Ġcom . github . gr 3 g dev . jdbc . Column Test Ċ import Ġcom . github . gr 3 g dev . jdbc . JDBC Ċ import Ġcom . github . gr 3 g dev . jdbc . dao . Queries Ċ import Ġcom . github . gr 3 g dev . jdbc . dao . Query Ċ import Ġorg . junit . Assert . assertEquals Ċ import Ġorg . junit . Before Ċ import Ġorg . junit . Test Ċ import Ġorg . junit . runner . RunWith Ċ import Ġorg . mockito . Mock Ċ import Ġorg . mockito . Mockito Ċ import Ġorg . mockito . junit . Mockito JUnit Runner Ċ import Ġjava . io . String Writer Ċ import Ġjavax . annotation . processing . F iler Ċ import Ġjavax . lang . model . element .* Ċ import Ġjavax . lang . model . type . Type Mirror Ċ import Ġjavax . lang . model . util . Elements Ċ import Ġjavax . tools . Java FileObject Ċ Ċ @ RunWith ( Mockito JUnit Runner :: class ) Ċ class ĠJDBC Generator Test Ġ: ĠAbstract Test () Ġ{ ĊĊĠĠĠ Ġ@ Mock ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġelement : ĠElement ĊĊĠĠĠ Ġ@ Mock ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġf iler : ĠF iler ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġtables : ĠHashSet < Element > ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġelements DAO : ĠMutable Set < Element > ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġdao Writer : ĠString Writer ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġjdbc Writer : ĠString Writer ĊĊĠĠĠ Ġ@ Before ĊĠĠĠ Ġfun Ġ` init Ġ@ JDBC `() Ġ{ ĊĠĠĠĠĠĠĠ Ġdao Writer Ġ= ĠString Writer () ĊĠĠĠĠĠĠĠ Ġjdbc Writer Ġ= ĠString Writer () ĊĊĠĠĠĠĠĠĠ Ġval Ġtype Ġ= Ġ" com . github . gr 3 g dev . jdbc . test . My Object " ĊĊĠĠĠĠĠĠĠ Ġval Ġpackage Element Ġ= ĠMockito . mock ( Package Element :: class . java ) ĊĠĠĠĠĠĠĠ Ġval Ġelement Utils Ġ= ĠMockito . mock ( Elements :: class . java ) ĊĠĠĠĠĠĠĠ ĠMockito .` when `( package Element . toString ()). thenReturn (" com . github . gr 3 g dev . jdbc . test ") ĊĠĠĠĠĠĠĠ ĠMockito .` when `( element Utils . get Package Of ( element )). thenReturn ( package Element ) ĊĠĠĠĠĠĠĠ ĠMockito .` when `( processing Environment . element Utils ). thenReturn ( element Utils ) ĊĊĠĠĠĠĠĠĠ ĠMockito .` when `( processing Environment . filer ). thenReturn ( filer ) ĊĠĠĠĠĠĠĠ Ġval Ġdao SourceFile Ġ= ĠMockito . mock ( Java FileObject :: class . java ) ĊĠĠĠĠĠĠĠ ĠMockito .` when `( dao SourceFile . open Writer ()). thenReturn ( dao Writer ) ĊĠĠĠĠĠĠĠ Ġval Ġjdbc SourceFile Ġ= ĠMockito . mock ( Java FileObject :: class . java ) ĊĠĠĠĠĠĠĠ ĠMockito .` when `( jdbc SourceFile . open Writer ()). thenReturn ( jdbc Writer ) ĊĠĠĠĠĠĠĠ ĠMockito .` when `( filer . create SourceFile ( Mockito . eq (" com . github . gr 3 g dev . jdbc . test . jdbc . My Object DAO Impl ")) ). thenReturn ( dao SourceFile ) ĊĠĠĠĠĠĠĠ ĠMockito .` when `( filer . create SourceFile ( Mockito . eq (" com . github . gr 3 g dev . jdbc . test . jdbc . JDBC Factory ")) ). thenReturn ( jdbc SourceFile ) ĊĊĠĠĠĠĠĠĠ Ġtables Ġ= ĠHashSet () ĊĠĠĠĠĠĠĠ Ġval Ġcolumns Ġ= ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠColumn Test (" id ", ĠLong :: class . java . canonical Name , Ġtrue ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠColumn Test (" name ", ĠString :: class . java . canonical Name ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġval Ġtable Ġ= Ġmock Table (" My Object ", Ġcolumns , Ġ" db 1 ") ĊĠĠĠĠĠĠĠ Ġtables . add ( table ) ĊĊĠĠĠĠĠĠĠ Ġelements DAO Ġ= ĠHashSet () ĊĠĠĠĠĠĠĠ Ġval Ġtable DAO Ġ= Ġmock Element (" My Object DAO ", Ġ" com . github . gr 3 g dev . jdbc . test . dao . My Object DAO ", ĠElement :: class . java ) ĊĠĠĠĠĠĠĠ ĠMockito .` when `( table DAO . toString ()). thenReturn (" com . github . gr 3 g dev . jdbc . test . dao . My Object DAO ") ĊĠĠĠĠĠĠĠ ĠMockito .` when `( table DAO . kind ). thenReturn ( Element Kind . INTERFACE ) ĊĠĠĠĠĠĠĠ Ġval Ġpackage Dao Element Ġ= ĠMockito . mock ( Package Element :: class . java ) ĊĠĠĠĠĠĠĠ ĠMockito .` when `( package Dao Element . toString ()). thenReturn (" com . github . gr 3 g dev . jdbc . test . dao ") ĊĠĠĠĠĠĠĠ ĠMockito .` when `( element Utils . get Package Of ( table DAO )). thenReturn ( package Dao Element ) ĊĠĠĠĠĠĠĠ Ġval Ġobject Parameter Ġ= Ġmock Parameter (" obj ", Ġtype ) ĊĠĠĠĠĠĠĠ Ġval Ġid Parameter Ġ= Ġmock Parameter (" id ", ĠLong :: class . java . canonical Name ) ĊĠĠĠĠĠĠĠ Ġval Ġname Parameter Ġ= Ġmock Parameter (" name ", ĠString :: class . java . canonical Name ) ĊĠĠĠĠĠĠĠ Ġval Ġmethods Ġ= ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcreate Method (" add ", Ġ" insert ĠMy Object Ġ( My Object )", Ġ" void ", ĠlistOf ( object Parameter )), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcreate Method (" update ", Ġ" Update ĠMy Object ĠSet ĠMy Object . name ĠWhere ĠMy Object . id ", Ġ" int ", ĠlistOf ( id Parameter , Ġname Parameter )), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcreate Method (" find ", Ġ" SELECT ĠMy Object ĠFROM ĠMy Object ", Ġ" java . util . List <$ type >", Ġempty List ()), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcreate Method (" delete ", Ġ" DELETE ĠMy Object ĠWHERE ĠMy Object . id ", Ġ" int ", ĠlistOf ( id Parameter )) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ ĠMockito .` when `( table DAO . enc losed Elements ). thenReturn ( methods ) ĊĠĠĠĠĠĠĠ Ġval Ġtable DAO Annotation Ġ= Ġmock Annotation ( table DAO , ĠQueries :: class ) ĊĠĠĠĠĠĠĠ Ġmock Annotation Attributes ( table DAO Annotation , Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" map To " Ġto Ġtype ĊĠĠĠĠĠĠĠ Ġ)) ĊĠĠĠĠĠĠĠ Ġelements DAO . add ( table DAO ) ĊĊĠĠĠĠĠĠĠ Ġval Ġjdbc Annotation Ġ= Ġmock Annotation ( element , ĠJDBC :: class ) ĊĠĠĠĠĠĠĠ Ġval Ġconf Annotation Ġ= ĠMockito . mock ( Annotation Mirror :: class . java ) ĊĠĠĠĠĠĠĠ Ġmock Annotation Attributes ( conf Annotation , Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" configFile " Ġto Ġ"/ path / to / file 1 . properties ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" database Name " Ġto Ġ" db 1 " ĊĠĠĠĠĠĠĠ Ġ)) ĊĠĠĠĠĠĠĠ Ġmock Annotation Attributes ( jdbc Annotation , Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" conf " Ġto ĠlistOf ( conf Annotation ) ĊĠĠĠĠĠĠĠ Ġ)) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġmock Parameter ( name : ĠString , Ġtype : ĠString ): ĠVariable Element Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġobject Parameter Ġ= ĠMockito . mock ( Variable Element :: class . java ) ĊĠĠĠĠĠĠĠ Ġval Ġparameter Type Ġ= ĠMockito . mock ( Type Mirror :: class . java ) ĊĠĠĠĠĠĠĠ Ġval Ġparameter Name Ġ= ĠMockito . mock ( Name :: class . java ) ĊĠĠĠĠĠĠĠ ĠMockito .` when `( parameter Name . toString ()). thenReturn ( name ) ĊĠĠĠĠĠĠĠ ĠMockito .` when `( object Parameter . simple Name ). thenReturn ( parameter Name ) ĊĠĠĠĠĠĠĠ ĠMockito .` when `( parameter Type . toString ()). thenReturn ( type ) ĊĠĠĠĠĠĠĠ ĠMockito .` when `( object Parameter . as Type ()). thenReturn ( parameter Type ) ĊĠĠĠĠĠĠĠ Ġreturn Ġobject Parameter ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcreate Method ( name : ĠString , Ġsql : ĠString , ĠreturnType String : ĠString , Ġparameters : ĠList < Variable Element >): ĠExec utable Element Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmethod Element Ġ= ĠMockito . mock ( Executable Element :: class . java ) ĊĠĠĠĠĠĠĠ Ġval ĠmethodName Ġ= ĠMockito . mock ( Name :: class . java ) ĊĠĠĠĠĠĠĠ ĠMockito .` when `( methodName . toString ()). thenReturn ( name ) ĊĠĠĠĠĠĠĠ ĠMockito .` when `( method Element . simple Name ). thenReturn ( methodName ) ĊĠĠĠĠĠĠĠ Ġval Ġmethod Annotation Ġ= Ġmock Annotation ( method Element , ĠQuery :: class ) ĊĠĠĠĠĠĠĠ Ġmock Annotation Attributes ( method Annotation , Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" sql " Ġto Ġsql ĊĠĠĠĠĠĠĠ Ġ)) ĊĠĠĠĠĠĠĠ Ġval ĠreturnType Ġ= ĠMockito . mock ( Type Mirror :: class . java ) ĊĠĠĠĠĠĠĠ ĠMockito .` when `( returnType . toString ()). thenReturn ( returnType String ) ĊĠĠĠĠĠĠĠ ĠMockito .` when `( method Element . parameters ). thenReturn ( parameters ) ĊĠĠĠĠĠĠĠ ĠMockito .` when `( method Element . returnType ). thenReturn ( returnType ) ĊĠĠĠĠĠĠĠ Ġreturn Ġmethod Element ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Process Init JDBC () Ġ{ ĊĠĠĠĠĠĠĠ ĠJDBC Generator . process Init JDBC ( processing Environment , Ġelement , Ġtables , Ġelements DAO ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( readFile (" test DAO Generator "), Ġdao Writer . buffer . toString ()) ĊĠĠĠĠĠĠĠ ĠassertEquals ( readFile (" test JDBC Factory "), Ġjdbc Writer . buffer . toString ()) ĊĠĠĠ Ġ} Ċ Ċ } Ċ