From: Michael Stapelberg Date: Thu, 2 Apr 2015 07:33:05 +0000 (-0700) Subject: Merge pull request #1628 from acrisci/feature/complete-run-coverage X-Git-Tag: 4.11~147 X-Git-Url: https://git.sur5r.net/?a=commitdiff_plain;h=15d516f58c14e58181621a074bb3c9ad3e8f59d1;hp=92ffc78e1938069ef5db5c0cec94d4321f1fca3c;p=i3%2Fi3 Merge pull request #1628 from acrisci/feature/complete-run-coverage complete-run: add coverage report generation --- diff --git a/common.mk b/common.mk index b9e15a28..dcc90c96 100644 --- a/common.mk +++ b/common.mk @@ -1,6 +1,5 @@ UNAME=$(shell uname) DEBUG=1 -COVERAGE=0 INSTALL=install LN=ln ifndef PREFIX diff --git a/docs/testsuite b/docs/testsuite index 29a35218..8fdb9635 100644 --- a/docs/testsuite +++ b/docs/testsuite @@ -160,6 +160,27 @@ $ ./complete-run.pl --parallel=1 --keep-xserver-output This will show the output of Xephyr, which is the X server implementation we use for testing. +==== Coverage testing + +Coverage testing is possible with +lcov+, the front-end for GCC's coverage +testing tool +gcov+. The testcases can generate a nice html report that tells +you which functions and lines were covered during a run of the tests. You can +use this tool to judge how effective your tests are. + +To use test coverage tools, first compile with coverage enabled. + +--------------------------------------------------- +COVERAGE=1 make +--------------------------------------------------- + +Then run the tests with the +--coverage-testing+ flag. + +--------------------------------------------------- +./complete-run.pl --coverage-testing +--------------------------------------------------- + +Then open +latest/i3-coverage/index.html+ in your web browser. + ==== IPC interface The testsuite makes extensive use of the IPC (Inter-Process Communication) diff --git a/testcases/complete-run.pl b/testcases/complete-run.pl index 9710017d..8a3b89f0 100755 --- a/testcases/complete-run.pl +++ b/testcases/complete-run.pl @@ -86,6 +86,16 @@ foreach my $binary (@binaries) { die "$binary is not an executable" unless -x $binary; } +if ($options{coverage}) { + qx(command -v lcov &> /dev/null); + die "Cannot find lcov needed for coverage testing." if $?; + qx(command -v genhtml &> /dev/null); + die "Cannot find genhtml needed for coverage testing." if $?; + + # clean out the counters that may be left over from previous tests. + qx(lcov -d ../ --zerocounters &> /dev/null); +} + qx(Xephyr -help 2>&1); die "Xephyr was not found in your path. Please install Xephyr (xserver-xephyr on Debian)." if $?; @@ -227,6 +237,17 @@ if ($numtests == 1) { END { cleanup() } +if ($options{coverage}) { + print("\nGenerating test coverage report...\n"); + qx(lcov -d ../ -b ../ --capture -o latest/i3-coverage.info); + qx(genhtml -o latest/i3-coverage latest/i3-coverage.info); + if ($?) { + print("Could not generate test coverage html. Did you compile i3 with test coverage support?\n"); + } else { + print("Test coverage report generated in latest/i3-coverage\n"); + } +} + exit ($aggregator->failed > 0); # @@ -391,7 +412,8 @@ available in C. =item B<--coverage-testing> -Exits i3 cleanly (instead of kill -9) to make coverage testing work properly. +Generates a test coverage report at C. Exits i3 cleanly +during tests (instead of kill -9) to make coverage testing work properly. =item B<--parallel>