aboutsummaryrefslogtreecommitdiff
path: root/tests/test/script/runner/set.testscript
diff options
context:
space:
mode:
Diffstat (limited to 'tests/test/script/runner/set.testscript')
-rw-r--r--tests/test/script/runner/set.testscript353
1 files changed, 328 insertions, 25 deletions
diff --git a/tests/test/script/runner/set.testscript b/tests/test/script/runner/set.testscript
index 9219cbb..1800a7d 100644
--- a/tests/test/script/runner/set.testscript
+++ b/tests/test/script/runner/set.testscript
@@ -52,7 +52,7 @@
: both-newline-whitespace
:
$c <'set -nw' && $b 2>>EOE != 0
- testscript:1:1: error: both -n|--newline and -w|--whitespace specified
+ testscript:1:1: error: set: both -n|--newline and -w|--whitespace specified
info: test id: 1
EOE
}
@@ -63,28 +63,28 @@
: none
:
$c <'set -e' && $b 2>>EOE != 0
- testscript:1:1: error: missing variable name
+ testscript:1:1: error: set: missing variable name
info: test id: 1
EOE
: unexpected
:
$c <'set foo bar baz' && $b 2>>EOE != 0
- testscript:1:1: error: unexpected argument 'baz'
+ testscript:1:1: error: set: unexpected argument 'baz'
info: test id: 1
EOE
: empty-attrs
:
- $c <"set '' baz" && $b 2>>EOE != 0
- testscript:1:1: error: empty variable attributes
+ $c <"set baz ''" && $b 2>>EOE != 0
+ testscript:1:1: error: set: empty variable attributes
info: test id: 1
EOE
: empty-var
:
$c <"set ''" && $b 2>>EOE != 0
- testscript:1:1: error: empty variable name
+ testscript:1:1: error: set: empty variable name
info: test id: 1
EOE
}
@@ -94,10 +94,28 @@
{
: non-exact
:
- $c <<EOI && $b
- set -w baz <' foo bar ';
- echo $baz >'foo bar'
- EOI
+ {
+ : non-empty
+ :
+ $c <<EOI && $b
+ set -w baz <' foo bar ';
+ echo $regex.apply($baz, '^(.*)$', '"\1"') >'"foo" "bar"'
+ EOI
+
+ : empty
+ :
+ $c <<EOI && $b
+ set -w baz <:'';
+ echo $regex.apply($baz, '^(.*)$', '"\1"') >''
+ EOI
+
+ : spaces
+ :
+ $c <<EOI && $b
+ set -w baz <' ';
+ echo $regex.apply($baz, '^(.*)$', '"\1"') >''
+ EOI
+ }
: exact
:
@@ -106,7 +124,7 @@
:
$c <<EOI && $b
set --exact --whitespace baz <' foo bar ';
- echo $baz >'foo bar '
+ echo $regex.apply($baz, '^(.*)$', '"\1"') >'"foo" "bar" ""'
EOI
: no-trailing-ws
@@ -115,8 +133,22 @@
: ':' modifier.
:
$c <<EOI && $b
- set --exact --whitespace baz <:' foo bar';
- echo $baz >'foo bar'
+ set -e -w baz <:' foo bar';
+ echo $regex.apply($baz, '^(.*)$', '"\1"') >'"foo" "bar"'
+ EOI
+
+ : empty
+ :
+ $c <<EOI && $b
+ set -e -w baz <:'';
+ echo $regex.apply($baz, '^(.*)$', '"\1"') >''
+ EOI
+
+ : spaces
+ :
+ $c <<EOI && $b
+ set -e -w baz <' ';
+ echo $regex.apply($baz, '^(.*)$', '"\1"') >'""'
EOI
}
}
@@ -134,7 +166,7 @@
bar
EOF
- echo $baz >' foo bar '
+ echo $regex.apply($baz, '^(.*)$', '"\1"') >'"" "foo" "" "bar" ""'
EOI
: exact
@@ -150,7 +182,7 @@
bar
EOF
- echo $baz >' foo bar '
+ echo $regex.apply($baz, '^(.*)$', '"\1"') >'"" "foo" "" "bar" "" ""'
EOI
: no-trailing-newline
@@ -162,7 +194,7 @@
bar
EOF
- echo $baz >' foo bar'
+ echo $regex.apply($baz, '^(.*)$', '"\1"') >'"" "foo" "" "bar"'
EOI
}
}
@@ -180,7 +212,7 @@
bar
EOF
- echo $baz >>EOO
+ echo ($baz[0]) >>EOO
foo
@@ -209,7 +241,7 @@
bar
EOF
- echo "$baz" >>EOO
+ echo ($baz[0]) >>EOO
foo
@@ -227,7 +259,7 @@
bar
EOF
- echo "$baz" >>EOO
+ echo ($baz[0]) >>EOO
foo
@@ -237,20 +269,291 @@
}
}
+: special-vars
+:
+{
+ $c <<EOI && $b
+ set -w test.options <'-o foo';
+ $* >'foo'
+ EOI
+}
+
+: deadline
+:
+{
+ : not-reached
+ :
+ $c <<EOI && $b
+ env -t 10 -- $* -o 'foo' | set bar;
+ echo "$bar" >'foo'
+ EOI
+
+ : non-pipe
+ :
+ $c <<EOI && $b
+ env -t 10 -- set bar <'foo';
+ echo "$bar" >'foo'
+ EOI
+
+ : set-reached
+ :
+ $c <<EOI && $b 2>>~%EOE% != 0
+ $* -o 'foo' -l 10 | env -t 1 -- set bar
+ EOI
+ %testscript:.*: error: .+driver.* terminated: execution timeout expired%
+ %.
+ EOE
+
+ : driver-reached
+ :
+ $c <<EOI && $b 2>>~%EOE% != 0
+ env -t 1 -- $* -o 'foo' -l 10 | set bar
+ EOI
+ %testscript:.*: error: .+driver.* terminated: execution timeout expired%
+ %.
+ EOE
+
+ : read-some-data
+ :
+ {
+ s="----------------------------------------------------------------------"
+ s="$s$s$s$s$s$s$s$s$s$s$s$s$s$s$s$s$s$s$s$s$s$s$s$s$s$s$s$s$s$s$s$s$s$s$s"
+ s="$s$s$s$s$s$s$s$s$s$s$s$s$s$s$s$s$s$s$s$s$s$s$s$s$s$s$s$s$s$s$s$s$s$s$s"
+
+ : failure
+ :
+ $c <<EOI && $b 2>>~%EOE% != 0
+ echo "$s" >=f;
+ $* -o 'foo' -l 10 | cat f - | env -t 2 -- set bar
+ EOI
+ %testscript:.*: error: process .+driver.* terminated: execution timeout expired%
+ %.
+ %testscript:.*: error: builtin cat terminated: execution timeout expired%
+ %.
+ EOE
+
+ : success
+ :
+ $c <<EOI && $b
+ echo "$s" >=f;
+ timeout --success 2;
+
+ # Suppress cat's 'broken pipe' diagnostics.
+ #
+ $* -o 'foo' -l 10 | cat f - 2>- | set bar
+ EOI
+ }
+
+ : split
+ :
+ : Test various splitting modes as above, but now reading the stream in the
+ : non-blocking mode.
+ :
+ {
+ : whitespace-separated-list
+ :
+ {
+ : non-exact
+ :
+ {
+ : non-empty
+ :
+ $c <<EOI && $b
+ timeout 10;
+ set -w baz <' foo bar ';
+ echo $regex.apply($baz, '^(.*)$', '"\1"') >'"foo" "bar"'
+ EOI
+
+ : empty
+ :
+ $c <<EOI && $b
+ timeout 10;
+ set -w baz <:'';
+ echo $regex.apply($baz, '^(.*)$', '"\1"') >''
+ EOI
+
+ : spaces
+ :
+ $c <<EOI && $b
+ timeout 10;
+ set -w baz <' ';
+ echo $regex.apply($baz, '^(.*)$', '"\1"') >''
+ EOI
+ }
+
+ : exact
+ :
+ {
+ : trailing-ws
+ :
+ $c <<EOI && $b
+ timeout 10;
+ set --exact --whitespace baz <' foo bar ';
+ echo $regex.apply($baz, '^(.*)$', '"\1"') >'"foo" "bar" ""'
+ EOI
+
+ : no-trailing-ws
+ :
+ : Note that we need to strip the default trailing newline as well with the
+ : ':' modifier.
+ :
+ $c <<EOI && $b
+ timeout 10;
+ set -e -w baz <:' foo bar';
+ echo $regex.apply($baz, '^(.*)$', '"\1"') >'"foo" "bar"'
+ EOI
+
+ : empty
+ :
+ $c <<EOI && $b
+ timeout 10;
+ set -e -w baz <:'';
+ echo $regex.apply($baz, '^(.*)$', '"\1"') >''
+ EOI
+
+ : spaces
+ :
+ $c <<EOI && $b
+ timeout 10;
+ set -e -w baz <' ';
+ echo $regex.apply($baz, '^(.*)$', '"\1"') >'""'
+ EOI
+ }
+ }
+
+ : newline-separated-list
+ :
+ {
+ : non-exact
+ :
+ $c <<EOI && $b
+ timeout 10;
+ set -n baz <<EOF;
+
+ foo
+
+ bar
+
+ EOF
+ echo $regex.apply($baz, '^(.*)$', '"\1"') >'"" "foo" "" "bar" ""'
+ EOI
+
+ : exact
+ :
+ {
+ : trailing-newline
+ :
+ $c <<EOI && $b
+ timeout 10;
+ set --exact --newline baz <<EOF;
+
+ foo
+
+ bar
+
+ EOF
+ echo $regex.apply($baz, '^(.*)$', '"\1"') >'"" "foo" "" "bar" "" ""'
+ EOI
+
+ : no-trailing-newline
+ :
+ $c <<EOI && $b
+ timeout 10;
+ set --exact --newline baz <<:EOF;
+
+ foo
+
+ bar
+ EOF
+ echo $regex.apply($baz, '^(.*)$', '"\1"') >'"" "foo" "" "bar"'
+ EOI
+ }
+ }
+
+ : string
+ :
+ {
+ : non-exact
+ :
+ $c <<EOI && $b
+ timeout 10;
+ set baz <<EOF;
+
+ foo
+
+ bar
+
+ EOF
+ echo ($baz[0]) >>EOO
+
+ foo
+
+ bar
+
+ EOO
+ EOI
+
+ : exact
+ :
+ : Note that echo adds the trailing newline, so EOF and EOO here-documents
+ : differ by this newline.
+ :
+ {
+ : trailing-newline
+ :
+ $c <<EOI && $b
+ timeout 10;
+ set -e baz <<EOF;
+
+ foo
+
+ bar
+ EOF
+ echo ($baz[0]) >>EOO
+
+ foo
+
+ bar
+
+ EOO
+ EOI
+
+ : no-trailing-newline
+ :
+ $c <<EOI && $b
+ timeout 10;
+ set -e baz <<:EOF;
+
+ foo
+
+ bar
+ EOF
+ echo ($baz[0]) >>EOO
+
+ foo
+
+ bar
+ EOO
+ EOI
+ }
+ }
+ }
+}
+
: attributes
:
{
: dir_path
:
$c <<EOI && $b
- set [dir_path] bar <'foo';
+ set bar [dir_path] <'foo';
echo $bar >/'foo/'
EOI
: null
:
$c <<EOI && $b
- set [null] foo <-;
+ set foo [null] <-;
echo $foo >''
EOI
@@ -268,7 +571,7 @@
: empty-brackets
:
$c <<EOI && $b 2>>EOE != 0
- set -w '[]' baz <'foo bar';
+ set -w baz '[]' <'foo bar';
echo "$baz"
EOI
testscript:2:8: error: concatenating variable expansion contains multiple values
@@ -277,7 +580,7 @@
: no-left-bracket
:
$c <<EOI && $b 2>>EOE != 0
- set -w x baz
+ set -w baz x
EOI
<attributes>:1:1: error: expected '[' instead of 'x'
testscript:1:1: info: while parsing attributes 'x'
@@ -287,7 +590,7 @@
: unknown
:
$c <<EOI && $b 2>>EOE != 0
- set -w [x] baz
+ set -w baz [x]
EOI
<attributes>:1:1: error: unknown value attribute x
testscript:1:1: info: while parsing attributes '[x]'
@@ -297,7 +600,7 @@
: junk
:
$c <<EOI && $b 2>>EOE != 0
- set -w '[string] x' baz
+ set -w baz '[string] x'
EOI
<attributes>:1:10: error: trailing junk after ']'
testscript:1:1: info: while parsing attributes '[string] x'