@@ -10,6 +10,7 @@ TEST_CI_ARGS ?=
10
10
STAGINGSERVER ?= node-www
11
11
LOGLEVEL ?= silent
12
12
OSTYPE := $(shell uname -s | tr '[A-Z]' '[a-z]')
13
+ COVTESTS ?= test
13
14
14
15
ifdef JOBS
15
16
PARALLEL_ARGS = -j $(JOBS )
@@ -113,6 +114,69 @@ distclean:
113
114
114
115
check : test
115
116
117
+ # Remove files generated by running coverage, put the non-instrumented lib back
118
+ # in place
119
+ coverage-clean :
120
+ if [ -d lib_ ]; then rm -rf lib; mv lib_ lib; fi
121
+ -rm -rf node_modules
122
+ -rm -rf gcovr testing
123
+ -rm -rf out/$(BUILDTYPE ) /.coverage
124
+ -rm -rf .cov_tmp coverage
125
+ -rm -f out/$(BUILDTYPE ) /obj.target/node/src/* .gcda
126
+ -rm -f out/$(BUILDTYPE ) /obj.target/node/src/tracing/* .gcda
127
+ -rm -f out/$(BUILDTYPE ) /obj.target/node/src/* .gcno
128
+ -rm -f out/$(BUILDTYPE ) /obj.target/node/src/tracing* .gcno
129
+
130
+ # Build and test with code coverage reporting. Leave the lib directory
131
+ # instrumented for any additional runs the user may want to make.
132
+ # For C++ coverage reporting, this needs to be run in conjunction with configure
133
+ # --coverage. html coverage reports will be created under coverage/
134
+
135
+ coverage : coverage-test
136
+
137
+ coverage-build : all
138
+ mkdir -p node_modules
139
+ if [ ! -d node_modules/istanbul-merge ]; then \
140
+ $(NODE ) ./deps/npm install istanbul-merge; fi
141
+ if [ ! -d node_modules/nyc ]; then $( NODE) ./deps/npm install nyc; fi
142
+ if [ ! -d gcovr ]; then git clone --depth=1 \
143
+ --single-branch git://github.com/gcovr/gcovr.git; fi
144
+ if [ ! -d testing ]; then git clone --depth=1 \
145
+ --single-branch https://github.com/nodejs/testing.git; fi
146
+ if [ ! -f gcovr/scripts/gcovr.orig ]; then \
147
+ (cd gcovr && patch -N -p1 < \
148
+ " $( CURDIR) /testing/coverage/gcovr-patches.diff" ); fi
149
+ if [ -d lib_ ]; then rm -rf lib; mv lib_ lib; fi
150
+ mv lib lib_
151
+ $(NODE ) ./node_modules/.bin/nyc instrument lib_/ lib/
152
+ $(MAKE )
153
+
154
+ coverage-test : coverage-build
155
+ -rm -rf out/$(BUILDTYPE ) /.coverage
156
+ -rm -rf .cov_tmp
157
+ -rm -f out/$(BUILDTYPE ) /obj.target/node/src/* .gcda
158
+ -rm -f out/$(BUILDTYPE ) /obj.target/node/src/tracing/* .gcda
159
+ -$(MAKE ) $(COVTESTS )
160
+ mv lib lib__
161
+ mv lib_ lib
162
+ mkdir -p coverage .cov_tmp
163
+ $(NODE ) ./node_modules/.bin/istanbul-merge --out \
164
+ .cov_tmp/libcov.json ' out/Release/.coverage/coverage-*.json'
165
+ (cd lib && .$( NODE) ../node_modules/.bin/nyc report \
166
+ --temp-directory " $( CURDIR) /.cov_tmp" -r html \
167
+ --report-dir " ../coverage" )
168
+ -(cd out && " ../gcovr/scripts/gcovr" --gcov-exclude=' .*deps' \
169
+ --gcov-exclude=' .*usr' -v -r Release/obj.target/node \
170
+ --html --html-detail -o ../coverage/cxxcoverage.html)
171
+ mv lib lib_
172
+ mv lib__ lib
173
+ @echo -n " Javascript coverage %: "
174
+ @grep -B1 Lines coverage/index.html | head -n1 \
175
+ | sed ' s/<[^>]*>//g' | sed ' s/ //g'
176
+ @echo -n " C++ coverage %: "
177
+ @grep -A3 Lines coverage/cxxcoverage.html | grep style \
178
+ | sed ' s/<[^>]*>//g' | sed ' s/ //g'
179
+
116
180
cctest : all
117
181
@out/$(BUILDTYPE ) /$@
118
182
@@ -781,4 +845,5 @@ endif
781
845
bench-all bench bench-misc bench-array bench-buffer bench-net \
782
846
bench-http bench-fs bench-tls cctest run-ci test-v8 test-v8-intl \
783
847
test-v8-benchmarks test-v8-all v8 lint-ci bench-ci jslint-ci doc-only \
784
- $(TARBALL ) -headers test-ci test-ci-native test-ci-js build-ci clear-stalled
848
+ $(TARBALL ) -headers test-ci test-ci-native test-ci-js build-ci clear-stalled \
849
+ coverage-clean coverage-build coverage-test coverage
0 commit comments