*/
/** */
-$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" );
/** */
}
$this->showDiffs = !isset( $options['quick'] );
+
+ $this->quiet = isset( $options['quiet'] );
if (isset($options['regex'])) {
$this->regex = $options['regex'];
* @return bool
*/
function runTest( $desc, $input, $result, $opts ) {
- print "Running test $desc... ";
+ if( !$this->quiet ) {
+ $this->showTesting( $desc );
+ }
$this->setupGlobals($opts);
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() ) );
}
foreach( $this->listTables() as $table ) {
$this->oldTableNames[$table] = $db->tableName( $table );
}
+ if( !isset( $this->uploadDir ) ) {
+ $this->uploadDir = $this->setupUploadDir();
+ }
$settings = array(
'wgServer' => 'http://localhost',
'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,
);
$GLOBALS[$var] = $val;
}
$GLOBALS['wgLoadBalancer']->loadMasterPos();
+ $GLOBALS['wgMessageCache']->initialise( new BagOStuff(), false, 0, $GLOBALS['wgDBname'] );
$this->setupDatabase();
}
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
}
}
+ /**
+ * 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.
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... ";
}
/**
* @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;
}
* @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 );
}
}
+if( isset( $options['help'] ) ) {
+ echo <<<END
+MediaWiki $wgVersion parser test suite
+Usage: php parserTests.php [--quick] [--quiet] [--color[=(yes|no|light)]]
+ [--regex <expression>] [--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.