bar" ], [ "foo\nbar" ], [ "foo\rbar" ] ]; } private function getParserOptions() { global $wgContLang; $popt = ParserOptions::newFromUserAndLang( new User, $wgContLang ); return $popt; } /** * @dataProvider provideValidNames */ public function testTagHooks( $tag ) { global $wgParserConf; $parser = new Parser( $wgParserConf ); $parser->setHook( $tag, [ $this, 'tagCallback' ] ); $parserOutput = $parser->parse( "Foo<$tag>BarBaz", Title::newFromText( 'Test' ), $this->getParserOptions() ); $this->assertEquals( "

FooOneBaz\n

", $parserOutput->getText( [ 'unwrap' => true ] ) ); $parser->mPreprocessor = null; # Break the Parser <-> Preprocessor cycle } /** * @dataProvider provideBadNames * @expectedException MWException */ public function testBadTagHooks( $tag ) { global $wgParserConf; $parser = new Parser( $wgParserConf ); $parser->setHook( $tag, [ $this, 'tagCallback' ] ); $parser->parse( "Foo<$tag>BarBaz", Title::newFromText( 'Test' ), $this->getParserOptions() ); $this->fail( 'Exception not thrown.' ); } /** * @dataProvider provideValidNames */ public function testFunctionTagHooks( $tag ) { global $wgParserConf; $parser = new Parser( $wgParserConf ); $parser->setFunctionTagHook( $tag, [ $this, 'functionTagCallback' ], 0 ); $parserOutput = $parser->parse( "Foo<$tag>BarBaz", Title::newFromText( 'Test' ), $this->getParserOptions() ); $this->assertEquals( "

FooOneBaz\n

", $parserOutput->getText( [ 'unwrap' => true ] ) ); $parser->mPreprocessor = null; # Break the Parser <-> Preprocessor cycle } /** * @dataProvider provideBadNames * @expectedException MWException */ public function testBadFunctionTagHooks( $tag ) { global $wgParserConf; $parser = new Parser( $wgParserConf ); $parser->setFunctionTagHook( $tag, [ $this, 'functionTagCallback' ], Parser::SFH_OBJECT_ARGS ); $parser->parse( "Foo<$tag>BarBaz", Title::newFromText( 'Test' ), $this->getParserOptions() ); $this->fail( 'Exception not thrown.' ); } function tagCallback( $text, $params, $parser ) { return str_rot13( $text ); } function functionTagCallback( &$parser, $frame, $code, $attribs ) { return str_rot13( $code ); } }