run-file () { local spec_name=$1; shift; local spec_file=spec/$spec_name.test.sh; local suite; suite=$(test/sh_spec.py --print-spec-suite $spec_file); local spec_subdir; case $suite in osh) spec_subdir='osh-cpp' ;; ysh) spec_subdir='ysh-cpp' ;; *) die "Invalid suite $suite" ;; esac; local base_dir=_tmp/spec/$spec_subdir; mkdir -v -p $base_dir; sh-spec $spec_file --timeout 10 --oils-bin-dir $PWD/bin --oils-cpp-bin-dir $REPO_ROOT/_bin/cxx-asan --tsv-output $base_dir/${spec_name}.tsv "$@" } assign: spec test case results

Results for assign.test.sh

statusoshosh-cpp
pass 4141
ok 11
FAIL 22
total4444
caseoshosh-cppdescription
0pass pass Env value doesn't persist
1pass pass Env value with equals
2pass pass Env binding can use preceding bindings, but not subsequent ones
3pass pass Env value with two quotes
4pass pass Env value with escaped <
5pass pass FOO=foo echo [foo]
6pass pass FOO=foo fun
7pass pass Multiple temporary envs on the stack
8pass pass Escaped = in command name
9pass pass Env binding not allowed before compound command
10pass pass Trying to run keyword 'for'
11pass pass Empty env binding
12pass pass Assignment doesn't do word splitting
13pass pass Assignment doesn't do glob expansion
14pass pass Env binding in readonly/declare is NOT exported! (pitfall)
15pass pass assignments / array assignments not interpreted after 'echo'
16pass pass dynamic local variables (and splitting)
17pass pass readonly x= gives empty string (regression)
18pass pass 'local x' does not set variable
19pass pass 'local -a x' does not set variable
20pass pass 'local x' and then array assignment
21pass pass 'declare -A' and then dict assignment
22pass pass declare in an if statement
23pass pass Modify a temporary binding
24pass pass Reveal existence of "temp frame" (All shells disagree here!!!)
25pass pass Test above without 'local' (which is not POSIX)
26pass pass Using ${x-default} after unsetting local shadowing a global
27pass pass Using ${x-default} after unsetting a temp binding shadowing a global
28pass pass static assignment doesn't split
29pass pass aliased assignment doesn't split
30pass pass assignment using dynamic keyword (splits in most shells, not in zsh/osh)
31pass pass assignment using dynamic var names doesn't split
32pass pass assign and glob
33pass pass declare and glob
34pass pass readonly $x where x='b c'
35pass pass readonly a=(1 2) no_value c=(3 4) makes 'no_value' readonly
36pass pass export a=1 no_value c=2
37pass pass local a=loc $var c=loc
38FAIL FAIL redirect after assignment builtin (what's going on with dash/bash/mksh here?)
detailsdetails
39FAIL FAIL redirect after command sub (like case above but without assignment builtin)
detailsdetails
40pass pass redirect after bare assignment
41ok ok redirect after declare -p
detailsdetails
42pass pass declare -a arr does not remove existing arrays (OSH regression)
43pass pass declare -A dict does not remove existing arrays (OSH regression)
82 passed, 2 OK, 0 not implemented, 0 BUG, 2 failed, 0 timeouts, 0 cases skipped
2 failed under osh

Details on runs that didn't PASS

osh38 redirect after assignment builtin (what's going on with dash/bash/mksh here?)

[osh stderr] Expected 'STDERR\n', got ''

stdout:
done
stderr:
osh-cpp38 redirect after assignment builtin (what's going on with dash/bash/mksh here?)

[osh-cpp stderr] Expected 'STDERR\n', got ''

stdout:
done
stderr:
osh39 redirect after command sub (like case above but without assignment builtin)

[osh stderr] Expected 'STDERR\n', got ''

stdout:
stdout=STDOUT
stderr:
osh-cpp39 redirect after command sub (like case above but without assignment builtin)

[osh-cpp stderr] Expected 'STDERR\n', got ''

stdout:
stdout=STDOUT
stderr:
osh41 redirect after declare -p

stdout:
stderr: 
declare -- foo=bar
osh-cpp41 redirect after declare -p

stdout:
stderr: 
declare -- foo=bar