| 1 | ## oils_failures_allowed: 1 | 
  | 2 |  | 
  | 3 |  | 
  | 4 | shopt --set parse_proc parse_at | 
  | 5 |  | 
  | 6 | f() { | 
  | 7 | write -- f "$@" | 
  | 8 | } | 
  | 9 | proc p { | 
  | 10 | write -- p @ARGV | 
  | 11 | } | 
  | 12 | runproc f 1 2 | 
  | 13 | echo status=$? | 
  | 14 |  | 
  | 15 | runproc p 3 4 | 
  | 16 | echo status=$? | 
  | 17 |  | 
  | 18 | runproc invalid 5 6 | 
  | 19 | echo status=$? | 
  | 20 |  | 
  | 21 | runproc | 
  | 22 | echo status=$? | 
  | 23 |  | 
  | 24 | ## STDOUT: | 
  | 25 | f | 
  | 26 | 1 | 
  | 27 | 2 | 
  | 28 | status=0 | 
  | 29 | p | 
  | 30 | 3 | 
  | 31 | 4 | 
  | 32 | status=0 | 
  | 33 | status=1 | 
  | 34 | status=2 | 
  | 35 | ## END | 
  | 36 |  | 
  | 37 |  | 
  | 38 |  | 
  | 39 | shopt --set parse_brace parse_proc | 
  | 40 |  | 
  | 41 | proc p { | 
  | 42 | echo 'hi from p' | 
  | 43 | } | 
  | 44 |  | 
  | 45 | # The block is ignored for now | 
  | 46 | runproc p { | 
  | 47 | echo myblock | 
  | 48 | } | 
  | 49 | echo | 
  | 50 |  | 
  | 51 | proc ty (w; t; n; block) { | 
  | 52 | echo 'ty' | 
  | 53 | pp line (w) | 
  | 54 | pp line (t) | 
  | 55 | pp line (n) | 
  | 56 | echo $[type(block)] | 
  | 57 | } | 
  | 58 |  | 
  | 59 | ty a (42; n=99; ^(echo ty)) | 
  | 60 | echo | 
  | 61 |  | 
  | 62 | runproc ty a (42; n=99; ^(echo ty)) | 
  | 63 | echo | 
  | 64 |  | 
  | 65 | runproc ty a (42; n=99) { | 
  | 66 | echo 'ty gets literal' | 
  | 67 | } | 
  | 68 |  | 
  | 69 | # TODO: Command vs. Block vs. Literal Block should be unified | 
  | 70 |  | 
  | 71 | ## STDOUT: | 
  | 72 | hi from p | 
  | 73 |  | 
  | 74 | ty | 
  | 75 | (Str)   "a" | 
  | 76 | (Int)   42 | 
  | 77 | (Int)   99 | 
  | 78 | Command | 
  | 79 |  | 
  | 80 | ty | 
  | 81 | (Str)   "a" | 
  | 82 | (Int)   42 | 
  | 83 | (Int)   99 | 
  | 84 | Command | 
  | 85 |  | 
  | 86 | ty | 
  | 87 | (Str)   "a" | 
  | 88 | (Int)   42 | 
  | 89 | (Int)   99 | 
  | 90 | Block | 
  | 91 | ## END | 
  | 92 |  | 
  | 93 |  | 
  | 94 |  | 
  | 95 |  | 
  | 96 | shopt -s ysh:upgrade | 
  | 97 |  | 
  | 98 | fopen >out.txt { | 
  | 99 | x=42 | 
  | 100 | setvar y = {foo: x} | 
  | 101 |  | 
  | 102 | pp asdl (x) | 
  | 103 | pp asdl (y) | 
  | 104 |  | 
  | 105 | # TODO, this might be nice? | 
  | 106 | # pp asdl (x, y) | 
  | 107 | } | 
  | 108 |  | 
  | 109 | # Two lines with value.Str | 
  | 110 | grep -n -o value.Str out.txt | 
  | 111 |  | 
  | 112 | # Dict should have an address | 
  | 113 | #grep -n -o 'Dict 0x' out.txt | 
  | 114 |  | 
  | 115 | #cat out.txt | 
  | 116 |  | 
  | 117 | ## STDOUT: | 
  | 118 | 1:value.Str | 
  | 119 | 2:value.Str | 
  | 120 | ## END | 
  | 121 |  | 
  | 122 |  | 
  | 123 |  | 
  | 124 | shopt -s ysh:upgrade | 
  | 125 |  | 
  | 126 | var d = {} | 
  | 127 | setvar d.cycle = d | 
  | 128 |  | 
  | 129 | pp line (d) | fgrep -o '{"cycle":' | 
  | 130 |  | 
  | 131 | pp asdl (d) | fgrep -o 'cycle ...' | 
  | 132 |  | 
  | 133 | ## STDOUT: | 
  | 134 | {"cycle": | 
  | 135 | cycle ... | 
  | 136 | ## END | 
  | 137 |  | 
  | 138 |  | 
  | 139 |  | 
  | 140 | declare -a array=(a b c) | 
  | 141 | pp line (array) | 
  | 142 |  | 
  | 143 | array[5]=z | 
  | 144 | pp line (array) | 
  | 145 |  | 
  | 146 | declare -A assoc=([k]=v [k2]=v2) | 
  | 147 | pp line (assoc) | 
  | 148 |  | 
  | 149 | # I think assoc arrays can never null / unset | 
  | 150 |  | 
  | 151 | assoc['k3']= | 
  | 152 | pp line (assoc) | 
  | 153 |  | 
  | 154 | ## STDOUT: | 
  | 155 | (BashArray)   ["a","b","c"] | 
  | 156 | (BashArray)   ["a","b","c",null,null,"z"] | 
  | 157 | (BashAssoc)   {"k":"v","k2":"v2"} | 
  | 158 | (BashAssoc)   {"k":"v","k2":"v2","k3":""} | 
  | 159 | ## END | 
  | 160 |  | 
  | 161 |  | 
  | 162 |  | 
  | 163 |  | 
  | 164 | pp gc-stats | 
  | 165 |  | 
  | 166 | ## STDOUT: | 
  | 167 | ## END | 
  | 168 |  | 
  | 169 |  | 
  | 170 |  | 
  | 171 | x=42 | 
  | 172 |  | 
  | 173 | pp cell x | 
  | 174 | echo status=$? | 
  | 175 |  | 
  | 176 | pp -- cell :x | 
  | 177 | echo status=$? | 
  | 178 |  | 
  | 179 | pp cell nonexistent | 
  | 180 | echo status=$? | 
  | 181 | ## STDOUT: | 
  | 182 | x = (Cell exported:F readonly:F nameref:F val:(value.Str s:42)) | 
  | 183 | status=0 | 
  | 184 | x = (Cell exported:F readonly:F nameref:F val:(value.Str s:42)) | 
  | 185 | status=0 | 
  | 186 | status=1 | 
  | 187 | ## END | 
  | 188 |  | 
  | 189 |  | 
  | 190 | declare -a array | 
  | 191 | array[3]=42 | 
  | 192 | pp cell array | 
  | 193 | ## STDOUT: | 
  | 194 | array = (Cell exported:F readonly:F nameref:F val:(value.BashArray strs:[_ _ _ 42])) | 
  | 195 | ## END | 
  | 196 |  | 
  | 197 |  | 
  | 198 |  | 
  | 199 | shopt --set ysh:upgrade | 
  | 200 |  | 
  | 201 | # This has to be a separate file because sh_spec.py strips comments! | 
  | 202 | . $REPO_ROOT/spec/testdata/doc-comments.sh | 
  | 203 |  | 
  | 204 | pp proc | 
  | 205 | echo --- | 
  | 206 |  | 
  | 207 | # print one | 
  | 208 | pp proc f | 
  | 209 |  | 
  | 210 | ## STDOUT: | 
  | 211 | proc_name	doc_comment | 
  | 212 | f	"doc ' comment with \" quotes" | 
  | 213 | g	"" | 
  | 214 | myproc	"YSH-style proc" | 
  | 215 | "true"	"Special quoting rule" | 
  | 216 | --- | 
  | 217 | proc_name	doc_comment | 
  | 218 | f	"doc ' comment with \" quotes" | 
  | 219 | ## END | 
  | 220 |  |