Merge pull request #1628 from acrisci/feature/complete-run-coverage
complete-run: add coverage report generation
This commit is contained in:
commit
15d516f58c
|
@ -1,6 +1,5 @@
|
||||||
UNAME=$(shell uname)
|
UNAME=$(shell uname)
|
||||||
DEBUG=1
|
DEBUG=1
|
||||||
COVERAGE=0
|
|
||||||
INSTALL=install
|
INSTALL=install
|
||||||
LN=ln
|
LN=ln
|
||||||
ifndef PREFIX
|
ifndef PREFIX
|
||||||
|
|
|
@ -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
|
This will show the output of Xephyr, which is the X server implementation we
|
||||||
use for testing.
|
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
|
==== IPC interface
|
||||||
|
|
||||||
The testsuite makes extensive use of the IPC (Inter-Process Communication)
|
The testsuite makes extensive use of the IPC (Inter-Process Communication)
|
||||||
|
|
|
@ -86,6 +86,16 @@ foreach my $binary (@binaries) {
|
||||||
die "$binary is not an executable" unless -x $binary;
|
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);
|
qx(Xephyr -help 2>&1);
|
||||||
die "Xephyr was not found in your path. Please install Xephyr (xserver-xephyr on Debian)." if $?;
|
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() }
|
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);
|
exit ($aggregator->failed > 0);
|
||||||
|
|
||||||
#
|
#
|
||||||
|
@ -391,7 +412,8 @@ available in C<latest/xtrace-for-$test.log>.
|
||||||
|
|
||||||
=item B<--coverage-testing>
|
=item B<--coverage-testing>
|
||||||
|
|
||||||
Exits i3 cleanly (instead of kill -9) to make coverage testing work properly.
|
Generates a test coverage report at C<latest/i3-coverage>. Exits i3 cleanly
|
||||||
|
during tests (instead of kill -9) to make coverage testing work properly.
|
||||||
|
|
||||||
=item B<--parallel>
|
=item B<--parallel>
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue