File: coverage.sh

package info (click to toggle)
qlcplus 4.14.3-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 58,644 kB
  • sloc: cpp: 182,867; javascript: 7,764; xml: 2,453; ansic: 2,120; sh: 1,716; python: 634; ruby: 606; makefile: 23
file content (136 lines) | stat: -rwxr-xr-x 3,807 bytes parent folder | download | duplicates (2)
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
#!/bin/bash
#
# To measure unit test coverage, perform these steps:
# 0. export CCACHE_DISABLE=1        # (only if you use compiler cache)
# 1. qmake
# 2. make distclean
# 3. qmake CONFIG+=coverage
# 4. make -j8
# 5. ./coverage.sh ui|qmlui # OR
# 5. make lcov
#
# Human-readable HTML results are written under coverage/html.
#

set -e
ARCH=$(uname)
THISCMD=`basename "$0"`

TARGET=${1:-}

if [ "$TARGET" != "ui" ] && [ "$TARGET" != "qmlui" ]; then
  echo >&2 "Usage: $THISCMD ui|qmlui"
  exit 1
fi


#############################################################################
# Test directories to find coverage measurements from
#############################################################################

COUNT=0
test[$COUNT]="engine/src"
COUNT=$((COUNT+1))
if [ "$TARGET" == "ui" ]; then
    test[$COUNT]="ui/src"
COUNT=$((COUNT+1))
fi
test[$COUNT]="plugins/artnet/test"
COUNT=$((COUNT+1))
test[$COUNT]="plugins/enttecwing/src"
COUNT=$((COUNT+1))
#test[$COUNT]="plugins/midiinput/common/src"
#COUNT=$((COUNT+1))
if [ ${ARCH} != "Darwin" ]; then
    test[$COUNT]="plugins/velleman/src"
    COUNT=$((COUNT+1))
fi

# Number of tests
tlen=${#test[@]}

#############################################################################
# Functions
#############################################################################

# arg1:srcdir arg2:testname
function prepare {
    lcov -d ${1} -z || exit $?
    rm -f ${1}/moc_*.gcno ${1}/moc_*.gcda
    lcov -d ${1} -c -i -o coverage/${2}-base.info
}

# arg1:srcdir arg2:testname
function gather_data {
    lcov -d ${1} -c -o coverage/${2}-test.info
    lcov -a coverage/${2}-base.info -a coverage/${2}-test.info \
         -o coverage/${2}-merge.info
}

#############################################################################
# Initialization
#############################################################################

# Check if lcov is installed
if [ -z "$(which lcov)" ]; then
    echo "Unable to produce coverage results; can't find lcov."
fi

# Remove previous data
if [ -d coverage ]; then
    rm -rf coverage
fi

# Create directories for new coverage data
mkdir -p coverage/html

#############################################################################
# Preparation
#############################################################################

for ((i = 0; i < tlen; i++))
do
    prepare ${test[i]} $i || exit $?
done

#############################################################################
# Run unit tests
#############################################################################

./unittest.sh $TARGET
FAILED=$?
if [ ${FAILED} != 0 ]; then
    echo "Will not measure coverage because ${FAILED} unit tests failed."
    exit ${FAILED}
fi

#############################################################################
# Gather results
#############################################################################

for ((i = 0; i < tlen; i++))
do
    gather_data ${test[i]} $i
done

#############################################################################
# All combined and HTMLized
#############################################################################

for ((i = 0; i < tlen; i++))
do
    mergeargs="${mergeargs} -a coverage/${i}-merge.info"
done

lcov ${mergeargs} -o coverage/coverage.info

# Remove stuff that isn't part of QLC sources
lcov -r coverage/coverage.info *.h -o coverage/coverage.info # Q_OBJECT etc.
lcov -r coverage/coverage.info moc_* -o coverage/coverage.info
lcov -r coverage/coverage.info *usr* -o coverage/coverage.info
lcov -r coverage/coverage.info *_test* -o coverage/coverage.info
lcov -r coverage/coverage.info ui_* -o coverage/coverage.info
lcov -r coverage/coverage.info *Library* -o coverage/coverage.info # OSX

# Generate HTML report
genhtml -o coverage/html coverage/coverage.info