diff options
Diffstat (limited to 'unit-tests/test/script/lexer')
-rw-r--r-- | unit-tests/test/script/lexer/command-expansion.test | 360 | ||||
-rw-r--r-- | unit-tests/test/script/lexer/command-line.test | 311 | ||||
-rw-r--r-- | unit-tests/test/script/lexer/description-line.test | 20 | ||||
-rw-r--r-- | unit-tests/test/script/lexer/first-token.test | 52 | ||||
-rw-r--r-- | unit-tests/test/script/lexer/second-token.test | 36 | ||||
-rw-r--r-- | unit-tests/test/script/lexer/variable-line.test | 16 | ||||
-rw-r--r-- | unit-tests/test/script/lexer/variable.test | 102 |
7 files changed, 573 insertions, 324 deletions
diff --git a/unit-tests/test/script/lexer/command-expansion.test b/unit-tests/test/script/lexer/command-expansion.test index f113846..faae29d 100644 --- a/unit-tests/test/script/lexer/command-expansion.test +++ b/unit-tests/test/script/lexer/command-expansion.test @@ -1,134 +1,230 @@ +# file : unit-tests/test/script/lexer/command-expansion.test +# copyright : Copyright (c) 2014-2017 Code Synthesis Ltd +# license : MIT; see accompanying LICENSE file + test.arguments = command-expansion -$* <:"0<+" >>EOO # in-pass-redirect -'0' -<+ -EOO - -$* <:"0 <+" >>EOO # arg-in-pass-redirect -'0 ' -<+ -EOO - -$* <:"1>+" >>EOO # out-pass-redirect -'1' ->+ -EOO - -$* <:"1 >+" >>EOO # arg-out-pass-redirect -'1 ' ->+ -EOO - -$* <:"0<-" >>EOO # in-null-redirect -'0' -<- -EOO - -$* <:"0 <-" >>EOO # arg-in-null-redirect -'0 ' -<- -EOO - -$* <:"1>-" >>EOO # out-null-redirect -'1' ->- -EOO - -$* <:"1 >-" >>EOO # arg-out-null-redirect -'1 ' ->- -EOO - -$* <:"1>&2" >>EOO # merge-redirect -'1' ->& -'2' -EOO - -$* <:"1 >&2" >>EOO # arg-merge-redirect -'1 ' ->& -'2' -EOO - -$* <:"0<a b" >>EOO # in-str-redirect -'0' -< -'a b' -EOO - -$* <:"1>a b" >>EOO # out-str-redirect -'1' -> -'a b' -EOO - -$* <:"0<:a b" >>EOO # in-str-nn-redirect -'0' -<: -'a b' -EOO - -$* <:"1>:a b" >>EOO # out-str-nn-redirect -'1' ->: -'a b' -EOO - -$* <:"0<<E O I" >>EOO # in-doc-redirect -'0' -<< -'E O I' -EOO - -$* <:"1>>E O O" >>EOO # out-doc-redirect -'1' ->> -'E O O' -EOO - -$* <:"0<<:E O I" >>EOO # in-doc-nn-redirect -'0' -<<: -'E O I' -EOO - -$* <:"1>>:E O O" >>EOO # out-doc-nn-redirect -'1' ->>: -'E O O' -EOO - -$* <:"0<<<a b" >>EOO # in-file-redirect -'0' -<<< -'a b' -EOO - -$* <:"1>>>a b" >>EOO # out-file-redirect -'1' ->>> -'a b' -EOO - -$* <:"1>>>&a b" >>EOO # out-file-app-redirect -'1' ->>>& -'a b' -EOO - -$* <:"&file" >>EOO # cleanup-always -& -'file' -EOO - -$* <:"&?file" >>EOO # cleanup-maybe -&? -'file' -EOO - -$* <:"&!file" >>EOO # cleanup-never -&! -'file' -EOO +: 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 +} + +: merge-redirect +: +{ + : out + : + $* <:"1>&2" >>EOO + '1' + >& + '2' + EOO + + : arg-out + : + $* <:"1 >&2" >>EOO + '1 ' + >& + '2' + EOO +} + +: str-redirect +: +{ + : in + : + { + : newline + : + $* <:"0<a b" >>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<<E O I" >>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<<<a b" >>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 index 0040cfe..8a73b3d 100644 --- a/unit-tests/test/script/lexer/command-line.test +++ b/unit-tests/test/script/lexer/command-line.test @@ -1,134 +1,187 @@ +# file : unit-tests/test/script/lexer/command-line.test +# copyright : Copyright (c) 2014-2017 Code Synthesis Ltd +# license : MIT; see accompanying LICENSE file + test.arguments = command-line -$* <"cmd;" >>EOO # semi -'cmd' -; -<newline> -EOO - -$* <"cmd ;" >>EOO # semi-separated -'cmd' -; -<newline> -EOO - -$* <";" >>EOO # semi-only -; -<newline> -EOO - -$* <"cmd: dsc" >>EOO # colon -'cmd' +: semi +{ + : immediate + : + $* <"cmd;" >>EOO + 'cmd' + ; + <newline> + EOO + + : separated + : + $* <"cmd ;" >>EOO + 'cmd' + ; + <newline> + EOO + + : only + : + $* <";" >>EOO + ; + <newline> + EOO +} + +: colon : -'dsc' -<newline> -EOO - -$* <"cmd :dsc" >>EOO # colon-separated -'cmd' +{ + : immediate + : + $* <"cmd: dsc" >>EOO + 'cmd' + : + 'dsc' + <newline> + EOO + + : separated + : + $* <"cmd :dsc" >>EOO + 'cmd' + : + 'dsc' + <newline> + EOO + + : only + : + $* <":" >>EOO + : + <newline> + EOO +} + +: redirect : -'dsc' -<newline> -EOO - -$* <":" >>EOO # colon-only +{ + : pass + : + $* <"cmd <+ 1>+" >>EOO + 'cmd' + <+ + '1' + >+ + <newline> + EOO + + : null + : + $* <"cmd <- 1>-" >>EOO + 'cmd' + <- + '1' + >- + <newline> + EOO + + : merge + : + $* <"cmd 1>&2" >>EOO + 'cmd' + '1' + >& + '2' + <newline> + EOO + + : str + : + $* <"cmd <a 1>b" >>EOO + 'cmd' + < + 'a' + '1' + > + 'b' + <newline> + EOO + + : str-nn + : + $* <"cmd <:a 1>:b" >>EOO + 'cmd' + <: + 'a' + '1' + >: + 'b' + <newline> + EOO + + : doc + : + $* <"cmd <<EOI 1>>EOO" >>EOO + 'cmd' + << + 'EOI' + '1' + >> + 'EOO' + <newline> + EOO + + : doc-nn + : + $* <"cmd <<:EOI 1>>:EOO" >>EOO + 'cmd' + <<: + 'EOI' + '1' + >>: + 'EOO' + <newline> + EOO + + : file + : + $* <"cmd <<<in >>>out 2>>>&err" >>EOO + 'cmd' + <<< + 'in' + >>> + 'out' + '2' + >>>& + 'err' + <newline> + EOO +} + +: cleanup : -<newline> -EOO - -$* <"cmd <+ 1>+" >>EOO # pass-redirect -'cmd' -<+ -'1' ->+ -<newline> -EOO - -$* <"cmd <- 1>-" >>EOO # null-redirect -'cmd' -<- -'1' ->- -<newline> -EOO - -$* <"cmd 1>&2" >>EOO # merge-redirect -'cmd' -'1' ->& -'2' -<newline> -EOO - -$* <"cmd <a 1>b" >>EOO # str-redirect -'cmd' -< -'a' -'1' -> -'b' -<newline> -EOO - -$* <"cmd <:a 1>:b" >>EOO # str-nn-redirect -'cmd' -<: -'a' -'1' ->: -'b' -<newline> -EOO - -$* <"cmd <<EOI 1>>EOO" >>EOO # doc-redirect -'cmd' -<< -'EOI' -'1' ->> -'EOO' -<newline> -EOO - -$* <"cmd <<:EOI 1>>:EOO" >>EOO # doc-nn-redirect -'cmd' -<<: -'EOI' -'1' ->>: -'EOO' -<newline> -EOO - -$* <"cmd <<<in >>>out 2>>>&err" >>EOO # file-redirect -'cmd' -<<< -'in' ->>> -'out' -'2' ->>>& -'err' -<newline> -EOO - -$* <"cmd &file" >>EOO # cleanup-always -'cmd' -& -'file' -<newline> -EOO - -$* <"cmd &?file" >>EOO # cleanup-maybe -'cmd' -&? -'file' -<newline> -EOO - -$* <"cmd &!file" >>EOO # cleanup-never -'cmd' -&! -'file' -<newline> -EOO +{ + : always + : + $* <"cmd &file" >>EOO + 'cmd' + & + 'file' + <newline> + EOO + + : maybe + : + $* <"cmd &?file" >>EOO + 'cmd' + &? + 'file' + <newline> + EOO + + : never + : + $* <"cmd &!file" >>EOO + 'cmd' + &! + 'file' + <newline> + EOO +} diff --git a/unit-tests/test/script/lexer/description-line.test b/unit-tests/test/script/lexer/description-line.test index 0f70e77..6b160c0 100644 --- a/unit-tests/test/script/lexer/description-line.test +++ b/unit-tests/test/script/lexer/description-line.test @@ -1,20 +1,32 @@ +# file : unit-tests/test/script/lexer/description-line.test +# copyright : Copyright (c) 2014-2017 Code Synthesis Ltd +# license : MIT; see accompanying LICENSE file + test.arguments = description-line -$* <" foo bar " >>EOO # full +: full +: +$* <" foo bar " >>EOO ' foo bar ' <newline> EOO -$* <" " >>EOO # space +: space +: +$* <" " >>EOO ' ' <newline> EOO -$* <"" >>EOO # empty +: empty +: +$* <"" >>EOO <newline> EOO -$* <:"foo" >>EOO 2>>EOE != 0 # eof +: eof +: +$* <:"foo" >>EOO 2>>EOE != 0 'foo' EOO stdin:1:4: error: expected newline at the end of description line diff --git a/unit-tests/test/script/lexer/first-token.test b/unit-tests/test/script/lexer/first-token.test index 8a6d39b..6044f53 100644 --- a/unit-tests/test/script/lexer/first-token.test +++ b/unit-tests/test/script/lexer/first-token.test @@ -1,68 +1,96 @@ +# file : unit-tests/test/script/lexer/first-token.test +# copyright : Copyright (c) 2014-2017 Code Synthesis Ltd +# license : MIT; see accompanying LICENSE file + # Note: this mode auto-expires after each token. # test.arguments = first-token -$* <"." >>EOO # dot +: dot +: +$* <"." >>EOO . <newline> EOO -$* <";" >>EOO # semi +: semi +: +$* <";" >>EOO ; <newline> EOO -$* <":" >>EOO # colon +: colon +: +$* <":" >>EOO : <newline> EOO -$* <"{" >>EOO # lcbrace +: lcbrace +: +$* <"{" >>EOO { <newline> EOO -$* <"}" >>EOO # rcbrace +: rcbrace +: +$* <"}" >>EOO } <newline> EOO -$* <"+foo" >>EOO # setup +: setup +: +$* <"+foo" >>EOO + 'foo' <newline> EOO -$* <"- foo" >>EOO # tdown +: tdown +: +$* <"- foo" >>EOO - 'foo' <newline> EOO -$* <"foo+bar" >>EOO # plus-leading +: plus-leading +: +$* <"foo+bar" >>EOO 'foo+bar' <newline> EOO -$* <"foo- x" >>EOO # minus-leading +: minus-leading +: +$* <"foo- x" >>EOO 'foo-' 'x' <newline> EOO -$* <"foo=" >>EOO # assign +: assign +: +$* <"foo=" >>EOO 'foo' '=' <newline> EOO -$* <"foo+=" >>EOO # append +: append +: +$* <"foo+=" >>EOO 'foo' '+=' <newline> EOO -$* <"foo=+" >>EOO # prepend +: prepend +: +$* <"foo=+" >>EOO 'foo' '=+' <newline> diff --git a/unit-tests/test/script/lexer/second-token.test b/unit-tests/test/script/lexer/second-token.test index 94cdf95..94ea441 100644 --- a/unit-tests/test/script/lexer/second-token.test +++ b/unit-tests/test/script/lexer/second-token.test @@ -1,47 +1,67 @@ +# file : unit-tests/test/script/lexer/second-token.test +# copyright : Copyright (c) 2014-2017 Code Synthesis Ltd +# license : MIT; see accompanying LICENSE file + # Note: this mode auto-expires after each token. # test.arguments = second-token -$* <";" >>EOO # semi +: semi +: +$* <";" >>EOO ; <newline> EOO -$* <":" >>EOO # colon +: colon +: +$* <":" >>EOO : <newline> EOO -$* <"=foo" >>EOO # assign +: assign +: +$* <"=foo" >>EOO = 'foo' <newline> EOO -$* <"+= foo" >>EOO # append +: append +: +$* <"+= foo" >>EOO += 'foo' <newline> EOO -$* <" =+ foo" >>EOO # prepend +: prepend +: +$* <" =+ foo" >>EOO =+ 'foo' <newline> EOO -$* <"foo=bar" >>EOO # assign-leading +: assign-leading +: +$* <"foo=bar" >>EOO 'foo=bar' <newline> EOO -$* <"foo+= bar" >>EOO # append-leading +: append-leading +: +$* <"foo+= bar" >>EOO 'foo+=' 'bar' <newline> EOO -$* <"foo =+bar" >>EOO # prepend-leading +: prepend-leading +: +$* <"foo =+bar" >>EOO 'foo' '=+bar' <newline> diff --git a/unit-tests/test/script/lexer/variable-line.test b/unit-tests/test/script/lexer/variable-line.test index 126fe54..c97981d 100644 --- a/unit-tests/test/script/lexer/variable-line.test +++ b/unit-tests/test/script/lexer/variable-line.test @@ -1,18 +1,28 @@ +# file : unit-tests/test/script/lexer/variable-line.test +# copyright : Copyright (c) 2014-2017 Code Synthesis Ltd +# license : MIT; see accompanying LICENSE file + test.arguments = variable-line -$* <"cmd;" >>EOO # semi +: semi +: +$* <"cmd;" >>EOO 'cmd' ; <newline> EOO -$* <"cmd ;" >>EOO # semi-separated +: semi-separated +: +$* <"cmd ;" >>EOO 'cmd' ; <newline> EOO -$* <";" >>EOO # semi-only +: semi-only +: +$* <";" >>EOO ; <newline> EOO diff --git a/unit-tests/test/script/lexer/variable.test b/unit-tests/test/script/lexer/variable.test index 0ecc6cc..15458f5 100644 --- a/unit-tests/test/script/lexer/variable.test +++ b/unit-tests/test/script/lexer/variable.test @@ -1,40 +1,70 @@ +# file : unit-tests/test/script/lexer/variable.test +# copyright : Copyright (c) 2014-2017 Code Synthesis Ltd +# license : MIT; see accompanying LICENSE file + # Test handling custom variable names ($*, $~, $NN). # test.arguments = variable -$* <"*" >>EOO -'*' -<newline> -EOO - -$* <"*abc" >>EOO -'*' -'abc' -<newline> -EOO - -$* <"~" >>EOO -'~' -<newline> -EOO - -$* <"~123" >>EOO -'~' -'123' -<newline> -EOO - -$* <"0" >>EOO -'0' -<newline> -EOO - -$* <"1abc" >>EOO -'1' -'abc' -<newline> -EOO - -$* <"10" 2>>EOE != 0 -stdin:1:1: error: multi-digit special variable name -EOE +: command +: +{ + : only + : + $* <"*" >>EOO + '*' + <newline> + EOO + + : followed + : + $* <"*abc" >>EOO + '*' + 'abc' + <newline> + EOO +} + +: working-dir +: +{ + : only + : + $* <"~" >>EOO + '~' + <newline> + EOO + + : followed + : + $* <"~123" >>EOO + '~' + '123' + <newline> + EOO +} + +: arg +: +{ + : only + : + $* <"0" >>EOO + '0' + <newline> + EOO + + : followed + : + $* <"1abc" >>EOO + '1' + 'abc' + <newline> + EOO + + : multi-digit + : + $* <"10" 2>>EOE != 0 + stdin:1:1: error: multi-digit special variable name + EOE +} |