@@ -10,6 +10,7 @@ TEST_CI_ARGS ?=
1010STAGINGSERVER ?= node-www
1111LOGLEVEL ?= silent
1212OSTYPE := $(shell uname -s | tr '[A-Z]' '[a-z]')
13+ COVTESTS ?= test
1314
1415ifdef JOBS
1516 PARALLEL_ARGS = -j $(JOBS )
@@ -113,6 +114,69 @@ distclean:
113114
114115check : test
115116
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+
116180cctest : all
117181 @out/$(BUILDTYPE ) /$@
118182
@@ -781,4 +845,5 @@ endif
781845 bench-all bench bench-misc bench-array bench-buffer bench-net \
782846 bench-http bench-fs bench-tls cctest run-ci test-v8 test-v8-intl \
783847 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