3 use MediaWiki\MediaWikiServices
;
10 * @covers BlockLevelPass
13 * @covers Preprocessor_DOM
15 * @covers PPDStackElement
18 * @covers PPTemplateFrame_DOM
19 * @covers PPCustomFrame_DOM
22 * @covers Preprocessor_Hash
23 * @covers PPDStack_Hash
24 * @covers PPDStackElement_Hash
25 * @covers PPDPart_Hash
26 * @covers PPFrame_Hash
27 * @covers PPTemplateFrame_Hash
28 * @covers PPCustomFrame_Hash
29 * @covers PPNode_Hash_Tree
30 * @covers PPNode_Hash_Text
31 * @covers PPNode_Hash_Array
32 * @covers PPNode_Hash_Attr
34 class TagHooksTest
extends MediaWikiTestCase
{
35 public static function provideValidNames() {
45 public static function provideBadNames() {
46 return [ [ "foo<bar" ], [ "foo>bar" ], [ "foo\nbar" ], [ "foo\rbar" ] ];
49 private function getParserOptions() {
50 $popt = ParserOptions
::newFromUserAndLang( new User
,
51 MediaWikiServices
::getInstance()->getContentLanguage() );
56 * @dataProvider provideValidNames
58 public function testTagHooks( $tag ) {
59 $parser = MediaWikiServices
::getInstance()->getParserFactory()->create();
61 $parser->setHook( $tag, [ $this, 'tagCallback' ] );
62 $parserOutput = $parser->parse(
63 "Foo<$tag>Bar</$tag>Baz",
64 Title
::newFromText( 'Test' ),
65 $this->getParserOptions()
67 $this->assertEquals( "<p>FooOneBaz\n</p>", $parserOutput->getText( [ 'unwrap' => true ] ) );
69 $parser->mPreprocessor
= null; # Break the Parser <-> Preprocessor cycle
73 * @dataProvider provideBadNames
74 * @expectedException MWException
76 public function testBadTagHooks( $tag ) {
77 $parser = MediaWikiServices
::getInstance()->getParserFactory()->create();
79 $parser->setHook( $tag, [ $this, 'tagCallback' ] );
81 "Foo<$tag>Bar</$tag>Baz",
82 Title
::newFromText( 'Test' ),
83 $this->getParserOptions()
85 $this->fail( 'Exception not thrown.' );
89 * @dataProvider provideValidNames
91 public function testFunctionTagHooks( $tag ) {
92 $parser = MediaWikiServices
::getInstance()->getParserFactory()->create();
94 $parser->setFunctionTagHook( $tag, [ $this, 'functionTagCallback' ], 0 );
95 $parserOutput = $parser->parse(
96 "Foo<$tag>Bar</$tag>Baz",
97 Title
::newFromText( 'Test' ),
98 $this->getParserOptions()
100 $this->assertEquals( "<p>FooOneBaz\n</p>", $parserOutput->getText( [ 'unwrap' => true ] ) );
102 $parser->mPreprocessor
= null; # Break the Parser <-> Preprocessor cycle
106 * @dataProvider provideBadNames
107 * @expectedException MWException
109 public function testBadFunctionTagHooks( $tag ) {
110 $parser = MediaWikiServices
::getInstance()->getParserFactory()->create();
112 $parser->setFunctionTagHook(
114 [ $this, 'functionTagCallback' ],
115 Parser
::SFH_OBJECT_ARGS
118 "Foo<$tag>Bar</$tag>Baz",
119 Title
::newFromText( 'Test' ),
120 $this->getParserOptions()
122 $this->fail( 'Exception not thrown.' );
125 function tagCallback( $text, $params, $parser ) {
126 return str_rot13( $text );
129 function functionTagCallback( &$parser, $frame, $code, $attribs ) {
130 return str_rot13( $code );