11#! /usr/bin/env bash
22
3-
43# Exit if anything fails.
54set -euo pipefail
65
7-
86# see comment in generator-utils/utils.sh
97# shellcheck source=bin/generator-utils/utils.sh
108# shellcheck source=./generator-utils/utils.sh
119source ./bin/generator-utils/utils.sh
1210
11+ if [ ! -e bin/generator-utils/escape_double_quotes ]; then
12+ message " info" " Building util function"
13+ cd util/escape_double_quotes && ./build && cd ../..
14+ fi
15+
1316digest_template () {
1417 local template
15- template=$( cat bin/test_template)
18+ template=$( bin/generator-utils/escape_double_quotes bin/test_template)
1619 # Turn every token into a jq command
1720
1821 echo " $template " | sed ' s/${\([^}]*\)\}\$/$(echo $case | jq -r ' \' ' .\1' \' ' )/g'
3538# Flattens canonical json, extracts only the objects with a uuid
3639cases=$( echo " $canonical_json " | jq ' [ .. | objects | with_entries(select(.key | IN("uuid", "description", "input", "expected", "property"))) | select(. != {}) | select(has("uuid")) ]' )
3740
38-
3941# Shellcheck doesn't recognize that `case` is not unused
4042
4143# shellcheck disable=SC2034
@@ -45,9 +47,8 @@ jq -c '.[]' <<<"$cases" | while read -r case; do
4547 eval_template=" $( digest_template | sed -e " s/\$ (\(.*\))/\$ \(\1\)/g" ) "
4648 eval_template=" $( eval " echo \" $eval_template \" " ) "
4749
48-
4950 # Turn function name into snake_case
50- formatted_template=$( echo " $eval_template " | sed -e ' :loop ' -e ' s/\ (fn[^(]*\)[ -]/\1_ /g' -e ' t loop ' | sed ' s/fn_/fn /' )
51+ formatted_template=$( echo " $eval_template " | sed -E - e ' /^fn/!b ' -e ' s/[^a-zA-Z0-9_{}()[:space:]-]//g ' -e ' s/([[:upper:]])/ \L\1/g ' -e ' s/ (fn[[:space:]]+)([a-z0-9_-]+)/\1\L\2 /g' -e ' s/ /_/g ' -e ' s/_\{/\{/g ' -e ' s/-/_/g ' | sed ' s/fn_/fn /' | sed ' s/__\+/_/g ' )
5152
5253 # Push to test file
5354 echo " $formatted_template " >> " $test_file "
5859rustfmt " $test_file "
5960
6061message " success" " Generated tests successfully! Check out ${test_file} "
61-
0 commit comments