File: generate-node-tests.sh

package info (click to toggle)
golang-github-gaissmai-bart 0.26.0-1
  • links: PTS, VCS
  • area: main
  • in suites: experimental, sid
  • size: 4,172 kB
  • sloc: sh: 212; makefile: 8
file content (77 lines) | stat: -rwxr-xr-x 2,657 bytes parent folder | download
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