goon

goon

https://git.tonybtw.com/goon.git git://git.tonybtw.com/goon.git
1,571 bytes raw
1
#!/usr/bin/env bash
2
3
cd "$(dirname "$0")/.."
4
5
GOON="./goon"
6
PASS=0
7
FAIL=0
8
9
red='\033[0;31m'
10
green='\033[0;32m'
11
reset='\033[0m'
12
13
for test in tests/valid/*.goon; do
14
    name=$(basename "$test" .goon)
15
    expected="tests/valid/${name}.expected"
16
17
    if [ ! -f "$expected" ]; then
18
        echo -e "${red}SKIP${reset} $name (no .expected file)"
19
        continue
20
    fi
21
22
    output=$("$GOON" eval "$test" 2>&1)
23
    expected_content=$(cat "$expected")
24
25
    if [ "$output" = "$expected_content" ]; then
26
        echo -e "${green}PASS${reset} $name"
27
        ((PASS++))
28
    else
29
        echo -e "${red}FAIL${reset} $name"
30
        echo "  expected: $expected_content"
31
        echo "  got:      $output"
32
        ((FAIL++))
33
    fi
34
done
35
36
for test in tests/invalid/*.goon; do
37
    name=$(basename "$test" .goon)
38
    expected="tests/invalid/${name}.expected"
39
40
    if [ ! -f "$expected" ]; then
41
        echo -e "${red}SKIP${reset} $name (no .expected file)"
42
        continue
43
    fi
44
45
    output=$("$GOON" check "$test" 2>&1)
46
    exit_code=$?
47
    expected_content=$(cat "$expected")
48
49
    if [ $exit_code -eq 0 ]; then
50
        echo -e "${red}FAIL${reset} $name (should have failed)"
51
        ((FAIL++))
52
    elif echo "$output" | grep -q "$expected_content"; then
53
        echo -e "${green}PASS${reset} $name"
54
        ((PASS++))
55
    else
56
        echo -e "${red}FAIL${reset} $name"
57
        echo "  expected error containing: $expected_content"
58
        echo "  got: $output"
59
        ((FAIL++))
60
    fi
61
done
62
63
echo ""
64
echo "Results: $PASS passed, $FAIL failed"
65
66
if [ $FAIL -gt 0 ]; then
67
    exit 1
68
fi