forked from maksimr/vim-jsbeautify
-
Notifications
You must be signed in to change notification settings - Fork 0
/
urchin
executable file
·147 lines (124 loc) · 3.06 KB
/
urchin
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
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
#!/bin/bash
fullpath() {
(
cd "$1"
pwd
)
}
indent() {
level="$1"
printf "%$((2 * ${level}))s"
}
recurse() {
potential_test="$1"
indent_level="$2"
[ "$potential_test" = 'setup_dir' ] && return
[ "$potential_test" = 'teardown_dir' ] && return
[ "$potential_test" = 'setup' ] && return
[ "$potential_test" = 'teardown' ] && return
echo > "$stdout_file"
if [ -d "$potential_test" ]
then
(
indent $indent_level
echo " ${potential_test}"
cd "$potential_test"
[ -f setup_dir ] && [ -x setup_dir ] && ./setup_dir >> $stdout_file
for test in *
do
[ -f setup ] && [ -x setup ] && ./setup >> $stdout_file
# $2 instead of $indent_level so it doesn't clash
recurse "${test}" $(( $2 + 1 ))
[ -f teardown ] && [ -x teardown ] && ./teardown >> $stdout_file
done
[ -f teardown_dir ] && [ -x teardown_dir ] && ./teardown_dir >> $stdout_file
echo
)
elif [ -x "$potential_test" ]
then
[ -f setup ] && [ -x setup ] && ./setup >> $stdout_file
# Run the test
./"$potential_test" &> $stdout_file
exit_code="$?"
[ -f teardown ] && [ -x teardown ] && ./teardown >> $stdout_file
indent $indent_level
if [ "$exit_code" = '0' ]
then
# On success, print a '✓'
echo -ne '\033[32m✓ \033[0m'
echo "${potential_test}"
echo "${potential_test} passed" >> "$logfile"
else
# On fail, print a red '✗'
echo -ne '\033[31m✗ \033[0m'
echo "${potential_test}"
echo "${potential_test} failed" >> "$logfile"
cat $stdout_file
fi
rm $stdout_file
fi
}
USAGE="usage: $0 <test directory>"
urchin_help() {
echo
echo "$USAGE"
echo
echo '-f Force urchin to run on directories not named "test".'
echo '-h This help'
echo
echo '--xsd Output xUnit XML schema for an integration server.'
echo
echo 'Go to http://www.urchin.sh for documentation on writing tests.'
echo
exit 0
}
urchin_go() {
echo Running tests
echo > "$logfile"
recurse "$1" 0
echo Done
echo $(grep -e 'passed$' "$logfile"|wc -l) tests passed.
echo $(grep -e 'failed$' "$logfile"|wc -l) tests failed.
}
urchin_molly_guard() {
echo
echo 'The directory on which you are running urchin is not'
echo 'called "test", so I am not running in case that'
echo 'was an accident. Use the -f flag if you really want'
echo 'to run urchin on that directory.'
echo
exit 1
}
FORCE=false
HELP=false
while [ $# -gt 0 ]
do
case "$1" in
-f) FORCE=true;;
-h) HELP=true;;
# --xsd) action=testsuite;;
# --) shift; break;;
-*) echo >&2 $USAGE
exit 1;;
*) break;;
esac
shift
done
# Constants
logfile=$(fullpath "$1")/.urchin.log
stdout_file=/tmp/urchin_stdout
# Help first
$HELP && urchin_help
# Verify argument for main stuff
if [ "$#" != '1' ] && [ ! -d "$1" ]
then
echo "$USAGE"
exit 1
fi
# Run or present the Molly guard.
if echo "$(basename "$(fullpath "$1")")" | grep test || $FORCE
then
urchin_go "$1"
else
urchin_molly_guard
fi