# file : libbuild2/test/script/parser+command-if.test.testscript # copyright : Copyright (c) 2014-2019 Code Synthesis Ltd # license : MIT; see accompanying LICENSE file : if : { : true : $* <<EOI >>EOO if true foo cmd1 cmd2 end EOI ? true foo cmd1 cmd2 EOO : false : $* <<EOI >>EOO if false foo cmd1 cmd2 end EOI ? false foo EOO : not-true : $* <<EOI >>EOO if! true foo cmd1 cmd2 end EOI ? true foo EOO : not-false : $* <<EOI >>EOO if! false foo cmd1 cmd2 end EOI ? false foo cmd1 cmd2 EOO : without-command : $* <<EOI 2>>EOE != 0 if cmd end EOI testscript:1:3: error: missing program EOE : after-semi : $* -s <<EOI >>EOO cmd1; if true cmd2 end EOI { { cmd1 ? true cmd2 } } EOO : setup : $* -s <<EOI >>EOO +if true cmd end EOI { ? true +cmd } EOO : tdown : $* -s <<EOI >>EOO -if true cmd end EOI { ? true -cmd } EOO } : elif : { : true : $* <<EOI >>EOO if false cmd1 cmd2 elif true cmd3 cmd4 end EOI ? false ? true cmd3 cmd4 EOO : false : $* <<EOI >>EOO if false cmd1 cmd2 elif false cmd3 cmd4 end EOI ? false ? false EOO : not-true : $* <<EOI >>EOO if false cmd1 cmd2 elif! true cmd3 cmd4 end EOI ? false ? true EOO : not-false : $* <<EOI >>EOO if false cmd1 cmd2 elif! false cmd3 cmd4 end EOI ? false ? false cmd3 cmd4 EOO : without-if : $* <<EOI 2>>EOE != 0 cmd elif true cmd end EOI testscript:2:1: error: 'elif' without preceding 'if' EOE : not-without-if : $* <<EOI 2>>EOE != 0 cmd elif! true cmd end EOI testscript:2:1: error: 'elif!' without preceding 'if' EOE : after-else : $* <<EOI 2>>EOE != 0 if false cmd else cmd elif true cmd end EOI testscript:5:1: error: 'elif' after 'else' EOE } : else : { : true : $* <<EOI >>EOO if false cmd1 cmd2 else cmd3 cmd4 end EOI ? false cmd3 cmd4 EOO : false : $* <<EOI >>EOO if true cmd1 cmd2 else cmd3 cmd4 end EOI ? true cmd1 cmd2 EOO : chain : $* <<EOI >>EOO if false cmd cmd elif false cmd cmd elif false cmd cmd elif true cmd1 cmd2 elif false cmd cmd else cmd cmd end EOI ? false ? false ? false ? true cmd1 cmd2 EOO : command-after : $* <<EOI 2>>EOE != 0 if true cmd else cmd cmd end EOI testscript:3:6: error: expected newline instead of 'cmd' EOE : without-if : $* <<EOI 2>>EOE != 0 cmd else cmd end EOI testscript:2:1: error: 'else' without preceding 'if' EOE : after-else : $* <<EOI 2>>EOE != 0 if false cmd else cmd else cmd end EOI testscript:5:1: error: 'else' after 'else' EOE } : end { : without-if : $* <<EOI 2>>EOE != 0 cmd end EOI testscript:2:1: error: 'end' without preceding 'if' EOE : before { : semi : $* -s <<EOI >>EOO if true cmd1 end; cmd2 EOI { { ? true cmd1 cmd2 } } EOO : command : $* <<EOI 2>>EOE != 0 if true cmd end cmd EOI testscript:3:5: error: expected newline instead of 'cmd' EOE : colon : $* -s <<EOI >>EOO if true cmd1 cmd2 end : test EOI { : id:test { ? true cmd1 cmd2 } } EOO } } : nested : { : take : $* <<EOI >>EOO if true cmd1 if false cmd elif false if true cmd end else cmd2 end cmd3 end EOI ? true cmd1 ? false ? false cmd2 cmd3 EOO : skip : $* <<EOI >>EOO if false cmd1 if false cmd elif false if true cmd end else cmd2 end cmd3 else cmd end EOI ? false cmd EOO } : contained { : semi : $* <<EOI 2>>EOE != 0 if cmd; cmd end EOI testscript:2:3: error: ';' inside 'if' EOE : colon-leading : $* <<EOI 2>>EOE != 0 if : foo cmd end EOI testscript:2:3: error: description inside 'if' EOE : colon-trailing : $* <<EOI 2>>EOE != 0 if cmd : foo end EOI testscript:2:3: error: description inside 'if' EOE : eos : $* <<EOI 2>>EOE != 0 if EOI testscript:2:1: error: expected closing 'end' EOE : scope : $* <<EOI 2>>EOE != 0 if cmd { } end EOI testscript:3:3: error: expected closing 'end' EOE : setup : $* <<EOI 2>>EOE != 0 if +cmd end EOI testscript:2:3: error: setup command inside 'if' EOE : tdown : $* <<EOI 2>>EOE != 0 if -cmd end EOI testscript:2:3: error: teardown command inside 'if' EOE } : line-index : $* -l <<EOI >>EOO if false cmd if true cmd end cmd elif false cmd else cmd end EOI ? false # 1 ? false # 6 cmd # 8 EOO : var : $* <<EOI >>EOO if true x = foo else x = bar end; cmd $x EOI ? true cmd foo EOO : leading-and-trailing-description : $* <<EOI 2>>EOE != 0 : foo if true cmd end : bar EOI testscript:4:1: error: both leading and trailing descriptions EOE