shell dot on steroids https://pagure.io/shellfu

TF_RUN 13KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385
  1. #!/bin/bash
  2. . "$TF_DIR/include/subtest.sh"
  3. . "$TF_DIR/include/tools.sh"
  4. . "$(sfpath)" || tf_exit_error "failed to init shellfu"
  5. PRETTY=plain
  6. shellfu import pretty || tf_exit_error "failed to import pretty"
  7. tf_enum_subtests() {
  8. echo "v0_d0_debug"
  9. echo "v0_d0_debug_pipe"
  10. echo "v0_d0_echos"
  11. echo "v0_d0_think"
  12. echo "v0_d0_warn"
  13. echo "v0_d0_wrap_debug"
  14. echo "v0_d0_wrap_die"
  15. echo "v0_d0_wrap_mkusage"
  16. echo "v0_d1_debug"
  17. echo "v0_d1_debug_pipe"
  18. echo "v0_d1_debugv"
  19. echo "v0_d1_echos"
  20. echo "v0_d1_think"
  21. echo "v0_d1_warn"
  22. echo "v0_d1_wrap_debug"
  23. echo "v0_d1_wrap_die"
  24. echo "v0_d1_wrap_mkusage"
  25. echo "v1_d0_debug"
  26. echo "v1_d0_debug_pipe"
  27. echo "v1_d0_echos"
  28. echo "v1_d0_think"
  29. echo "v1_d0_warn"
  30. echo "v1_d0_wrap_debug"
  31. echo "v1_d0_wrap_die"
  32. echo "v1_d0_wrap_mkusage"
  33. echo "v1_d1_debug"
  34. echo "v1_d1_debug_pipe"
  35. echo "v1_d1_echos"
  36. echo "v1_d1_think"
  37. echo "v1_d1_warn"
  38. echo "v1_d1_wrap_debug"
  39. echo "v1_d1_wrap_debug_xmod"
  40. echo "v1_d1_wrap_die"
  41. echo "v1_d1_wrap_mkusage"
  42. echo "v1_d1_wrap_mkusage_0"
  43. echo "v1_d1_wrap_mkusage_0w"
  44. echo "v1_d1_wrap_mkusage_1"
  45. echo "v1_d1_wrap_mkusage_2"
  46. echo "v1_d1_wrap_mkusage_o"
  47. echo "v1_d1_wrap_mkusage_p"
  48. echo "v1_d1_wrap_mkusage_i"
  49. echo "v1_d1_wrap_mkusage_c"
  50. echo "v1_d1_wrap_mkusage_all"
  51. echo "v1_d1_wrap_mkusage_allw"
  52. echo "v1_d1_wrap_mkusage_conflict"
  53. echo "v1_d1_wrap_mkusage_self"
  54. echo "v1_d1_wrap_mkusage-subcommand"
  55. }
  56. BASH_VER_X=${BASH_VERSION%%.*}
  57. BASH_VER_YZ=${BASH_VERSION#$BASH_VER_X.}
  58. BASH_VER_Y=${BASH_VER_YZ%%.**}
  59. mkoracle() {
  60. local file=$1
  61. case $file in
  62. oracle/v0_d0/debug_pipe.stdout)
  63. echo 'line 1'
  64. echo 'line 2'
  65. ;;
  66. oracle/v0_d0/echos.stdout)
  67. echo 'foo'
  68. ;;
  69. oracle/v0_d0/warn.stderr)
  70. echo 'foo'
  71. ;;
  72. oracle/v0_d0/wrap_die.stderr)
  73. echo 'foo'
  74. ;;
  75. oracle/v0_d0/wrap_mkusage.stderr)
  76. echo 'usage:'
  77. echo ' wrap_mkusage [-d] load [-f file]'
  78. echo ' wrap_mkusage [-d] save [-f file]'
  79. ;;
  80. oracle/v0_d1/debug.stderr)
  81. echo 'debug:tf_testflt(): foo'
  82. ;;
  83. oracle/v0_d1/debug_pipe.stderr)
  84. echo "debug:tf_testflt(): |foo: 'line 1'"
  85. echo "debug:tf_testflt(): |foo: 'line 2'"
  86. ;;
  87. oracle/v0_d1/debug_pipe.stdout)
  88. echo 'line 1'
  89. echo 'line 2'
  90. ;;
  91. oracle/v0_d1/debugv.stderr)
  92. echo 'debug:tf_testflt(): foo="bar"'
  93. if test $BASH_VER_X -eq 4 && test $BASH_VER_Y -lt 4; then
  94. echo 'debug:tf_testflt(): fooarr='\''([0]="bar" [1]="baz")'\'''
  95. echo 'debug:tf_testflt(): fooassoc='\''([bar]="baz" [qux]="quux" )'\'''
  96. else
  97. echo 'debug:tf_testflt(): fooarr=([0]="bar" [1]="baz")'
  98. echo 'debug:tf_testflt(): fooassoc=([bar]="baz" [qux]="quux" )'
  99. fi
  100. echo 'debug:tf_testflt(): fooint="29"'
  101. echo 'debug:tf_testflt(): fooup="BAR"'
  102. echo 'debug:tf_testflt(): fooempty=""'
  103. echo 'debug:tf_testflt(): foounset #Unset'
  104. ;;
  105. oracle/v0_d1/echos.stdout)
  106. echo 'foo'
  107. ;;
  108. oracle/v0_d1/warn.stderr)
  109. echo 'foo'
  110. ;;
  111. oracle/v0_d1/wrap_debug.stderr)
  112. echo 'debug:wrap_debug: just poking about'
  113. echo 'debug:process_job(): in house'
  114. echo 'debug:process_task(): about to do a task'
  115. echo 'debug:__do_process_task(): really starting the task'
  116. echo 'debug:__really_do_process_task(): totally really starting the task'
  117. echo 'debug:foomod__room(): in a room'
  118. echo 'debug:foomod__desk(): in a desk'
  119. echo 'debug:foomod__drawer(): in a drawer'
  120. echo 'debug:_foomod__box(): in a secret box'
  121. echo 'debug:__foomod__document(): in a secret document'
  122. echo 'debug:barmod__page(): on a page'
  123. echo 'debug:barmod__paragraph(): in a paragraph'
  124. echo 'debug:barmod__sentence(): in a sentence'
  125. echo 'debug:_barmod__word(): in an unknown word'
  126. echo 'debug:__barmod__letter(): is an unknown letter'
  127. ;;
  128. oracle/v0_d1/wrap_die.stderr)
  129. echo '== trace =='
  130. echo ' test/wrap_die:19:main()'
  131. echo ' test/wrap_die:8:room()'
  132. echo ' test/wrap_die:12:desk()'
  133. echo ' -> test/wrap_die:16:drawer()'
  134. echo 'foo'
  135. ;;
  136. oracle/v0_d1/wrap_mkusage.stderr)
  137. echo 'usage:'
  138. echo ' wrap_mkusage [-d] load [-f file]'
  139. echo ' wrap_mkusage [-d] save [-f file]'
  140. ;;
  141. oracle/v1_d0/debug_pipe.stdout)
  142. echo 'line 1'
  143. echo 'line 2'
  144. ;;
  145. oracle/v1_d0/echos.stdout)
  146. echo 'foo'
  147. ;;
  148. oracle/v1_d0/think.stderr)
  149. echo 'foo'
  150. ;;
  151. oracle/v1_d0/warn.stderr)
  152. echo 'foo'
  153. ;;
  154. oracle/v1_d0/wrap_die.stderr)
  155. echo 'foo'
  156. ;;
  157. oracle/v1_d0/wrap_mkusage.stderr)
  158. echo 'usage:'
  159. echo ' wrap_mkusage [-d] load [-f file]'
  160. echo ' wrap_mkusage [-d] save [-f file]'
  161. ;;
  162. oracle/v1_d1/debug.stderr)
  163. echo 'debug:tf_testflt(): foo'
  164. ;;
  165. oracle/v1_d1/debug_pipe.stderr)
  166. echo "debug:tf_testflt(): |foo: 'line 1'"
  167. echo "debug:tf_testflt(): |foo: 'line 2'"
  168. ;;
  169. oracle/v1_d1/debug_pipe.stdout)
  170. echo 'line 1'
  171. echo 'line 2'
  172. ;;
  173. oracle/v1_d1/echos.stdout)
  174. echo 'foo'
  175. ;;
  176. oracle/v1_d1/think.stderr)
  177. echo 'foo'
  178. ;;
  179. oracle/v1_d1/warn.stderr)
  180. echo 'foo'
  181. ;;
  182. oracle/v1_d1/wrap_debug.stderr)
  183. echo 'debug:wrap_debug: just poking about'
  184. echo 'debug:process_job(): in house'
  185. echo 'debug:process_task(): about to do a task'
  186. echo 'debug:__do_process_task(): really starting the task'
  187. echo 'debug:__really_do_process_task(): totally really starting the task'
  188. echo 'debug:foomod__room(): in a room'
  189. echo 'debug:foomod__desk(): in a desk'
  190. echo 'debug:foomod__drawer(): in a drawer'
  191. echo 'debug:_foomod__box(): in a secret box'
  192. echo 'debug:__foomod__document(): in a secret document'
  193. echo 'debug:barmod__page(): on a page'
  194. echo 'debug:barmod__paragraph(): in a paragraph'
  195. echo 'debug:barmod__sentence(): in a sentence'
  196. echo 'debug:_barmod__word(): in an unknown word'
  197. echo 'debug:__barmod__letter(): is an unknown letter'
  198. ;;
  199. oracle/v1_d1/wrap_debug.stdout)
  200. ;;
  201. oracle/v1_d1/wrap_debug_xmod.stderr)
  202. echo 'debug:wrap_debug: just poking about'
  203. echo 'debug:process_task(): about to do a task'
  204. echo 'debug:__really_do_process_task(): totally really starting the task'
  205. echo 'debug:foomod__room(): in a room'
  206. echo 'debug:foomod__desk(): in a desk'
  207. echo 'debug:foomod__drawer(): in a drawer'
  208. echo 'debug:_foomod__box(): in a secret box'
  209. echo 'debug:__foomod__document(): in a secret document'
  210. ;;
  211. oracle/v1_d1/wrap_debug_xmod.stdout)
  212. ;;
  213. oracle/v1_d1/wrap_die.stderr)
  214. echo '== trace =='
  215. echo ' test/wrap_die:19:main()'
  216. echo ' test/wrap_die:8:room()'
  217. echo ' test/wrap_die:12:desk()'
  218. echo ' -> test/wrap_die:16:drawer()'
  219. echo 'foo'
  220. ;;
  221. oracle/v1_d1/wrap_mkusage-subcommand.stderr)
  222. echo 'usage:'
  223. echo ' wrap_mkusage subcommand [-d] load [-f file]'
  224. echo ' wrap_mkusage subcommand [-d] save [-f file]'
  225. ;;
  226. oracle/v1_d1/wrap_mkusage-subcommand.stdout)
  227. ;;
  228. oracle/v1_d1/wrap_mkusage.stderr)
  229. echo 'usage:'
  230. echo ' wrap_mkusage [-d] load [-f file]'
  231. echo ' wrap_mkusage [-d] save [-f file]'
  232. ;;
  233. oracle/v1_d1/wrap_mkusage_0w.stderr)
  234. echo 'bad usage: there should be no arguments'
  235. ;;
  236. oracle/v1_d1/wrap_mkusage_1.stderr)
  237. echo 'usage: wrap_mkusage_1 [-d] load [-f file]'
  238. ;;
  239. oracle/v1_d1/wrap_mkusage_2.stderr)
  240. echo 'usage:'
  241. echo ' wrap_mkusage_2 [-d] load [-f file]'
  242. echo ' wrap_mkusage_2 [-d] save [-f file]'
  243. ;;
  244. oracle/v1_d1/wrap_mkusage_all.stderr)
  245. echo 'usage:'
  246. echo ' wrap_mkusage_all [-d] load [-f file]'
  247. echo ' wrap_mkusage_all [-d] save [-f file]'
  248. echo ''
  249. echo 'options:'
  250. echo ' -d debug'
  251. echo ' -f file some file'
  252. echo ''
  253. echo 'commands:'
  254. echo ' load - load a file or something'
  255. echo ' save - save a file or something'
  256. echo ''
  257. echo 'other items:'
  258. echo ' data1'
  259. echo ' data2'
  260. echo ' data3'
  261. echo ''
  262. echo "and that's all folks!"
  263. ;;
  264. oracle/v1_d1/wrap_mkusage_allw.stderr)
  265. echo 'usage:'
  266. echo ' wrap_mkusage_allw [-d] load [-f file]'
  267. echo ' wrap_mkusage_allw [-d] save [-f file]'
  268. echo ''
  269. echo 'options:'
  270. echo ' -d debug'
  271. echo ' -f file some file'
  272. echo ''
  273. echo 'commands:'
  274. echo ' load - load a file or something'
  275. echo ' save - save a file or something'
  276. echo ''
  277. echo 'other items:'
  278. echo ' item1'
  279. echo ' item2'
  280. echo ' item3'
  281. echo ''
  282. echo "and that's all folks!"
  283. echo ''
  284. echo 'bad usage: missing an important argument'
  285. ;;
  286. oracle/v1_d1/wrap_mkusage_c.stderr)
  287. echo 'usage:'
  288. echo ' wrap_mkusage_c [-d] load [-f file]'
  289. echo ' wrap_mkusage_c [-d] save [-f file]'
  290. echo ''
  291. echo 'commands:'
  292. echo ' load - load a file or something'
  293. echo ' save - save a file or something'
  294. ;;
  295. oracle/v1_d1/wrap_mkusage_conflict.stderr)
  296. echo 'usage:'
  297. echo ' wrap_mkusage_conflict -o'
  298. echo ' wrap_mkusage_conflict [-d] load [-f file]'
  299. echo ' wrap_mkusage_conflict [-d] save [-f file]'
  300. ;;
  301. oracle/v1_d1/wrap_mkusage_i.stderr)
  302. echo 'usage:'
  303. echo ' wrap_mkusage_i [-d] load [-f file]'
  304. echo ' wrap_mkusage_i [-d] save [-f file]'
  305. echo ''
  306. echo 'other items:'
  307. echo ' item1'
  308. echo ' item2'
  309. echo ' item3'
  310. ;;
  311. oracle/v1_d1/wrap_mkusage_o.stderr)
  312. echo 'usage:'
  313. echo ' wrap_mkusage_o [-d] load [-f file]'
  314. echo ' wrap_mkusage_o [-d] save [-f file]'
  315. echo ''
  316. echo 'options:'
  317. echo ' -d debug'
  318. echo ' -f file some file'
  319. ;;
  320. oracle/v1_d1/wrap_mkusage_p.stderr)
  321. echo 'usage:'
  322. echo ' wrap_mkusage_p [-d] load [-f file]'
  323. echo ' wrap_mkusage_p [-d] save [-f file]'
  324. echo ''
  325. echo 'Author: chucky'
  326. ;;
  327. oracle/v1_d1/wrap_mkusage_self.stderr)
  328. echo 'usage:'
  329. echo ' somebody else [-d] load [-f file]'
  330. echo ' somebody else [-d] save [-f file]'
  331. ;;
  332. esac >"$file"
  333. }
  334. tf_do_subtest() {
  335. local name=$1
  336. local ttype="${name:0:5}"
  337. local tfun="${name:6}"
  338. local t_in="/dev/null"
  339. local o_es=0
  340. local o_out="oracle/$ttype/$tfun.stdout"
  341. local o_err="oracle/$ttype/$tfun.stderr"
  342. local cmd
  343. mkdir -p "oracle/$ttype"
  344. mkoracle "$o_out"
  345. mkoracle "$o_err"
  346. tf_debug "PRETTY=$PRETTY"
  347. case $tfun in
  348. debug) cmd='debug foo' ;;
  349. debug_pipe) cmd='debug_pipe foo'; t_in="test/$name.stdin" ;;
  350. debugv) cmd='foo=bar;
  351. fooarr=( bar baz );
  352. declare -A fooassoc;
  353. fooassoc[bar]=baz;
  354. fooassoc[qux]=quux;
  355. declare -i fooint;
  356. fooint=29;
  357. declare -u fooup;
  358. fooup=bar
  359. fooempty=
  360. debug -v foo fooarr fooassoc fooint fooup fooempty foounset'
  361. ;;
  362. echos) cmd='echos foo' ;;
  363. think) cmd='think foo' ;;
  364. warn) cmd='warn foo' ;;
  365. wrap_die) cmd='bash test/wrap_die foo'; o_es=3 ;;
  366. wrap_debug) cmd='bash test/wrap_debug' ;;
  367. wrap_debug_xmod)cmd='PRETTY_DEBUG_EXCLUDE=barmod,process,foo,process_job,__do_process_task bash test/wrap_debug' ;;
  368. wrap_mkusage*) cmd="bash test/$tfun"; o_es=2 ;;
  369. esac
  370. tf_testflt -n "$name" -i "$t_in" -S "$o_es" -O "$o_out" -E "$o_err" "$cmd"
  371. }
  372. tf_do_subtests