Improved readability of MediaWikiParserTest::suite code
authorDaniel Werner <daniel.werner@wikimedia.de>
Sat, 20 Apr 2013 20:22:26 +0000 (22:22 +0200)
committerDaniel Werner <daniel.werner@wikimedia.de>
Sat, 20 Apr 2013 20:40:56 +0000 (22:40 +0200)
Change-Id: Ic74048bcce71c2eeb8adfca872b978c3f0de094b

tests/phpunit/includes/parser/MediaWikiParserTest.php

index 067a7c4..c5c7cf2 100644 (file)
@@ -16,17 +16,27 @@ class MediaWikiParserTest {
 
                $suite = new PHPUnit_Framework_TestSuite;
 
-               foreach ( $wgParserTestFiles as $filename ) {
-                       $testsName = basename( $filename, '.txt' );
+               foreach ( $wgParserTestFiles as $fileName ) {
+                       $testsName = basename( $fileName, '.txt' );
+                       $escapedFileName = strtr( $fileName, array( "'" => "\\'", '\\' => '\\\\' ) );
                        /* This used to be ucfirst( basename( dirname( $filename ) ) )
                         * and then was ucfirst( basename( $filename, '.txt' )
                         * but that didn't work with names like foo.tests.txt
                         */
-                       $className = str_replace( '.', '_', ucfirst( $testsName ) );
+                       $parserTestClassName = str_replace( '.', '_', ucfirst( $testsName ) );
+                       $parserTestClassDefinition = <<<EOT
+/**
+ * @group Database
+ * @group Parser
+ */
+class $parserTestClassName extends NewParserTest {
+       protected \$file = '$escapedFileName';
+}
+EOT;
 
-                       eval( "/** @group Database\n@group Parser\n*/ class $className extends NewParserTest { protected \$file = '" . strtr( $filename, array( "'" => "\\'", '\\' => '\\\\' ) ) . "'; } " );
+                       eval( $parserTestClassDefinition );
 
-                       $parserTester = new $className( $testsName );
+                       $parserTester = new $parserTestClassName( $testsName );
                        $suite->addTestSuite( new ReflectionClass ( $parserTester ) );
                }
                return $suite;