$* testscript <'cmd $@' >"cmd 1" # id-testscript $* foo.test <'cmd $@' >"cmd foo/1" # id wd = [dir_path] $~; wd += test-driver; wd += 1; $* testscript <'cmd $~' >"cmd $wd" # wd-testscript wd = [dir_path] $~; wd += test-driver; wd += foo; wd += 1; $* foo.test <'cmd $~' >"cmd $wd" # wd $* -s <>EOO # group-empty { } EOI { { } } EOO $* -s <>EOO # group { cmd1 cmd2 } EOI { { { cmd1 } { cmd2 } } } EOO $* <:"{x" 2>>EOE != 0 # expected-newline-lcbrace testscript:1:2: error: expected newline after '{' EOE $* <"{" 2>>EOE != 0 # expected-rcbrace testscript:2:1: error: expected '}' at the end of the scope EOE $* <>EOE != 0 # expected-line-rcbrace { cmd; } EOI testscript:3:1: error: expected another line after semicolon EOE $* <<:EOI 2>>EOE != 0 # expected-newline-rcbrace { } EOI testscript:2:2: error: expected newline after '}' EOE $* -s <>EOO # test-1 cmd1 EOI { { cmd1 } } EOO $* -s <>EOO # test-2 cmd1; cmd2 EOI { { cmd1 cmd2 } } EOO $* -s <>EOO # test-3 cmd1; cmd2; cmd3 EOI { { cmd1 cmd2 cmd3 } } EOO $* -s <>EOO # test-var cmd1; x = abc; cmd2 \$x EOI { { cmd1 cmd2 abc } } EOO $* -s <>EOO # test-var-first x = abc; cmd \$x EOI { { cmd abc } } EOO $* -s <>EOO # var-setup-tdown x = abc cmd \$x y = 123 EOI { { cmd abc } } EOO $* <>EOE != 0 # test-after-tdown cmd1 x = abc cmd2 EOI testscript:3:1: error: test after teardown testscript:2:1: info: last teardown line appears here EOE $* <>EOE != 0 # expected-line-eof cmd; EOI testscript:2:1: error: expected another line after semicolon EOE $* <<:EOI 2>>EOE != 0 # expected-newline-cmd cmd; EOI testscript:1:5: error: expected newline instead of EOE $* <:"x = abc;" 2>>EOE != 0 # expected-newline-var testscript:1:9: error: expected newline instead of EOE