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 "$@" } sh-func: spec test case results

Results for sh-func.test.sh

statusoshosh-cpp
pass 1010
FAIL 11
total1111
caseoshosh-cppdescription
0pass pass Locals don't leak
1pass pass Globals leak
2pass pass Return statement
3pass pass Dynamic Scope
4pass pass Dynamic Scope Mutation (wow this is bad)
5pass pass Assign local separately
6pass pass Assign a local and global on same line
7pass pass Return without args gives previous
8pass pass return "" (a lot of disagreement)
9pass pass return $empty
10FAIL FAIL Subshell function
detailsdetails
20 passed, 0 OK, 0 not implemented, 0 BUG, 1 failed, 0 timeouts, 0 cases skipped
1 failed under osh

Details on runs that didn't PASS

osh10 Subshell function

[osh stdout] Expected 'status=42\nstatus=42\n', got 'status=42\n'
[osh status] Expected 0, got 1

stdout:
status=42
stderr:
  g() ( return 42 )
        ^~~~~~
[ stdin ]:2: fatal: Invalid control flow 'return' in pipeline / subshell / background
osh-cpp10 Subshell function

[osh-cpp stdout] Expected 'status=42\nstatus=42\n', got 'status=42\n'
[osh-cpp status] Expected 0, got 1

stdout:
status=42
stderr:
  g() ( return 42 )
        ^~~~~~
[ stdin ]:2: fatal: Invalid control flow 'return' in pipeline / subshell / background