Skip to content

Commit 9fabc0a

Browse files
committed
Iterate
1 parent f03f0b4 commit 9fabc0a

File tree

1 file changed

+51
-12
lines changed

1 file changed

+51
-12
lines changed

utils/generate-coverage.php

Lines changed: 51 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -11,28 +11,69 @@
1111
use SebastianBergmann\CodeCoverage\Filter;
1212
use SebastianBergmann\CodeCoverage\Report\Clover;
1313

14+
1415
// The wp-cli-tests directory.
1516
$package_folder = realpath( dirname( __DIR__ ) );
1617

1718
// If installed as a dependency in `<somedir>/vendor/wp-cli/wp-cli-tests, this is <somedir>.
18-
$root_folder = realpath( dirname( dirname( dirname( dirname( __DIR__ ) ) ) ) );
19+
$project_dir = (string) getenv( 'BEHAT_PROJECT_DIR' );
20+
21+
// If we're not in a Behat environment.
22+
if ( ! $project_dir ) {
23+
$project_dir = realpath( dirname( dirname( dirname( dirname( __DIR__ ) ) ) ) );
24+
}
1925

20-
if ( file_exists( $package_folder . '/vendor/autoload.php' ) ) {
21-
$root_folder = $package_folder;
26+
if ( ! file_exists( $project_dir . '/vendor/autoload.php' ) ) {
27+
$project_dir = $package_folder;
2228
}
2329

2430
if ( ! class_exists( 'SebastianBergmann\CodeCoverage\Filter' ) ) {
25-
require "{$root_folder}/vendor/autoload.php";
31+
if ( ! file_exists( $project_dir . '/vendor/autoload.php' ) ) {
32+
die( 'Could not load dependencies for generating code coverage' );
33+
}
34+
35+
require "{$project_dir}/vendor/autoload.php";
2636
}
2737

28-
$filter = new Filter();
29-
// In wp-cli/wp-cli, all source code is in the "php" folder.
30-
$filter->includeDirectory( "{$root_folder}/php" );
38+
$files = [];
39+
40+
$dir_to_search = null;
3141

42+
// In wp-cli/wp-cli, all source code is in the "php" folder.
3243
// In commands, all source code is in the "src" folder.
33-
$filter->includeDirectory( "{$root_folder}/src" );
44+
if ( is_dir( "{$project_dir}/php" ) ) {
45+
$dir_to_search = "{$project_dir}/php";
46+
} elseif ( is_dir( "{$project_dir}/src" ) ) {
47+
$dir_to_search = "{$project_dir}/src";
48+
}
49+
50+
if ( $dir_to_search ) {
51+
foreach (
52+
new RecursiveIteratorIterator(
53+
new RecursiveDirectoryIterator( $dir_to_search, RecursiveDirectoryIterator::SKIP_DOTS | RecursiveDirectoryIterator::FOLLOW_SYMLINKS )
54+
)
55+
as $file
56+
) {
57+
if ( $file->isFile() && 'php' === $file->getExtension() ) {
58+
$files[] = $file->getPathname();
59+
}
60+
}
61+
}
62+
3463
// There is also a "*-command.php" file.
35-
$filter->includeDirectory( $root_folder, '-command.php' );
64+
foreach (
65+
new IteratorIterator(
66+
new DirectoryIterator( $project_dir )
67+
) as $file ) {
68+
if ( $file->isFile() && false !== strpos( $file->getFilename(), '-command.php' ) ) {
69+
$files[] = $file->getPathname();
70+
break;
71+
}
72+
}
73+
74+
$filter = new Filter();
75+
76+
$filter->includeFiles( $files );
3677

3778
$coverage = new CodeCoverage(
3879
( new Selector() )->forLineCoverage( $filter ),
@@ -50,11 +91,9 @@
5091
$coverage->start( $name );
5192

5293
register_shutdown_function(
53-
static function () use ( $coverage, $feature, $scenario, $name ) {
94+
static function () use ( $coverage, $feature, $scenario, $name, $project_dir ) {
5495
$coverage->stop();
5596

56-
$project_dir = (string) getenv( 'BEHAT_PROJECT_DIR' );
57-
5897
$feature_suffix = preg_replace( '/[^a-z0-9]+/', '-', strtolower( $feature ) );
5998
$scenario_suffix = preg_replace( '/[^a-z0-9]+/', '-', strtolower( $scenario ) );
6099
$db_type = strtolower( getenv( 'WP_CLI_TEST_DBTYPE' ) );

0 commit comments

Comments
 (0)