@@ -25,13 +25,14 @@ declare -r COVERAGE_FILE=${OUT_DIR}/lcov-total.info
25
25
26
26
# Command Line Options
27
27
declare opt_coverage=false
28
+ declare opt_coverage_per_test=false
28
29
declare opt_suite=false
29
30
declare opt_testCase=" "
30
31
31
32
32
33
function print_usage()
33
34
{
34
- echo ' Usage: testrunner.sh [--coverage] {--suite | <opt_testCase>}'
35
+ echo ' Usage: testrunner.sh [--coverage] [--coverage-per-test] {--suite | <opt_testCase>}'
35
36
echo ' Returns 0 for success, else non-zero'
36
37
}
37
38
@@ -49,6 +50,10 @@ function parse_arguments()
49
50
opt_coverage=true
50
51
shift
51
52
;;
53
+ --coverage-per-test)
54
+ opt_coverage_per_test=true
55
+ opt_coverage=true
56
+ ;;
52
57
--suite)
53
58
opt_suite=true
54
59
shift
@@ -112,6 +117,16 @@ function cov_baseline()
112
117
}
113
118
114
119
120
+ function cov_args()
121
+ {
122
+ if [ ${opt_coverage_per_test} == true ]; then
123
+ echo ' --coverage-per-test'
124
+ elif [ ${opt_coverage} == true ]; then
125
+ echo ' --coverage'
126
+ fi
127
+ }
128
+
129
+
115
130
function execute_suite()
116
131
{
117
132
local countExecuted=0
@@ -122,18 +137,10 @@ function execute_suite()
122
137
# unique and runs under ISO_8859-15. But this only happens on macOS.
123
138
# So, if we run test 111 on macOS, we should run with LC_ALL=C
124
139
for tc in * .txt; do
125
- if [ ${opt_coverage} == true ]; then
126
- if [[ $( uname) == " Darwin" ]] && [[ ${tc} == " 111" * ]]; then
127
- LC_ALL=C $0 --coverage " ${tc} "
128
- else
129
- $0 --coverage " ${tc} "
130
- fi
140
+ if [[ $( uname) == " Darwin" ]] && [[ ${tc} == " 111" * ]]; then
141
+ LC_ALL=C $0 " $( cov_args) " " ${tc} "
131
142
else
132
- if [[ $( uname) == " Darwin" ]] && [[ ${tc} == " 111" * ]]; then
133
- LC_ALL=C $0 " ${tc} "
134
- else
135
- $0 " ${tc} "
136
- fi
143
+ $0 " $( cov_args) " " ${tc} "
137
144
fi
138
145
if [ $? -ne 0 ]; then
139
146
overallResult=1
@@ -147,8 +154,8 @@ function execute_suite()
147
154
148
155
function measure_coverage()
149
156
{
150
- local testResultsDir=${OUT_DIR} /test-results/${tcBaseName}
151
157
if [ ${opt_coverage} == true ]; then
158
+ local testResultsDir=${OUT_DIR} /test-results/${tcBaseName}
152
159
mkdir -p " ${testResultsDir} "
153
160
cp ${OUT_DIR} /* .gc* " ${testResultsDir} "
154
161
lcov --capture --directory " ${testResultsDir} " --base-directory ${SRC_DIR} --test-name " ${tcBaseName} " --quiet \
@@ -162,13 +169,15 @@ function measure_coverage()
162
169
163
170
function consolidate_coverage()
164
171
{
165
- echo -e " \nConsolidating test coverage ..."
166
- pushd ${OUT_DIR} /test-results || exit 1
167
- find . -name " *.info" | xargs printf -- ' --add-tracefile %s\n' | xargs --exit \
168
- lcov --rc " ${branchCoverage} =1" --exclude ' */lex.yy.c' --exclude ' */parser.c' \
169
- --output-file ../${COVERAGE_FILE} --add-tracefile ../${BASELINE_FILE}
170
- popd || exit 1
171
- echo " "
172
+ if [[ ${opt_coverage} == true ]]; then
173
+ echo -e " \nConsolidating test coverage ..."
174
+ pushd ${OUT_DIR} /test-results || exit 1
175
+ find . -name " *.info" | xargs printf -- ' --add-tracefile %s\n' | xargs --exit \
176
+ lcov --rc " ${branchCoverage} =1" --exclude ' */lex.yy.c' --exclude ' */parser.c' \
177
+ --output-file ../${COVERAGE_FILE} --add-tracefile ../${BASELINE_FILE}
178
+ popd || exit 1
179
+ echo " "
180
+ fi
172
181
}
173
182
174
183
@@ -205,8 +214,8 @@ function check_mandatory_sections()
205
214
function arrange_environment()
206
215
{
207
216
local boxesEnv=" "
208
- if [ $( grep -c " ^:ENV" ${opt_testCase} ) -eq 1 ]; then
209
- boxesEnv=$( cat ${opt_testCase} | sed -n ' /^:ENV/,/^:ARGS/p;' | sed ' 1d;$d' | tr -d ' \r' )
217
+ if [[ $( grep -c " ^:ENV" " ${opt_testCase} " ) -eq 1 ] ]; then
218
+ boxesEnv=$( sed -n ' /^:ENV/,/^:ARGS/p;' < " ${opt_testCase} " | sed ' 1d;$d' | tr -d ' \r' )
210
219
fi
211
220
if [ -n " $boxesEnv " ]; then
212
221
echo " $boxesEnv " | sed -e ' s/export/\n export/g' | sed ' 1d'
@@ -221,12 +230,12 @@ function arrange_environment()
221
230
function arrange_test_fixtures()
222
231
{
223
232
if [ $( grep -c " ^:EXPECTED-ERROR " ${opt_testCase} ) -eq 1 ]; then
224
- expectedReturnCode=$( grep " ^:EXPECTED-ERROR " ${opt_testCase} | sed -e ' s/:EXPECTED-ERROR //' )
233
+ expectedReturnCode=$( grep " ^:EXPECTED-ERROR " " ${opt_testCase} " | sed -e ' s/:EXPECTED-ERROR //' )
225
234
fi
226
235
227
- cat ${opt_testCase} | sed -n ' /^:INPUT/,/^:OUTPUT-FILTER/p;' | sed ' 1d;$d' | tr -d ' \r' > " ${testInputFile} "
228
- cat ${opt_testCase} | sed -n ' /^:OUTPUT-FILTER/,/^:EXPECTED\b.*$/p;' | sed ' 1d;$d' | tr -d ' \r' > " ${testFilterFile} "
229
- cat ${opt_testCase} | sed -n ' /^:EXPECTED/,/^:EOF/p;' | sed ' 1d;$d' | tr -d ' \r' > " ${testExpectationFile} "
236
+ cat " ${opt_testCase} " | sed -n ' /^:INPUT/,/^:OUTPUT-FILTER/p;' | sed ' 1d;$d' | tr -d ' \r' > " ${testInputFile} "
237
+ cat " ${opt_testCase} " | sed -n ' /^:OUTPUT-FILTER/,/^:EXPECTED\b.*$/p;' | sed ' 1d;$d' | tr -d ' \r' > " ${testFilterFile} "
238
+ cat " ${opt_testCase} " | sed -n ' /^:EXPECTED/,/^:EOF/p;' | sed ' 1d;$d' | tr -d ' \r' > " ${testExpectationFile} "
230
239
}
231
240
232
241
@@ -266,6 +275,7 @@ parse_arguments "$@"
266
275
check_prereqs
267
276
cov_baseline
268
277
278
+ declare tcBaseName=${opt_testCase% .txt}
269
279
declare branchCoverage=lcov_branch_coverage
270
280
if [[ $( uname) == " Darwin" ]]; then
271
281
branchCoverage=branch_coverage
274
284
# Execute the entire test suite
275
285
if [ ${opt_suite} == true ]; then
276
286
declare -i overallResult=0
287
+ clear_gcda_traces
277
288
execute_suite
278
289
290
+ if [ ${opt_coverage_per_test} == false ]; then
291
+ tcBaseName=black-box-all
292
+ measure_coverage
293
+ fi
279
294
if [ ${opt_coverage} == true ]; then
280
295
consolidate_coverage
281
296
report_coverage
285
300
286
301
# Execute only a single test
287
302
echo " Running test case: ${opt_testCase} "
288
- declare -r tcBaseName=${opt_testCase% .txt}
289
- clear_gcda_traces
303
+ if [ ${opt_coverage_per_test} == true ]; then
304
+ clear_gcda_traces
305
+ fi
290
306
291
307
check_mandatory_sections
292
308
@@ -295,21 +311,23 @@ declare -r testInputFile=${opt_testCase/%.txt/.input.tmp}
295
311
declare -r testExpectationFile=${opt_testCase/% .txt/ .expected.tmp}
296
312
declare -r testFilterFile=${opt_testCase/% .txt/ .sed.tmp}
297
313
declare -r testOutputFile=${opt_testCase/% .txt/ .out.tmp}
298
- declare -r boxesArgs=$( cat ${opt_testCase} | sed -n ' /^:ARGS/,+1p' | grep -v ^:INPUT | sed ' 1d' | tr -d ' \r' )
314
+ declare -r boxesArgs=$( sed -n ' /^:ARGS/,+1p' < " ${opt_testCase} " | grep -v ^:INPUT | sed ' 1d' | tr -d ' \r' )
299
315
300
316
arrange_environment
301
317
arrange_test_fixtures
302
318
303
319
declare -i actualReturnCode=100
304
320
run_boxes
305
- measure_coverage
306
321
322
+ if [ ${opt_coverage_per_test} == true ]; then
323
+ measure_coverage
324
+ fi
307
325
assert_outcome
308
326
309
- rm ${testInputFile}
310
- rm ${testFilterFile}
311
- rm ${testExpectationFile}
312
- rm ${testOutputFile}
327
+ rm " ${testInputFile} "
328
+ rm " ${testFilterFile} "
329
+ rm " ${testExpectationFile} "
330
+ rm " ${testOutputFile} "
313
331
314
332
echo " OK"
315
333
exit 0
0 commit comments