1 #!/usr/bin/env bash
2
3 #### --debug-file
4 $SH --debug-file $TMP/debug.txt -c 'true'
5 grep 'OSH started with' $TMP/debug.txt >/dev/null && echo yes
6 ## stdout: yes
7
8 #### repr
9 x=42
10 repr x
11 echo status=$?
12 repr nonexistent
13 echo status=$?
14 ## STDOUT:
15 x = (cell val:(value.Str s:42) exported:F readonly:F)
16 status=0
17 'nonexistent' is not defined
18 status=1
19 ## END
20
21 #### repr on indexed array with hole
22 declare -a array
23 array[3]=42
24 repr array
25 ## STDOUT:
26 array = (cell val:(value.StrArray strs:[_ _ _ 42]) exported:F readonly:F)
27 ## END
28
29
30 #### crash dump
31 rm -f $TMP/*.json
32 OSH_CRASH_DUMP_DIR=$TMP $SH -c '
33 g() {
34 local glocal="glocal"
35 echo $(( 1 / 0 ))
36 }
37 f() {
38 local flocal="flocal"
39 shift
40 FOO=bar g
41 }
42 readonly array=(A B C)
43 f "${array[@]}"
44 ' dummy a b c
45 echo status=$?
46 # Just check that we can parse it. TODO: Test properties.
47 python -m json.tool $TMP/*.json > /dev/null
48 echo status=$?
49 ## STDOUT:
50 status=1
51 status=0
52 ## END
53
54 #### crash dump with source
55 # TODO: The failure is not propagated through 'source'. Failure only happens
56 # on 'errexit'.
57 #rm -f $TMP/*.json
58 OSH_CRASH_DUMP_DIR=$TMP $SH -c '
59 set -o errexit
60 source spec/testdata/crash.sh
61 '
62 echo status=$?
63
64 # Now try to parse crash dumps
65 set -o xtrace
66 set -o errexit
67 ok=0
68 for dump in $TMP/*.json; do
69 # Workaround for test issue: release binaries leave empty files because they
70 # don't have the json module.
71 if test -s $dump; then # non-empty
72 python -m json.tool $dump > /dev/null
73 echo "OK $dump" >&2
74 (( ++ok ))
75 fi
76 done
77 if test $ok -ge 1; then # make sure we parsed at least once crash dump
78 echo OK
79 fi
80 ## STDOUT:
81 status=1
82 OK
83 ## END
84
85 # NOTE: strict-arith has one case in arith.test.sh), strict-word-eval has a case in var-op-other.
86