# Matches anything
$this->regex = '';
}
+
+ $this->hooks = array();
}
/**
$section = null;
continue;
}
+ if( $section == 'endhooks' ) {
+ if( !isset( $data['hooks'] ) ) {
+ wfDie( "'endhooks' without 'hooks' at line $n\n" );
+ }
+ foreach( explode( "\n", $data['hooks'] ) as $line ) {
+ $line = trim( $line );
+ if( $line ) {
+ $this->requireHook( $line );
+ }
+ }
+ $data = array();
+ $section = null;
+ continue;
+ }
if( $section == 'end' ) {
if( !isset( $data['test'] ) ) {
wfDie( "'end' without 'test' at line $n\n" );
if (preg_match('/\\bmath\\b/i', $opts)) {
# XXX this should probably be done by the ParserOptions
- require_once('Math.php');
-
$options->setUseTex(true);
}
$noxml = (bool)preg_match( '~\\b noxml \\b~x', $opts );
$parser =& new Parser();
+ foreach( $this->hooks as $tag => $callback ) {
+ $parser->setHook( $tag, $callback );
+ }
wfRunHooks( 'ParserTestParser', array( &$parser ) );
$title =& Title::makeTitle( NS_MAIN, $titleText );
$out = $parser->preSaveTransform( $input, $title, $user, $options );
} elseif (preg_match('/\\bmsg\\b/i', $opts)) {
$out = $parser->transformMsg( $input, $options );
+ } elseif( preg_match( '/\\bsection=(\d+)\b/i', $opts, $matches ) ) {
+ $section = intval( $matches[1] );
+ $out = $parser->getSection( $input, $section );
+ } elseif( preg_match( '/\\breplace=(\d+),"(.*?)"/i', $opts, $matches ) ) {
+ $section = intval( $matches[1] );
+ $replace = $matches[2];
+ $out = $parser->replaceSection( $input, $section, $replace );
} else {
$output = $parser->parse( $input, $title, $options, true, true, 1337 );
$out = $output->getText();
} else {
$lang = 'en';
}
- $langClass = 'Language' . str_replace( '-', '_', ucfirst( $lang ) );
- $langObj = setupLangObj( $langClass );
$settings = array(
'wgServer' => 'http://localhost',
'wgDBprefix' => 'parsertest_',
'wgDefaultUserOptions' => array(),
- 'wgLang' => $langObj,
- 'wgContLang' => $langObj,
+ 'wgLang' => null,
+ 'wgContLang' => null,
'wgNamespacesWithSubpages' => array( 0 => preg_match('/\\bsubpage\\b/i', $opts)),
'wgMaxTocLevel' => 999,
'wgCapitalLinks' => true,
'wgThumbnailScriptPath' => false,
'wgUseTeX' => false,
'wgLocaltimezone' => 'UTC',
+ 'wgAllowExternalImages' => true,
);
$this->savedGlobals = array();
foreach( $settings as $var => $val ) {
$this->savedGlobals[$var] = $GLOBALS[$var];
$GLOBALS[$var] = $val;
}
+ $langClass = 'Language' . str_replace( '-', '_', ucfirst( $lang ) );
+ $langObj = setupLangObj( $langClass );
+ $GLOBALS['wgLang'] = $langObj;
+ $GLOBALS['wgContLang'] = $langObj;
+
$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' ) {
+ if( $wgDBtype == 'postgres' ) {
$def = 'INCLUDING DEFAULTS';
} else {
$def = '';
* @param string $name the title, including any prefix
* @param string $text the article text
* @param int $line the input line number, for reporting errors
- * @static
* @private
*/
function addArticle($name, $text, $line) {
$art->insertNewArticle($text, '', false, false );
$this->teardownGlobals();
}
+
+ /**
+ * Steal a callback function from the primary parser, save it for
+ * application to our scary parser. If the hook is not installed,
+ * die a painful dead to warn the others.
+ * @param string $name
+ */
+ private function requireHook( $name ) {
+ global $wgParser;
+ if( isset( $wgParser->mTagHooks[$name] ) ) {
+ $this->hooks[$name] = $wgParser->mTagHooks[$name];
+ } else {
+ wfDie( "This test suite requires the '$name' hook extension.\n" );
+ }
+ }
/*
* Run the "tidy" command on text if the $wgUseTidy