/home/uke/oil/bin/osh sh-options: spec test case results

Results for sh-options.test.sh

statusosh
pass 41
ok 2
N-I 2
FAIL 2
total47
caseoshdescription
0pass $- with -c
1pass $- with pipefail
2pass $- and more options
3pass $- with interactive shell
4pass pass short options like sh -e
5pass pass long options like sh -o errexit
6pass pass shopt options like sh -O nullglob
7pass can continue after unknown option
8pass set with both options and argv
9pass set -o vi/emacs
10pass vi and emacs are mutually exclusive
11pass interactive shell starts with emacs mode on
12pass nounset
13pass -u is nounset
14pass nounset with "$@"
15pass set -u -- clears argv
16pass set -u -- x y z
17pass reset option with long flag
18pass reset option with short flag
19pass set -eu (flag parsing)
20FAIL -n for no execution (useful with --ast-output)
details
21pass pipefail
22pass shopt -p -o prints 'set' options
23pass shopt -o prints 'set' options
24pass shopt -p prints 'shopt' options
25pass shopt with no flags prints options
26pass noclobber off
27pass noclobber on
28pass noclobber on <>
29pass SHELLOPTS is updated when options are changed
30ok SHELLOPTS is readonly
details
31FAIL SHELLOPTS and BASHOPTS are set
details
32ok set - -
details
33pass set -o lists options
34pass set without args lists variables
35pass 'set' and 'eval' round trip
36N-I set without args and array variables (not in OSH)
details
37N-I set without args and assoc array variables (not in OSH)
details
38pass shopt -q
39pass shopt -q invalid
40pass shopt -s strict:all
41pass shopt allows for backward compatibility like bash
42pass shopt -p validates option names
43pass shopt -p -o validates option names
44pass stubbed out bash options
45pass shopt -s nounset works in Oil, not in bash
46pass no-ops not in shopt -p output
41 passed, 2 OK, 2 not implemented, 0 BUG, 2 failed, 0 timeouts, 0 cases skipped
2 failed under osh

Details on runs that didn't PASS

osh0 $- with -c

stdout:
u
stderr:
osh1 $- with pipefail

stdout:
u
stderr:
osh2 $- and more options

stdout:
yes
yes
yes
yes
stderr:
osh3 $- with interactive shell

stdout:
FALSE
TRUE
stderr:
osh4 pass short options like sh -e

stdout:
stderr: 
osh5 pass long options like sh -o errexit

stdout:
stderr: 
osh6 pass shopt options like sh -O nullglob

stdout:
foo *.nonexistent bar
foo bar
stderr:
osh7 can continue after unknown option

stdout:
hello
stderr:
  set -o STRICT || true # unknown option
  ^~~
[ stdin ]:2: 'set' got invalid option 'STRICT'
osh8 set with both options and argv

stdout:
a b c
stderr:
osh9 set -o vi/emacs

stdout:
0
0
stderr:
osh10 vi and emacs are mutually exclusive

stdout:
set +o emacs
set +o vi
___
set -o emacs
set +o vi
___
set +o emacs
set -o vi
___
stderr:
osh11 interactive shell starts with emacs mode on

stdout:
non-interactive
1
1
interactive
0
1
stderr:
osh warning: --rcfile ignored with --norc
osh warning: --rcfile ignored in non-interactive shell
osh12 nounset

stdout:
[]
stderr:
  echo "[$unset]"
         ^~~~~~
[ stdin ]:3: fatal: Undefined variable 'unset'
osh13 -u is nounset

stdout:
[]
stderr:
  echo "[$unset]"
         ^~~~~~
[ stdin ]:3: fatal: Undefined variable 'unset'
osh14 nounset with "$@"

stdout:
a b c
stderr:
osh15 set -u -- clears argv

stdout:
stderr: 
osh16 set -u -- x y z

stdout:
x y z
stderr:
osh17 reset option with long flag

stdout:
[]
stderr:
osh18 reset option with short flag

stdout:
[]
stderr:
osh19 set -eu (flag parsing)

stdout:
stderr: 
  echo "[$unset]"
         ^~~~~~
[ stdin ]:2: fatal: Undefined variable 'unset'
osh20 -n for no execution (useful with --ast-output)

[osh stdout] Expected '1\n', got '1\n2\n3\n'

stdout:
1
2
3
stderr:
osh21 pipefail

stdout:
0
2
stderr:
osh22 shopt -p -o prints 'set' options

stdout:
set +o nounset
set -o nounset
--
errexit
noglob
nounset
stderr:
osh23 shopt -o prints 'set' options

stdout:
errexit
noglob
nounset
--
stderr:
osh24 shopt -p prints 'shopt' options

stdout:
shopt -u nullglob
shopt -s nullglob
stderr:
osh25 shopt with no flags prints options

stdout:
2 one.txt
nullglob
failglob
1
stderr:
osh26 noclobber off

stdout:
foo
stderr:
osh27 noclobber on

stdout:
0
1
0
stderr:
rm: cannot remove '/home/uke/oil/_tmp/spec-tmp/sh-options.test.sh.821/27-osh/no-clobber': No such file or directory
[ stdin ]:5: I/O redirect error: can't overwrite existing file '/home/uke/oil/_tmp/spec-tmp/sh-options.test.sh.821/27-osh/no-clobber': File exists
osh28 noclobber on <>

stdout:
f.o
stderr:
osh29 SHELLOPTS is updated when options are changed

stdout:
1
0
1
stderr:
+ grep -q xtrace
+ 979 echo ':xtrace'
+ echo 0
+ set '+x'
osh30 SHELLOPTS is readonly

stdout:
stderr: 
  SHELLOPTS=x
  ^~~~~~~~~~
[ stdin ]:1: fatal: Can't assign to readonly value 'SHELLOPTS'
osh31 SHELLOPTS and BASHOPTS are set

[osh status] Expected 0, got 1

stdout:
stderr: 
  echo shellopts ${SHELLOPTS:?} > /dev/null
                   ^~~~~~~~~
[ stdin ]:1: fatal: Var SHELLOPTS is empty
osh32 set - -

stdout:
a b
- a b
a b
- -
- +
+ -
--
stderr:
osh33 set -o lists options

stdout:
noexec
stderr:
osh34 set without args lists variables

stdout:
__GLOBAL=mutated
__OTHERLOCAL=L
__mylocal=L
__var_in_parent_scope=D
stderr:
osh35 'set' and 'eval' round trip

stdout:
[ ]
OK
OK
OK
OK
OK
stderr:
Code saved to /home/uke/oil/_tmp/spec-tmp/sh-options.test.sh.821/35-osh/vars-osh.txt
osh36 set without args and array variables (not in OSH)

stdout:
stderr: 
osh37 set without args and assoc array variables (not in OSH)

stdout:
stderr: 
  __assoc[a]=b
  ^~~~~~~~
[ stdin ]:3: fatal: Assoc array keys must be strings: $x 'x' "$x" etc. (OILS-ERR-101)
osh38 shopt -q

stdout:
nullglob=1
nullglob=0
nullglob,failglob=1
nullglob,failglob=0
stderr:
osh39 shopt -q invalid

stdout:
invalidZZ=2
stderr:
osh40 shopt -s strict:all

stdout:
shopt -u strict_argv
shopt -u strict_arith
-
shopt -s strict_argv
shopt -s strict_arith
-
shopt -s strict_argv
shopt -u strict_arith
-
stderr:
osh41 shopt allows for backward compatibility like bash

stdout:
shopt -u nullglob
status=0
shopt -s nullglob
stderr:
osh42 shopt -p validates option names

stdout:
status=2
status=2
stderr:
  shopt -p nullglob invalid failglob
  ^~~~~
[ stdin ]:1: 'shopt' got invalid option 'invalid'
  shopt nullglob invalid failglob > $TMP/out.txt
  ^~~~~
[ stdin ]:3: 'shopt' got invalid option 'invalid'
osh43 shopt -p -o validates option names

stdout:
set +o errexit
status=2
stderr:
  shopt -p -o errexit invalid nounset
  ^~~~~
[ stdin ]:1: 'shopt' got invalid option 'invalid'
osh44 stubbed out bash options

stdout:
2
0
0
0
stderr:
    shopt -s $name
    ^~~~~
[ stdin ]:2: 'shopt' got invalid option 'foo'
osh45 shopt -s nounset works in Oil, not in bash

stdout:
status=0
set -o nounset
stderr:
osh46 no-ops not in shopt -p output

stdout:
--
stderr: