X-Git-Url: http://git.heureux-cyclage.org/?a=blobdiff_plain;f=maintenance%2FparserTests.php;h=284b941075843c4494517d8c68682ab141c75782;hb=e382f5b292cca26e1aaaf32ab28c57f070b5ac4d;hp=152050218557392803e2df65e646690366e3c5b7;hpb=4e40d5a049cfcdb0d5cf3900e20ef6701046d099;p=lhc%2Fweb%2Fwiklou.git diff --git a/maintenance/parserTests.php b/maintenance/parserTests.php index 1520502185..284b941075 100644 --- a/maintenance/parserTests.php +++ b/maintenance/parserTests.php @@ -25,10 +25,11 @@ */ /** */ -$options = array( 'quick', 'color' ); +$options = array( 'quick', 'color', 'quiet', 'help' ); $optionsWithArgs = array( 'regex' ); require_once( 'commandLine.inc' ); +require_once( "$IP/includes/ObjectCache.php" ); require_once( "$IP/languages/LanguageUtf8.php" ); /** */ @@ -74,6 +75,8 @@ class ParserTest { } $this->showDiffs = !isset( $options['quick'] ); + + $this->quiet = isset( $options['quiet'] ); if (isset($options['regex'])) { $this->regex = $options['regex']; @@ -205,7 +208,9 @@ class ParserTest { * @return bool */ function runTest( $desc, $input, $result, $opts ) { - print "Running test $desc... "; + if( !$this->quiet ) { + $this->showTesting( $desc ); + } $this->setupGlobals($opts); @@ -231,18 +236,15 @@ class ParserTest { if (preg_match('/\\bpst\\b/i', $opts)) { $out = $parser->preSaveTransform( $input, $title, $user, $options ); - } - else if (preg_match('/\\bmsg\\b/i', $opts)) { + } elseif (preg_match('/\\bmsg\\b/i', $opts)) { $out = $parser->transformMsg( $input, $options ); - } - else { + } else { $output =& $parser->parse( $input, $title, $options ); $out = $output->getText(); if (preg_match('/\\bill\\b/i', $opts)) { $out = $this->tidy( implode( ' ', $output->getLanguageLinks() ) ); - } - else if (preg_match('/\\bcat\\b/i', $opts)) { + } else if (preg_match('/\\bcat\\b/i', $opts)) { $out = $this->tidy ( implode( ' ', $output->getCategoryLinks() ) ); } @@ -271,6 +273,9 @@ class ParserTest { foreach( $this->listTables() as $table ) { $this->oldTableNames[$table] = $db->tableName( $table ); } + if( !isset( $this->uploadDir ) ) { + $this->uploadDir = $this->setupUploadDir(); + } $settings = array( 'wgServer' => 'http://localhost', @@ -278,13 +283,18 @@ class ParserTest { 'wgScriptPath' => '/', 'wgArticlePath' => '/wiki/$1', 'wgUploadPath' => '/images', + 'wgUploadDirectory' => $this->uploadDir, + 'wgStyleSheetPath' => '/skins', 'wgSitename' => 'MediaWiki', 'wgLanguageCode' => 'en', + 'wgContLanguageCode' => 'en', 'wgUseLatin1' => false, 'wgDBprefix' => 'parsertest', + 'wgDefaultUserOptions' => array(), 'wgLoadBalancer' => LoadBalancer::newFromParams( $GLOBALS['wgDBservers'] ), 'wgLang' => new LanguageUtf8(), + 'wgContLang' => new LanguageUtf8(), 'wgNamespacesWithSubpages' => array( 0 => preg_match('/\\bsubpage\\b/i', $opts)), 'wgMaxTocLevel' => 999, ); @@ -294,6 +304,7 @@ class ParserTest { $GLOBALS[$var] = $val; } $GLOBALS['wgLoadBalancer']->loadMasterPos(); + $GLOBALS['wgMessageCache']->initialise( new BagOStuff(), false, 0, $GLOBALS['wgDBname'] ); $this->setupDatabase(); } @@ -330,10 +341,16 @@ class ParserTest { if (!(strcmp($db->getServerVersion(), '4.1') < 0 and stristr($db->getSoftwareLink(), 'MySQL'))) { # Database that supports CREATE TABLE ... LIKE + global $wgDBtype; + if( $wgDBtype == 'PostgreSQL' ) { + $def = 'INCLUDING DEFAULTS'; + } else { + $def = ''; + } foreach ($tables as $tbl) { $newTableName = $db->tableName( $tbl ); $tableName = $this->oldTableNames[$tbl]; - $db->query("CREATE TEMPORARY TABLE $newTableName (LIKE $tableName INCLUDING DEFAULTS)"); + $db->query("CREATE TEMPORARY TABLE $newTableName (LIKE $tableName $def)"); } } else { # Hack for MySQL versions < 4.1, which don't support @@ -383,6 +400,23 @@ class ParserTest { } } + /** + * Create a dummy uploads directory which will contain a couple + * of files in order to pass existence tests. + * @return string The directory + * @access private + */ + function setupUploadDir() { + $dir = "/tmp/mwParser-" . mt_rand() . "-images"; + mkdir( $dir ); + mkdir( $dir . '/3' ); + mkdir( $dir . '/3/3a' ); + $f = fopen( $dir . '/3/3a/Foobar.jpg', 'wb' ); + fwrite( $f, 'Dummy file' ); + fclose( $f ); + return $dir; + } + /** * Restore default values and perform any necessary clean-up * after each test runs. @@ -393,6 +427,32 @@ class ParserTest { foreach( $this->savedGlobals as $var => $val ) { $GLOBALS[$var] = $val; } + if( isset( $this->uploadDir ) ) { + $this->teardownUploadDir( $this->uploadDir ); + unset( $this->uploadDir ); + } + } + + /** + * Remove the dummy uploads directory + * @access private + */ + function teardownUploadDir( $dir ) { + unlink( "$dir/3/3a/Foobar.jpg" ); + rmdir( "$dir/3/3a" ); + rmdir( "$dir/3" ); + @rmdir( "$dir/thumb/3/39" ); + @rmdir( "$dir/thumb/3" ); + @rmdir( "$dir/thumb" ); + rmdir( "$dir" ); + } + + /** + * "Running test $desc..." + * @access private + */ + function showTesting( $desc ) { + print "Running test $desc... "; } /** @@ -403,7 +463,9 @@ class ParserTest { * @access private */ function showSuccess( $desc ) { - print $this->termColor( '1;32' ) . 'PASSED' . $this->termReset() . "\n"; + if( !$this->quiet ) { + print $this->termColor( '1;32' ) . 'PASSED' . $this->termReset() . "\n"; + } return true; } @@ -418,6 +480,11 @@ class ParserTest { * @access private */ function showFailure( $desc, $result, $html ) { + if( $this->quiet ) { + # In quiet mode we didn't show the 'Testing' message before the + # test, in case it succeeded. Show it now: + $this->showTesting( $desc ); + } print $this->termColor( '1;31' ) . 'FAILED!' . $this->termReset() . "\n"; if( $this->showDiffs ) { print $this->quickDiff( $result, $html ); @@ -549,6 +616,24 @@ class ParserTest { } } +if( isset( $options['help'] ) ) { + echo <<] [--help] +Options: + --quick Suppress diff output of failed tests + --quiet Suppress notification of passed tests (shows only failed tests) + --color Override terminal detection and force color output on or off + 'light' option is similar to 'yes' but with color for dark backgrounds + --regex Only run tests whose descriptions which match given regex + --help Show this help message + + +END; + exit( 0 ); +} + # There is a convention that the parser should never # refer to $wgTitle directly, but instead use the title # passed to it.