mediawiki / phpunit-patch-coverage
Generate coverage reports for git patches
Requires
- php: >=7.4.0
- nikic/php-parser: ^4.15.1
- phalcongelist/php-diff: 2.0.4
- symfony/console: ^3.3 || ^4 || ^5 || ^6
- symfony/finder: ^3.3 || ^4 || ^5 || ^6
- symfony/process: ^3.3 || ^4 || ^5 || ^6
- wikimedia/clover-diff: ^2.0.0
- wikimedia/scoped-callback: ^1.0 || ^2.0 || ^3.0 || ^4.0 || ^5.0
Requires (Dev)
- mediawiki/mediawiki-codesniffer: 45.0.0
- mediawiki/mediawiki-phan-config: 0.14.0
- mediawiki/minus-x: 1.1.3
- ockcyp/covers-validator: 1.6.0
- php-parallel-lint/php-console-highlighter: 1.0.0
- php-parallel-lint/php-parallel-lint: 1.4.0
- phpunit/phpunit: 9.6.16
README
A tool to generate coverage reports for a Git patch without actually running the entire coverage report.
Purpose
Running PHPUnit coverage reports with Xdebug can be extremely slow. For example, the MediaWiki core coverage report takes around 2 hours to run. This makes it hard for developers to get quick feedback on their patches to see how they affected the overall coverage.
The goal of this is to be able to generate coverage reports for Git patches without running the full coverage tests.
Implementation
We look at the files that were changed in the last commit. We identify classes that were changed, as well as tests that were changed. We then find all the tests that cover those classes, and run the tests with coverage for those files.
Next we'll checkout the previous commit, and re-calculate to see which tests should be run (@covers and modified files). We'll re-run the coverage, and then diff the result!
There are probably plenty of edge cases where this won't work, but I think it will do reasonably well.
Usage
Add the composer dependency to your project:
composer require --dev mediawiki/phpunit-patch-coverage
The current working directory must be your git repository. With full options:
./vendor/bin/phpunit-patch-coverage check \
--command "php vendor/bin/phpunit" \
--sha1 HEAD
The options shown in the example above are the defaults, and do not need to
be specified again. You may find it useful to have xdebug disabled by
default, and then specify it at runtime with:
php -d zend_extension=xdebug.so ...
.
Or if you have a PHPUnit wrapper (like MediaWiki), you can call that.
License
phpunit-patch-coverage is (C) 2018 Kunal Mehta, under the terms of the GPL v3 or any later version. See COPYING for more details.