From 5007870b52aa549971824959a55ad3bb886f09e0 Mon Sep 17 00:00:00 2001 From: Boris Kolpackov Date: Mon, 3 Sep 2018 16:37:32 +0200 Subject: Rename .test/test{} to .testscript/testscript{} --- unit-tests/test/script/lexer/buildfile | 2 +- .../test/script/lexer/command-expansion.test | 248 --------- .../test/script/lexer/command-expansion.testscript | 248 +++++++++ unit-tests/test/script/lexer/command-line.test | 208 -------- .../test/script/lexer/command-line.testscript | 208 ++++++++ unit-tests/test/script/lexer/description-line.test | 33 -- .../test/script/lexer/description-line.testscript | 33 ++ unit-tests/test/script/lexer/first-token.test | 97 ---- .../test/script/lexer/first-token.testscript | 97 ++++ unit-tests/test/script/lexer/second-token.test | 68 --- .../test/script/lexer/second-token.testscript | 68 +++ unit-tests/test/script/lexer/variable-line.test | 28 -- .../test/script/lexer/variable-line.testscript | 28 ++ unit-tests/test/script/lexer/variable.test | 70 --- unit-tests/test/script/lexer/variable.testscript | 70 +++ unit-tests/test/script/parser/buildfile | 2 +- unit-tests/test/script/parser/cleanup.test | 58 --- unit-tests/test/script/parser/cleanup.testscript | 58 +++ unit-tests/test/script/parser/command-if.test | 548 -------------------- .../test/script/parser/command-if.testscript | 548 ++++++++++++++++++++ .../test/script/parser/command-re-parse.test | 12 - .../test/script/parser/command-re-parse.testscript | 12 + unit-tests/test/script/parser/description.test | 486 ------------------ .../test/script/parser/description.testscript | 486 ++++++++++++++++++ unit-tests/test/script/parser/directive.test | 74 --- unit-tests/test/script/parser/directive.testscript | 74 +++ unit-tests/test/script/parser/exit.test | 27 - unit-tests/test/script/parser/exit.testscript | 27 + unit-tests/test/script/parser/expansion.test | 36 -- unit-tests/test/script/parser/expansion.testscript | 36 ++ unit-tests/test/script/parser/here-document.test | 213 -------- .../test/script/parser/here-document.testscript | 213 ++++++++ unit-tests/test/script/parser/here-string.test | 19 - .../test/script/parser/here-string.testscript | 19 + unit-tests/test/script/parser/include.test | 104 ---- unit-tests/test/script/parser/include.testscript | 104 ++++ unit-tests/test/script/parser/pipe-expr.test | 133 ----- unit-tests/test/script/parser/pipe-expr.testscript | 133 +++++ unit-tests/test/script/parser/pre-parse.test | 23 - unit-tests/test/script/parser/pre-parse.testscript | 23 + unit-tests/test/script/parser/redirect.test | 356 ------------- unit-tests/test/script/parser/redirect.testscript | 356 +++++++++++++ unit-tests/test/script/parser/regex.test | 223 --------- unit-tests/test/script/parser/regex.testscript | 223 +++++++++ unit-tests/test/script/parser/scope-if.test | 554 --------------------- unit-tests/test/script/parser/scope-if.testscript | 554 +++++++++++++++++++++ unit-tests/test/script/parser/scope.test | 280 ----------- unit-tests/test/script/parser/scope.testscript | 280 +++++++++++ unit-tests/test/script/parser/setup-teardown.test | 151 ------ .../test/script/parser/setup-teardown.testscript | 151 ++++++ 50 files changed, 4051 insertions(+), 4051 deletions(-) delete mode 100644 unit-tests/test/script/lexer/command-expansion.test create mode 100644 unit-tests/test/script/lexer/command-expansion.testscript delete mode 100644 unit-tests/test/script/lexer/command-line.test create mode 100644 unit-tests/test/script/lexer/command-line.testscript delete mode 100644 unit-tests/test/script/lexer/description-line.test create mode 100644 unit-tests/test/script/lexer/description-line.testscript delete mode 100644 unit-tests/test/script/lexer/first-token.test create mode 100644 unit-tests/test/script/lexer/first-token.testscript delete mode 100644 unit-tests/test/script/lexer/second-token.test create mode 100644 unit-tests/test/script/lexer/second-token.testscript delete mode 100644 unit-tests/test/script/lexer/variable-line.test create mode 100644 unit-tests/test/script/lexer/variable-line.testscript delete mode 100644 unit-tests/test/script/lexer/variable.test create mode 100644 unit-tests/test/script/lexer/variable.testscript delete mode 100644 unit-tests/test/script/parser/cleanup.test create mode 100644 unit-tests/test/script/parser/cleanup.testscript delete mode 100644 unit-tests/test/script/parser/command-if.test create mode 100644 unit-tests/test/script/parser/command-if.testscript delete mode 100644 unit-tests/test/script/parser/command-re-parse.test create mode 100644 unit-tests/test/script/parser/command-re-parse.testscript delete mode 100644 unit-tests/test/script/parser/description.test create mode 100644 unit-tests/test/script/parser/description.testscript delete mode 100644 unit-tests/test/script/parser/directive.test create mode 100644 unit-tests/test/script/parser/directive.testscript delete mode 100644 unit-tests/test/script/parser/exit.test create mode 100644 unit-tests/test/script/parser/exit.testscript delete mode 100644 unit-tests/test/script/parser/expansion.test create mode 100644 unit-tests/test/script/parser/expansion.testscript delete mode 100644 unit-tests/test/script/parser/here-document.test create mode 100644 unit-tests/test/script/parser/here-document.testscript delete mode 100644 unit-tests/test/script/parser/here-string.test create mode 100644 unit-tests/test/script/parser/here-string.testscript delete mode 100644 unit-tests/test/script/parser/include.test create mode 100644 unit-tests/test/script/parser/include.testscript delete mode 100644 unit-tests/test/script/parser/pipe-expr.test create mode 100644 unit-tests/test/script/parser/pipe-expr.testscript delete mode 100644 unit-tests/test/script/parser/pre-parse.test create mode 100644 unit-tests/test/script/parser/pre-parse.testscript delete mode 100644 unit-tests/test/script/parser/redirect.test create mode 100644 unit-tests/test/script/parser/redirect.testscript delete mode 100644 unit-tests/test/script/parser/regex.test create mode 100644 unit-tests/test/script/parser/regex.testscript delete mode 100644 unit-tests/test/script/parser/scope-if.test create mode 100644 unit-tests/test/script/parser/scope-if.testscript delete mode 100644 unit-tests/test/script/parser/scope.test create mode 100644 unit-tests/test/script/parser/scope.testscript delete mode 100644 unit-tests/test/script/parser/setup-teardown.test create mode 100644 unit-tests/test/script/parser/setup-teardown.testscript (limited to 'unit-tests/test') diff --git a/unit-tests/test/script/lexer/buildfile b/unit-tests/test/script/lexer/buildfile index 34c5d9f..bbfc032 100644 --- a/unit-tests/test/script/lexer/buildfile +++ b/unit-tests/test/script/lexer/buildfile @@ -3,4 +3,4 @@ # license : MIT; see accompanying LICENSE file include ../../../../build2/ -exe{driver}: {hxx cxx}{*} ../../../../build2/libu{b} test{*} +exe{driver}: {hxx cxx}{*} ../../../../build2/libu{b} testscript{*} diff --git a/unit-tests/test/script/lexer/command-expansion.test b/unit-tests/test/script/lexer/command-expansion.test deleted file mode 100644 index 88d7ced..0000000 --- a/unit-tests/test/script/lexer/command-expansion.test +++ /dev/null @@ -1,248 +0,0 @@ -# file : unit-tests/test/script/lexer/command-expansion.test -# copyright : Copyright (c) 2014-2018 Code Synthesis Ltd -# license : MIT; see accompanying LICENSE file - -test.arguments = command-expansion - -: pass-redirect -: -{ - : in - : - $* <:"0<|" >>EOO - '0' - <| - EOO - - : arg-in - : - $* <:"0 <|" >>EOO - '0 ' - <| - EOO - - : out - : - $* <:"1>|" >>EOO - '1' - >| - EOO - - : arg-out - : - $* <:"1 >|" >>EOO - '1 ' - >| - EOO -} - -: null-redirect -: -{ - : in - : - $* <:"0<-" >>EOO - '0' - <- - EOO - - : arg-in - : - $* <:"0 <-" >>EOO - '0 ' - <- - EOO - - : out - : - $* <:"1>-" >>EOO - '1' - >- - EOO - - : arg-out - : - $* <:"1 >-" >>EOO - '1 ' - >- - EOO -} - -: trace-redirect -: -{ - : out - : - $* <:"1>!" >>EOO - '1' - >! - EOO - - : arg-out - : - $* <:"1 >!" >>EOO - '1 ' - >! - EOO -} - -: merge-redirect -: -{ - : out - : - $* <:"1>&2" >>EOO - '1' - >& - '2' - EOO - - : arg-out - : - $* <:"1 >&2" >>EOO - '1 ' - >& - '2' - EOO -} - -: str-redirect -: -{ - : in - : - { - : newline - : - $* <:"0>EOO - '0' - < - 'a b' - EOO - - : no-newline - : - $* <:"0<:a b" >>EOO - '0' - <: - 'a b' - EOO - } - - : out - : - { - : newline - : - $* <:"1>a b" >>EOO - '1' - > - 'a b' - EOO - - : no-newline - : - $* <:"1>:a b" >>EOO - '1' - >: - 'a b' - EOO - } -} - -: doc-redirect -: -{ - : in - : - { - : newline - : - $* <:"0<>EOO - '0' - << - 'E O I' - EOO - - : no-newline - : - $* <:"0<<:E O I" >>EOO - '0' - <<: - 'E O I' - EOO - } - - : out - : - { - : newline - : - $* <:"1>>E O O" >>EOO - '1' - >> - 'E O O' - EOO - - : no-newline - : - $* <:"1>>:E O O" >>EOO - '1' - >>: - 'E O O' - EOO - } -} - -: file-redirect -: -{ - : in - : - $* <:"0<<>EOO - '0' - <<< - 'a b' - EOO - - : out - : - $* <:"1>=a b" >>EOO - '1' - >= - 'a b' - EOO - - : out-app - : - $* <:"1>+a b" >>EOO - '1' - >+ - 'a b' - EOO -} - -: cleanup -: -{ - : always - : - $* <:"&file" >>EOO - & - 'file' - EOO - - : maybe - : - $* <:"&?file" >>EOO - &? - 'file' - EOO - - : never - : - $* <:"&!file" >>EOO - &! - 'file' - EOO -} diff --git a/unit-tests/test/script/lexer/command-expansion.testscript b/unit-tests/test/script/lexer/command-expansion.testscript new file mode 100644 index 0000000..228fb61 --- /dev/null +++ b/unit-tests/test/script/lexer/command-expansion.testscript @@ -0,0 +1,248 @@ +# file : unit-tests/test/script/lexer/command-expansion.testscript +# copyright : Copyright (c) 2014-2018 Code Synthesis Ltd +# license : MIT; see accompanying LICENSE file + +test.arguments = command-expansion + +: pass-redirect +: +{ + : in + : + $* <:"0<|" >>EOO + '0' + <| + EOO + + : arg-in + : + $* <:"0 <|" >>EOO + '0 ' + <| + EOO + + : out + : + $* <:"1>|" >>EOO + '1' + >| + EOO + + : arg-out + : + $* <:"1 >|" >>EOO + '1 ' + >| + EOO +} + +: null-redirect +: +{ + : in + : + $* <:"0<-" >>EOO + '0' + <- + EOO + + : arg-in + : + $* <:"0 <-" >>EOO + '0 ' + <- + EOO + + : out + : + $* <:"1>-" >>EOO + '1' + >- + EOO + + : arg-out + : + $* <:"1 >-" >>EOO + '1 ' + >- + EOO +} + +: trace-redirect +: +{ + : out + : + $* <:"1>!" >>EOO + '1' + >! + EOO + + : arg-out + : + $* <:"1 >!" >>EOO + '1 ' + >! + EOO +} + +: merge-redirect +: +{ + : out + : + $* <:"1>&2" >>EOO + '1' + >& + '2' + EOO + + : arg-out + : + $* <:"1 >&2" >>EOO + '1 ' + >& + '2' + EOO +} + +: str-redirect +: +{ + : in + : + { + : newline + : + $* <:"0>EOO + '0' + < + 'a b' + EOO + + : no-newline + : + $* <:"0<:a b" >>EOO + '0' + <: + 'a b' + EOO + } + + : out + : + { + : newline + : + $* <:"1>a b" >>EOO + '1' + > + 'a b' + EOO + + : no-newline + : + $* <:"1>:a b" >>EOO + '1' + >: + 'a b' + EOO + } +} + +: doc-redirect +: +{ + : in + : + { + : newline + : + $* <:"0<>EOO + '0' + << + 'E O I' + EOO + + : no-newline + : + $* <:"0<<:E O I" >>EOO + '0' + <<: + 'E O I' + EOO + } + + : out + : + { + : newline + : + $* <:"1>>E O O" >>EOO + '1' + >> + 'E O O' + EOO + + : no-newline + : + $* <:"1>>:E O O" >>EOO + '1' + >>: + 'E O O' + EOO + } +} + +: file-redirect +: +{ + : in + : + $* <:"0<<>EOO + '0' + <<< + 'a b' + EOO + + : out + : + $* <:"1>=a b" >>EOO + '1' + >= + 'a b' + EOO + + : out-app + : + $* <:"1>+a b" >>EOO + '1' + >+ + 'a b' + EOO +} + +: cleanup +: +{ + : always + : + $* <:"&file" >>EOO + & + 'file' + EOO + + : maybe + : + $* <:"&?file" >>EOO + &? + 'file' + EOO + + : never + : + $* <:"&!file" >>EOO + &! + 'file' + EOO +} diff --git a/unit-tests/test/script/lexer/command-line.test b/unit-tests/test/script/lexer/command-line.test deleted file mode 100644 index 0b396b8..0000000 --- a/unit-tests/test/script/lexer/command-line.test +++ /dev/null @@ -1,208 +0,0 @@ -# file : unit-tests/test/script/lexer/command-line.test -# copyright : Copyright (c) 2014-2018 Code Synthesis Ltd -# license : MIT; see accompanying LICENSE file - -test.arguments = command-line - -: semi -{ - : immediate - : - $* <"cmd;" >>EOO - 'cmd' - ; - - EOO - - : separated - : - $* <"cmd ;" >>EOO - 'cmd' - ; - - EOO - - : only - : - $* <";" >>EOO - ; - - EOO -} - -: colon -: -{ - : immediate - : - $* <"cmd: dsc" >>EOO - 'cmd' - : - 'dsc' - - EOO - - : separated - : - $* <"cmd :dsc" >>EOO - 'cmd' - : - 'dsc' - - EOO - - : only - : - $* <":" >>EOO - : - - EOO -} - -: redirect -: -{ - : pass - : - $* <"cmd <| 1>|" >>EOO - 'cmd' - <| - '1' - >| - - EOO - - : null - : - $* <"cmd <- 1>-" >>EOO - 'cmd' - <- - '1' - >- - - EOO - - : trace - : - $* <"cmd 1>!" >>EOO - 'cmd' - '1' - >! - - EOO - - : merge - : - $* <"cmd 1>&2" >>EOO - 'cmd' - '1' - >& - '2' - - EOO - - : str - : - $* <"cmd b" >>EOO - 'cmd' - < - 'a' - '1' - > - 'b' - - EOO - - : str-nn - : - $* <"cmd <:a 1>:b" >>EOO - 'cmd' - <: - 'a' - '1' - >: - 'b' - - EOO - - : doc - : - $* <"cmd <>EOO" >>EOO - 'cmd' - << - 'EOI' - '1' - >> - 'EOO' - - EOO - - : doc-nn - : - $* <"cmd <<:EOI 1>>:EOO" >>EOO - 'cmd' - <<: - 'EOI' - '1' - >>: - 'EOO' - - EOO - - : file-cmp - : - $* <"cmd <<>>out 2>>>err" >>EOO - 'cmd' - <<< - 'in' - >>> - 'out' - '2' - >>> - 'err' - - EOO - - : file-write - : - $* <"cmd >=out 2>+err" >>EOO - 'cmd' - >= - 'out' - '2' - >+ - 'err' - - EOO -} - -: cleanup -: -{ - : always - : - $* <"cmd &file" >>EOO - 'cmd' - & - 'file' - - EOO - - : maybe - : - $* <"cmd &?file" >>EOO - 'cmd' - &? - 'file' - - EOO - - : never - : - $* <"cmd &!file" >>EOO - 'cmd' - &! - 'file' - - EOO -} diff --git a/unit-tests/test/script/lexer/command-line.testscript b/unit-tests/test/script/lexer/command-line.testscript new file mode 100644 index 0000000..f84bc86 --- /dev/null +++ b/unit-tests/test/script/lexer/command-line.testscript @@ -0,0 +1,208 @@ +# file : unit-tests/test/script/lexer/command-line.testscript +# copyright : Copyright (c) 2014-2018 Code Synthesis Ltd +# license : MIT; see accompanying LICENSE file + +test.arguments = command-line + +: semi +{ + : immediate + : + $* <"cmd;" >>EOO + 'cmd' + ; + + EOO + + : separated + : + $* <"cmd ;" >>EOO + 'cmd' + ; + + EOO + + : only + : + $* <";" >>EOO + ; + + EOO +} + +: colon +: +{ + : immediate + : + $* <"cmd: dsc" >>EOO + 'cmd' + : + 'dsc' + + EOO + + : separated + : + $* <"cmd :dsc" >>EOO + 'cmd' + : + 'dsc' + + EOO + + : only + : + $* <":" >>EOO + : + + EOO +} + +: redirect +: +{ + : pass + : + $* <"cmd <| 1>|" >>EOO + 'cmd' + <| + '1' + >| + + EOO + + : null + : + $* <"cmd <- 1>-" >>EOO + 'cmd' + <- + '1' + >- + + EOO + + : trace + : + $* <"cmd 1>!" >>EOO + 'cmd' + '1' + >! + + EOO + + : merge + : + $* <"cmd 1>&2" >>EOO + 'cmd' + '1' + >& + '2' + + EOO + + : str + : + $* <"cmd b" >>EOO + 'cmd' + < + 'a' + '1' + > + 'b' + + EOO + + : str-nn + : + $* <"cmd <:a 1>:b" >>EOO + 'cmd' + <: + 'a' + '1' + >: + 'b' + + EOO + + : doc + : + $* <"cmd <>EOO" >>EOO + 'cmd' + << + 'EOI' + '1' + >> + 'EOO' + + EOO + + : doc-nn + : + $* <"cmd <<:EOI 1>>:EOO" >>EOO + 'cmd' + <<: + 'EOI' + '1' + >>: + 'EOO' + + EOO + + : file-cmp + : + $* <"cmd <<>>out 2>>>err" >>EOO + 'cmd' + <<< + 'in' + >>> + 'out' + '2' + >>> + 'err' + + EOO + + : file-write + : + $* <"cmd >=out 2>+err" >>EOO + 'cmd' + >= + 'out' + '2' + >+ + 'err' + + EOO +} + +: cleanup +: +{ + : always + : + $* <"cmd &file" >>EOO + 'cmd' + & + 'file' + + EOO + + : maybe + : + $* <"cmd &?file" >>EOO + 'cmd' + &? + 'file' + + EOO + + : never + : + $* <"cmd &!file" >>EOO + 'cmd' + &! + 'file' + + EOO +} diff --git a/unit-tests/test/script/lexer/description-line.test b/unit-tests/test/script/lexer/description-line.test deleted file mode 100644 index 5f2ea13..0000000 --- a/unit-tests/test/script/lexer/description-line.test +++ /dev/null @@ -1,33 +0,0 @@ -# file : unit-tests/test/script/lexer/description-line.test -# copyright : Copyright (c) 2014-2018 Code Synthesis Ltd -# license : MIT; see accompanying LICENSE file - -test.arguments = description-line - -: full -: -$* <" foo bar " >>EOO -' foo bar ' - -EOO - -: space -: -$* <" " >>EOO -' ' - -EOO - -: empty -: -$* <"" >>EOO - -EOO - -: eof -: -$* <:"foo" >>EOO 2>>EOE != 0 -'foo' -EOO -stdin:1:4: error: expected newline at the end of description line -EOE diff --git a/unit-tests/test/script/lexer/description-line.testscript b/unit-tests/test/script/lexer/description-line.testscript new file mode 100644 index 0000000..e14c8a0 --- /dev/null +++ b/unit-tests/test/script/lexer/description-line.testscript @@ -0,0 +1,33 @@ +# file : unit-tests/test/script/lexer/description-line.testscript +# copyright : Copyright (c) 2014-2018 Code Synthesis Ltd +# license : MIT; see accompanying LICENSE file + +test.arguments = description-line + +: full +: +$* <" foo bar " >>EOO +' foo bar ' + +EOO + +: space +: +$* <" " >>EOO +' ' + +EOO + +: empty +: +$* <"" >>EOO + +EOO + +: eof +: +$* <:"foo" >>EOO 2>>EOE != 0 +'foo' +EOO +stdin:1:4: error: expected newline at the end of description line +EOE diff --git a/unit-tests/test/script/lexer/first-token.test b/unit-tests/test/script/lexer/first-token.test deleted file mode 100644 index d754d69..0000000 --- a/unit-tests/test/script/lexer/first-token.test +++ /dev/null @@ -1,97 +0,0 @@ -# file : unit-tests/test/script/lexer/first-token.test -# copyright : Copyright (c) 2014-2018 Code Synthesis Ltd -# license : MIT; see accompanying LICENSE file - -# Note: this mode auto-expires after each token. -# -test.arguments = first-token - -: dot -: -$* <"." >>EOO -. - -EOO - -: semi -: -$* <";" >>EOO -; - -EOO - -: colon -: -$* <":" >>EOO -: - -EOO - -: lcbrace -: -$* <"{" >>EOO -{ - -EOO - -: rcbrace -: -$* <"}" >>EOO -} - -EOO - -: setup -: -$* <"+foo" >>EOO -+ -'foo' - -EOO - -: tdown -: -$* <"- foo" >>EOO -- -'foo' - -EOO - -: plus-leading -: -$* <"foo+bar" >>EOO -'foo+bar' - -EOO - -: minus-leading -: -$* <"foo- x" >>EOO -'foo-' -'x' - -EOO - -: assign -: -$* <"foo=" >>EOO -'foo' -'=' - -EOO - -: append -: -$* <"foo+=" >>EOO -'foo' -'+=' - -EOO - -: prepend -: -$* <"foo=+" >>EOO -'foo' -'=+' - -EOO diff --git a/unit-tests/test/script/lexer/first-token.testscript b/unit-tests/test/script/lexer/first-token.testscript new file mode 100644 index 0000000..0484b6d --- /dev/null +++ b/unit-tests/test/script/lexer/first-token.testscript @@ -0,0 +1,97 @@ +# file : unit-tests/test/script/lexer/first-token.testscript +# copyright : Copyright (c) 2014-2018 Code Synthesis Ltd +# license : MIT; see accompanying LICENSE file + +# Note: this mode auto-expires after each token. +# +test.arguments = first-token + +: dot +: +$* <"." >>EOO +. + +EOO + +: semi +: +$* <";" >>EOO +; + +EOO + +: colon +: +$* <":" >>EOO +: + +EOO + +: lcbrace +: +$* <"{" >>EOO +{ + +EOO + +: rcbrace +: +$* <"}" >>EOO +} + +EOO + +: setup +: +$* <"+foo" >>EOO ++ +'foo' + +EOO + +: tdown +: +$* <"- foo" >>EOO +- +'foo' + +EOO + +: plus-leading +: +$* <"foo+bar" >>EOO +'foo+bar' + +EOO + +: minus-leading +: +$* <"foo- x" >>EOO +'foo-' +'x' + +EOO + +: assign +: +$* <"foo=" >>EOO +'foo' +'=' + +EOO + +: append +: +$* <"foo+=" >>EOO +'foo' +'+=' + +EOO + +: prepend +: +$* <"foo=+" >>EOO +'foo' +'=+' + +EOO diff --git a/unit-tests/test/script/lexer/second-token.test b/unit-tests/test/script/lexer/second-token.test deleted file mode 100644 index 8b3f452..0000000 --- a/unit-tests/test/script/lexer/second-token.test +++ /dev/null @@ -1,68 +0,0 @@ -# file : unit-tests/test/script/lexer/second-token.test -# copyright : Copyright (c) 2014-2018 Code Synthesis Ltd -# license : MIT; see accompanying LICENSE file - -# Note: this mode auto-expires after each token. -# -test.arguments = second-token - -: semi -: -$* <";" >>EOO -; - -EOO - -: colon -: -$* <":" >>EOO -: - -EOO - -: assign -: -$* <"=foo" >>EOO -= -'foo' - -EOO - -: append -: -$* <"+= foo" >>EOO -+= -'foo' - -EOO - -: prepend -: -$* <" =+ foo" >>EOO -=+ -'foo' - -EOO - -: assign-leading -: -$* <"foo=bar" >>EOO -'foo=bar' - -EOO - -: append-leading -: -$* <"foo+= bar" >>EOO -'foo+=' -'bar' - -EOO - -: prepend-leading -: -$* <"foo =+bar" >>EOO -'foo' -'=+bar' - -EOO diff --git a/unit-tests/test/script/lexer/second-token.testscript b/unit-tests/test/script/lexer/second-token.testscript new file mode 100644 index 0000000..d7cc501 --- /dev/null +++ b/unit-tests/test/script/lexer/second-token.testscript @@ -0,0 +1,68 @@ +# file : unit-tests/test/script/lexer/second-token.testscript +# copyright : Copyright (c) 2014-2018 Code Synthesis Ltd +# license : MIT; see accompanying LICENSE file + +# Note: this mode auto-expires after each token. +# +test.arguments = second-token + +: semi +: +$* <";" >>EOO +; + +EOO + +: colon +: +$* <":" >>EOO +: + +EOO + +: assign +: +$* <"=foo" >>EOO += +'foo' + +EOO + +: append +: +$* <"+= foo" >>EOO ++= +'foo' + +EOO + +: prepend +: +$* <" =+ foo" >>EOO +=+ +'foo' + +EOO + +: assign-leading +: +$* <"foo=bar" >>EOO +'foo=bar' + +EOO + +: append-leading +: +$* <"foo+= bar" >>EOO +'foo+=' +'bar' + +EOO + +: prepend-leading +: +$* <"foo =+bar" >>EOO +'foo' +'=+bar' + +EOO diff --git a/unit-tests/test/script/lexer/variable-line.test b/unit-tests/test/script/lexer/variable-line.test deleted file mode 100644 index 68d3a71..0000000 --- a/unit-tests/test/script/lexer/variable-line.test +++ /dev/null @@ -1,28 +0,0 @@ -# file : unit-tests/test/script/lexer/variable-line.test -# copyright : Copyright (c) 2014-2018 Code Synthesis Ltd -# license : MIT; see accompanying LICENSE file - -test.arguments = variable-line - -: semi -: -$* <"cmd;" >>EOO -'cmd' -; - -EOO - -: semi-separated -: -$* <"cmd ;" >>EOO -'cmd' -; - -EOO - -: semi-only -: -$* <";" >>EOO -; - -EOO diff --git a/unit-tests/test/script/lexer/variable-line.testscript b/unit-tests/test/script/lexer/variable-line.testscript new file mode 100644 index 0000000..b28bc93 --- /dev/null +++ b/unit-tests/test/script/lexer/variable-line.testscript @@ -0,0 +1,28 @@ +# file : unit-tests/test/script/lexer/variable-line.testscript +# copyright : Copyright (c) 2014-2018 Code Synthesis Ltd +# license : MIT; see accompanying LICENSE file + +test.arguments = variable-line + +: semi +: +$* <"cmd;" >>EOO +'cmd' +; + +EOO + +: semi-separated +: +$* <"cmd ;" >>EOO +'cmd' +; + +EOO + +: semi-only +: +$* <";" >>EOO +; + +EOO diff --git a/unit-tests/test/script/lexer/variable.test b/unit-tests/test/script/lexer/variable.test deleted file mode 100644 index 60106ab..0000000 --- a/unit-tests/test/script/lexer/variable.test +++ /dev/null @@ -1,70 +0,0 @@ -# file : unit-tests/test/script/lexer/variable.test -# copyright : Copyright (c) 2014-2018 Code Synthesis Ltd -# license : MIT; see accompanying LICENSE file - -# Test handling custom variable names ($*, $~, $NN). -# -test.arguments = variable - -: command -: -{ - : only - : - $* <"*" >>EOO - '*' - - EOO - - : followed - : - $* <"*abc" >>EOO - '*' - 'abc' - - EOO -} - -: working-dir -: -{ - : only - : - $* <"~" >>EOO - '~' - - EOO - - : followed - : - $* <"~123" >>EOO - '~' - '123' - - EOO -} - -: arg -: -{ - : only - : - $* <"0" >>EOO - '0' - - EOO - - : followed - : - $* <"1abc" >>EOO - '1' - 'abc' - - EOO - - : multi-digit - : - $* <"10" 2>>EOE != 0 - stdin:1:1: error: multi-digit special variable name - EOE -} diff --git a/unit-tests/test/script/lexer/variable.testscript b/unit-tests/test/script/lexer/variable.testscript new file mode 100644 index 0000000..b4f793e --- /dev/null +++ b/unit-tests/test/script/lexer/variable.testscript @@ -0,0 +1,70 @@ +# file : unit-tests/test/script/lexer/variable.testscript +# copyright : Copyright (c) 2014-2018 Code Synthesis Ltd +# license : MIT; see accompanying LICENSE file + +# Test handling custom variable names ($*, $~, $NN). +# +test.arguments = variable + +: command +: +{ + : only + : + $* <"*" >>EOO + '*' + + EOO + + : followed + : + $* <"*abc" >>EOO + '*' + 'abc' + + EOO +} + +: working-dir +: +{ + : only + : + $* <"~" >>EOO + '~' + + EOO + + : followed + : + $* <"~123" >>EOO + '~' + '123' + + EOO +} + +: arg +: +{ + : only + : + $* <"0" >>EOO + '0' + + EOO + + : followed + : + $* <"1abc" >>EOO + '1' + 'abc' + + EOO + + : multi-digit + : + $* <"10" 2>>EOE != 0 + stdin:1:1: error: multi-digit special variable name + EOE +} diff --git a/unit-tests/test/script/parser/buildfile b/unit-tests/test/script/parser/buildfile index ee0e26d..173b15d 100644 --- a/unit-tests/test/script/parser/buildfile +++ b/unit-tests/test/script/parser/buildfile @@ -3,4 +3,4 @@ # license : MIT; see accompanying LICENSE file include ../../../../build2/ -exe{driver}: {hxx cxx}{*} ../../../../build2/libu{b} test{*} +exe{driver}: {hxx cxx}{*} ../../../../build2/libu{b} testscript{*} diff --git a/unit-tests/test/script/parser/cleanup.test b/unit-tests/test/script/parser/cleanup.test deleted file mode 100644 index 1b43c90..0000000 --- a/unit-tests/test/script/parser/cleanup.test +++ /dev/null @@ -1,58 +0,0 @@ -# file : unit-tests/test/script/parser/cleanup.test -# copyright : Copyright (c) 2014-2018 Code Synthesis Ltd -# license : MIT; see accompanying LICENSE file - -: always -: -$* <>EOO -cmd &file -EOI -cmd &file -EOO - -: maybe -: -$* <>EOO -cmd &?file -EOI -cmd &?file -EOO - -: never -: -$* <>EOO -cmd &!file -EOI -cmd &!file -EOO - -: empty -: -$* <>EOE != 0 -cmd &"" -EOI -testscript:1:6: error: empty cleanup path -EOE - -: missed-before -: -{ - : token - : - : Path missed before command next token - : - $* <>EOE != 0 - cmd & >file - EOI - testscript:1:7: error: missing cleanup path - EOE - - : end - : Test path missed before end of command - : - $* <>EOE != 0 - cmd & - EOI - testscript:1:6: error: missing cleanup path - EOE -} diff --git a/unit-tests/test/script/parser/cleanup.testscript b/unit-tests/test/script/parser/cleanup.testscript new file mode 100644 index 0000000..b429f5d --- /dev/null +++ b/unit-tests/test/script/parser/cleanup.testscript @@ -0,0 +1,58 @@ +# file : unit-tests/test/script/parser/cleanup.testscript +# copyright : Copyright (c) 2014-2018 Code Synthesis Ltd +# license : MIT; see accompanying LICENSE file + +: always +: +$* <>EOO +cmd &file +EOI +cmd &file +EOO + +: maybe +: +$* <>EOO +cmd &?file +EOI +cmd &?file +EOO + +: never +: +$* <>EOO +cmd &!file +EOI +cmd &!file +EOO + +: empty +: +$* <>EOE != 0 +cmd &"" +EOI +testscript:1:6: error: empty cleanup path +EOE + +: missed-before +: +{ + : token + : + : Path missed before command next token + : + $* <>EOE != 0 + cmd & >file + EOI + testscript:1:7: error: missing cleanup path + EOE + + : end + : Test path missed before end of command + : + $* <>EOE != 0 + cmd & + EOI + testscript:1:6: error: missing cleanup path + EOE +} diff --git a/unit-tests/test/script/parser/command-if.test b/unit-tests/test/script/parser/command-if.test deleted file mode 100644 index 4936553..0000000 --- a/unit-tests/test/script/parser/command-if.test +++ /dev/null @@ -1,548 +0,0 @@ -# file : unit-tests/test/script/parser/command-if.test -# copyright : Copyright (c) 2014-2018 Code Synthesis Ltd -# license : MIT; see accompanying LICENSE file - -: if -: -{ - : true - : - $* <>EOO - if true foo - cmd1 - cmd2 - end - EOI - ? true foo - cmd1 - cmd2 - EOO - - : false - : - $* <>EOO - if false foo - cmd1 - cmd2 - end - EOI - ? false foo - EOO - - : not-true - : - $* <>EOO - if! true foo - cmd1 - cmd2 - end - EOI - ? true foo - EOO - - : not-false - : - $* <>EOO - if! false foo - cmd1 - cmd2 - end - EOI - ? false foo - cmd1 - cmd2 - EOO - - : without-command - : - $* <>EOE != 0 - if - cmd - end - EOI - testscript:1:3: error: missing program - EOE - - : after-semi - : - $* -s <>EOO - cmd1; - if true - cmd2 - end - EOI - { - { - cmd1 - ? true - cmd2 - } - } - EOO - - : setup - : - $* -s <>EOO - +if true - cmd - end - EOI - { - ? true - +cmd - } - EOO - - : tdown - : - $* -s <>EOO - -if true - cmd - end - EOI - { - ? true - -cmd - } - EOO -} - -: elif -: -{ - : true - : - $* <>EOO - if false - cmd1 - cmd2 - elif true - cmd3 - cmd4 - end - EOI - ? false - ? true - cmd3 - cmd4 - EOO - - : false - : - $* <>EOO - if false - cmd1 - cmd2 - elif false - cmd3 - cmd4 - end - EOI - ? false - ? false - EOO - - : not-true - : - $* <>EOO - if false - cmd1 - cmd2 - elif! true - cmd3 - cmd4 - end - EOI - ? false - ? true - EOO - - : not-false - : - $* <>EOO - if false - cmd1 - cmd2 - elif! false - cmd3 - cmd4 - end - EOI - ? false - ? false - cmd3 - cmd4 - EOO - - : without-if - : - $* <>EOE != 0 - cmd - elif true - cmd - end - EOI - testscript:2:1: error: 'elif' without preceding 'if' - EOE - - : not-without-if - : - $* <>EOE != 0 - cmd - elif! true - cmd - end - EOI - testscript:2:1: error: 'elif!' without preceding 'if' - EOE - - : after-else - : - $* <>EOE != 0 - if false - cmd - else - cmd - elif true - cmd - end - EOI - testscript:5:1: error: 'elif' after 'else' - EOE -} - -: else -: -{ - : true - : - $* <>EOO - if false - cmd1 - cmd2 - else - cmd3 - cmd4 - end - EOI - ? false - cmd3 - cmd4 - EOO - - : false - : - $* <>EOO - if true - cmd1 - cmd2 - else - cmd3 - cmd4 - end - EOI - ? true - cmd1 - cmd2 - EOO - - : chain - : - $* <>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 - : - $* <>EOE != 0 - if true - cmd - else cmd - cmd - end - EOI - testscript:3:6: error: expected newline instead of 'cmd' - EOE - - : without-if - : - $* <>EOE != 0 - cmd - else - cmd - end - EOI - testscript:2:1: error: 'else' without preceding 'if' - EOE - - : after-else - : - $* <>EOE != 0 - if false - cmd - else - cmd - else - cmd - end - EOI - testscript:5:1: error: 'else' after 'else' - EOE -} - -: end -{ - : without-if - : - $* <>EOE != 0 - cmd - end - EOI - testscript:2:1: error: 'end' without preceding 'if' - EOE - - : before - { - : semi - : - $* -s <>EOO - if true - cmd1 - end; - cmd2 - EOI - { - { - ? true - cmd1 - cmd2 - } - } - EOO - - : command - : - $* <>EOE != 0 - if true - cmd - end cmd - EOI - testscript:3:5: error: expected newline instead of 'cmd' - EOE - - : colon - : - $* -s <>EOO - if true - cmd1 - cmd2 - end : test - EOI - { - : id:test - { - ? true - cmd1 - cmd2 - } - } - EOO - } -} - -: nested -: -{ - : take - : - $* <>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 - : - $* <>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 - : - $* <>EOE != 0 - if - cmd; - cmd - end - EOI - testscript:2:3: error: ';' inside 'if' - EOE - - : colon-leading - : - $* <>EOE != 0 - if - : foo - cmd - end - EOI - testscript:2:3: error: description inside 'if' - EOE - - : colon-trailing - : - $* <>EOE != 0 - if - cmd : foo - end - EOI - testscript:2:3: error: description inside 'if' - EOE - - : eos - : - $* <>EOE != 0 - if - EOI - testscript:2:1: error: expected closing 'end' - EOE - - : scope - : - $* <>EOE != 0 - if - cmd - { - } - end - EOI - testscript:3:3: error: expected closing 'end' - EOE - - : setup - : - $* <>EOE != 0 - if - +cmd - end - EOI - testscript:2:3: error: setup command inside 'if' - EOE - - : tdown - : - $* <>EOE != 0 - if - -cmd - end - EOI - testscript:2:3: error: teardown command inside 'if' - EOE -} - -: line-index -: -$* -l <>EOO -if false - cmd - if true - cmd - end - cmd -elif false - cmd -else - cmd -end -EOI -? false # 1 -? false # 6 -cmd # 8 -EOO - -: var -: -$* <>EOO -if true - x = foo -else - x = bar -end; -cmd $x -EOI -? true -cmd foo -EOO - -: leading-and-trailing-description -: -$* <>EOE != 0 -: foo -if true - cmd -end : bar -EOI -testscript:4:1: error: both leading and trailing descriptions -EOE diff --git a/unit-tests/test/script/parser/command-if.testscript b/unit-tests/test/script/parser/command-if.testscript new file mode 100644 index 0000000..264c522 --- /dev/null +++ b/unit-tests/test/script/parser/command-if.testscript @@ -0,0 +1,548 @@ +# file : unit-tests/test/script/parser/command-if.testscript +# copyright : Copyright (c) 2014-2018 Code Synthesis Ltd +# license : MIT; see accompanying LICENSE file + +: if +: +{ + : true + : + $* <>EOO + if true foo + cmd1 + cmd2 + end + EOI + ? true foo + cmd1 + cmd2 + EOO + + : false + : + $* <>EOO + if false foo + cmd1 + cmd2 + end + EOI + ? false foo + EOO + + : not-true + : + $* <>EOO + if! true foo + cmd1 + cmd2 + end + EOI + ? true foo + EOO + + : not-false + : + $* <>EOO + if! false foo + cmd1 + cmd2 + end + EOI + ? false foo + cmd1 + cmd2 + EOO + + : without-command + : + $* <>EOE != 0 + if + cmd + end + EOI + testscript:1:3: error: missing program + EOE + + : after-semi + : + $* -s <>EOO + cmd1; + if true + cmd2 + end + EOI + { + { + cmd1 + ? true + cmd2 + } + } + EOO + + : setup + : + $* -s <>EOO + +if true + cmd + end + EOI + { + ? true + +cmd + } + EOO + + : tdown + : + $* -s <>EOO + -if true + cmd + end + EOI + { + ? true + -cmd + } + EOO +} + +: elif +: +{ + : true + : + $* <>EOO + if false + cmd1 + cmd2 + elif true + cmd3 + cmd4 + end + EOI + ? false + ? true + cmd3 + cmd4 + EOO + + : false + : + $* <>EOO + if false + cmd1 + cmd2 + elif false + cmd3 + cmd4 + end + EOI + ? false + ? false + EOO + + : not-true + : + $* <>EOO + if false + cmd1 + cmd2 + elif! true + cmd3 + cmd4 + end + EOI + ? false + ? true + EOO + + : not-false + : + $* <>EOO + if false + cmd1 + cmd2 + elif! false + cmd3 + cmd4 + end + EOI + ? false + ? false + cmd3 + cmd4 + EOO + + : without-if + : + $* <>EOE != 0 + cmd + elif true + cmd + end + EOI + testscript:2:1: error: 'elif' without preceding 'if' + EOE + + : not-without-if + : + $* <>EOE != 0 + cmd + elif! true + cmd + end + EOI + testscript:2:1: error: 'elif!' without preceding 'if' + EOE + + : after-else + : + $* <>EOE != 0 + if false + cmd + else + cmd + elif true + cmd + end + EOI + testscript:5:1: error: 'elif' after 'else' + EOE +} + +: else +: +{ + : true + : + $* <>EOO + if false + cmd1 + cmd2 + else + cmd3 + cmd4 + end + EOI + ? false + cmd3 + cmd4 + EOO + + : false + : + $* <>EOO + if true + cmd1 + cmd2 + else + cmd3 + cmd4 + end + EOI + ? true + cmd1 + cmd2 + EOO + + : chain + : + $* <>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 + : + $* <>EOE != 0 + if true + cmd + else cmd + cmd + end + EOI + testscript:3:6: error: expected newline instead of 'cmd' + EOE + + : without-if + : + $* <>EOE != 0 + cmd + else + cmd + end + EOI + testscript:2:1: error: 'else' without preceding 'if' + EOE + + : after-else + : + $* <>EOE != 0 + if false + cmd + else + cmd + else + cmd + end + EOI + testscript:5:1: error: 'else' after 'else' + EOE +} + +: end +{ + : without-if + : + $* <>EOE != 0 + cmd + end + EOI + testscript:2:1: error: 'end' without preceding 'if' + EOE + + : before + { + : semi + : + $* -s <>EOO + if true + cmd1 + end; + cmd2 + EOI + { + { + ? true + cmd1 + cmd2 + } + } + EOO + + : command + : + $* <>EOE != 0 + if true + cmd + end cmd + EOI + testscript:3:5: error: expected newline instead of 'cmd' + EOE + + : colon + : + $* -s <>EOO + if true + cmd1 + cmd2 + end : test + EOI + { + : id:test + { + ? true + cmd1 + cmd2 + } + } + EOO + } +} + +: nested +: +{ + : take + : + $* <>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 + : + $* <>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 + : + $* <>EOE != 0 + if + cmd; + cmd + end + EOI + testscript:2:3: error: ';' inside 'if' + EOE + + : colon-leading + : + $* <>EOE != 0 + if + : foo + cmd + end + EOI + testscript:2:3: error: description inside 'if' + EOE + + : colon-trailing + : + $* <>EOE != 0 + if + cmd : foo + end + EOI + testscript:2:3: error: description inside 'if' + EOE + + : eos + : + $* <>EOE != 0 + if + EOI + testscript:2:1: error: expected closing 'end' + EOE + + : scope + : + $* <>EOE != 0 + if + cmd + { + } + end + EOI + testscript:3:3: error: expected closing 'end' + EOE + + : setup + : + $* <>EOE != 0 + if + +cmd + end + EOI + testscript:2:3: error: setup command inside 'if' + EOE + + : tdown + : + $* <>EOE != 0 + if + -cmd + end + EOI + testscript:2:3: error: teardown command inside 'if' + EOE +} + +: line-index +: +$* -l <>EOO +if false + cmd + if true + cmd + end + cmd +elif false + cmd +else + cmd +end +EOI +? false # 1 +? false # 6 +cmd # 8 +EOO + +: var +: +$* <>EOO +if true + x = foo +else + x = bar +end; +cmd $x +EOI +? true +cmd foo +EOO + +: leading-and-trailing-description +: +$* <>EOE != 0 +: foo +if true + cmd +end : bar +EOI +testscript:4:1: error: both leading and trailing descriptions +EOE diff --git a/unit-tests/test/script/parser/command-re-parse.test b/unit-tests/test/script/parser/command-re-parse.test deleted file mode 100644 index a6ef6d3..0000000 --- a/unit-tests/test/script/parser/command-re-parse.test +++ /dev/null @@ -1,12 +0,0 @@ -# file : unit-tests/test/script/parser/command-re-parse.test -# copyright : Copyright (c) 2014-2018 Code Synthesis Ltd -# license : MIT; see accompanying LICENSE file - -: double-quote -: -$* <>EOO -x = cmd \">-\" "'<-'" -$x -EOI -cmd '>-' '<-' -EOO diff --git a/unit-tests/test/script/parser/command-re-parse.testscript b/unit-tests/test/script/parser/command-re-parse.testscript new file mode 100644 index 0000000..b137b0e --- /dev/null +++ b/unit-tests/test/script/parser/command-re-parse.testscript @@ -0,0 +1,12 @@ +# file : unit-tests/test/script/parser/command-re-parse.testscript +# copyright : Copyright (c) 2014-2018 Code Synthesis Ltd +# license : MIT; see accompanying LICENSE file + +: double-quote +: +$* <>EOO +x = cmd \">-\" "'<-'" +$x +EOI +cmd '>-' '<-' +EOO diff --git a/unit-tests/test/script/parser/description.test b/unit-tests/test/script/parser/description.test deleted file mode 100644 index e651a4a..0000000 --- a/unit-tests/test/script/parser/description.test +++ /dev/null @@ -1,486 +0,0 @@ -# file : unit-tests/test/script/parser/description.test -# copyright : Copyright (c) 2014-2018 Code Synthesis Ltd -# license : MIT; see accompanying LICENSE file - -: id -: -{ - : lead - : - $* <>EOO - : foo - cmd - EOI - : id:foo - cmd - EOO - - : trail - : - $* <>EOO - cmd : foo - EOI - : id:foo - cmd - EOO - - : dup - : Id uniqueness - : - { - : test - : - { - : test - : - $* <>EOE != 0 - : foo - cmd - : foo - cmd - EOI - testscript:3:1: error: duplicate id foo - testscript:1:1: info: previously used here - EOE - - : group - : - $* <>EOE != 0 - : foo - cmd - : foo - { - cmd - cmd - } - EOI - testscript:3:1: error: duplicate id foo - testscript:1:1: info: previously used here - EOE - - : derived - : - $* <>EOE != 0 - : 3 - cmd - cmd - EOI - testscript:3:1: error: duplicate id 3 - testscript:1:1: info: previously used here - EOE - } - - : group - : - { - : test - : - $* <>EOE != 0 - : foo - { - cmd - cmd - } - : foo - cmd - EOI - testscript:6:1: error: duplicate id foo - testscript:1:1: info: previously used here - EOE - - : group - : - $* <>EOE != 0 - : foo - { - cmd - cmd - } - : foo - { - cmd - cmd - } - EOI - testscript:6:1: error: duplicate id foo - testscript:1:1: info: previously used here - EOE - - : derived - : - $* <>EOE != 0 - : 3 - cmd - { - cmd - cmd - } - EOI - testscript:3:1: error: duplicate id 3 - testscript:1:1: info: previously used here - EOE - } - } -} - -: summary -{ - : lead - : - $* <>EOO - : foo bar - cmd - EOI - : sm:foo bar - cmd - EOO - - : trail - : - $* <>EOO - cmd: foo bar - EOI - : sm:foo bar - cmd - EOO - - : id - : - $* <>EOO - : foo-bar - : foo bar - cmd - EOI - : id:foo-bar - : sm:foo bar - cmd - EOO -} - -: details -{ - : id - : - $* <>EOO - : foo-bar - : - : foo bar - : bar baz - cmd - EOI - : id:foo-bar - : - : foo bar - : bar baz - cmd - EOO - - : summary - : - { - : only - : - $* <>EOO - : foo bar - : - : foo bar - : bar baz - cmd - EOI - : sm:foo bar - : - : foo bar - : bar baz - cmd - EOO - - : assumed - : - $* <>EOO - : foo bar - : bar baz - cmd - EOI - : foo bar - : bar baz - cmd - EOO - - : id - : - $* <>EOO - : foo-bar - : foo bar - : - : foo bar - : bar baz - cmd - EOI - : id:foo-bar - : sm:foo bar - : - : foo bar - : bar baz - cmd - EOO - - : id-assumed - : - $* <>EOO - : foo-bar - : bar baz - : baz fox - cmd - EOI - : foo-bar - : bar baz - : baz fox - cmd - EOO - } -} - -: legal -: -: Legal places for description. -: -{ - : var - : - $* <>EOO - : foo bar - x = y; - cmd $x - EOI - : sm:foo bar - cmd y - EOO -} - -: illegal -: -: Illegal places for description. -: -{ - : eof - : - $* <": foo" 2>>EOE != 0 - testscript:2:1: error: description before - EOE - - : rcbrace - : - $* <>EOE != 0 - { - cmd - : foo - } - EOI - testscript:4:1: error: description before '}' - EOE - - : setup - : - $* <>EOE != 0 - : foo - +cmd - EOI - testscript:2:1: error: description before setup command - EOE - - : tdown - : - $* <>EOE != 0 - : foo - -cmd - EOI - testscript:2:1: error: description before teardown command - EOE - - : var - : - $* <>EOE != 0 - : foo - x = y - EOI - testscript:2:1: error: description before setup/teardown variable - EOE - - : var-if - : - $* <>EOE != 0 - : foo - if true - x = y - end - EOI - testscript:2:1: error: description before/after setup/teardown variable-if - EOE - - : var-if-after - : - $* <>EOE != 0 - if true - x = y - end : foo - EOI - testscript:1:1: error: description before/after setup/teardown variable-if - EOE - - : test - : - $* <>EOE != 0 - cmd1; - : foo - cmd2 - EOI - testscript:2:1: error: description inside test - EOE -} - -: test-scope -: -: Interaction with test scope merging. -: -{ - : both - : - : No merge since both have description. - : - $* -s -i <>EOO - : foo - { - : bar - cmd - } - EOI - { - : id:foo - { # foo - : id:bar - { # foo/bar - cmd - } - } - } - EOO - - : test - : - : No merge since test has description. - : - $* -s -i <>EOO - { - : foo-bar - : foo bar - cmd - } - EOI - { - { # 1 - : id:foo-bar - : sm:foo bar - { # 1/foo-bar - cmd - } - } - } - EOO - - : group - : - $* -s -i <>EOO - : foo-bar - : foo bar - { - cmd - } - EOI - { - : id:foo-bar - : sm:foo bar - { # foo-bar - cmd - } - } - EOO -} - -: blanks -: -$* <>EOO -: -: -: foo bar -: bar baz -: -: baz fox -: -: -cmd -EOI -: foo bar -: bar baz -: -: baz fox -cmd -EOO - -: strip -: -$* <>EOO -: foo-bar -: bar baz -: -: baz fox -: fox biz -:biz buz -: -cmd -EOI -: id:foo-bar -: sm:bar baz -: -: baz fox -: fox biz -: biz buz -cmd -EOO - -: trail-compound -: -$* <>EOO -cmd1; -cmd2: foo -EOI -: id:foo -cmd1 -cmd2 -EOO - -: empty -: -$* <>EOE != 0 -: -: -cmd -EOI -testscript:1:1: error: empty description -EOE - -: trail-empty -: -$* <>EOE != 0 -cmd: -EOI -testscript:1:4: error: empty description -EOE - -: both -: -$* <>EOE != 0 -: foo -cmd : bar -EOI -testscript:2:1: error: both leading and trailing descriptions -EOE diff --git a/unit-tests/test/script/parser/description.testscript b/unit-tests/test/script/parser/description.testscript new file mode 100644 index 0000000..1945cd2 --- /dev/null +++ b/unit-tests/test/script/parser/description.testscript @@ -0,0 +1,486 @@ +# file : unit-tests/test/script/parser/description.testscript +# copyright : Copyright (c) 2014-2018 Code Synthesis Ltd +# license : MIT; see accompanying LICENSE file + +: id +: +{ + : lead + : + $* <>EOO + : foo + cmd + EOI + : id:foo + cmd + EOO + + : trail + : + $* <>EOO + cmd : foo + EOI + : id:foo + cmd + EOO + + : dup + : Id uniqueness + : + { + : test + : + { + : test + : + $* <>EOE != 0 + : foo + cmd + : foo + cmd + EOI + testscript:3:1: error: duplicate id foo + testscript:1:1: info: previously used here + EOE + + : group + : + $* <>EOE != 0 + : foo + cmd + : foo + { + cmd + cmd + } + EOI + testscript:3:1: error: duplicate id foo + testscript:1:1: info: previously used here + EOE + + : derived + : + $* <>EOE != 0 + : 3 + cmd + cmd + EOI + testscript:3:1: error: duplicate id 3 + testscript:1:1: info: previously used here + EOE + } + + : group + : + { + : test + : + $* <>EOE != 0 + : foo + { + cmd + cmd + } + : foo + cmd + EOI + testscript:6:1: error: duplicate id foo + testscript:1:1: info: previously used here + EOE + + : group + : + $* <>EOE != 0 + : foo + { + cmd + cmd + } + : foo + { + cmd + cmd + } + EOI + testscript:6:1: error: duplicate id foo + testscript:1:1: info: previously used here + EOE + + : derived + : + $* <>EOE != 0 + : 3 + cmd + { + cmd + cmd + } + EOI + testscript:3:1: error: duplicate id 3 + testscript:1:1: info: previously used here + EOE + } + } +} + +: summary +{ + : lead + : + $* <>EOO + : foo bar + cmd + EOI + : sm:foo bar + cmd + EOO + + : trail + : + $* <>EOO + cmd: foo bar + EOI + : sm:foo bar + cmd + EOO + + : id + : + $* <>EOO + : foo-bar + : foo bar + cmd + EOI + : id:foo-bar + : sm:foo bar + cmd + EOO +} + +: details +{ + : id + : + $* <>EOO + : foo-bar + : + : foo bar + : bar baz + cmd + EOI + : id:foo-bar + : + : foo bar + : bar baz + cmd + EOO + + : summary + : + { + : only + : + $* <>EOO + : foo bar + : + : foo bar + : bar baz + cmd + EOI + : sm:foo bar + : + : foo bar + : bar baz + cmd + EOO + + : assumed + : + $* <>EOO + : foo bar + : bar baz + cmd + EOI + : foo bar + : bar baz + cmd + EOO + + : id + : + $* <>EOO + : foo-bar + : foo bar + : + : foo bar + : bar baz + cmd + EOI + : id:foo-bar + : sm:foo bar + : + : foo bar + : bar baz + cmd + EOO + + : id-assumed + : + $* <>EOO + : foo-bar + : bar baz + : baz fox + cmd + EOI + : foo-bar + : bar baz + : baz fox + cmd + EOO + } +} + +: legal +: +: Legal places for description. +: +{ + : var + : + $* <>EOO + : foo bar + x = y; + cmd $x + EOI + : sm:foo bar + cmd y + EOO +} + +: illegal +: +: Illegal places for description. +: +{ + : eof + : + $* <": foo" 2>>EOE != 0 + testscript:2:1: error: description before + EOE + + : rcbrace + : + $* <>EOE != 0 + { + cmd + : foo + } + EOI + testscript:4:1: error: description before '}' + EOE + + : setup + : + $* <>EOE != 0 + : foo + +cmd + EOI + testscript:2:1: error: description before setup command + EOE + + : tdown + : + $* <>EOE != 0 + : foo + -cmd + EOI + testscript:2:1: error: description before teardown command + EOE + + : var + : + $* <>EOE != 0 + : foo + x = y + EOI + testscript:2:1: error: description before setup/teardown variable + EOE + + : var-if + : + $* <>EOE != 0 + : foo + if true + x = y + end + EOI + testscript:2:1: error: description before/after setup/teardown variable-if + EOE + + : var-if-after + : + $* <>EOE != 0 + if true + x = y + end : foo + EOI + testscript:1:1: error: description before/after setup/teardown variable-if + EOE + + : test + : + $* <>EOE != 0 + cmd1; + : foo + cmd2 + EOI + testscript:2:1: error: description inside test + EOE +} + +: test-scope +: +: Interaction with test scope merging. +: +{ + : both + : + : No merge since both have description. + : + $* -s -i <>EOO + : foo + { + : bar + cmd + } + EOI + { + : id:foo + { # foo + : id:bar + { # foo/bar + cmd + } + } + } + EOO + + : test + : + : No merge since test has description. + : + $* -s -i <>EOO + { + : foo-bar + : foo bar + cmd + } + EOI + { + { # 1 + : id:foo-bar + : sm:foo bar + { # 1/foo-bar + cmd + } + } + } + EOO + + : group + : + $* -s -i <>EOO + : foo-bar + : foo bar + { + cmd + } + EOI + { + : id:foo-bar + : sm:foo bar + { # foo-bar + cmd + } + } + EOO +} + +: blanks +: +$* <>EOO +: +: +: foo bar +: bar baz +: +: baz fox +: +: +cmd +EOI +: foo bar +: bar baz +: +: baz fox +cmd +EOO + +: strip +: +$* <>EOO +: foo-bar +: bar baz +: +: baz fox +: fox biz +:biz buz +: +cmd +EOI +: id:foo-bar +: sm:bar baz +: +: baz fox +: fox biz +: biz buz +cmd +EOO + +: trail-compound +: +$* <>EOO +cmd1; +cmd2: foo +EOI +: id:foo +cmd1 +cmd2 +EOO + +: empty +: +$* <>EOE != 0 +: +: +cmd +EOI +testscript:1:1: error: empty description +EOE + +: trail-empty +: +$* <>EOE != 0 +cmd: +EOI +testscript:1:4: error: empty description +EOE + +: both +: +$* <>EOE != 0 +: foo +cmd : bar +EOI +testscript:2:1: error: both leading and trailing descriptions +EOE diff --git a/unit-tests/test/script/parser/directive.test b/unit-tests/test/script/parser/directive.test deleted file mode 100644 index 66bae0d..0000000 --- a/unit-tests/test/script/parser/directive.test +++ /dev/null @@ -1,74 +0,0 @@ -# file : unit-tests/test/script/parser/directive.test -# copyright : Copyright (c) 2014-2018 Code Synthesis Ltd -# license : MIT; see accompanying LICENSE file - -: not-directive -: -$* <>EOO -x = x -".include" foo.test -\.include foo.test -EOI -.include foo.test -.include foo.test -EOO - -: expected-name -: -$* <>EOE != 0 -.$ -EOI -testscript:1:2: error: expected directive name instead of '$' -EOE - -: unknown-name -: -$* <>EOE != 0 -.bogus -EOI -testscript:1:2: error: unknown directive 'bogus' -EOE - -: separated -: -touch foo.test; -$* <="foo-$(build.verson.project).test"; -cmd -EOI -$* <>EOO -.include "foo-$(build.verson.project).test" -EOI -cmd -EOO - -: after-semi -: -$* <>EOE != 0 -cmd; -.include foo.test -EOI -testscript:2:1: error: directive after ';' -EOE - -: semi-after -: -$* <>EOE != 0 -.include foo.test; -cmd -EOI -testscript:1:18: error: ';' after directive -EOE diff --git a/unit-tests/test/script/parser/directive.testscript b/unit-tests/test/script/parser/directive.testscript new file mode 100644 index 0000000..82fc471 --- /dev/null +++ b/unit-tests/test/script/parser/directive.testscript @@ -0,0 +1,74 @@ +# file : unit-tests/test/script/parser/directive.testscript +# copyright : Copyright (c) 2014-2018 Code Synthesis Ltd +# license : MIT; see accompanying LICENSE file + +: not-directive +: +$* <>EOO +x = x +".include" foo.testscript +\.include foo.testscript +EOI +.include foo.testscript +.include foo.testscript +EOO + +: expected-name +: +$* <>EOE != 0 +.$ +EOI +testscript:1:2: error: expected directive name instead of '$' +EOE + +: unknown-name +: +$* <>EOE != 0 +.bogus +EOI +testscript:1:2: error: unknown directive 'bogus' +EOE + +: separated +: +touch foo.testscript; +$* <="foo-$(build.verson.project).testscript"; +cmd +EOI +$* <>EOO +.include "foo-$(build.verson.project).testscript" +EOI +cmd +EOO + +: after-semi +: +$* <>EOE != 0 +cmd; +.include foo.testscript +EOI +testscript:2:1: error: directive after ';' +EOE + +: semi-after +: +$* <>EOE != 0 +.include foo.testscript; +cmd +EOI +testscript:1:24: error: ';' after directive +EOE diff --git a/unit-tests/test/script/parser/exit.test b/unit-tests/test/script/parser/exit.test deleted file mode 100644 index 3c796f1..0000000 --- a/unit-tests/test/script/parser/exit.test +++ /dev/null @@ -1,27 +0,0 @@ -# file : unit-tests/test/script/parser/exit.test -# copyright : Copyright (c) 2014-2018 Code Synthesis Ltd -# license : MIT; see accompanying LICENSE file - -: eq -: -$* <>EOO -cmd == 1 -EOI -cmd == 1 -EOO - -: ne -: -$* <>EOO -cmd!=1 -EOI -cmd != 1 -EOO - -: end -: -$* <>EOE != 0 -cmd != 1 <"foo" -EOI -testscript:1:10: error: unexpected '<' after command exit status -EOE diff --git a/unit-tests/test/script/parser/exit.testscript b/unit-tests/test/script/parser/exit.testscript new file mode 100644 index 0000000..af3707d --- /dev/null +++ b/unit-tests/test/script/parser/exit.testscript @@ -0,0 +1,27 @@ +# file : unit-tests/test/script/parser/exit.testscript +# copyright : Copyright (c) 2014-2018 Code Synthesis Ltd +# license : MIT; see accompanying LICENSE file + +: eq +: +$* <>EOO +cmd == 1 +EOI +cmd == 1 +EOO + +: ne +: +$* <>EOO +cmd!=1 +EOI +cmd != 1 +EOO + +: end +: +$* <>EOE != 0 +cmd != 1 <"foo" +EOI +testscript:1:10: error: unexpected '<' after command exit status +EOE diff --git a/unit-tests/test/script/parser/expansion.test b/unit-tests/test/script/parser/expansion.test deleted file mode 100644 index e161c2c..0000000 --- a/unit-tests/test/script/parser/expansion.test +++ /dev/null @@ -1,36 +0,0 @@ -# file : unit-tests/test/script/parser/expansion.test -# copyright : Copyright (c) 2014-2018 Code Synthesis Ltd -# license : MIT; see accompanying LICENSE file - -: quote -: -: Make sure everything expanded as strings. -: -$* <>EOO -x = dir/ proj% proj%name proj%proj%dir/type{name name {name}} -cmd dir/ proj% proj%name proj%proj%dir/type{name name {name}} -cmd $x -EOI -cmd dir/ proj% proj%name proj%proj%dir/type{name name {name}} -cmd dir/ proj% proj%name proj%proj%dir/type{name name {name}} -EOO - -: unterm-quoted-seq -: -$* <>EOE != 0 -x = "'a bc" -cmd xy$x -EOI -:1:8: error: unterminated single-quoted sequence - testscript:2:5: info: while parsing string 'xy'a bc' -EOE - -: invalid-redirect -: -$* <>EOE != 0 -x = "1>&a" -cmd $x -EOI -:1:4: error: stdout merge redirect file descriptor must be 2 - testscript:2:5: info: while parsing string '1>&a' -EOE diff --git a/unit-tests/test/script/parser/expansion.testscript b/unit-tests/test/script/parser/expansion.testscript new file mode 100644 index 0000000..710d7a1 --- /dev/null +++ b/unit-tests/test/script/parser/expansion.testscript @@ -0,0 +1,36 @@ +# file : unit-tests/test/script/parser/expansion.testscript +# copyright : Copyright (c) 2014-2018 Code Synthesis Ltd +# license : MIT; see accompanying LICENSE file + +: quote +: +: Make sure everything expanded as strings. +: +$* <>EOO +x = dir/ proj% proj%name proj%proj%dir/type{name name {name}} +cmd dir/ proj% proj%name proj%proj%dir/type{name name {name}} +cmd $x +EOI +cmd dir/ proj% proj%name proj%proj%dir/type{name name {name}} +cmd dir/ proj% proj%name proj%proj%dir/type{name name {name}} +EOO + +: unterm-quoted-seq +: +$* <>EOE != 0 +x = "'a bc" +cmd xy$x +EOI +:1:8: error: unterminated single-quoted sequence + testscript:2:5: info: while parsing string 'xy'a bc' +EOE + +: invalid-redirect +: +$* <>EOE != 0 +x = "1>&a" +cmd $x +EOI +:1:4: error: stdout merge redirect file descriptor must be 2 + testscript:2:5: info: while parsing string '1>&a' +EOE diff --git a/unit-tests/test/script/parser/here-document.test b/unit-tests/test/script/parser/here-document.test deleted file mode 100644 index 9aebed4..0000000 --- a/unit-tests/test/script/parser/here-document.test +++ /dev/null @@ -1,213 +0,0 @@ -# file : unit-tests/test/script/parser/here-document.test -# copyright : Copyright (c) 2014-2018 Code Synthesis Ltd -# license : MIT; see accompanying LICENSE file - -: end-marker -: -{ - : missing-newline - : - $* <'cmd <<' 2>>EOE != 0 - testscript:1:7: error: expected here-document end marker - EOE - - : missing-exit - : - $* <'cmd << != 0' 2>>EOE != 0 - testscript:1:8: error: expected here-document end marker - EOE - - : missing-empty - : - $* <'cmd <<""' 2>>EOE != 0 - testscript:1:7: error: expected here-document end marker - EOE - - : unseparated-expansion - : - $* <'cmd <>EOE != 0 - testscript:1:10: error: here-document end marker must be literal - EOE - - : quoted-single-partial - : - $* <"cmd <>EOE != 0 - testscript:1:7: error: partially-quoted here-document end marker - EOE - - : quoted-double-partial - : - $* <'cmd <<"FO"O' 2>>EOE != 0 - testscript:1:7: error: partially-quoted here-document end marker - EOE - - : quoted-mixed - : - $* <"cmd <<\"FO\"'O'" 2>>EOE != 0 - testscript:1:7: error: partially-quoted here-document end marker - EOE - - : unseparated - : - $* <>EOO - cmd <>EOO - cmd <<'EOF' - foo - EOF - EOI - cmd <>EOO - cmd <<"EOF" - foo - EOF - EOI - cmd <>EOO - cmd <>EOO - cmd <>EOO - cmd <>EOO - x = foo bar - cmd <<"EOF" - $x - EOF - EOI - cmd <>EOO - x = foo - cmd <<"EOF" - $x bar $x - EOF - EOI - cmd <>EOE != 0 - cmd <>EOO -cmd <>EOO -cmd <<"EOF" -'single' -"double" -b'o't"h" -('single' "double") -EOF -EOI -cmd <>EOE != 0 + testscript:1:7: error: expected here-document end marker + EOE + + : missing-exit + : + $* <'cmd << != 0' 2>>EOE != 0 + testscript:1:8: error: expected here-document end marker + EOE + + : missing-empty + : + $* <'cmd <<""' 2>>EOE != 0 + testscript:1:7: error: expected here-document end marker + EOE + + : unseparated-expansion + : + $* <'cmd <>EOE != 0 + testscript:1:10: error: here-document end marker must be literal + EOE + + : quoted-single-partial + : + $* <"cmd <>EOE != 0 + testscript:1:7: error: partially-quoted here-document end marker + EOE + + : quoted-double-partial + : + $* <'cmd <<"FO"O' 2>>EOE != 0 + testscript:1:7: error: partially-quoted here-document end marker + EOE + + : quoted-mixed + : + $* <"cmd <<\"FO\"'O'" 2>>EOE != 0 + testscript:1:7: error: partially-quoted here-document end marker + EOE + + : unseparated + : + $* <>EOO + cmd <>EOO + cmd <<'EOF' + foo + EOF + EOI + cmd <>EOO + cmd <<"EOF" + foo + EOF + EOI + cmd <>EOO + cmd <>EOO + cmd <>EOO + cmd <>EOO + x = foo bar + cmd <<"EOF" + $x + EOF + EOI + cmd <>EOO + x = foo + cmd <<"EOF" + $x bar $x + EOF + EOI + cmd <>EOE != 0 + cmd <>EOO +cmd <>EOO +cmd <<"EOF" +'single' +"double" +b'o't"h" +('single' "double") +EOF +EOI +cmd <>EOO -cmd <"" -EOI -cmd <'' -EOO - -: empty-nn -: -$* <>EOO -cmd <:"" -EOI -cmd <:'' -EOO diff --git a/unit-tests/test/script/parser/here-string.testscript b/unit-tests/test/script/parser/here-string.testscript new file mode 100644 index 0000000..a9e42c0 --- /dev/null +++ b/unit-tests/test/script/parser/here-string.testscript @@ -0,0 +1,19 @@ +# file : unit-tests/test/script/parser/here-string.testscript +# copyright : Copyright (c) 2014-2018 Code Synthesis Ltd +# license : MIT; see accompanying LICENSE file + +: empty +: +$* <>EOO +cmd <"" +EOI +cmd <'' +EOO + +: empty-nn +: +$* <>EOO +cmd <:"" +EOI +cmd <:'' +EOO diff --git a/unit-tests/test/script/parser/include.test b/unit-tests/test/script/parser/include.test deleted file mode 100644 index 99e17de..0000000 --- a/unit-tests/test/script/parser/include.test +++ /dev/null @@ -1,104 +0,0 @@ -# file : unit-tests/test/script/parser/include.test -# copyright : Copyright (c) 2014-2018 Code Synthesis Ltd -# license : MIT; see accompanying LICENSE file - -: none -: -$* <=foo.test; -$* <>EOO -.include foo.test -EOI -cmd -EOO - -: multiple -: -cat <"cmd foo" >=foo.test; -cat <"cmd bar" >=bar.test; -$* <>EOO -.include foo.test bar.test -EOI -cmd foo -cmd bar -EOO - -: once -: -cat <"cmd" >=foo.test; -$* <>EOO -.include foo.test -x -.include --once foo.test -.include --once bar/../foo.test -y -.include ../once/foo.test -EOI -cmd -x -y -cmd -EOO - -: group-id -: -cat <=foo.test; -{ - x = b -} -EOI -$* -s -i <>EOO -x = a -.include foo.test -EOI -{ - { # 2-foo-1 - } -} -EOO - -: test-id -: -cat <=foo.test; -cmd -EOI -$* -s -i <>EOO -x = a -.include foo.test -EOI -{ - { # 2-foo-1 - cmd - } -} -EOO - -: invalid-path -: -$* <>EOE != 0 -.include "" -EOI -testscript:1:2: error: invalid testscript include path '' -EOE - -: unable-open -: -$* <>~/EOE/ != 0 -.include foo.test -EOI -/testscript:1:2: error: unable to read testscript foo.test: .+/ -EOE diff --git a/unit-tests/test/script/parser/include.testscript b/unit-tests/test/script/parser/include.testscript new file mode 100644 index 0000000..5e31f0d --- /dev/null +++ b/unit-tests/test/script/parser/include.testscript @@ -0,0 +1,104 @@ +# file : unit-tests/test/script/parser/include.testscript +# copyright : Copyright (c) 2014-2018 Code Synthesis Ltd +# license : MIT; see accompanying LICENSE file + +: none +: +$* <=foo.testscript; +$* <>EOO +.include foo.testscript +EOI +cmd +EOO + +: multiple +: +cat <"cmd foo" >=foo.testscript; +cat <"cmd bar" >=bar.testscript; +$* <>EOO +.include foo.testscript bar.testscript +EOI +cmd foo +cmd bar +EOO + +: once +: +cat <"cmd" >=foo.testscript; +$* <>EOO +.include foo.testscript +x +.include --once foo.testscript +.include --once bar/../foo.testscript +y +.include ../once/foo.testscript +EOI +cmd +x +y +cmd +EOO + +: group-id +: +cat <=foo.testscript; +{ + x = b +} +EOI +$* -s -i <>EOO +x = a +.include foo.testscript +EOI +{ + { # 2-foo-1 + } +} +EOO + +: test-id +: +cat <=foo.testscript; +cmd +EOI +$* -s -i <>EOO +x = a +.include foo.testscript +EOI +{ + { # 2-foo-1 + cmd + } +} +EOO + +: invalid-path +: +$* <>EOE != 0 +.include "" +EOI +testscript:1:2: error: invalid testscript include path '' +EOE + +: unable-open +: +$* <>~/EOE/ != 0 +.include foo.testscript +EOI +/testscript:1:2: error: unable to read testscript foo.testscript: .+/ +EOE diff --git a/unit-tests/test/script/parser/pipe-expr.test b/unit-tests/test/script/parser/pipe-expr.test deleted file mode 100644 index 3b06da3..0000000 --- a/unit-tests/test/script/parser/pipe-expr.test +++ /dev/null @@ -1,133 +0,0 @@ -# file : unit-tests/test/script/parser/pipe-expr.test -# copyright : Copyright (c) 2014-2018 Code Synthesis Ltd -# license : MIT; see accompanying LICENSE file - -: pipe -: -$* <>EOO -cmd1 | cmd2|cmd3 -EOI -cmd1 | cmd2 | cmd3 -EOO - -: log -: -$* <>EOO -cmd1 || cmd2&&cmd3 -EOI -cmd1 || cmd2 && cmd3 -EOO - -: pipe-log -: -$* <>EOO -cmd1 | cmd2 && cmd3 | cmd4 -EOI -cmd1 | cmd2 && cmd3 | cmd4 -EOO - -: exit -: -$* <>EOO -cmd1|cmd2==1&&cmd3!=0|cmd4 -EOI -cmd1 | cmd2 == 1 && cmd3 != 0 | cmd4 -EOO - -: here-doc -: -$* <>EOO -cmd1 <>EOO2 && cmd3 <&1 | cmd4 2>>EOE4 >>EOO4 -input -one -EOI1 -ouput -two -EOO2 -input -three -EOI3 -error -four -EOE4 -output -four -EOO4 -EOI -cmd1 <>EOO2 && cmd3 <&1 | cmd4 >>EOO4 2>>EOE4 -input -one -EOI1 -ouput -two -EOO2 -input -three -EOI3 -output -four -EOO4 -error -four -EOE4 -EOO - -: leading -: -$* <>EOE != 0 -| cmd -EOI -testscript:1:1: error: missing program -EOE - -: trailing -: -$* <>EOE != 0 -cmd && -EOI -testscript:1:7: error: missing program -EOE - -: redirected -: -{ - : input - : - { - : first - : - $* <>EOO - cmd1 >EOE != 0 - cmd1 | cmd2 >EOO - cmd1 | cmd2 >foo - EOI - cmd1 | cmd2 >foo - EOO - - : non-last - : - $* <>EOE != 0 - cmd1 >foo | cmd2 - EOI - testscript:1:11: error: stdout is both redirected and piped - EOE - } -} diff --git a/unit-tests/test/script/parser/pipe-expr.testscript b/unit-tests/test/script/parser/pipe-expr.testscript new file mode 100644 index 0000000..7086181 --- /dev/null +++ b/unit-tests/test/script/parser/pipe-expr.testscript @@ -0,0 +1,133 @@ +# file : unit-tests/test/script/parser/pipe-expr.testscript +# copyright : Copyright (c) 2014-2018 Code Synthesis Ltd +# license : MIT; see accompanying LICENSE file + +: pipe +: +$* <>EOO +cmd1 | cmd2|cmd3 +EOI +cmd1 | cmd2 | cmd3 +EOO + +: log +: +$* <>EOO +cmd1 || cmd2&&cmd3 +EOI +cmd1 || cmd2 && cmd3 +EOO + +: pipe-log +: +$* <>EOO +cmd1 | cmd2 && cmd3 | cmd4 +EOI +cmd1 | cmd2 && cmd3 | cmd4 +EOO + +: exit +: +$* <>EOO +cmd1|cmd2==1&&cmd3!=0|cmd4 +EOI +cmd1 | cmd2 == 1 && cmd3 != 0 | cmd4 +EOO + +: here-doc +: +$* <>EOO +cmd1 <>EOO2 && cmd3 <&1 | cmd4 2>>EOE4 >>EOO4 +input +one +EOI1 +ouput +two +EOO2 +input +three +EOI3 +error +four +EOE4 +output +four +EOO4 +EOI +cmd1 <>EOO2 && cmd3 <&1 | cmd4 >>EOO4 2>>EOE4 +input +one +EOI1 +ouput +two +EOO2 +input +three +EOI3 +output +four +EOO4 +error +four +EOE4 +EOO + +: leading +: +$* <>EOE != 0 +| cmd +EOI +testscript:1:1: error: missing program +EOE + +: trailing +: +$* <>EOE != 0 +cmd && +EOI +testscript:1:7: error: missing program +EOE + +: redirected +: +{ + : input + : + { + : first + : + $* <>EOO + cmd1 >EOE != 0 + cmd1 | cmd2 >EOO + cmd1 | cmd2 >foo + EOI + cmd1 | cmd2 >foo + EOO + + : non-last + : + $* <>EOE != 0 + cmd1 >foo | cmd2 + EOI + testscript:1:11: error: stdout is both redirected and piped + EOE + } +} diff --git a/unit-tests/test/script/parser/pre-parse.test b/unit-tests/test/script/parser/pre-parse.test deleted file mode 100644 index b1f4209..0000000 --- a/unit-tests/test/script/parser/pre-parse.test +++ /dev/null @@ -1,23 +0,0 @@ -# file : unit-tests/test/script/parser/pre-parse.test -# copyright : Copyright (c) 2014-2018 Code Synthesis Ltd -# license : MIT; see accompanying LICENSE file - -: attribute -: -{ - : pair - : - $* <>EOE != 0 - x = [foo=bar] - EOI - testscript:1:5: error: unknown value attribute foo=bar - EOE - - : pair-empty - : - $* <>EOE != 0 - x = [foo=] - EOI - testscript:1:5: error: unknown value attribute foo - EOE -} diff --git a/unit-tests/test/script/parser/pre-parse.testscript b/unit-tests/test/script/parser/pre-parse.testscript new file mode 100644 index 0000000..d37f972 --- /dev/null +++ b/unit-tests/test/script/parser/pre-parse.testscript @@ -0,0 +1,23 @@ +# file : unit-tests/test/script/parser/pre-parse.testscript +# copyright : Copyright (c) 2014-2018 Code Synthesis Ltd +# license : MIT; see accompanying LICENSE file + +: attribute +: +{ + : pair + : + $* <>EOE != 0 + x = [foo=bar] + EOI + testscript:1:5: error: unknown value attribute foo=bar + EOE + + : pair-empty + : + $* <>EOE != 0 + x = [foo=] + EOI + testscript:1:5: error: unknown value attribute foo + EOE +} diff --git a/unit-tests/test/script/parser/redirect.test b/unit-tests/test/script/parser/redirect.test deleted file mode 100644 index 766d6cc..0000000 --- a/unit-tests/test/script/parser/redirect.test +++ /dev/null @@ -1,356 +0,0 @@ -# file : unit-tests/test/script/parser/redirect.test -# copyright : Copyright (c) 2014-2018 Code Synthesis Ltd -# license : MIT; see accompanying LICENSE file - -# @@ Add tests for redirects other than trace, here-*, file and merge. -# @@ Does it make sense to split into separate files - one per redirect type? -# - -: trace -: -{ - $* <'cmd >!' >'cmd >!' : out - $* <'cmd 2>!' >'cmd 2>!' : err -} - -: str -: -{ - : literal - : - { - : portable-path - : - $* <>EOO - cmd /bar 2>/baz - EOI - cmd /bar 2>/baz - EOO - } - - : regex - : - { - : portable-path - : - $* <>EOO - cmd >/~%foo% 2>/~%bar% - EOI - cmd >/~%foo% 2>/~%bar% - EOO - } -} - -: doc -: -{ - : literal - : - { - : portable-path - : - $* <>EOO - cmd </EOO_ 2>/EOE_ - foo - EOI_ - bar - EOO_ - baz - EOE_ - EOI - cmd </EOO_ 2>/EOE_ - foo - EOI_ - bar - EOO_ - baz - EOE_ - EOO - - : sharing - : - { - : in-out - : - $* <>EOO - cmd <<:/EOF >>:/EOF - foo - EOF - EOI - cmd <<:/EOF >>:/EOF - foo - EOF - EOO - - : different - : - { - : modifiers - : - $* <>EOE != 0 - cmd <<:/EOF >>:EOF - foo - EOF - EOI - testscript:1:16: error: different modifiers for shared here-document 'EOF' - EOE - - : quoting - : - $* <>EOE != 0 - cmd <>"EOF" - foo - EOF - EOI - testscript:1:13: error: different quoting for shared here-document 'EOF' - EOE - } - } - } - - : regex - : - { - : portable-path - : - $* <>EOO - cmd >/~%EOF% 2>/~%EOE% - foo - EOF - bar - EOE - EOI - cmd >/~%EOF% 2>/~%EOE% - foo - EOF - bar - EOE - EOO - - : sharing - : - { - : in-out - : - $* <>EOO - cmd >>~/EOF/ 2>>~/EOF/ - foo - EOF - EOI - cmd >>~/EOF/ 2>>~/EOF/ - foo - EOF - EOO - - : different - : - { - : introducers - : - $* <>EOE != 0 - cmd >>~/EOF/ 2>>~%EOF% - foo - EOF - EOI - testscript:1:18: error: different introducers for shared here-document regex 'EOF' - EOE - - : flags - : - $* <>EOE != 0 - cmd >>~/EOF/ 2>>~/EOF/i - foo - EOF - EOI - testscript:1:18: error: different global flags for shared here-document regex 'EOF' - EOE - } - } - } -} - -: file -: -{ - : cmp - : - $* <>EOO - cmd 0<<>>b 2>>>c - EOI - cmd <<>>b 2>>>c - EOO - - : write - : - $* <>EOO - cmd 1>=b 2>+c - EOI - cmd >=b 2>+c - EOO - - : quote - : - $* <>EOO - cmd 0<<<"a f" 1>="b f" 2>+"c f" - EOI - cmd <<<'a f' >='b f' 2>+'c f' - EOO - - : in - : - { - : missed - : - $* <>EOE !=0 - cmd <<< - EOI - testscript:1:8: error: missing stdin file - EOE - - : empty - : - $* <>EOE !=0 - cmd <<<"" - EOI - testscript:1:8: error: empty stdin redirect path - EOE - } - - : out - : - { - : missed - : - $* <>EOE !=0 - cmd >= - EOI - testscript:1:7: error: missing stdout file - EOE - - : empty - : - $* <>EOE !=0 - cmd >="" - EOI - testscript:1:7: error: empty stdout redirect path - EOE - } - - : err - : - { - : missed - : - $* <>EOE !=0 - cmd 2>= - EOI - testscript:1:8: error: missing stderr file - EOE - - : empty - : - $* <>EOE !=0 - cmd 2>="" - EOI - testscript:1:8: error: empty stderr redirect path - EOE - } -} - -: merge -{ - : out - : - { - : err - : - $* <>EOO - cmd 1>&2 - EOI - cmd >&2 - EOO - - : no-mutual - : - $* <>EOO - cmd 1>&2 2>&1 2>a - EOI - cmd >&2 2>a - EOO - - : not-descriptor - : - $* <>EOE != 0 - cmd 1>&a - EOI - testscript:1:8: error: stdout merge redirect file descriptor must be 2 - EOE - - : self - : - $* <>EOE != 0 - cmd 1>&1 - EOI - testscript:1:8: error: stdout merge redirect file descriptor must be 2 - EOE - - : missed - : - $* <>EOE != 0 - cmd 1>& - EOI - testscript:1:8: error: missing stdout file descriptor - EOE - } - - : err - { - : out - : - $* <>EOO - cmd 2>&1 - EOI - cmd 2>&1 - EOO - - : no-mutual - : - $* <>EOO - cmd 1>&2 2>&1 >a - EOI - cmd >a 2>&1 - EOO - - : not-descriptor - : - $* <>EOE != 0 - cmd 2>&a - EOI - testscript:1:8: error: stderr merge redirect file descriptor must be 1 - EOE - - : self - : - $* <>EOE != 0 - cmd 2>&2 - EOI - testscript:1:8: error: stderr merge redirect file descriptor must be 1 - EOE - - : missed - : - $* <>EOE != 0 - cmd 2>& - EOI - testscript:1:8: error: missing stderr file descriptor - EOE - } - - : mutual - : - $* <>EOE != 0 - cmd 1>&2 2>&1 - EOI - testscript:1:14: error: stdout and stderr redirected to each other - EOE -} diff --git a/unit-tests/test/script/parser/redirect.testscript b/unit-tests/test/script/parser/redirect.testscript new file mode 100644 index 0000000..4001a3b --- /dev/null +++ b/unit-tests/test/script/parser/redirect.testscript @@ -0,0 +1,356 @@ +# file : unit-tests/test/script/parser/redirect.testscript +# copyright : Copyright (c) 2014-2018 Code Synthesis Ltd +# license : MIT; see accompanying LICENSE file + +# @@ Add tests for redirects other than trace, here-*, file and merge. +# @@ Does it make sense to split into separate files - one per redirect type? +# + +: trace +: +{ + $* <'cmd >!' >'cmd >!' : out + $* <'cmd 2>!' >'cmd 2>!' : err +} + +: str +: +{ + : literal + : + { + : portable-path + : + $* <>EOO + cmd /bar 2>/baz + EOI + cmd /bar 2>/baz + EOO + } + + : regex + : + { + : portable-path + : + $* <>EOO + cmd >/~%foo% 2>/~%bar% + EOI + cmd >/~%foo% 2>/~%bar% + EOO + } +} + +: doc +: +{ + : literal + : + { + : portable-path + : + $* <>EOO + cmd </EOO_ 2>/EOE_ + foo + EOI_ + bar + EOO_ + baz + EOE_ + EOI + cmd </EOO_ 2>/EOE_ + foo + EOI_ + bar + EOO_ + baz + EOE_ + EOO + + : sharing + : + { + : in-out + : + $* <>EOO + cmd <<:/EOF >>:/EOF + foo + EOF + EOI + cmd <<:/EOF >>:/EOF + foo + EOF + EOO + + : different + : + { + : modifiers + : + $* <>EOE != 0 + cmd <<:/EOF >>:EOF + foo + EOF + EOI + testscript:1:16: error: different modifiers for shared here-document 'EOF' + EOE + + : quoting + : + $* <>EOE != 0 + cmd <>"EOF" + foo + EOF + EOI + testscript:1:13: error: different quoting for shared here-document 'EOF' + EOE + } + } + } + + : regex + : + { + : portable-path + : + $* <>EOO + cmd >/~%EOF% 2>/~%EOE% + foo + EOF + bar + EOE + EOI + cmd >/~%EOF% 2>/~%EOE% + foo + EOF + bar + EOE + EOO + + : sharing + : + { + : in-out + : + $* <>EOO + cmd >>~/EOF/ 2>>~/EOF/ + foo + EOF + EOI + cmd >>~/EOF/ 2>>~/EOF/ + foo + EOF + EOO + + : different + : + { + : introducers + : + $* <>EOE != 0 + cmd >>~/EOF/ 2>>~%EOF% + foo + EOF + EOI + testscript:1:18: error: different introducers for shared here-document regex 'EOF' + EOE + + : flags + : + $* <>EOE != 0 + cmd >>~/EOF/ 2>>~/EOF/i + foo + EOF + EOI + testscript:1:18: error: different global flags for shared here-document regex 'EOF' + EOE + } + } + } +} + +: file +: +{ + : cmp + : + $* <>EOO + cmd 0<<>>b 2>>>c + EOI + cmd <<>>b 2>>>c + EOO + + : write + : + $* <>EOO + cmd 1>=b 2>+c + EOI + cmd >=b 2>+c + EOO + + : quote + : + $* <>EOO + cmd 0<<<"a f" 1>="b f" 2>+"c f" + EOI + cmd <<<'a f' >='b f' 2>+'c f' + EOO + + : in + : + { + : missed + : + $* <>EOE !=0 + cmd <<< + EOI + testscript:1:8: error: missing stdin file + EOE + + : empty + : + $* <>EOE !=0 + cmd <<<"" + EOI + testscript:1:8: error: empty stdin redirect path + EOE + } + + : out + : + { + : missed + : + $* <>EOE !=0 + cmd >= + EOI + testscript:1:7: error: missing stdout file + EOE + + : empty + : + $* <>EOE !=0 + cmd >="" + EOI + testscript:1:7: error: empty stdout redirect path + EOE + } + + : err + : + { + : missed + : + $* <>EOE !=0 + cmd 2>= + EOI + testscript:1:8: error: missing stderr file + EOE + + : empty + : + $* <>EOE !=0 + cmd 2>="" + EOI + testscript:1:8: error: empty stderr redirect path + EOE + } +} + +: merge +{ + : out + : + { + : err + : + $* <>EOO + cmd 1>&2 + EOI + cmd >&2 + EOO + + : no-mutual + : + $* <>EOO + cmd 1>&2 2>&1 2>a + EOI + cmd >&2 2>a + EOO + + : not-descriptor + : + $* <>EOE != 0 + cmd 1>&a + EOI + testscript:1:8: error: stdout merge redirect file descriptor must be 2 + EOE + + : self + : + $* <>EOE != 0 + cmd 1>&1 + EOI + testscript:1:8: error: stdout merge redirect file descriptor must be 2 + EOE + + : missed + : + $* <>EOE != 0 + cmd 1>& + EOI + testscript:1:8: error: missing stdout file descriptor + EOE + } + + : err + { + : out + : + $* <>EOO + cmd 2>&1 + EOI + cmd 2>&1 + EOO + + : no-mutual + : + $* <>EOO + cmd 1>&2 2>&1 >a + EOI + cmd >a 2>&1 + EOO + + : not-descriptor + : + $* <>EOE != 0 + cmd 2>&a + EOI + testscript:1:8: error: stderr merge redirect file descriptor must be 1 + EOE + + : self + : + $* <>EOE != 0 + cmd 2>&2 + EOI + testscript:1:8: error: stderr merge redirect file descriptor must be 1 + EOE + + : missed + : + $* <>EOE != 0 + cmd 2>& + EOI + testscript:1:8: error: missing stderr file descriptor + EOE + } + + : mutual + : + $* <>EOE != 0 + cmd 1>&2 2>&1 + EOI + testscript:1:14: error: stdout and stderr redirected to each other + EOE +} diff --git a/unit-tests/test/script/parser/regex.test b/unit-tests/test/script/parser/regex.test deleted file mode 100644 index d8ebb68..0000000 --- a/unit-tests/test/script/parser/regex.test +++ /dev/null @@ -1,223 +0,0 @@ -# file : unit-tests/test/script/parser/regex.test -# copyright : Copyright (c) 2014-2018 Code Synthesis Ltd -# license : MIT; see accompanying LICENSE file - -: here-string -: -{ - : stdout - : - { - : missed - : - $* <'cmd >~' 2>>EOE != 0 - testscript:1:7: error: missing stdout here-string regex - EOE - - : no-introducer - : - $* <'cmd >~""' 2>>EOE != 0 - testscript:1:7: error: no introducer character in stdout regex redirect - EOE - - : no-term-introducer - : - $* <'cmd >~/' 2>>EOE != 0 - testscript:1:7: error: no closing introducer character in stdout regex redirect - EOE - - : portable-path-introducer - : - $* <'cmd >/~/foo/' 2>>EOE != 0 - testscript:1:8: error: portable path modifier and '/' introducer in stdout regex redirect - EOE - - : empty - : - $* <'cmd >~//' 2>>EOE != 0 - testscript:1:7: error: stdout regex redirect is empty - EOE - - : no-flags - : - $* <'cmd >~/fo*/' >'cmd >~/fo*/' - - : idot - : - $* <'cmd >~/fo*/d' >'cmd >~/fo*/d' - - : icase - : - $* <'cmd >~/fo*/i' >'cmd >~/fo*/i' - - : invalid-flags1 - : - $* <'cmd >~/foo/z' 2>>EOE != 0 - testscript:1:7: error: junk at the end of stdout regex redirect - EOE - - : invalid-flags2 - : - $* <'cmd >~/foo/iz' 2>>EOE != 0 - testscript:1:7: error: junk at the end of stdout regex redirect - EOE - - : no-newline - : - $* <'cmd >:~/fo*/' >'cmd >:~/fo*/' - } - - : stderr - : - { - : missed - : - $* <'cmd 2>~' 2>>EOE != 0 - testscript:1:8: error: missing stderr here-string regex - EOE - - : no-introducer - : - : Note that there is no need to reproduce all the errors as for stdout. - : All we need is to make sure that the proper description is passed to - : the parse_regex() function. - : - $* <'cmd 2>~""' 2>>EOE != 0 - testscript:1:8: error: no introducer character in stderr regex redirect - EOE - } - - : modifier-last - : - $* <'cmd >~/x' 2>>EOE != 0 - testscript:1:7: error: no closing introducer character in stdout regex redirect - EOE -} - -: here-doc -: -{ - : stdout - : - { - : missed - : - $* <'cmd >>~' 2>>EOE != 0 - testscript:1:8: error: expected here-document regex end marker - EOE - - : portable-path-introducer - : - $* <>EOE != 0 - cmd >>/~/EOO/ - foo - EOO - EOI - testscript:1:5: error: portable path modifier and '/' introducer in here-document regex end marker - EOE - - : unterminated-line-char - : - $* <>EOE != 0 - cmd >>~/EOO/ - / - EOO - EOI - testscript:2:1: error: no syntax line characters - EOE - - : empty - : - $* <>EOE != 0 - cmd >>:~/EOO/ - EOO - EOI - testscript:2:1: error: empty here-document regex - EOE - - : no-flags - : - $* <>EOO - cmd 2>>~/EOE/ - foo - /? - /foo/ - /foo/* - /foo/i - /foo/i* - - // - //* - EOE - EOI - cmd 2>>~/EOE/ - foo - /? - /foo/ - /foo/* - /foo/i - /foo/i* - - // - //* - EOE - EOO - - : no-newline - : - $* <'cmd >:~/fo*/' >'cmd >:~/fo*/' - $* <>EOO - cmd 2>>:~/EOE/ - foo - EOE - EOI - cmd 2>>:~/EOE/ - foo - EOE - EOO - - : end-marker-restore - : - { - : idot - : - $* <>EOO - cmd 2>>~/EOE/d - foo - EOE - EOI - cmd 2>>~/EOE/d - foo - EOE - EOO - - : icase - : - $* <>EOO - cmd 2>>~/EOE/i - foo - EOE - EOI - cmd 2>>~/EOE/i - foo - EOE - EOO - } - } - - : stderr - : - { - : missed - : - $* <'cmd 2>>~' 2>>EOE != 0 - testscript:1:9: error: expected here-document regex end marker - EOE - } - - : modifier-last - : - $* <'cmd >>~:/FOO/' 2>>EOE != 0 - testscript:1:8: error: expected here-document regex end marker - EOE -} diff --git a/unit-tests/test/script/parser/regex.testscript b/unit-tests/test/script/parser/regex.testscript new file mode 100644 index 0000000..67832eb --- /dev/null +++ b/unit-tests/test/script/parser/regex.testscript @@ -0,0 +1,223 @@ +# file : unit-tests/test/script/parser/regex.testscript +# copyright : Copyright (c) 2014-2018 Code Synthesis Ltd +# license : MIT; see accompanying LICENSE file + +: here-string +: +{ + : stdout + : + { + : missed + : + $* <'cmd >~' 2>>EOE != 0 + testscript:1:7: error: missing stdout here-string regex + EOE + + : no-introducer + : + $* <'cmd >~""' 2>>EOE != 0 + testscript:1:7: error: no introducer character in stdout regex redirect + EOE + + : no-term-introducer + : + $* <'cmd >~/' 2>>EOE != 0 + testscript:1:7: error: no closing introducer character in stdout regex redirect + EOE + + : portable-path-introducer + : + $* <'cmd >/~/foo/' 2>>EOE != 0 + testscript:1:8: error: portable path modifier and '/' introducer in stdout regex redirect + EOE + + : empty + : + $* <'cmd >~//' 2>>EOE != 0 + testscript:1:7: error: stdout regex redirect is empty + EOE + + : no-flags + : + $* <'cmd >~/fo*/' >'cmd >~/fo*/' + + : idot + : + $* <'cmd >~/fo*/d' >'cmd >~/fo*/d' + + : icase + : + $* <'cmd >~/fo*/i' >'cmd >~/fo*/i' + + : invalid-flags1 + : + $* <'cmd >~/foo/z' 2>>EOE != 0 + testscript:1:7: error: junk at the end of stdout regex redirect + EOE + + : invalid-flags2 + : + $* <'cmd >~/foo/iz' 2>>EOE != 0 + testscript:1:7: error: junk at the end of stdout regex redirect + EOE + + : no-newline + : + $* <'cmd >:~/fo*/' >'cmd >:~/fo*/' + } + + : stderr + : + { + : missed + : + $* <'cmd 2>~' 2>>EOE != 0 + testscript:1:8: error: missing stderr here-string regex + EOE + + : no-introducer + : + : Note that there is no need to reproduce all the errors as for stdout. + : All we need is to make sure that the proper description is passed to + : the parse_regex() function. + : + $* <'cmd 2>~""' 2>>EOE != 0 + testscript:1:8: error: no introducer character in stderr regex redirect + EOE + } + + : modifier-last + : + $* <'cmd >~/x' 2>>EOE != 0 + testscript:1:7: error: no closing introducer character in stdout regex redirect + EOE +} + +: here-doc +: +{ + : stdout + : + { + : missed + : + $* <'cmd >>~' 2>>EOE != 0 + testscript:1:8: error: expected here-document regex end marker + EOE + + : portable-path-introducer + : + $* <>EOE != 0 + cmd >>/~/EOO/ + foo + EOO + EOI + testscript:1:5: error: portable path modifier and '/' introducer in here-document regex end marker + EOE + + : unterminated-line-char + : + $* <>EOE != 0 + cmd >>~/EOO/ + / + EOO + EOI + testscript:2:1: error: no syntax line characters + EOE + + : empty + : + $* <>EOE != 0 + cmd >>:~/EOO/ + EOO + EOI + testscript:2:1: error: empty here-document regex + EOE + + : no-flags + : + $* <>EOO + cmd 2>>~/EOE/ + foo + /? + /foo/ + /foo/* + /foo/i + /foo/i* + + // + //* + EOE + EOI + cmd 2>>~/EOE/ + foo + /? + /foo/ + /foo/* + /foo/i + /foo/i* + + // + //* + EOE + EOO + + : no-newline + : + $* <'cmd >:~/fo*/' >'cmd >:~/fo*/' + $* <>EOO + cmd 2>>:~/EOE/ + foo + EOE + EOI + cmd 2>>:~/EOE/ + foo + EOE + EOO + + : end-marker-restore + : + { + : idot + : + $* <>EOO + cmd 2>>~/EOE/d + foo + EOE + EOI + cmd 2>>~/EOE/d + foo + EOE + EOO + + : icase + : + $* <>EOO + cmd 2>>~/EOE/i + foo + EOE + EOI + cmd 2>>~/EOE/i + foo + EOE + EOO + } + } + + : stderr + : + { + : missed + : + $* <'cmd 2>>~' 2>>EOE != 0 + testscript:1:9: error: expected here-document regex end marker + EOE + } + + : modifier-last + : + $* <'cmd >>~:/FOO/' 2>>EOE != 0 + testscript:1:8: error: expected here-document regex end marker + EOE +} diff --git a/unit-tests/test/script/parser/scope-if.test b/unit-tests/test/script/parser/scope-if.test deleted file mode 100644 index c0cf6fb..0000000 --- a/unit-tests/test/script/parser/scope-if.test +++ /dev/null @@ -1,554 +0,0 @@ -# file : unit-tests/test/script/parser/scope-if.test -# copyright : Copyright (c) 2014-2018 Code Synthesis Ltd -# license : MIT; see accompanying LICENSE file - -: if -: -{ - : true - : - $* -s <>EOO - if true foo - { - cmd - } - EOI - { - ? true foo - { - cmd - } - } - EOO - - : false - : - $* -s <>EOO - if false foo - { - cmd - } - EOI - { - ? false foo - } - EOO - - : not-true - : - $* -s <>EOO - if! true - { - cmd - } - EOI - { - ? true - } - EOO - - : not-false - : - $* -s <>EOO - if! false - { - cmd - } - EOI - { - ? false - { - cmd - } - } - EOO - - : eos-inside - : - $* <>EOE != 0 - if - { - EOI - testscript:3:1: error: expected '}' at the end of the scope - EOE - -} - -: elif -: -{ - : true - : - $* -s <>EOO - if false - { - cmd - } - elif true - { - cmd1 - } - EOI - { - ? false - ? true - { - cmd1 - } - } - EOO - - : false - : - $* -s <>EOO - if false - { - cmd - } - elif false - { - cmd - } - EOI - { - ? false - ? false - } - EOO - - : not-false - : - $* -s <>EOO - if false - { - cmd - } - elif! false - { - cmd1 - } - EOI - { - ? false - ? false - { - cmd1 - } - } - EOO - - : not-true - : - $* -s <>EOO - if false - { - cmd - } - elif! true - { - cmd - } - EOI - { - ? false - ? true - } - EOO - - : after-else - : - $* <>EOE != 0 - if false - { - cmd - } - else - { - cmd - } - elif true - { - cmd - } - EOI - testscript:9:1: error: 'elif' after 'else' - EOE -} - -: else -: -{ - : true - : - $* -s <>EOO - if false - { - cmd - } - else - { - cmd1 - } - EOI - { - ? false - { - cmd1 - } - } - EOO - - : false - : - $* -s <>EOO - if true - { - cmd1 - } - else - { - cmd - } - EOI - { - ? true - { - cmd1 - } - } - EOO - - : chain - : - $* -s <>EOO - if false - { - cmd - } - elif false - { - cmd - cmd - } - elif false - { - cmd - } - elif true - { - cmd1 - cmd2 - } - elif false - { - cmd - } - else - { - cmd - cmd - } - EOI - { - ? false - ? false - ? false - ? true - { - { - cmd1 - } - { - cmd2 - } - } - } - EOO - - : scope-expected - : - $* <>EOE != 0 - if - { - cmd - } - else - cmd - EOI - testscript:5:1: error: expected scope after 'else' - EOE - - : after-else - : - $* <>EOE != 0 - if false - { - cmd - } - else - { - cmd - } - else - { - cmd - } - EOI - testscript:9:1: error: 'else' after 'else' - EOE -} - -: nested -: -{ - : take - : - $* -s <>EOO - if true - { - cmd1 - if false - { - cmd - } - elif false - { - if true - { - cmd - } - } - else - { - cmd2 - } - cmd3 - } - EOI - { - ? true - { - { - cmd1 - } - ? false - ? false - { - { - cmd2 - } - } - { - cmd3 - } - } - } - EOO - - : skip - : - $* -s <>EOO - if false - { - cmd1 - if false - { - cmd - } - elif false - { - if true - { - cmd - } - } - else - { - cmd2 - } - cmd3 - } - else - { - cmd - } - EOI - { - ? false - { - { - cmd - } - } - } - EOO -} - -: demote -: -{ - : group - : Chain remains a group - : - $* -s <>EOO - if false - { - cmd - } - elif true - { - cmd1 - cmd2 - } - else - { - cmd - } - EOI - { - ? false - ? true - { - { - cmd1 - } - { - cmd2 - } - } - } - EOO - - : test - : Chain demoted to test - : - $* -s <>EOO - if false - { - cmd - } - elif true - { - cmd1 - } - else - { - cmd - } - EOI - { - ? false - ? true - { - cmd1 - } - } - EOO -} - -: line-index -: Make sure command line index spans setup/if/teardown -: -$* -s -l <>EOO -+setup # 1 - -if false one # 2 -{ - cmd -} -elif false two # 3 -{ - cmd -} -elif true # 4 -{ - cmd1 -} -elif false # 5 -{ - cmd -} -else -{ - cmd -} - -if false one # 6 -{ - cmd -} -elif false two # 7 -{ - cmd -} -else -{ - cmd2 -} - --tdown # 8 -EOI -{ - +setup # 1 - ? false one # 2 - ? false two # 3 - ? true # 4 - { - cmd1 # 0 - } - ? false one # 6 - ? false two # 7 - { - cmd2 # 0 - } - -tdown # 8 -} -EOO - -: scope-comman-if -: -$* -s <>EOO -if true -{ - cmd -} -if true - cmd1 - cmd2 -end -EOI -{ - ? true - { - cmd - } - { - ? true - cmd1 - cmd2 - } -} -EOO - -: shared-id-desc -: -$* -s -i <>EOO -: test summary -: -if false -{ - cmd -} -else -{ - cmd1 -} -EOI -{ - ? false - : sm:test summary - { # 3 - cmd1 - } -} -EOO diff --git a/unit-tests/test/script/parser/scope-if.testscript b/unit-tests/test/script/parser/scope-if.testscript new file mode 100644 index 0000000..c76fab7 --- /dev/null +++ b/unit-tests/test/script/parser/scope-if.testscript @@ -0,0 +1,554 @@ +# file : unit-tests/test/script/parser/scope-if.testscript +# copyright : Copyright (c) 2014-2018 Code Synthesis Ltd +# license : MIT; see accompanying LICENSE file + +: if +: +{ + : true + : + $* -s <>EOO + if true foo + { + cmd + } + EOI + { + ? true foo + { + cmd + } + } + EOO + + : false + : + $* -s <>EOO + if false foo + { + cmd + } + EOI + { + ? false foo + } + EOO + + : not-true + : + $* -s <>EOO + if! true + { + cmd + } + EOI + { + ? true + } + EOO + + : not-false + : + $* -s <>EOO + if! false + { + cmd + } + EOI + { + ? false + { + cmd + } + } + EOO + + : eos-inside + : + $* <>EOE != 0 + if + { + EOI + testscript:3:1: error: expected '}' at the end of the scope + EOE + +} + +: elif +: +{ + : true + : + $* -s <>EOO + if false + { + cmd + } + elif true + { + cmd1 + } + EOI + { + ? false + ? true + { + cmd1 + } + } + EOO + + : false + : + $* -s <>EOO + if false + { + cmd + } + elif false + { + cmd + } + EOI + { + ? false + ? false + } + EOO + + : not-false + : + $* -s <>EOO + if false + { + cmd + } + elif! false + { + cmd1 + } + EOI + { + ? false + ? false + { + cmd1 + } + } + EOO + + : not-true + : + $* -s <>EOO + if false + { + cmd + } + elif! true + { + cmd + } + EOI + { + ? false + ? true + } + EOO + + : after-else + : + $* <>EOE != 0 + if false + { + cmd + } + else + { + cmd + } + elif true + { + cmd + } + EOI + testscript:9:1: error: 'elif' after 'else' + EOE +} + +: else +: +{ + : true + : + $* -s <>EOO + if false + { + cmd + } + else + { + cmd1 + } + EOI + { + ? false + { + cmd1 + } + } + EOO + + : false + : + $* -s <>EOO + if true + { + cmd1 + } + else + { + cmd + } + EOI + { + ? true + { + cmd1 + } + } + EOO + + : chain + : + $* -s <>EOO + if false + { + cmd + } + elif false + { + cmd + cmd + } + elif false + { + cmd + } + elif true + { + cmd1 + cmd2 + } + elif false + { + cmd + } + else + { + cmd + cmd + } + EOI + { + ? false + ? false + ? false + ? true + { + { + cmd1 + } + { + cmd2 + } + } + } + EOO + + : scope-expected + : + $* <>EOE != 0 + if + { + cmd + } + else + cmd + EOI + testscript:5:1: error: expected scope after 'else' + EOE + + : after-else + : + $* <>EOE != 0 + if false + { + cmd + } + else + { + cmd + } + else + { + cmd + } + EOI + testscript:9:1: error: 'else' after 'else' + EOE +} + +: nested +: +{ + : take + : + $* -s <>EOO + if true + { + cmd1 + if false + { + cmd + } + elif false + { + if true + { + cmd + } + } + else + { + cmd2 + } + cmd3 + } + EOI + { + ? true + { + { + cmd1 + } + ? false + ? false + { + { + cmd2 + } + } + { + cmd3 + } + } + } + EOO + + : skip + : + $* -s <>EOO + if false + { + cmd1 + if false + { + cmd + } + elif false + { + if true + { + cmd + } + } + else + { + cmd2 + } + cmd3 + } + else + { + cmd + } + EOI + { + ? false + { + { + cmd + } + } + } + EOO +} + +: demote +: +{ + : group + : Chain remains a group + : + $* -s <>EOO + if false + { + cmd + } + elif true + { + cmd1 + cmd2 + } + else + { + cmd + } + EOI + { + ? false + ? true + { + { + cmd1 + } + { + cmd2 + } + } + } + EOO + + : test + : Chain demoted to test + : + $* -s <>EOO + if false + { + cmd + } + elif true + { + cmd1 + } + else + { + cmd + } + EOI + { + ? false + ? true + { + cmd1 + } + } + EOO +} + +: line-index +: Make sure command line index spans setup/if/teardown +: +$* -s -l <>EOO ++setup # 1 + +if false one # 2 +{ + cmd +} +elif false two # 3 +{ + cmd +} +elif true # 4 +{ + cmd1 +} +elif false # 5 +{ + cmd +} +else +{ + cmd +} + +if false one # 6 +{ + cmd +} +elif false two # 7 +{ + cmd +} +else +{ + cmd2 +} + +-tdown # 8 +EOI +{ + +setup # 1 + ? false one # 2 + ? false two # 3 + ? true # 4 + { + cmd1 # 0 + } + ? false one # 6 + ? false two # 7 + { + cmd2 # 0 + } + -tdown # 8 +} +EOO + +: scope-comman-if +: +$* -s <>EOO +if true +{ + cmd +} +if true + cmd1 + cmd2 +end +EOI +{ + ? true + { + cmd + } + { + ? true + cmd1 + cmd2 + } +} +EOO + +: shared-id-desc +: +$* -s -i <>EOO +: test summary +: +if false +{ + cmd +} +else +{ + cmd1 +} +EOI +{ + ? false + : sm:test summary + { # 3 + cmd1 + } +} +EOO diff --git a/unit-tests/test/script/parser/scope.test b/unit-tests/test/script/parser/scope.test deleted file mode 100644 index 21a6f50..0000000 --- a/unit-tests/test/script/parser/scope.test +++ /dev/null @@ -1,280 +0,0 @@ -# file : unit-tests/test/script/parser/scope.test -# copyright : Copyright (c) 2014-2018 Code Synthesis Ltd -# license : MIT; see accompanying LICENSE file - -$* testscript <'cmd $@' >"cmd 1" : id-testscript -$* foo.test <'cmd $@' >"cmd foo/1" : id - -: wd-testscript -: -$* testscript <'cmd "$~"' >~"%cmd '?.+[/\\\\]test-driver[/\\\\]1'?%" - -: wd -: -$* foo.test <'cmd "$~"' >~"%cmd '?.+[/\\\\]test-driver[/\\\\]foo[/\\\\]1'?%" - -: group -: -{ - : empty - : - $* -s <>EOO - { - cmd1 - cmd2 - } - EOI - { - { - { - cmd1 - } - { - cmd2 - } - } - } - EOO -} - -: test -: -{ - : explicit - : - { - : one-level - : - $* -s -i <>EOO - { - cmd - } - EOI - { - { # 1 - cmd - } - } - EOO - - : nested - : - $* -s -i <>EOO - { - { - cmd - } - } - EOI - { - { # 1 - cmd - } - } - EOO - - : var - : - $* -s -i <>EOO - { - x = abc - cmd $x - } - EOI - { - { # 1 - cmd abc - } - } - EOO - - : setup - : - $* -s -i <>EOO - { - x = abc - +setup - cmd $x - } - EOI - { - { # 1 - +setup - { # 1/4 - cmd abc - } - } - } - EOO - } - - : implicit - { - : one-cmd - : - $* -s <>EOO - cmd1 - EOI - { - { - cmd1 - } - } - EOO - - : two-cmd - : - $* -s <>EOO - cmd1; - cmd2 - EOI - { - { - cmd1 - cmd2 - } - } - EOO - - : three-cmd - : - $* -s <>EOO - cmd1; - cmd2; - cmd3 - EOI - { - { - cmd1 - cmd2 - cmd3 - } - } - EOO - - : var - : - $* -s <>EOO - cmd1; - x = abc; - cmd2 $x - EOI - { - { - cmd1 - cmd2 abc - } - } - EOO - - : var-first - : - $* -s <>EOO - x = abc; - cmd $x - EOI - { - { - cmd abc - } - } - EOO - - : var-setup-tdown - : - $* -s <>EOO - x = abc - cmd $x - y = 123 - EOI - { - { - cmd abc - } - } - EOO - - : after-tdown - : - $* <>EOE != 0 - cmd1 - x = abc - cmd2 - EOI - testscript:3:1: error: test after teardown - testscript:2:1: info: last teardown line appears here - EOE - } -} - -: expected -{ - : newline-lcbrace - : - $* <:"{x" 2>>EOE != 0 - testscript:1:2: error: expected newline after '{' - EOE - - : rcbrace - : - $* <"{" 2>>EOE != 0 - testscript:2:1: error: expected '}' at the end of the scope - EOE - - : line-rcbrace - : - $* <>EOE != 0 - { - cmd; - } - EOI - testscript:3:1: error: expected another line after ';' - EOE - - : newline-rcbrace - : - $* <<:EOI 2>>EOE != 0 - { - } - EOI - testscript:2:2: error: expected newline after '}' - EOE - - : line-eof - : - $* <>EOE != 0 - cmd; - EOI - testscript:2:1: error: expected another line after ';' - EOE - - : newline-cmd - : - $* <<:EOI 2>>EOE != 0 - cmd; - EOI - testscript:1:5: error: expected newline instead of - EOE - - : newline-var - : - $* <:"x = abc;" 2>>EOE != 0 - testscript:1:9: error: expected newline instead of - EOE -} diff --git a/unit-tests/test/script/parser/scope.testscript b/unit-tests/test/script/parser/scope.testscript new file mode 100644 index 0000000..721e455 --- /dev/null +++ b/unit-tests/test/script/parser/scope.testscript @@ -0,0 +1,280 @@ +# file : unit-tests/test/script/parser/scope.testscript +# copyright : Copyright (c) 2014-2018 Code Synthesis Ltd +# license : MIT; see accompanying LICENSE file + +$* testscript <'cmd $@' >"cmd 1" : id-testscript +$* foo.testscript <'cmd $@' >"cmd foo/1" : id + +: wd-testscript +: +$* testscript <'cmd "$~"' >~"%cmd '?.+[/\\\\]test-driver[/\\\\]1'?%" + +: wd +: +$* foo.testscript <'cmd "$~"' >~"%cmd '?.+[/\\\\]test-driver[/\\\\]foo[/\\\\]1'?%" + +: group +: +{ + : empty + : + $* -s <>EOO + { + cmd1 + cmd2 + } + EOI + { + { + { + cmd1 + } + { + cmd2 + } + } + } + EOO +} + +: test +: +{ + : explicit + : + { + : one-level + : + $* -s -i <>EOO + { + cmd + } + EOI + { + { # 1 + cmd + } + } + EOO + + : nested + : + $* -s -i <>EOO + { + { + cmd + } + } + EOI + { + { # 1 + cmd + } + } + EOO + + : var + : + $* -s -i <>EOO + { + x = abc + cmd $x + } + EOI + { + { # 1 + cmd abc + } + } + EOO + + : setup + : + $* -s -i <>EOO + { + x = abc + +setup + cmd $x + } + EOI + { + { # 1 + +setup + { # 1/4 + cmd abc + } + } + } + EOO + } + + : implicit + { + : one-cmd + : + $* -s <>EOO + cmd1 + EOI + { + { + cmd1 + } + } + EOO + + : two-cmd + : + $* -s <>EOO + cmd1; + cmd2 + EOI + { + { + cmd1 + cmd2 + } + } + EOO + + : three-cmd + : + $* -s <>EOO + cmd1; + cmd2; + cmd3 + EOI + { + { + cmd1 + cmd2 + cmd3 + } + } + EOO + + : var + : + $* -s <>EOO + cmd1; + x = abc; + cmd2 $x + EOI + { + { + cmd1 + cmd2 abc + } + } + EOO + + : var-first + : + $* -s <>EOO + x = abc; + cmd $x + EOI + { + { + cmd abc + } + } + EOO + + : var-setup-tdown + : + $* -s <>EOO + x = abc + cmd $x + y = 123 + EOI + { + { + cmd abc + } + } + EOO + + : after-tdown + : + $* <>EOE != 0 + cmd1 + x = abc + cmd2 + EOI + testscript:3:1: error: test after teardown + testscript:2:1: info: last teardown line appears here + EOE + } +} + +: expected +{ + : newline-lcbrace + : + $* <:"{x" 2>>EOE != 0 + testscript:1:2: error: expected newline after '{' + EOE + + : rcbrace + : + $* <"{" 2>>EOE != 0 + testscript:2:1: error: expected '}' at the end of the scope + EOE + + : line-rcbrace + : + $* <>EOE != 0 + { + cmd; + } + EOI + testscript:3:1: error: expected another line after ';' + EOE + + : newline-rcbrace + : + $* <<:EOI 2>>EOE != 0 + { + } + EOI + testscript:2:2: error: expected newline after '}' + EOE + + : line-eof + : + $* <>EOE != 0 + cmd; + EOI + testscript:2:1: error: expected another line after ';' + EOE + + : newline-cmd + : + $* <<:EOI 2>>EOE != 0 + cmd; + EOI + testscript:1:5: error: expected newline instead of + EOE + + : newline-var + : + $* <:"x = abc;" 2>>EOE != 0 + testscript:1:9: error: expected newline instead of + EOE +} diff --git a/unit-tests/test/script/parser/setup-teardown.test b/unit-tests/test/script/parser/setup-teardown.test deleted file mode 100644 index f9cbb04..0000000 --- a/unit-tests/test/script/parser/setup-teardown.test +++ /dev/null @@ -1,151 +0,0 @@ -# file : unit-tests/test/script/parser/setup-teardown.test -# copyright : Copyright (c) 2014-2018 Code Synthesis Ltd -# license : MIT; see accompanying LICENSE file - -: setup -: -{ - : followed - : - { - : semi - : - $* <"+cmd;" 2>>EOE != 0 - testscript:1:5: error: ';' after setup command - EOE - - : colon - : - $* <"+cmd:" 2>>EOE != 0 - testscript:1:5: error: ':' after setup command - EOE - } - - : after - : - { - : test - : - $* <>EOE != 0 - cmd - +cmd - EOI - testscript:2:1: error: setup command after tests - EOE - - : after-tdownt - : - $* <>EOE != 0 - -cmd - +cmd - EOI - testscript:2:1: error: setup command after teardown - EOE - } - - : in-test - : - $* <>EOE != 0 - cmd; - +cmd - EOI - testscript:2:1: error: setup command in test - EOE -} - -: tdown -: -{ - : followed - : - { - : semi - : - $* <"-cmd;" 2>>EOE != 0 - testscript:1:5: error: ';' after teardown command - EOE - - : colon - : - $* <"-cmd:" 2>>EOE != 0 - testscript:1:5: error: ':' after teardown command - EOE - } - - : in-test - : - $* <>EOE != 0 - cmd; - -cmd - EOI - testscript:2:1: error: teardown command in test - EOE -} - -: var -: -{ - : between-tests - : - $* <>EOE != 0 - cmd - x = y - cmd - EOI - testscript:3:1: error: test after teardown - testscript:2:1: info: last teardown line appears here - EOE - - : between-tests-scope - : - $* <>EOE != 0 - cmd - x = y - { - cmd - } - EOI - testscript:3:1: error: scope after teardown - testscript:2:1: info: last teardown line appears here - EOE - - : between-tests-command-if - : - $* <>EOE != 0 - cmd - x = y - if true - cmd - end - EOI - testscript:3:1: error: test after teardown - testscript:2:1: info: last teardown line appears here - EOE - - : between-tests-scope-if - : - $* <>EOE != 0 - cmd - x = y - if true - { - cmd - } - EOI - testscript:3:1: error: scope after teardown - testscript:2:1: info: last teardown line appears here - EOE - - : between-tests-variable-if - : - $* <>EOO - cmd - x = y - if true - y = x - end - EOI - cmd - ? true - EOO -} diff --git a/unit-tests/test/script/parser/setup-teardown.testscript b/unit-tests/test/script/parser/setup-teardown.testscript new file mode 100644 index 0000000..12fde8c --- /dev/null +++ b/unit-tests/test/script/parser/setup-teardown.testscript @@ -0,0 +1,151 @@ +# file : unit-tests/test/script/parser/setup-teardown.testscript +# copyright : Copyright (c) 2014-2018 Code Synthesis Ltd +# license : MIT; see accompanying LICENSE file + +: setup +: +{ + : followed + : + { + : semi + : + $* <"+cmd;" 2>>EOE != 0 + testscript:1:5: error: ';' after setup command + EOE + + : colon + : + $* <"+cmd:" 2>>EOE != 0 + testscript:1:5: error: ':' after setup command + EOE + } + + : after + : + { + : test + : + $* <>EOE != 0 + cmd + +cmd + EOI + testscript:2:1: error: setup command after tests + EOE + + : after-tdownt + : + $* <>EOE != 0 + -cmd + +cmd + EOI + testscript:2:1: error: setup command after teardown + EOE + } + + : in-test + : + $* <>EOE != 0 + cmd; + +cmd + EOI + testscript:2:1: error: setup command in test + EOE +} + +: tdown +: +{ + : followed + : + { + : semi + : + $* <"-cmd;" 2>>EOE != 0 + testscript:1:5: error: ';' after teardown command + EOE + + : colon + : + $* <"-cmd:" 2>>EOE != 0 + testscript:1:5: error: ':' after teardown command + EOE + } + + : in-test + : + $* <>EOE != 0 + cmd; + -cmd + EOI + testscript:2:1: error: teardown command in test + EOE +} + +: var +: +{ + : between-tests + : + $* <>EOE != 0 + cmd + x = y + cmd + EOI + testscript:3:1: error: test after teardown + testscript:2:1: info: last teardown line appears here + EOE + + : between-tests-scope + : + $* <>EOE != 0 + cmd + x = y + { + cmd + } + EOI + testscript:3:1: error: scope after teardown + testscript:2:1: info: last teardown line appears here + EOE + + : between-tests-command-if + : + $* <>EOE != 0 + cmd + x = y + if true + cmd + end + EOI + testscript:3:1: error: test after teardown + testscript:2:1: info: last teardown line appears here + EOE + + : between-tests-scope-if + : + $* <>EOE != 0 + cmd + x = y + if true + { + cmd + } + EOI + testscript:3:1: error: scope after teardown + testscript:2:1: info: last teardown line appears here + EOE + + : between-tests-variable-if + : + $* <>EOO + cmd + x = y + if true + y = x + end + EOI + cmd + ? true + EOO +} -- cgit v1.1