aboutsummaryrefslogtreecommitdiff
path: root/tests/command/testscript
diff options
context:
space:
mode:
Diffstat (limited to 'tests/command/testscript')
-rw-r--r--tests/command/testscript155
1 files changed, 155 insertions, 0 deletions
diff --git a/tests/command/testscript b/tests/command/testscript
new file mode 100644
index 0000000..4d45f4f
--- /dev/null
+++ b/tests/command/testscript
@@ -0,0 +1,155 @@
+# file : tests/command/testscript
+# copyright : Copyright (c) 2014-2019 Code Synthesis Ltd
+# license : MIT; see accompanying LICENSE file
+
+cmd="'$0' -C -A" # Command that prints its arguments to stdout.
+
+# Note that when cross-testing the driver may not be able to run the command
+# due to the meaningless program path.
+#
++if ($test.target != $build.host)
+ exit
+end
+
+: quioting
+:
+{
+ $* "$cmd 'abc def'" >~'%.+ "abc def"%'
+}
+
+: substitution
+:
+{
+ test.options += -s v1=abc -s v2=def
+
+ : program
+ :
+ {
+ $* -s "program=$0" '@program@ -C -A abc' >~'%.+driver.* abc%'
+ }
+
+ : args
+ :
+ {
+ $* "$cmd abc" >~'%.+ abc%' : none
+ $* "$cmd x@v1@" >~'%.+ xabc%' : single
+ $* "$cmd x@v1@y@v2@z" >~'%.+ xabcydefz%' : multiple
+ $* "$cmd @v1@@v2@" >~'%.+ abcdef%' : adjacent
+ }
+
+ : redirect
+ :
+ {
+ $* -s v=f "$cmd abc >@v@" &f;
+ cat f >~'%.+ abc%'
+ }
+}
+
+: redirect
+:
+{
+ : overwrite
+ :
+ {
+ $* -p "$cmd abc >f" >~'%.+driver.* -C -A abc >f%' &f;
+ cat f >~'%.+ abc%'
+ }
+
+ : append
+ :
+ {
+ echo 'xyz' >=f;
+ $* -p "$cmd abc >>f" >~'%.+driver.* -C -A abc >>f%';
+
+ cat f >>~%EOO%
+ xyz
+ %.+ abc%
+ EOO
+ }
+
+ : space-separated
+ :
+ {
+ : overwrite
+ :
+ {
+ $* "$cmd abc > f" &f;
+ cat f >~'%.+ abc%'
+ }
+
+ : append
+ :
+ {
+ echo 'xyz' >=f;
+ $* "$cmd abc >> f";
+
+ cat f >>~%EOO%
+ xyz
+ %.+ abc%
+ EOO
+ }
+ }
+
+ : not-redirect
+ :
+ $* -s v='>f' "$cmd abc @v@" >~'%.+ abc >f%'
+
+ : errors
+ :
+ {
+ $* "$cmd >d/f" 2>~"%unable to open stdout redirect file 'd/f'.*%" != 0 : io-failure
+ $* "$cmd > ''" 2> 'empty stdout redirect file path' != 0 : empty-path
+ }
+}
+
+: invalid-argument
+:
+{
+ $* "" 2>'no program path specified' != 0 : no-prog
+ $* "p 'abc def" 2>'unterminated quoted string' != 0 : unterminated
+ $* "p >" 2>'no stdout redirect file specified' != 0 : no-redirect-file
+ $* "p >>" 2>'no stdout redirect file specified' != 0 : no-append-file
+
+ : substitution
+ :
+ {
+ test.options += -s v=a
+
+ $* 'p @a b@' 2>"unmatched substitution character '@' in '@a'" != 0 : unterm-var
+ $* "p '@a b@'" 2>"whitespace in variable name 'a b'" != 0 : ws-var
+ $* 'p @x@' 2>"unknown variable 'x'" != 0 : unknown-var
+ }
+}
+
+: process
+:
+{
+ : cwd
+ :
+ {
+ mkdir abc;
+ $* -d abc "$cmd -D" >>/~%EOO%
+ %.+/driver.*%
+ %.+/abc%
+ EOO
+ }
+
+ : env-var
+ :
+ {
+ $* -v test=abc "$cmd -V test" >>/~%EOO%
+ %.+/driver.*%
+ abc
+ EOO
+ }
+
+ : error
+ :
+ {
+ $* "''" 2>'no such file or directory' != 0 : empty-prog
+ }
+
+ : non-zero-status
+ :
+ $* "$0 -C -S 10" 2>/~'%.+ exited with code 10%' == 10
+}