spec test index / oilshell.org
83 passed, 6 OK, 5 not implemented, 0 BUG, 38 failed, 0 timeouts, 0 cases skipped 2 failed under osh
osh_.py | 0 $- with -c [osh_.py stdout] Expected 'u\n', got '' [osh_.py status] Expected 0, got 127 stdout: stderr: $SH -o nounset -c 'echo $-' ^~ [ stdin ]:1: '-o' not found |
osh_.cc | 0 $- with -c [osh_.cc stdout] Expected 'u\n', got '' [osh_.cc status] Expected 0, got 127 stdout: stderr: $SH -o nounset -c 'echo $-' ^~ [ stdin ]:1: '-o' not found |
osh_.py | 3 $- with interactive shell [osh_.py stdout] Expected 'FALSE\nTRUE\n', got 'FALSE\n' [osh_.py status] Expected 0, got 1 stdout: FALSEstderr: $SH -c 'echo $-' | grep i || echo FALSE ^~ [ stdin ]:1: '-c' not found $SH -i -c 'echo $-' | grep -q i && echo TRUE ^~ [ stdin ]:2: '-i' not found |
osh_.cc | 3 $- with interactive shell [osh_.cc stdout] Expected 'FALSE\nTRUE\n', got '' [osh_.cc status] Expected 0, got -6 stdout: stderr: osh_eval.dbg: cpp/posix.h:106: Tuple2<int, int> posix::pipe(): Assertion `0' failed. |
osh_.py | 4 pass short options like sh -e [osh_.py status] Expected 1, got 127 stdout: stderr: $SH -e -c 'false; echo status=$?' ^~ [ stdin ]:1: '-e' not found |
osh_.cc | 4 pass short options like sh -e [osh_.cc status] Expected 1, got 127 stdout: stderr: $SH -e -c 'false; echo status=$?' ^~ [ stdin ]:1: '-e' not found |
osh_.py | 5 pass long options like sh -o errexit [osh_.py status] Expected 1, got 127 stdout: stderr: $SH -o errexit -c 'false; echo status=$?' ^~ [ stdin ]:1: '-o' not found |
osh_.cc | 5 pass long options like sh -o errexit [osh_.cc status] Expected 1, got 127 stdout: stderr: $SH -o errexit -c 'false; echo status=$?' ^~ [ stdin ]:1: '-o' not found |
osh_.py | 6 pass shopt options like sh -O nullglob [osh_.py stdout] Expected 'foo *.nonexistent bar\nfoo bar\n', got '' [osh_.py status] Expected 0, got 127 stdout: stderr: $SH +O nullglob -c 'echo foo *.nonexistent bar' ^ [ stdin ]:1: '+O' not found $SH -O nullglob -c 'echo foo *.nonexistent bar' ^~ [ stdin ]:2: '-O' not found |
osh_.cc | 6 pass shopt options like sh -O nullglob [osh_.cc stdout] Expected 'foo *.nonexistent bar\nfoo bar\n', got '' [osh_.cc status] Expected 0, got 127 stdout: stderr: $SH +O nullglob -c 'echo foo *.nonexistent bar' ^ [ stdin ]:1: '+O' not found $SH -O nullglob -c 'echo foo *.nonexistent bar' ^~ [ stdin ]:2: '-O' not found |
osh_.py | 10 vi and emacs are mutually exclusive [osh_.py stdout] Expected 'set +o emacs\nset +o vi\n___\nset -o emacs\nset +o vi\n___\nset +o emacs\nset -o vi\n___\n', got 'set +o emacs\nset +o vi\n___\nset -o emacs\nset +o vi\n___\nset -o emacs\nset -o vi\n___\n' stdout: set +o emacs set +o vi ___ set -o emacs set +o vi ___ set -o emacs set -o vi ___stderr: |
osh_.cc | 10 vi and emacs are mutually exclusive [osh_.cc stdout] Expected 'set +o emacs\nset +o vi\n___\nset -o emacs\nset +o vi\n___\nset +o emacs\nset -o vi\n___\n', got '' [osh_.cc status] Expected 0, got -6 stdout: stderr: osh_eval.dbg: cpp/posix.h:106: Tuple2<int, int> posix::pipe(): Assertion `0' failed. |
osh_.py | 11 interactive shell starts with emacs mode on [osh_.py stdout] Expected 'non-interactive\n1\n1\ninteractive\n0\n1\n', got 'non-interactive\ninteractive\n' [osh_.py status] Expected 0, got 127 stdout: non-interactive interactivestderr: $SH $flag -c "$code" ^~ [ stdin ]:5: '-c' not found $SH $flag -i -c "$code" ^~ [ stdin ]:7: '-i' not found |
osh_.cc | 11 interactive shell starts with emacs mode on [osh_.cc stdout] Expected 'non-interactive\n1\n1\ninteractive\n0\n1\n', got 'non-interactive\ninteractive\n' [osh_.cc status] Expected 0, got 127 stdout: non-interactive interactivestderr: $SH $flag -c "$code" ^~ [ stdin ]:5: '-c' not found $SH $flag -i -c "$code" ^~ [ stdin ]:7: '-i' not found |
osh | 20 -n for no execution (useful with --ast-output) [osh stdout] Expected '1\n', got '1\n2\n3\n' stdout: 1 2 3stderr: |
osh_.py | 20 -n for no execution (useful with --ast-output) [osh_.py stdout] Expected '1\n', got '1\n2\n3\n' stdout: 1 2 3stderr: |
osh_.cc | 20 -n for no execution (useful with --ast-output) [osh_.cc stdout] Expected '1\n', got '1\n2\n3\n' stdout: 1 2 3stderr: |
osh_.cc | 21 pipefail [osh_.cc stdout] Expected '0\n2\n', got '' [osh_.cc status] Expected 0, got -6 stdout: stderr: osh_eval.dbg: cpp/posix.h:106: Tuple2<int, int> posix::pipe(): Assertion `0' failed. |
osh_.py | 24 shopt with no flags prints options [osh_.py stdout] Expected '2 one.txt\nnullglob\nfailglob\n1\n', got 'nullglob\nfailglob\n' [osh_.py status] Expected 0, got 127 stdout: nullglob failglobstderr: cd $TMP ^~ [ stdin ]:1: $HOME isn't defined wc -l one.txt ^~ [ stdin ]:3: 'wc' not found shopt | grep nullglob | wc -l ^~ [ stdin ]:6: 'wc' not found |
osh_.cc | 24 shopt with no flags prints options [osh_.cc stdout] Expected '2 one.txt\nnullglob\nfailglob\n1\n', got '' [osh_.cc status] Expected 0, got -6 stdout: stderr: cd $TMP ^~ [ stdin ]:1: $HOME isn't defined osh_eval.dbg: cpp/posix.h:139: void posix::dup2(int, int): Assertion `0' failed. |
osh_.py | 25 noclobber off [osh_.py stdout] Expected 'foo\n', got '' [osh_.py status] Expected 0, got 1 stdout: stderr: echo foo > $TMP/can-clobber ^ [ stdin ]:2: Can't open '/can-clobber': Permission denied echo foo > $TMP/can-clobber ^~~~ [ stdin ]:2: fatal: Exiting with status 1 (command in PID 27301) |
osh_.cc | 25 noclobber off [osh_.cc stdout] Expected 'foo\n', got '' [osh_.cc status] Expected 0, got -6 stdout: stderr: osh_eval.dbg: cpp/posix.h:139: void posix::dup2(int, int): Assertion `0' failed. |
osh | 26 noclobber on [osh stdout] Expected u'0\n1\n', got '0\n0\n' stdout: 0 0stderr: |
osh_.py | 26 noclobber on [osh_.py stdout] Expected u'0\n1\n', got '1\n1\n' stdout: 1 1stderr: rm: cannot remove '/no-clobber': No such file or directory echo foo > $TMP/no-clobber ^ [ stdin ]:3: Can't open '/no-clobber': Permission denied echo foo > $TMP/no-clobber ^ [ stdin ]:5: Can't open '/no-clobber': Permission denied |
osh_.cc | 26 noclobber on [osh_.cc stdout] Expected u'0\n1\n', got '' [osh_.cc status] Expected 0, got -6 stdout: stderr: rm: cannot remove '/no-clobber': No such file or directory osh_eval.dbg: cpp/posix.h:139: void posix::dup2(int, int): Assertion `0' failed. |
osh_.cc | 27 SHELLOPTS is updated when options are changed [osh_.cc stdout] Expected u'1\n0\n1\n', got '' [osh_.cc status] Expected 0, got -6 stdout: stderr: osh_eval.dbg: cpp/posix.h:106: Tuple2<int, int> posix::pipe(): Assertion `0' failed. |
osh | 28 SHELLOPTS is readonly stdout: stderr: SHELLOPTS=x ^~~~~~~~~~ [ stdin ]:1: fatal: Can't assign to readonly value 'SHELLOPTS' |
osh_.py | 28 SHELLOPTS is readonly stdout: stderr: SHELLOPTS=x ^~~~~~~~~~ [ stdin ]:1: fatal: Can't assign to readonly value 'SHELLOPTS' |
osh_.cc | 28 SHELLOPTS is readonly stdout: stderr: SHELLOPTS=x ^~~~~~~~~~ [ stdin ]:1: fatal: Can't assign to readonly value 'SHELLOPTS' |
osh | 29 set - - stdout: a b - a b a b - - - + + - --stderr: |
osh_.py | 29 set - - stdout: a b - a b a b - - - + + - --stderr: |
osh_.cc | 29 set - - stdout: a b - a b a b - - - + + - --stderr: |
osh_.cc | 30 set -o lists options [osh_.cc stdout] Expected 'noexec\n', got '' [osh_.cc status] Expected 0, got -6 stdout: stderr: osh_eval.dbg: cpp/posix.h:106: Tuple2<int, int> posix::pipe(): Assertion `0' failed. |
osh_.cc | 31 set without args lists variables [osh_.cc stdout] Expected '__GLOBAL=mutated\n__OTHERLOCAL=L\n__mylocal=L\n__var_in_parent_scope=D\n', got '' [osh_.cc status] Expected 0, got -6 stdout: stderr: osh_eval.dbg: cpp/posix.h:106: Tuple2<int, int> posix::pipe(): Assertion `0' failed. |
osh_.py | 32 'set' and 'eval' round trip [osh_.py stdout] Expected '[ ]\nOK\nOK\nOK\nOK\nOK\n', got '[ ]\n' [osh_.py status] Expected 0, got 1 [osh_.py stderr] Found 'Traceback (most recent' stdout: [ ]stderr: varfile=$TMP/vars-$(basename $SH).txt ^~~~~~~~ [ stdin ]:6: 'basename' not found set | grep '^_' > "$varfile" ^ [ stdin ]:7: Can't open '/vars-.txt': Permission denied Traceback (most recent call last): File "/home/andy/git/oilshell/oil/bin/osh_eval.py", line 71, in <module> sys.exit(main(sys.argv)) File "/home/andy/git/oilshell/oil/bin/osh_eval.py", line 39, in main status = pure.Main('osh', arg_r, environ, login_shell, loader, None) File "/home/andy/git/oilshell/oil/core/pure.py", line 451, in Main cmd_flags=cmd_eval.IsMainProgram) File "/home/andy/git/oilshell/oil/core/main_loop.py", line 168, in Batch is_return, is_fatal = cmd_ev.ExecuteAndCatch(node, cmd_flags=cmd_flags) File "/home/andy/git/oilshell/oil/osh/cmd_eval.py", line 1438, in ExecuteAndCatch status = self._Execute(node) File "/home/andy/git/oilshell/oil/osh/cmd_eval.py", line 1318, in _Execute status, check_errexit = self._Dispatch(node) File "/home/andy/git/oilshell/oil/osh/cmd_eval.py", line 570, in _Dispatch status = self._RunSimpleCommand(cmd_val, node.do_fork) File "/home/andy/git/oilshell/oil/osh/cmd_eval.py", line 481, in _RunSimpleCommand return self.shell_ex.RunSimpleCommand(cmd_val, do_fork) File "/home/andy/git/oilshell/oil/core/executor.py", line 184, in RunSimpleCommand status = self.RunBuiltin(builtin_id, cmd_val) File "/home/andy/git/oilshell/oil/core/executor.py", line 112, in RunBuiltin builtin_func = self.builtins[builtin_id] KeyError: 2 |
osh_.cc | 32 'set' and 'eval' round trip [osh_.cc stdout] Expected '[ ]\nOK\nOK\nOK\nOK\nOK\n', got '' [osh_.cc status] Expected 0, got -6 stdout: stderr: osh_eval.dbg: cpp/posix.h:106: Tuple2<int, int> posix::pipe(): Assertion `0' failed. |
osh | 33 set without args and array variables (not in OSH) stdout: stderr: |
osh_.py | 33 set without args and array variables (not in OSH) stdout: stderr: |
osh_.cc | 33 set without args and array variables (not in OSH) [osh_.cc status] Expected 1, got -6 stdout: stderr: osh_eval.dbg: cpp/posix.h:106: Tuple2<int, int> posix::pipe(): Assertion `0' failed. |
osh | 34 set without args and assoc array variables (not in OSH) stdout: stderr: __assoc[a]=b ^~~~~~~~ [ stdin ]:3: fatal: Associative array keys must be strings: $x 'x' "$x" etc. |
osh_.py | 34 set without args and assoc array variables (not in OSH) stdout: stderr: __assoc[a]=b ^~~~~~~~ [ stdin ]:3: fatal: Associative array keys must be strings: $x 'x' "$x" etc. |
osh_.cc | 34 set without args and assoc array variables (not in OSH) stdout: stderr: __assoc[a]=b ^~~~~~~~ [ stdin ]:3: fatal: Associative array keys must be strings: $x 'x' "$x" etc. |
osh_.py | 37 shopt -s strict:all [osh_.py stdout] Expected 'shopt -u strict_argv\nshopt -u strict_arith\n-\nshopt -s strict_argv\nshopt -s strict_arith\n-\nshopt -s strict_argv\nshopt -u strict_arith\n-\n', got '-\n' [osh_.py status] Expected 0, got 127 stdout: -stderr: shopt -p | grep 'strict_' | head -n $n ^~~~ [ stdin ]:3: 'head' not found shopt -p | grep 'strict_' | head -n $n ^~~~ [ stdin ]:3: 'head' not found shopt -p | grep 'strict_' | head -n $n ^~~~ [ stdin ]:3: fatal: Exiting with status 127 (command in PID 28502) shopt -p | grep 'strict_' | head -n $n ^ [ stdin ]:3: fatal: Exiting with status 127 (pipeline invoked from PID 28502) |
osh_.cc | 37 shopt -s strict:all [osh_.cc stdout] Expected 'shopt -u strict_argv\nshopt -u strict_arith\n-\nshopt -s strict_argv\nshopt -s strict_arith\n-\nshopt -s strict_argv\nshopt -u strict_arith\n-\n', got '' [osh_.cc status] Expected 0, got -6 stdout: stderr: osh_eval.dbg: cpp/posix.h:106: Tuple2<int, int> posix::pipe(): Assertion `0' failed. |
osh_.cc | 38 shopt allows for backward compatibility like bash [osh_.cc stdout] Expected 'shopt -u nullglob\nstatus=0\nshopt -s nullglob\n', got 'shopt -u nullglob\n' [osh_.cc status] Expected 0, got -6 stdout: shopt -u nullglobstderr: osh_eval.dbg: cpp/posix.h:139: void posix::dup2(int, int): Assertion `0' failed. |
osh_.py | 39 shopt -p validates option names [osh_.py stdout] Expected 'shopt -u nullglob\nstatus=2\nshopt -u nullglob\nstatus=2\n', got 'shopt -u nullglob\nstatus=2\nstatus=1\n' stdout: shopt -u nullglob status=2 status=1stderr: shopt -p nullglob invalid failglob ^~~~~ [ stdin ]:1: 'shopt' got invalid option 'invalid' shopt nullglob invalid failglob > $TMP/out.txt ^ [ stdin ]:3: Can't open '/out.txt': Permission denied sed: can't read /out.txt: No such file or directory |
osh_.cc | 39 shopt -p validates option names [osh_.cc stdout] Expected 'shopt -u nullglob\nstatus=2\nshopt -u nullglob\nstatus=2\n', got 'shopt -u nullglob\nstatus=2\n' [osh_.cc status] Expected 0, got -6 stdout: shopt -u nullglob status=2stderr: shopt -p nullglob invalid failglob ^~~~~ [ stdin ]:1: 'shopt' got invalid option 'invalid' osh_eval.dbg: cpp/posix.h:139: void posix::dup2(int, int): Assertion `0' failed. |
osh_.cc | 42 shopt -s nounset doesn't work (may relax this later) [osh_.cc stdout] Expected 'status=2\nset +o nounset\n', got 'status=2\n' [osh_.cc status] Expected 0, got -6 stdout: status=2stderr: shopt -s nounset ^~~~~ [ stdin ]:7: 'shopt' doesn't own option 'nounset' (try 'set') osh_eval.dbg: cpp/posix.h:106: Tuple2<int, int> posix::pipe(): Assertion `0' failed. |
osh_.cc | 43 no-ops not in shopt -p output [osh_.cc stdout] Expected '--\n', got '' [osh_.cc status] Expected 0, got -6 stdout: stderr: osh_eval.dbg: cpp/posix.h:106: Tuple2<int, int> posix::pipe(): Assertion `0' failed. |