# file : libbuild2/test/script/parser+redirect.test.testscript # copyright : Copyright (c) 2014-2019 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 }