From 370e83bb0dfd0c70de268c93bf07ad5ee0897192 Mon Sep 17 00:00:00 2001 From: Pierre Schmitz Date: Fri, 15 Aug 2008 01:29:47 +0200 Subject: Update auf 1.13.0 --- includes/parser/Parser_DiffTest.php | 87 +++++++++++++++++++++++++++++++++++++ 1 file changed, 87 insertions(+) create mode 100644 includes/parser/Parser_DiffTest.php (limited to 'includes/parser/Parser_DiffTest.php') diff --git a/includes/parser/Parser_DiffTest.php b/includes/parser/Parser_DiffTest.php new file mode 100644 index 00000000..be3702cf --- /dev/null +++ b/includes/parser/Parser_DiffTest.php @@ -0,0 +1,87 @@ +conf = $conf; + $this->dtUniqPrefix = "\x7fUNIQ" . Parser::getRandomString(); + } + + function init() { + if ( !is_null( $this->parsers ) ) { + return; + } + + global $wgHooks; + static $doneHook = false; + if ( !$doneHook ) { + $doneHook = true; + $wgHooks['ParserClearState'][] = array( $this, 'onClearState' ); + } + + foreach ( $this->conf['parsers'] as $i => $parserConf ) { + if ( !is_array( $parserConf ) ) { + $class = $parserConf; + $parserConf = array( 'class' => $parserConf ); + } else { + $class = $parserConf['class']; + } + $this->parsers[$i] = new $class( $parserConf ); + } + } + + function __call( $name, $args ) { + $this->init(); + $results = array(); + $mismatch = false; + $lastResult = null; + $first = true; + foreach ( $this->parsers as $i => $parser ) { + $currentResult = call_user_func_array( array( &$this->parsers[$i], $name ), $args ); + if ( $first ) { + $first = false; + } else { + if ( is_object( $lastResult ) ) { + if ( $lastResult != $currentResult ) { + $mismatch = true; + } + } else { + if ( $lastResult !== $currentResult ) { + $mismatch = true; + } + } + } + $results[$i] = $currentResult; + $lastResult = $currentResult; + } + if ( $mismatch ) { + throw new MWException( "Parser_DiffTest: results mismatch on call to $name\n" . + 'Arguments: ' . var_export( $args, true ) . "\n" . + 'Results: ' . var_export( $results, true ) . "\n" ); + } + return $lastResult; + } + + function setFunctionHook( $id, $callback, $flags = 0 ) { + $this->init(); + foreach ( $this->parsers as $i => $parser ) { + $parser->setFunctionHook( $id, $callback, $flags ); + } + } + + function onClearState( &$parser ) { + // hack marker prefixes to get identical output + $parser->mUniqPrefix = $this->dtUniqPrefix; + return true; + } +} -- cgit v1.2.3-54-g00ecf