3 * The tests here verify the structure of the code. This is for outright bugs,
4 * not just style issues.
7 class StructureTest
extends MediaWikiTestCase
{
9 * Verify all files that appear to be tests have file names ending in
10 * Test. If the file names do not end in Test, they will not be run.
14 public function testUnitTestFileNamesEndWithTest() {
15 if ( wfIsWindows() ) {
16 $this->markTestSkipped( 'This test does not work on Windows' );
18 $rootPath = escapeshellarg( __DIR__
. '/..' );
19 $testClassRegex = implode( '|', [
23 'ApiQueryContinueTestBase',
24 'MediaWikiLangTestCase',
25 'MediaWikiMediaTestCase',
27 'ResourceLoaderTestCase',
28 'PHPUnit_Framework_TestCase',
29 '\\?PHPUnit\\Framework\\TestCase',
30 'TestCase', // \PHPUnit\Framework\TestCase with appropriate use statement
33 $testClassRegex = "^class .* extends ($testClassRegex)";
34 $finder = "find $rootPath -name '*.php' '!' -name '*Test.php'" .
35 " | xargs grep -El '$testClassRegex|function suite\('";
39 exec( $finder, $results, $exitCode );
44 'Verify find/grep command succeeds.'
47 $results = array_filter(
49 [ $this, 'filterSuites' ]
51 $strip = strlen( $rootPath ) - 1;
52 foreach ( $results as $k => $v ) {
53 $results[$k] = substr( $v, $strip );
58 "Unit test file in $rootPath must end with Test."
63 * Filter to remove testUnitTestFileNamesEndWithTest false positives.
64 * @param string $filename
67 public function filterSuites( $filename ) {
68 return strpos( $filename, __DIR__
. '/../suites/' ) !== 0;