1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77
|
#!/bin/bash
# Generate tests for all node types from template files.
set -euo pipefail
function INFO { echo -e "\e[34mINFO:\e[0m $1" ; }
function WARN { echo -e "\e[31mWARN:\e[0m $1" ; }
function DIE { echo -e "\e[31mERROR:\e[0m $1"; exit 1; }
# Use GOFILE environment variable set by go generate
template_file="${GOFILE}"
# Check if template exists
if [[ ! -f "${template_file}" ]]; then
WARN "Error: Template file '$template_file' not found" >&2
DIE "GOFILE=${GOFILE:-<not set>}" >&2
fi
INFO "START: Generating node tests from template '${GOFILE}' ..."
if grep -q "TODO" "${template_file}"; then
DIE "✗ Aborting, found pattern 'TODO' in ${template_file}" >&2
fi
# Node types to generate
readonly NODE_TYPES=("BartNode" "FastNode" "LiteNode")
# for goimports, see below
generated_files=()
for nodeType in "${NODE_TYPES[@]}"; do
# Build output filename, e.g. litetestsgenerated_test.go
template_base="${template_file##*-}" # basename: tests_tmpl.go
type_prefix="${nodeType,,}" # litenode
type_prefix="${type_prefix/node/}" # lite
base_mangled="${template_base/_tmpl/generated_test}" # testsgenerated_test.go
output_file="${type_prefix}${base_mangled}" # litetestsgenerated_test.go
# Remove go:generate directives and build constraint, add generated header, substitute node type
sed -e "1i\\
// Code generated from file \"${template_file}\"; DO NOT EDIT." \
-e '/^\/\/go:build generate\b/d' \
-e '/^\/\/go:generate\b/d' \
-e '/GENERATE DELETE START/,/GENERATE DELETE END/d' \
-e "s|_NODE_TYPE|${nodeType}|g" \
"${template_file}" > "${output_file}"
if [[ -f "${output_file}" ]]; then
INFO "✓ Generated ${output_file}"
generated_files+=("$output_file")
else
DIE "✗ Failed to generate ${output_file}" >&2
fi
done
echo
# Run goimports on generated files
if command -v goimports >/dev/null 2>&1; then
INFO "Running goimports on generated files..."
goimports -w "${generated_files[@]}"
INFO "✓ goimports completed"
else
WARN "⚠ goimports not found, skipping imports"
fi
# Run gofumpt on generated files
if command -v gofumpt >/dev/null 2>&1; then
INFO "Running gofumpt on generated files..."
gofumpt -w "${generated_files[@]}"
INFO "✓ gofumpt completed"
else
WARN "⚠ gofumpt not found, skipping formatting"
fi
INFO "END: Template generation complete!"
echo
|