Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
100.00% covered (success)
100.00%
14 / 14
100.00% covered (success)
100.00%
2 / 2
CRAP
100.00% covered (success)
100.00%
1 / 1
PhpUnitTestFileScanner
100.00% covered (success)
100.00%
14 / 14
100.00% covered (success)
100.00%
2 / 2
6
100.00% covered (success)
100.00%
1 / 1
 __construct
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 scanForFiles
100.00% covered (success)
100.00%
13 / 13
100.00% covered (success)
100.00%
1 / 1
5
1<?php
2
3declare( strict_types = 1 );
4
5namespace MediaWiki\Composer\PhpUnitSplitter;
6
7use RecursiveDirectoryIterator;
8use RecursiveIteratorIterator;
9
10/**
11 * @license GPL-2.0-or-later
12 */
13class PhpUnitTestFileScanner {
14
15    private string $rootDir;
16
17    public function __construct( string $rootDir ) {
18        $this->rootDir = $rootDir;
19    }
20
21    /**
22     * @return array Returns an list of `.php` files found on the filesystem
23     * inside `$rootDir`. The array maps file basenames (i.e.
24     * `MyClassTest.php`) to lists of paths where that basename
25     * is found (e.g. `[ 'tests/phpunit/MyClassTest.php',
26     * 'extensions/MyExtension/tests/phpunit/MyClassTest.php' ]`)
27     */
28    public function scanForFiles(): array {
29        $phpFiles = [];
30        $iterator = new RecursiveIteratorIterator(
31            new PhpUnitTestFileScannerFilter(
32                new RecursiveDirectoryIterator( $this->rootDir )
33            )
34        );
35        foreach ( $iterator as $file ) {
36            if ( $file->isFile() && $file->getExtension() === 'php' ) {
37                $filename = $file->getFilename();
38                if ( !array_key_exists( $filename, $phpFiles ) ) {
39                    $phpFiles[$filename] = [];
40                }
41                $phpFiles[$filename][] = $file->getPathname();
42            }
43        }
44        return $phpFiles;
45    }
46}