Merge "Selenium: replace UserLoginPage with BlankPage where possible"
[lhc/web/wiklou.git] / tests / phpunit / includes / parser / TagHooksTest.php
1 <?php
2
3 use MediaWiki\MediaWikiServices;
4
5 /**
6 * @group Database
7 * @group Parser
8 *
9 * @covers Parser
10 * @covers BlockLevelPass
11 * @covers StripState
12 *
13 * @covers Preprocessor_DOM
14 * @covers PPDStack
15 * @covers PPDStackElement
16 * @covers PPDPart
17 * @covers PPFrame_DOM
18 * @covers PPTemplateFrame_DOM
19 * @covers PPCustomFrame_DOM
20 * @covers PPNode_DOM
21 *
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
33 */
34 class TagHooksTest extends MediaWikiTestCase {
35 public static function provideValidNames() {
36 return [
37 [ 'foo' ],
38 [ 'foo-bar' ],
39 [ 'foo_bar' ],
40 [ 'FOO-BAR' ],
41 [ 'foo bar' ]
42 ];
43 }
44
45 public static function provideBadNames() {
46 return [ [ "foo<bar" ], [ "foo>bar" ], [ "foo\nbar" ], [ "foo\rbar" ] ];
47 }
48
49 private function getParserOptions() {
50 $popt = ParserOptions::newFromUserAndLang( new User,
51 MediaWikiServices::getInstance()->getContentLanguage() );
52 return $popt;
53 }
54
55 /**
56 * @dataProvider provideValidNames
57 */
58 public function testTagHooks( $tag ) {
59 $parser = MediaWikiServices::getInstance()->getParserFactory()->create();
60
61 $parser->setHook( $tag, [ $this, 'tagCallback' ] );
62 $parserOutput = $parser->parse(
63 "Foo<$tag>Bar</$tag>Baz",
64 Title::newFromText( 'Test' ),
65 $this->getParserOptions()
66 );
67 $this->assertEquals( "<p>FooOneBaz\n</p>", $parserOutput->getText( [ 'unwrap' => true ] ) );
68
69 $parser->mPreprocessor = null; # Break the Parser <-> Preprocessor cycle
70 }
71
72 /**
73 * @dataProvider provideBadNames
74 * @expectedException MWException
75 */
76 public function testBadTagHooks( $tag ) {
77 $parser = MediaWikiServices::getInstance()->getParserFactory()->create();
78
79 $parser->setHook( $tag, [ $this, 'tagCallback' ] );
80 $parser->parse(
81 "Foo<$tag>Bar</$tag>Baz",
82 Title::newFromText( 'Test' ),
83 $this->getParserOptions()
84 );
85 $this->fail( 'Exception not thrown.' );
86 }
87
88 /**
89 * @dataProvider provideValidNames
90 */
91 public function testFunctionTagHooks( $tag ) {
92 $parser = MediaWikiServices::getInstance()->getParserFactory()->create();
93
94 $parser->setFunctionTagHook( $tag, [ $this, 'functionTagCallback' ], 0 );
95 $parserOutput = $parser->parse(
96 "Foo<$tag>Bar</$tag>Baz",
97 Title::newFromText( 'Test' ),
98 $this->getParserOptions()
99 );
100 $this->assertEquals( "<p>FooOneBaz\n</p>", $parserOutput->getText( [ 'unwrap' => true ] ) );
101
102 $parser->mPreprocessor = null; # Break the Parser <-> Preprocessor cycle
103 }
104
105 /**
106 * @dataProvider provideBadNames
107 * @expectedException MWException
108 */
109 public function testBadFunctionTagHooks( $tag ) {
110 $parser = MediaWikiServices::getInstance()->getParserFactory()->create();
111
112 $parser->setFunctionTagHook(
113 $tag,
114 [ $this, 'functionTagCallback' ],
115 Parser::SFH_OBJECT_ARGS
116 );
117 $parser->parse(
118 "Foo<$tag>Bar</$tag>Baz",
119 Title::newFromText( 'Test' ),
120 $this->getParserOptions()
121 );
122 $this->fail( 'Exception not thrown.' );
123 }
124
125 function tagCallback( $text, $params, $parser ) {
126 return str_rot13( $text );
127 }
128
129 function functionTagCallback( &$parser, $frame, $code, $attribs ) {
130 return str_rot13( $code );
131 }
132 }