This repository has been archived by the owner on May 18, 2023. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathtest_README.sh
executable file
·119 lines (113 loc) · 2.47 KB
/
test_README.sh
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
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
#!/bin/bash
set -e -u
cd $(dirname $0)
EXPECTS=$1
README_FILE=$2
SUCCESS=0
FAILS=0
function do_script
{
local script="$1"
set --
set +e +u
eval "$script"
local ret=$?
set -e -u
return $ret
}
LINENUM=0
IN_SCRIPT=
SCRIPT=
PATH=.:$PATH
README=$(mktemp)
cat $README_FILE|tr -d \\r >$README
exec <$README
while read line
do
LINENUM=$((LINENUM + 1))
if [[ ! -z "$IN_SCRIPT" ]];then
if [[ "$line" == '```' ]];then
case "$IN_SCRIPT" in
text)
if [[ ! -z "$COMPARE_RESULT" ]];then
if [ ${BASH_VERSINFO[0]} -lt 4 ];then
EXPECTED=$(echo "$SCRIPT"|sed -e '/ *# only bash 4$/d')
else
EXPECTED=$(echo "$SCRIPT"|sed -e 's/ *# only bash 4$//')
fi
EXPECT=
if [[ "$COMPARE_RESULT" != "$EXPECTED" ]];then
echo "-- $SCRIPT_NAME ---------------------------------------------"
echo "ERROR RESULT NOT EXPECT"
echo "$BASH_SCRIPT"
diff -u <(echo "$COMPARE_RESULT") <(echo "$EXPECTED")
FAILS=$((FAILS + 1))
SUCCESS=$((SUCCESS - 1))
else
echo "EXPECTED RESULT $SCRIPT_NAME"
fi
fi
RESULT=
;;
bash)
set +e
RESULT=$(do_script "$SCRIPT")
ERRORCODE=$?
set -e
SUCCESS=$((SUCCESS + 1))
if [ $ERRORCODE != 0 ];then
echo "-- $SCRIPT_NAME -------------------------------------------"
echo ERROR $ERRORCODE
echo "$SCRIPT"
echo "-- STDOUT ----------------------"
echo "$RESULT"
RESULT=
FAILS=$((FAILS + 1))
SUCCESS=$((SUCCESS - 1))
else
echo RUN SUCCSSS $SCRIPT_NAME
fi
;;
*)
echo "UN EXPECTED IN_SCRIPT $IN_SCRIPT"
exit -1
esac
COMPARE_RESULT=
IN_SCRIPT=
else
if [[ "$SCRIPT" == "1" ]];then
SCRIPT="$line"
else
SCRIPT="$SCRIPT
$line"
fi
fi
else
case "$line" in
'```bash')
IN_SCRIPT="bash"
SCRIPT_NAME="$README_FILE:$LINENUM"
SCRIPT="1"
;;
'↓')
COMPARE_RESULT="$RESULT"
BASH_SCRIPT="$SCRIPT"
;;
'```')
IN_SCRIPT="text"
SCRIPT="1"
;;
esac
fi
done
rm $README
if [ $FAILS != 0 ];then
echo "FAILS $FAILS"
exit -1
else
if [ $EXPECTS != $SUCCESS ];then
echo "ERROR EXPECTED TESTS = $EXPECTS, BUT NOW SUCCESS= $SUCCESS"
exit -1
fi
echo "SUCCESS $SUCCESS TESTS"
fi