package Ġcom . github . sh ak el ang . shake . parser Ċ Ċ import Ġcom . github . sh ak el ang . shake . assertArrayEquals Ċ import Ġcom . github . sh ak el ang . shake . assert Type Ċ import Ġcom . github . sh ak el ang . shake . parser . node . If Node Ċ import Ġcom . github . sh ak el ang . shake . parser . node . Import Node Ċ import Ġcom . github . sh ak el ang . shake . parser . node . Tree Ċ import Ġcom . github . sh ak el ang . shake . parser . node . logical . Logical Small er Node Ċ import Ġcom . github . sh ak el ang . shake . parser . node . logical . Logical True Node Ċ import Ġcom . github . sh ak el ang . shake . parser . node . loops . Do While Node Ċ import Ġcom . github . sh ak el ang . shake . parser . node . loops . For Node Ċ import Ġcom . github . sh ak el ang . shake . parser . node . loops . While Node Ċ import Ġcom . github . sh ak el ang . shake . parser . node . variables . Variable Declaration Node Ċ import Ġcom . github . sh ak el ang . shake . parser . node . variables . Variable Increase Node Ċ import Ġcom . github . sh ak el ang . shake . parser . node . variables . Variable Usage Node Ċ import Ġkotlin . test .* Ċ Ċ class ĠParser Tests Ġ{ ĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Import () Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġnode Ġ= ĠParser TestUtil . parse ("< Import Test >", Ġ" import Ġcom ; ") ĊĠĠĠĠĠĠĠ ĠassertEquals ( 1 , Ġnode . children . size ) ĊĠĠĠĠĠĠĠ Ġassert Type ( Import Node :: class , Ġnode . children [ 0 ]) ĊĠĠĠĠĠĠĠ Ġassert ArrayEquals ( array Of (" com "), Ġ( node . children [ 0 ] Ġas ĠImport Node ). import ) ĊĠĠĠĠĠĠĠ Ġnode Ġ= ĠParser TestUtil . parse ("< Import Test >", Ġ" import Ġcom . github . sh ak el ang . shake ; ") ĊĠĠĠĠĠĠĠ ĠassertEquals ( 1 , Ġnode . children . size ) ĊĠĠĠĠĠĠĠ Ġassert Type ( Import Node :: class , Ġnode . children [ 0 ]) ĊĠĠĠĠĠĠĠ Ġassert ArrayEquals ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠarrayOf (" com ", Ġ" github ", Ġ" sh ak el ang ", Ġ" shake "), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( node . children [ 0 ] Ġas ĠImport Node ). import ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġnode Ġ= ĠParser TestUtil . parse ("< Import Test >", Ġ" import Ġcom . github . sh ak el ang . shake .*; ") ĊĠĠĠĠĠĠĠ ĠassertEquals ( 1 , Ġnode . children . size ) ĊĠĠĠĠĠĠĠ Ġassert Type ( Import Node :: class , Ġnode . children [ 0 ]) ĊĠĠĠĠĠĠĠ Ġassert ArrayEquals ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠarrayOf (" com ", Ġ" github ", Ġ" sh ak el ang ", Ġ" shake ", Ġ"* "), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( node . children [ 0 ] Ġas ĠImport Node ). import ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Multi Statement () Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġnode Ġ= ĠParser TestUtil . parse ("< Multi Statement Test >", Ġ" var Ġi ; Ġi ") ĊĠĠĠĠĠĠĠ ĠassertEquals ( 2 , Ġnode . children . size ) ĊĠĠĠĠĠĠĠ Ġassert Type ( Variable Declaration Node :: class , Ġnode . children [ 0 ]) ĊĠĠĠĠĠĠĠ Ġassert Type ( Variable Usage Node :: class , Ġnode . children [ 1 ]) ĊĠĠĠĠĠĠĠ Ġnode Ġ= ĠParser TestUtil . parse ("< Multi Statement Test >", Ġ" var Ġi \ ni ") ĊĠĠĠĠĠĠĠ ĠassertEquals ( 2 , Ġnode . children . size ) ĊĠĠĠĠĠĠĠ Ġassert Type ( Variable Declaration Node :: class , Ġnode . children [ 0 ]) ĊĠĠĠĠĠĠĠ Ġassert Type ( Variable Usage Node :: class , Ġnode . children [ 1 ]) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest While () Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġnode Ġ= ĠParser TestUtil . parse Single ("< While Test >", Ġ" while Ġ( true ) Ġ{ Ġi Ġ} ", ĠWhile Node :: class ) ĊĠĠĠĠĠĠĠ ĠassertNotNull ( node . condition ) ĊĠĠĠĠĠĠĠ ĠassertNotNull ( node . body ) ĊĠĠĠĠĠĠĠ Ġassert Type ( Logical True Node :: class , Ġnode . condition ) ĊĠĠĠĠĠĠĠ Ġassert Type ( Tree :: class , Ġnode . body ) ĊĠĠĠĠĠĠĠ Ġnode Ġ= ĠParser TestUtil . parse Single ("< While Test >", Ġ" while Ġ( true ) Ġi ;", ĠWhile Node :: class ) ĊĠĠĠĠĠĠĠ ĠassertNotNull ( node . condition ) ĊĠĠĠĠĠĠĠ ĠassertNotNull ( node . body ) ĊĠĠĠĠĠĠĠ Ġassert Type ( Logical True Node :: class , Ġnode . condition ) ĊĠĠĠĠĠĠĠ Ġassert Type ( Tree :: class , Ġnode . body ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Do While () Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġnode Ġ= ĠParser TestUtil . parse Single ("< Do While Test >", Ġ" do Ġ{ Ġi Ġ} Ġwhile Ġ( true ); ", ĠDo While Node :: class ) ĊĠĠĠĠĠĠĠ ĠassertNotNull ( node . condition ) ĊĠĠĠĠĠĠĠ ĠassertNotNull ( node . body ) ĊĠĠĠĠĠĠĠ Ġassert Type ( Logical True Node :: class , Ġnode . condition ) ĊĠĠĠĠĠĠĠ Ġassert Type ( Tree :: class , Ġnode . body ) ĊĠĠĠĠĠĠĠ Ġnode Ġ= ĠParser TestUtil . parse Single ("< Dp While Test >", Ġ" do Ġi ; Ġwhile Ġ( true ); ", ĠDo While Node :: class ) ĊĠĠĠĠĠĠĠ ĠassertNotNull ( node . condition ) ĊĠĠĠĠĠĠĠ ĠassertNotNull ( node . body ) ĊĠĠĠĠĠĠĠ Ġassert Type ( Logical True Node :: class , Ġnode . condition ) ĊĠĠĠĠĠĠĠ Ġassert Type ( Tree :: class , Ġnode . body ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest For () Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġnode Ġ= ĠParser TestUtil . parse Single ("< For Test >", Ġ" for ( var Ġi Ġ= Ġ 0 ; Ġi Ġ< Ġ 1 0 0 ; Ġi ++) Ġ{ Ġi ; Ġ} ", ĠFor Node :: class ) ĊĠĠĠĠĠĠĠ ĠassertNotNull ( node . declaration ) ĊĠĠĠĠĠĠĠ ĠassertNotNull ( node . condition ) ĊĠĠĠĠĠĠĠ ĠassertNotNull ( node . round ) ĊĠĠĠĠĠĠĠ ĠassertNotNull ( node . body ) ĊĠĠĠĠĠĠĠ Ġassert Type ( Variable Declaration Node :: class , Ġnode . declaration ) ĊĠĠĠĠĠĠĠ Ġassert Type ( Logical Small er Node :: class , Ġnode . condition ) ĊĠĠĠĠĠĠĠ Ġassert Type ( Variable Increase Node :: class , Ġnode . round ) ĊĠĠĠĠĠĠĠ Ġassert Type ( Tree :: class , Ġnode . body ) ĊĠĠĠĠĠĠĠ Ġnode Ġ= ĠParser TestUtil . parse Single ("< For Test >", Ġ" for ( var Ġi Ġ= Ġ 0 ; Ġi Ġ< Ġ 1 0 0 ; Ġi ++) Ġi ;", ĠFor Node :: class ) ĊĠĠĠĠĠĠĠ ĠassertNotNull ( node . declaration ) ĊĠĠĠĠĠĠĠ ĠassertNotNull ( node . condition ) ĊĠĠĠĠĠĠĠ ĠassertNotNull ( node . round ) ĊĠĠĠĠĠĠĠ ĠassertNotNull ( node . body ) ĊĠĠĠĠĠĠĠ Ġassert Type ( Variable Declaration Node :: class , Ġnode . declaration ) ĊĠĠĠĠĠĠĠ Ġassert Type ( Logical Small er Node :: class , Ġnode . condition ) ĊĠĠĠĠĠĠĠ Ġassert Type ( Variable Increase Node :: class , Ġnode . round ) ĊĠĠĠĠĠĠĠ Ġassert Type ( Tree :: class , Ġnode . body ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest If () Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġnode Ġ= ĠParser TestUtil . parse Single ("< If Test >", Ġ" if Ġ( true ) Ġ{ Ġi Ġ} ", ĠIf Node :: class ) ĊĠĠĠĠĠĠĠ ĠassertNotNull ( node . condition ) ĊĠĠĠĠĠĠĠ ĠassertNotNull ( node . body ) ĊĠĠĠĠĠĠĠ Ġassert Type ( Logical True Node :: class , Ġnode . condition ) ĊĠĠĠĠĠĠĠ Ġassert Type ( Tree :: class , Ġnode . body ) ĊĠĠĠĠĠĠĠ Ġnode Ġ= ĠParser TestUtil . parse Single ("< If Test >", Ġ" if Ġ( true ) Ġi ;", ĠIf Node :: class ) ĊĠĠĠĠĠĠĠ ĠassertNotNull ( node . condition ) ĊĠĠĠĠĠĠĠ ĠassertNotNull ( node . body ) ĊĠĠĠĠĠĠĠ ĠassertNull ( node . else Body ) ĊĠĠĠĠĠĠĠ Ġassert Type ( Logical True Node :: class , Ġnode . condition ) ĊĠĠĠĠĠĠĠ Ġassert Type ( Tree :: class , Ġnode . body ) ĊĠĠĠĠĠĠĠ Ġnode Ġ= ĠParser TestUtil . parse Single ("< If Test >", Ġ" if Ġ( true ) Ġi ; Ġelse Ġi ;", ĠIf Node :: class ) ĊĠĠĠĠĠĠĠ ĠassertNotNull ( node . condition ) ĊĠĠĠĠĠĠĠ ĠassertNotNull ( node . body ) ĊĠĠĠĠĠĠĠ ĠassertNotNull ( node . else Body ) ĊĠĠĠĠĠĠĠ Ġassert Type ( Logical True Node :: class , Ġnode . condition ) ĊĠĠĠĠĠĠĠ Ġassert Type ( Tree :: class , Ġnode . body ) ĊĠĠĠĠĠĠĠ Ġassert Type ( Tree :: class , Ġnode . else Body !! ) ĊĠĠĠĠĠĠĠ Ġnode Ġ= ĠParser TestUtil . parse Single ("< If Test >", Ġ" if Ġ( true ) Ġi ; Ġelse Ġif Ġ( true ) Ġi ; Ġelse Ġi ;", ĠIf Node :: class ) ĊĠĠĠĠĠĠĠ ĠassertNotNull ( node . condition ) ĊĠĠĠĠĠĠĠ ĠassertNotNull ( node . body ) ĊĠĠĠĠĠĠĠ ĠassertNotNull ( node . else Body ) ĊĠĠĠĠĠĠĠ Ġassert Type ( Logical True Node :: class , Ġnode . condition ) ĊĠĠĠĠĠĠĠ Ġassert Type ( Tree :: class , Ġnode . body ) ĊĠĠĠĠĠĠĠ Ġassert Type ( Tree :: class , Ġnode . else Body !! ) ĊĠĠĠĠĠĠĠ Ġval Ġelse Body Ġ= Ġnode . else Body !! ĊĠĠĠĠĠĠĠ ĠassertSame ( 1 , Ġelse Body . children . size ) ĊĠĠĠĠĠĠĠ Ġassert Type ( If Node :: class , Ġelse Body . children [ 0 ]) ĊĠĠĠĠĠĠĠ Ġval Ġif 2 Ġ= Ġelse Body . children [ 0 ] Ġas ĠIf Node ĊĠĠĠĠĠĠĠ Ġassert Type ( Tree :: class , Ġif 2 . body ) ĊĠĠĠĠĠĠĠ Ġassert Type ( Tree :: class , Ġif 2 . else Body !! ) ĊĠĠĠ Ġ} Ċ }