package Ġcom . github . ds ul im ch uk . dynamic query . core Ċ Ċ import Ġorg . hamcrest . Core Matchers .* Ċ import Ġorg . junit . Assert . assertThat Ċ import Ġorg . junit . Test Ċ Ċ /** Ċ Ġ* Ġ@ author ĠD mit ri i ĠSul im ch uk Ċ Ġ* Ġcreated Ġ 2 2 / 1 0 / 1 6 Ċ Ġ*/ Ċ class ĠQuery Dsl Test Ġ{ ĊĊĠĠĠ Ġfun Ġ< T Ġ: ĠAny > Ġquery ( param : ĠT , Ġinit : ĠQuery Dsl < T >. () Ġ-> ĠUnit ): ĠQuery Dsl < T > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġroot Ġ= ĠQuery Dsl ( param ) ĊĠĠĠĠĠĠĠ Ġroot . init () ĊĠĠĠĠĠĠĠ Ġreturn Ġroot ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġm () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġquery Ġ= ĠQuery Dsl (" param ") ĊĠĠĠĠĠĠĠ ĠassertThat ( query . macro ses . size , ĠequalTo ( 0 )) ĊĊĠĠĠĠĠĠĠ Ġquery . run Ġ{ Ġm (" m 1 ") Ġ{ Ġ} Ġ} ĊĠĠĠĠĠĠĠ Ġquery . run Ġ{ Ġm (" m 2 ") Ġ{ Ġ} Ġ} ĊĠĠĠĠĠĠĠ ĠassertThat ( query . macro ses . size , ĠequalTo ( 2 )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġoperator Ġfun Ġunary Plus () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġquery Ġ= ĠQuery Dsl (" param ") ĊĠĠĠĠĠĠĠ ĠassertThat ( query . source Query , ĠequalTo ("")) ĊĊĠĠĠĠĠĠĠ Ġquery . run Ġ{ Ġ+" select " Ġ} ĊĠĠĠĠĠĠĠ ĠassertThat ( query . source Query , ĠequalTo (" select ")) ĊĊĠĠĠĠĠĠĠ Ġquery . run Ġ{ Ġ+" Ġfrom " Ġ} ĊĠĠĠĠĠĠĠ ĠassertThat ( query . source Query , ĠequalTo (" select Ġfrom ")) ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġprepare With Empty Macro ses Must Be The Same () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġquery Text Ġ= Ġ" select Ġ 1 Ġfrom Ġdual Ġwhere Ġ 1 = 1 Ġand Ġ& m 1 \ nor Ġ& m 2 " ĊĠĠĠĠĠĠĠ Ġval Ġquery Ġ= Ġquery (" param ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ+ query Text ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠassertThat ( query . prepare Text ( null ), ĠequalTo ( query Text )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġprepare () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġquery Ġ= Ġquery (" param ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ+" select Ġ 1 Ġfrom Ġdual Ġwhere Ġ 1 = 1 Ġ& m 1 \ n Ġ& m 2 " ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġm (" m 1 ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtest ({ Ġtrue Ġ}) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ+" and Ġa = b " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ+" and Ġc = d " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠassertThat ( query . prepare Text ( null ), ĠequalTo (" select Ġ 1 Ġfrom Ġdual Ġwhere Ġ 1 = 1 Ġand Ġa = b Ġand Ġc = d \ n Ġ& m 2 ")) ĊĊĠĠĠĠĠĠĠ Ġquery . run Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm (" m 2 ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtest ({ Ġtrue Ġ}) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ+" or Ġ( x = y Ġand Ġ 1 = 2 )" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠassertThat ( query . prepare Text ( null ), ĠequalTo (" select Ġ 1 Ġfrom Ġdual Ġwhere Ġ 1 = 1 Ġand Ġa = b Ġand Ġc = d \ n Ġor Ġ( x = y Ġand Ġ 1 = 2 ) ")) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ( expected Ġ= ĠQuery Parsing Exception :: class ) ĊĠĠĠ Ġfun Ġprepare Text For Count All Negative () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġquery Ġ= Ġquery (" param ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ+" select Ġ 1 " ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġquery . prepare Text (" tr at at ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test () ĊĠĠĠ Ġfun Ġprepare Text For Count All Positive WithDefault Projection () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġquery Ġ= Ġquery (" param ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ+" select Ġ 1 Ġfrom Ġdual " ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġquery . prepare Text ( Query Dsl . COUNT _ ALL _ PRO JECTION _ NAME ) ĊĠĠĠĠĠĠĠ ĠassertThat ( result , ĠequalTo (" select Ġcount (*) Ġfrom Ġdual ")) ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ@ Test () ĊĠĠĠ Ġfun Ġprepare Text For Count All Positive () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġquery Ġ= Ġquery (" param ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ+" select Ġ 1 Ġfrom Ġservices Ġs Ġjoin Ġprojects Ġp Ġon Ġs . project _ id Ġ= Ġp . project _ id " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcount All Projection Ġ= Ġ" count ( dist ict Ġs )" ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġquery . prepare Text ( Query Dsl . COUNT _ ALL _ PRO JECTION _ NAME ) ĊĠĠĠĠĠĠĠ ĠassertThat ( result , ĠequalTo (" select Ġcount ( dist ict Ġs ) Ġfrom Ġservices Ġs Ġjoin Ġprojects Ġp Ġon Ġs . project _ id Ġ= Ġp . project _ id ")) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test () ĊĠĠĠ Ġfun Ġtest Replace Different Macro ses With Same Prefix () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġquery Ġ= Ġquery (" param ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ+" select Ġ 1 Ġfrom Ġservices Ġs Ġwhere Ġ& macros 1 Ġand Ġ& macros 1 But Different " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm (" macros 1 ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtest ({ Ġtrue Ġ}) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ+" 5 = 5 " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm (" macros 1 But Different ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtest ({ Ġtrue Ġ}) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ+" 6 = 6 " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġquery . prepare Text () ĊĠĠĠĠĠĠĠ ĠassertThat ( result , ĠequalTo (" select Ġ 1 Ġfrom Ġservices Ġs Ġwhere Ġ 5 = 5 Ġand Ġ 6 = 6 ")) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġprepare Macro ses _ for _ empty _ macro ses () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġquery Ġ= ĠQuery Dsl ( Test Param (" a ", Ġ" b ", Ġnull )) ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġquery . prepare Macro ses () ĊĠĠĠĠĠĠĠ ĠassertThat ( result , Ġnot NullValue ()) ĊĠĠĠĠĠĠĠ ĠassertThat ( result . size , ĠequalTo ( 0 )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġprepare Macro ses () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġquery Ġ= ĠQuery Dsl ( Test Param (" a ", Ġ" b ", Ġnull )) ĊĠĠĠĠĠĠĠ Ġquery . run Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm (" m 1 ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtest ({ Ġparameter . a Ġ!= Ġnull Ġ}) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ+" x Ġ= Ġ: a " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtest ({ Ġparameter . b Ġ!= Ġnull Ġ}) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ+" y Ġ= Ġ: b " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm (" m 2 ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtest ({ Ġparameter . c Ġ!= Ġnull Ġ}) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ+" z Ġ= Ġ: c " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġquery . prepare Macro ses () ĊĠĠĠĠĠĠĠ ĠassertThat ( result , Ġnot NullValue ()) ĊĠĠĠĠĠĠĠ ĠassertThat ( result . size , ĠequalTo ( 2 )) ĊĠĠĠĠĠĠĠ ĠassertThat ( result [" & m 1 "], Ġall Of ( contains String (" x Ġ= Ġ: a "), Ġcontains String (" y Ġ= Ġ: b "))) ĊĠĠĠĠĠĠĠ ĠassertThat ( result [" & m 2 "], ĠequalTo ("")) ĊĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ( expected Ġ= ĠDuplicate Macros Name Exception :: class ) ĊĠĠĠ Ġfun Ġshould Throw Error If Define Same Macros Tw ice () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġquery Ġ= ĠQuery Dsl ( Test Param (" a ", Ġ" b ", Ġnull )) ĊĊĠĠĠĠĠĠĠ Ġquery . run Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm (" m 1 ") Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm (" m 1 ") Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ data Ġclass ĠTest Param ( val Ġa : ĠString ?, Ġval Ġb : ĠString ?, Ġval Ġc : ĠString ?)