package Ġorg . kom apper . core . template Ċ Ċ import Ġorg . junit . jupiter . api . Assertions . assertEquals Ċ import Ġorg . junit . jupiter . api . Assertions . assertTrue Ċ import Ġorg . junit . jupiter . api . Test Ċ import Ġorg . junit . jupiter . api . assert Throws Ċ Ċ class ĠSql Parser Test Ġ{ ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġempty () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsql Ġ= Ġ"" ĊĠĠĠĠĠĠĠ Ġval Ġnode Ġ= ĠSql Parser ( sql ). parse () ĊĠĠĠĠĠĠĠ ĠassertEquals ( sql , Ġnode . to Text ()) ĊĠĠĠĠĠĠĠ Ġval Ġstatement Ġ= Ġnode Ġas ĠSql Node . Statement ĊĠĠĠĠĠĠĠ ĠassertTrue ( statement . node List . isEmpty ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġsimple () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsql Ġ= Ġ" select Ġ* Ġfrom Ġperson " ĊĠĠĠĠĠĠĠ Ġval Ġnode Ġ= ĠSql Parser ( sql ). parse () ĊĠĠĠĠĠĠĠ ĠassertEquals ( sql , Ġnode . to Text ()) ĊĠĠĠĠĠĠĠ Ġval Ġstatement Ġ= Ġnode Ġas ĠSql Node . Statement ĊĠĠĠĠĠĠĠ ĠassertEquals ( 1 , Ġstatement . node List . size ) ĊĠĠĠĠĠĠĠ Ġval Ġselect Ġ= Ġstatement . node List [ 0 ] Ġas ĠSql Node . Clause . Select ĊĠĠĠĠĠĠĠ ĠassertEquals ( 4 , Ġselect . node List . size ) ĊĠĠĠĠĠĠĠ Ġselect . node List [ 0 ] Ġas ĠSql Node . Token . Space ĊĠĠĠĠĠĠĠ Ġselect . node List [ 1 ] Ġas ĠSql Node . Token . Other ĊĠĠĠĠĠĠĠ Ġselect . node List [ 2 ] Ġas ĠSql Node . Token . Space ĊĠĠĠĠĠĠĠ Ġval Ġfrom Ġ= Ġselect . node List [ 3 ] Ġas ĠSql Node . Clause . From ĊĠĠĠĠĠĠĠ ĠassertEquals ( 2 , Ġfrom . node List . size ) ĊĠĠĠĠĠĠĠ Ġselect . node List [ 0 ] Ġas ĠSql Node . Token . Space ĊĠĠĠĠĠĠĠ Ġselect . node List [ 1 ] Ġas ĠSql Node . Token . Other ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġcomplex () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsql Ġ= Ġ" select Ġname , Ġage Ġfrom Ġperson Ġwhere Ġname Ġ= Ġ/* name */ ' test ' Ġand Ġage Ġ> Ġ 1 Ġorder Ġby Ġname , Ġage Ġfor Ġupdate " ĊĠĠĠĠĠĠĠ Ġval Ġnode Ġ= ĠSql Parser ( sql ). parse () ĊĠĠĠĠĠĠĠ ĠassertEquals ( sql , Ġnode . to Text ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġclass ĠClause Test Ġ{ ĊĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠ Ġfun Ġselect () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsql Ġ= Ġ" select Ġname , Ġage " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnode Ġ= ĠSql Parser ( sql ). parse () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( sql , Ġnode . to Text ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠ Ġfun Ġfrom () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsql Ġ= Ġ" from Ġperson Ġinner Ġjoin Ġsalary " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnode Ġ= ĠSql Parser ( sql ). parse () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( sql , Ġnode . to Text ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠ Ġfun Ġwhere () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsql Ġ= Ġ" where Ġname Ġ= Ġ' aaa '" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnode Ġ= ĠSql Parser ( sql ). parse () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( sql , Ġnode . to Text ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠ Ġfun Ġhaving () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsql Ġ= Ġ" where Ġname Ġ= Ġ' aaa '" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnode Ġ= ĠSql Parser ( sql ). parse () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( sql , Ġnode . to Text ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠ Ġfun Ġgroup By () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsql Ġ= Ġ" group Ġby Ġname , Ġ' aaa '" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnode Ġ= ĠSql Parser ( sql ). parse () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( sql , Ġnode . to Text ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠ Ġfun ĠorderBy () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsql Ġ= Ġ" order Ġby Ġname , Ġ' aaa '" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnode Ġ= ĠSql Parser ( sql ). parse () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( sql , Ġnode . to Text ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġclass ĠLogical Operator Test Ġ{ ĊĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠ Ġfun Ġand () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsql Ġ= Ġ" and Ġage Ġ> Ġ 1 " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnode Ġ= ĠSql Parser ( sql ). parse () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( sql , Ġnode . to Text ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠ Ġfun Ġor () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsql Ġ= Ġ" or Ġage Ġ> Ġ 1 " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnode Ġ= ĠSql Parser ( sql ). parse () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( sql , Ġnode . to Text ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġclass ĠBind Value Directive Test Ġ{ ĊĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠ Ġfun Ġbind Value () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsql Ġ= Ġ" /* Ġage Ġ*/ 1 " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnode Ġ= ĠSql Parser ( sql ). parse () Ġas ĠSql Node . Statement ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( sql , Ġnode . to Text ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbind Value Ġ= Ġnode . node List [ 0 ] Ġas ĠSql Node . Bind Value Directive ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals (" age ", Ġbind Value . expression ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġword Ġ= Ġbind Value . node Ġas ĠSql Node . Token . Word ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals (" 1 ", Ġword . token ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠ Ġfun Ġbind Values () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsql Ġ= Ġ" /* Ġage Ġ*/ ( 1 , 2 , 3 )" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnode Ġ= ĠSql Parser ( sql ). parse () Ġas ĠSql Node . Statement ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( sql , Ġnode . to Text ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbind Value Ġ= Ġnode . node List [ 0 ] Ġas ĠSql Node . Bind Value Directive ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals (" age ", Ġbind Value . expression ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbind Value . node Ġas ĠSql Node . Paren ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠ Ġfun Ġembedded Value () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsql Ġ= Ġ" /* # Ġage Ġ*/ " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnode Ġ= ĠSql Parser ( sql ). parse () Ġas ĠSql Node . Statement ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( sql , Ġnode . to Text ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġembedded Value Ġ= Ġnode . node List [ 0 ] Ġas ĠSql Node . Embedded Value Directive ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals (" age ", Ġembedded Value . expression ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠ Ġfun Ġliteral Value () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsql Ġ= Ġ" /* ^ Ġage Ġ*/ 1 " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnode Ġ= ĠSql Parser ( sql ). parse () Ġas ĠSql Node . Statement ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( sql , Ġnode . to Text ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġliteral Ġ= Ġnode . node List [ 0 ] Ġas ĠSql Node . Literal Value Directive ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals (" age ", Ġliteral . expression ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġword Ġ= Ġliteral . node Ġas ĠSql Node . Token . Word ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals (" 1 ", Ġword . token ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠ Ġfun Ġ` The Ġexpression Ġis Ġnot Ġfound Ġin Ġthe Ġbind Ġvalue Ġdirective `() Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsql Ġ= Ġ" /* Ġ*/ " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġexception Ġ= ĠassertThrows < Sql Exception > Ġ{ ĠSql Parser ( sql ). parse () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprintln ( exception ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠ Ġfun Ġ` The Ġexpression Ġis Ġnot Ġfound Ġin Ġthe Ġembedded Ġvalue Ġdirective `() Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsql Ġ= Ġ" /* # Ġ*/ " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġexception Ġ= ĠassertThrows < Sql Exception > Ġ{ ĠSql Parser ( sql ). parse () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprintln ( exception ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠ Ġfun Ġ` The Ġexpression Ġis Ġnot Ġfound Ġin Ġthe Ġliteral Ġvalue Ġdirective `() Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsql Ġ= Ġ" /* ^ Ġ*/ " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġexception Ġ= ĠassertThrows < Sql Exception > Ġ{ ĠSql Parser ( sql ). parse () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprintln ( exception ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠ Ġfun Ġ` The Ġtest Ġvalue Ġmust Ġfollow Ġthe Ġbind Ġvalue Ġdirective `() Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsql Ġ= Ġ" /* Ġa aa Ġ*/ " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġexception Ġ= ĠassertThrows < Sql Exception > Ġ{ ĠSql Parser ( sql ). parse () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprintln ( exception ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠ Ġfun Ġ` The Ġtest Ġvalue Ġmust Ġfollow Ġthe Ġliteral Ġvalue Ġdirective `() Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsql Ġ= Ġ" /* ^ Ġa aa Ġ*/ " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġexception Ġ= ĠassertThrows < Sql Exception > Ġ{ ĠSql Parser ( sql ). parse () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprintln ( exception ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġclass ĠComment Test Ġ{ ĊĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠ Ġfun Ġmulti Line Comment () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsql Ġ= Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* Ġmulti - line ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* Ġcomment ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" . trim Indent () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnode Ġ= ĠSql Parser ( sql ). parse () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( sql , Ġnode . to Text ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠ Ġfun Ġsingle Line Comment () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsql Ġ= Ġ"-- Ġsingle Ġline Ġcomment " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnode Ġ= ĠSql Parser ( sql ). parse () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( sql , Ġnode . to Text ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġclass ĠSet Test Ġ{ ĊĊĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠ Ġfun Ġsimple () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsql Ġ= Ġ" select Ġ* Ġfrom Ġperson Ġunion Ġselect Ġ* Ġfrom Ġemployee " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnode Ġ= ĠSql Parser ( sql ). parse () Ġas ĠSql Node . Set ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( sql , Ġnode . to Text ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnode . left Ġas ĠSql Node . Statement ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnode . right Ġas ĠSql Node . Statement ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠ Ġfun Ġmultiple () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsql Ġ= Ġ" select Ġ* Ġfrom Ġperson Ġunion Ġselect Ġ* Ġfrom Ġemployee Ġunion Ġselect Ġ* Ġfrom Ġworker " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnode Ġ= ĠSql Parser ( sql ). parse () Ġas ĠSql Node . Set ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( sql , Ġnode . to Text ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġleft Ġ= Ġnode . left Ġas ĠSql Node . Set ĊĠĠĠĠĠĠĠĠĠĠĠ Ġleft . left Ġas ĠSql Node . Statement ĊĠĠĠĠĠĠĠĠĠĠĠ Ġleft . right Ġas ĠSql Node . Statement ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnode . right Ġas ĠSql Node . Statement ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġclass ĠP aren Test Ġ{ ĊĊĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠ Ġfun Ġempty () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsql Ġ= Ġ" select Ġdate ()" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnode Ġ= ĠSql Parser ( sql ). parse () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( sql , Ġnode . to Text ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠ Ġfun Ġsub Query () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsql Ġ= Ġ" select Ġ* Ġfrom Ġ( select Ġ* Ġfrom Ġperson )" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnode Ġ= ĠSql Parser ( sql ). parse () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( sql , Ġnode . to Text ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠ Ġfun Ġ` The Ġclose Ġp aren Ġis Ġnot Ġfound `() Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsql Ġ= Ġ" select Ġdate (" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġexception Ġ= ĠassertThrows < Sql Exception > Ġ{ ĠSql Parser ( sql ). parse () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprintln ( exception ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġclass ĠIf Block Test Ġ{ ĊĊĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠ Ġfun Ġ` if `() Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsql Ġ= Ġ" /* % if Ġa */ Ġb Ġ/* % end */ Ġh " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnode Ġ= ĠSql Parser ( sql ). parse () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( sql , Ġnode . to Text ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠ Ġfun Ġif _ elseif () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsql Ġ= Ġ" /* % if Ġa */ Ġb Ġ/* % elseif Ġc */ Ġd Ġ/* % end */ Ġh " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnode Ġ= ĠSql Parser ( sql ). parse () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( sql , Ġnode . to Text ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠ Ġfun Ġif _ else () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsql Ġ= Ġ" /* % if Ġa */ Ġb Ġ/* % else Ġc */ Ġd Ġ/* % end */ Ġh " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnode Ġ= ĠSql Parser ( sql ). parse () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( sql , Ġnode . to Text ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠ Ġfun Ġif _ complex () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsql Ġ= Ġ" /* % if Ġa */ Ġb Ġ/* % elseif Ġc */ Ġd Ġ/* % elseif Ġe */ Ġf Ġ/* % else */ Ġg Ġ/* % end */ Ġh " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnode Ġ= ĠSql Parser ( sql ). parse () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( sql , Ġnode . to Text ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠ Ġfun Ġif _ for () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsql Ġ= Ġ" /* % if Ġa aa */ Ġa Ġ/* % for Ġb bb Ġin Ġc cc */ Ġb Ġ/* % end */ Ġc Ġ/* % end */ " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnode Ġ= ĠSql Parser ( sql ). parse () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( sql , Ġnode . to Text ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠ Ġfun Ġnested If () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsql Ġ= Ġ" /* % if Ġa aa */ Ġa Ġ/* % if Ġb bb Ġin Ġc cc */ Ġb Ġ/* % end */ Ġc Ġ/* % end */ " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnode Ġ= ĠSql Parser ( sql ). parse () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( sql , Ġnode . to Text ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠ Ġfun Ġ` The Ġcorresponding Ġend Ġdirective Ġis Ġnot Ġfound `() Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsql Ġ= Ġ" /* % if Ġa aa */ Ġa " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġexception Ġ= ĠassertThrows < Sql Exception > Ġ{ ĠSql Parser ( sql ). parse () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprintln ( exception ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠ Ġfun Ġ` While Ġthe Ġelseif Ġdirective Ġis Ġused , Ġthe Ġcorresponding Ġif Ġdirective Ġis Ġnot Ġfound `() Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsql Ġ= Ġ" /* % elseif Ġa aa */ Ġa " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġexception Ġ= ĠassertThrows < Sql Exception > Ġ{ ĠSql Parser ( sql ). parse () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprintln ( exception ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠ Ġfun Ġ` While Ġthe Ġelse Ġdirective Ġis Ġused , Ġthe Ġcorresponding Ġif Ġdirective Ġis Ġnot Ġfound `() Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsql Ġ= Ġ" /* % else */ Ġa " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġexception Ġ= ĠassertThrows < Sql Exception > Ġ{ ĠSql Parser ( sql ). parse () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprintln ( exception ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠ Ġfun Ġ` The Ġcorresponding Ġif Ġdirective Ġis Ġnot Ġfound `() Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsql Ġ= Ġ" /* % end */ Ġa " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġexception Ġ= ĠassertThrows < Sql Exception > Ġ{ ĠSql Parser ( sql ). parse () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprintln ( exception ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠ Ġfun Ġ` The Ġexpression Ġis Ġnot Ġfound Ġin Ġthe Ġif Ġdirective `() Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsql Ġ= Ġ" /* % if Ġ*/ " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġexception Ġ= ĠassertThrows < Sql Exception > Ġ{ ĠSql Parser ( sql ). parse () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprintln ( exception ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠ Ġfun Ġ` The Ġexpression Ġis Ġnot Ġfound Ġin Ġthe Ġelseif Ġdirective `() Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsql Ġ= Ġ" /* % elseif Ġ*/ " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġexception Ġ= ĠassertThrows < Sql Exception > Ġ{ ĠSql Parser ( sql ). parse () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprintln ( exception ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠ Ġfun Ġ` il legal Ġelseif `() Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsql Ġ= Ġ" /* % if Ġa aa */ Ġb Ġ/* % else */ Ġc Ġ/* % elseif Ġd dd */ Ġe Ġ/* % end */ " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġexception Ġ= ĠassertThrows < Sql Exception > Ġ{ ĠSql Parser ( sql ). parse () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprintln ( exception ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠ Ġfun Ġ` il legal Ġelse `() Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsql Ġ= Ġ" /* % if Ġa aa */ Ġb Ġ/* % else */ Ġc Ġ/* % else */ Ġd Ġ/* % end */ " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġexception Ġ= ĠassertThrows < Sql Exception > Ġ{ ĠSql Parser ( sql ). parse () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprintln ( exception ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġclass ĠFor Block Test Ġ{ ĊĊĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠ Ġfun Ġsimple () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsql Ġ= Ġ" /* % for Ġa Ġin Ġa aa */ Ġb Ġ/* % end */ Ġh " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnode Ġ= ĠSql Parser ( sql ). parse () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( sql , Ġnode . to Text ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠ Ġfun Ġnested () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsql Ġ= Ġ" /* % for Ġa Ġin Ġa aa */ Ġb Ġ/* % for Ġc Ġin Ġc cc */ Ġd Ġ/* % end */ Ġe Ġ/* % end */ " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnode Ġ= ĠSql Parser ( sql ). parse () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( sql , Ġnode . to Text ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠ Ġfun Ġ` The Ġcorresponding Ġend Ġdirective Ġis Ġnot Ġfound `() Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsql Ġ= Ġ" /* % for Ġa Ġin Ġa aa */ Ġb " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġexception Ġ= ĠassertThrows < Sql Exception > Ġ{ ĠSql Parser ( sql ). parse () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprintln ( exception ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠ Ġfun Ġ` The Ġcorresponding Ġfor Ġdirective Ġis Ġnot Ġfound `() Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsql Ġ= Ġ" /* % end */ Ġa " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġexception Ġ= ĠassertThrows < Sql Exception > Ġ{ ĠSql Parser ( sql ). parse () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprintln ( exception ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠ Ġfun Ġ` The Ġstatement Ġis Ġnot Ġfound `() Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsql Ġ= Ġ" /* % for Ġ*/ " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġexception Ġ= ĠassertThrows < Sql Exception > Ġ{ ĠSql Parser ( sql ). parse () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprintln ( exception ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠ Ġfun Ġ` The Ġin Ġkeyword Ġis Ġnot Ġfound `() Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsql Ġ= Ġ" /* % for Ġa aa */ " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġexception Ġ= ĠassertThrows < Sql Exception > Ġ{ ĠSql Parser ( sql ). parse () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprintln ( exception ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠ Ġfun Ġ` The Ġidentifier Ġis Ġnot Ġfound `() Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsql Ġ= Ġ" /* % for Ġin Ġa aa */ " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġexception Ġ= ĠassertThrows < Sql Exception > Ġ{ ĠSql Parser ( sql ). parse () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprintln ( exception ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠ Ġfun Ġ` The Ġexpression Ġis Ġnot Ġfound `() Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsql Ġ= Ġ" /* % for Ġa Ġin */ " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġexception Ġ= ĠassertThrows < Sql Exception > Ġ{ ĠSql Parser ( sql ). parse () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprintln ( exception ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ