Go to the documentation of this file.
15 protected function setUp() {
19 $name = isset( $wgParserConf[
'preprocessorClass'] ) ? $wgParserConf[
'preprocessorClass'] :
'Preprocessor_DOM';
21 $this->mPreprocessor =
new $name( $this );
25 return array(
'gallery',
'display map' ,
'/foo' );
30 array(
"Foo",
"<root>Foo</root>" ),
31 array(
"<!-- Foo -->",
"<root><comment><!-- Foo --></comment></root>" ),
32 array(
"<!-- Foo --><!-- Bar -->",
"<root><comment><!-- Foo --></comment><comment><!-- Bar --></comment></root>" ),
33 array(
"<!-- Foo --> <!-- Bar -->",
"<root><comment><!-- Foo --></comment> <comment><!-- Bar --></comment></root>" ),
34 array(
"<!-- Foo --> \n <!-- Bar -->",
"<root><comment><!-- Foo --></comment> \n <comment><!-- Bar --></comment></root>" ),
35 array(
"<!-- Foo --> \n <!-- Bar -->\n",
"<root><comment><!-- Foo --></comment> \n<comment> <!-- Bar -->\n</comment></root>" ),
36 array(
"<!-- Foo --> <!-- Bar -->\n",
"<root><comment><!-- Foo --></comment> <comment><!-- Bar --></comment>\n</root>" ),
37 array(
"<!-->Bar",
"<root><comment><!-->Bar</comment></root>" ),
38 array(
"<!-- Comment -- comment",
"<root><comment><!-- Comment -- comment</comment></root>" ),
39 array(
"== Foo ==\n <!-- Bar -->\n== Baz ==\n",
"<root><h level=\"2\" i=\"1\">== Foo ==</h>\n<comment> <!-- Bar -->\n</comment><h level=\"2\" i=\"2\">== Baz ==</h>\n</root>" ),
40 array(
"<gallery/>",
"<root><ext><name>gallery</name><attr></attr></ext></root>" ),
41 array(
"Foo <gallery/> Bar",
"<root>Foo <ext><name>gallery</name><attr></attr></ext> Bar</root>" ),
42 array(
"<gallery></gallery>",
"<root><ext><name>gallery</name><attr></attr><inner></inner><close></gallery></close></ext></root>" ),
43 array(
"<foo> <gallery></gallery>",
"<root><foo> <ext><name>gallery</name><attr></attr><inner></inner><close></gallery></close></ext></root>" ),
44 array(
"<foo> <gallery><gallery></gallery>",
"<root><foo> <ext><name>gallery</name><attr></attr><inner><gallery></inner><close></gallery></close></ext></root>" ),
45 array(
"<noinclude> Foo bar </noinclude>",
"<root><ignore><noinclude></ignore> Foo bar <ignore></noinclude></ignore></root>" ),
46 array(
"<noinclude>\n{{Foo}}\n</noinclude>",
"<root><ignore><noinclude></ignore>\n<template lineStart=\"1\"><title>Foo</title></template>\n<ignore></noinclude></ignore></root>" ),
47 array(
"<noinclude>\n{{Foo}}\n</noinclude>\n",
"<root><ignore><noinclude></ignore>\n<template lineStart=\"1\"><title>Foo</title></template>\n<ignore></noinclude></ignore>\n</root>" ),
48 array(
"<gallery>foo bar",
"<root><ext><name>gallery</name><attr></attr><inner>foo bar</inner></ext></root>" ),
49 array(
"<{{foo}}>",
"<root><<template><title>foo</title></template>></root>" ),
50 array(
"<{{{foo}}}>",
"<root><<tplarg><title>foo</title></tplarg>></root>" ),
51 array(
"<gallery></gallery</gallery>",
"<root><ext><name>gallery</name><attr></attr><inner></gallery</inner><close></gallery></close></ext></root>" ),
52 array(
"=== Foo === ",
"<root><h level=\"3\" i=\"1\">=== Foo === </h></root>" ),
53 array(
"==<!-- -->= Foo === ",
"<root><h level=\"2\" i=\"1\">==<comment><!-- --></comment>= Foo === </h></root>" ),
54 array(
"=== Foo ==<!-- -->= ",
"<root><h level=\"1\" i=\"1\">=== Foo ==<comment><!-- --></comment>= </h></root>" ),
55 array(
"=== Foo ===<!-- -->\n",
"<root><h level=\"3\" i=\"1\">=== Foo ===<comment><!-- --></comment></h>\n</root>" ),
56 array(
"=== Foo ===<!-- --> <!-- -->\n",
"<root><h level=\"3\" i=\"1\">=== Foo ===<comment><!-- --></comment> <comment><!-- --></comment></h>\n</root>" ),
57 array(
"== Foo ==\n== Bar == \n",
"<root><h level=\"2\" i=\"1\">== Foo ==</h>\n<h level=\"2\" i=\"2\">== Bar == </h>\n</root>" ),
58 array(
"===========",
"<root><h level=\"5\" i=\"1\">===========</h></root>" ),
59 array(
"Foo\n=\n==\n=\n",
"<root>Foo\n=\n==\n=\n</root>" ),
60 array(
"{{Foo}}",
"<root><template><title>Foo</title></template></root>" ),
61 array(
"\n{{Foo}}",
"<root>\n<template lineStart=\"1\"><title>Foo</title></template></root>" ),
62 array(
"{{Foo|bar}}",
"<root><template><title>Foo</title><part><name index=\"1\" /><value>bar</value></part></template></root>" ),
63 array(
"{{Foo|bar}}a",
"<root><template><title>Foo</title><part><name index=\"1\" /><value>bar</value></part></template>a</root>" ),
64 array(
"{{Foo|bar|baz}}",
"<root><template><title>Foo</title><part><name index=\"1\" /><value>bar</value></part><part><name index=\"2\" /><value>baz</value></part></template></root>" ),
65 array(
"{{Foo|1=bar}}",
"<root><template><title>Foo</title><part><name>1</name>=<value>bar</value></part></template></root>" ),
66 array(
"{{Foo|=bar}}",
"<root><template><title>Foo</title><part><name></name>=<value>bar</value></part></template></root>" ),
67 array(
"{{Foo|bar=baz}}",
"<root><template><title>Foo</title><part><name>bar</name>=<value>baz</value></part></template></root>" ),
68 array(
"{{Foo|{{bar}}=baz}}",
"<root><template><title>Foo</title><part><name><template><title>bar</title></template></name>=<value>baz</value></part></template></root>" ),
69 array(
"{{Foo|1=bar|baz}}",
"<root><template><title>Foo</title><part><name>1</name>=<value>bar</value></part><part><name index=\"1\" /><value>baz</value></part></template></root>" ),
70 array(
"{{Foo|1=bar|2=baz}}",
"<root><template><title>Foo</title><part><name>1</name>=<value>bar</value></part><part><name>2</name>=<value>baz</value></part></template></root>" ),
71 array(
"{{Foo|bar|foo=baz}}",
"<root><template><title>Foo</title><part><name index=\"1\" /><value>bar</value></part><part><name>foo</name>=<value>baz</value></part></template></root>" ),
72 array(
"{{{1}}}",
"<root><tplarg><title>1</title></tplarg></root>" ),
73 array(
"{{{1|}}}",
"<root><tplarg><title>1</title><part><name index=\"1\" /><value></value></part></tplarg></root>" ),
74 array(
"{{{Foo}}}",
"<root><tplarg><title>Foo</title></tplarg></root>" ),
75 array(
"{{{Foo|}}}",
"<root><tplarg><title>Foo</title><part><name index=\"1\" /><value></value></part></tplarg></root>" ),
76 array(
"{{{Foo|bar|baz}}}",
"<root><tplarg><title>Foo</title><part><name index=\"1\" /><value>bar</value></part><part><name index=\"2\" /><value>baz</value></part></tplarg></root>" ),
77 array(
"{<!-- -->{Foo}}",
"<root>{<comment><!-- --></comment>{Foo}}</root>" ),
78 array(
"{{{{Foobar}}}}",
"<root>{<tplarg><title>Foobar</title></tplarg>}</root>" ),
79 array(
"{{{ {{Foo}} }}}",
"<root><tplarg><title> <template><title>Foo</title></template> </title></tplarg></root>" ),
80 array(
"{{ {{{Foo}}} }}",
"<root><template><title> <tplarg><title>Foo</title></tplarg> </title></template></root>" ),
81 array(
"{{{{{Foo}}}}}",
"<root><template><title><tplarg><title>Foo</title></tplarg></title></template></root>" ),
82 array(
"{{{{{Foo}} }}}",
"<root><tplarg><title><template><title>Foo</title></template> </title></tplarg></root>" ),
83 array(
"{{{{{{Foo}}}}}}",
"<root><tplarg><title><tplarg><title>Foo</title></tplarg></title></tplarg></root>" ),
84 array(
"{{{{{{Foo}}}}}",
"<root>{<template><title><tplarg><title>Foo</title></tplarg></title></template></root>" ),
85 array(
"[[[Foo]]",
"<root>[[[Foo]]</root>" ),
86 array(
"{{Foo|[[[[bar]]|baz]]}}",
"<root><template><title>Foo</title><part><name index=\"1\" /><value>[[[[bar]]|baz]]</value></part></template></root>" ),
87 array(
"{{Foo|[[[[bar]|baz]]}}",
"<root>{{Foo|[[[[bar]|baz]]}}</root>" ),
88 array(
"{{Foo|Foo [[[[bar]|baz]]}}",
"<root>{{Foo|Foo [[[[bar]|baz]]}}</root>" ),
89 array(
"Foo <display map>Bar</display map >Baz",
"<root>Foo <ext><name>display map</name><attr></attr><inner>Bar</inner><close></display map ></close></ext>Baz</root>" ),
90 array(
"Foo <display map foo>Bar</display map >Baz",
"<root>Foo <ext><name>display map</name><attr> foo</attr><inner>Bar</inner><close></display map ></close></ext>Baz</root>" ),
91 array(
"Foo <gallery bar=\"baz\" />",
"<root>Foo <ext><name>gallery</name><attr> bar="baz" </attr></ext></root>" ),
92 array(
"Foo <gallery bar=\"1\" baz=2 />",
"<root>Foo <ext><name>gallery</name><attr> bar="1" baz=2 </attr></ext></root>" ),
93 array(
"</foo>Foo<//foo>",
"<root><ext><name>/foo</name><attr></attr><inner>Foo</inner><close><//foo></close></ext></root>" ), # Worth blacklisting IMHO
94 array(
"{{#ifexpr: ({{{1|1}}} = 2) | Foo | Bar }}",
"<root><template><title>#ifexpr: (<tplarg><title>1</title><part><name index=\"1\" /><value>1</value></part></tplarg> = 2) </title><part><name index=\"1\" /><value> Foo </value></part><part><name index=\"2\" /><value> Bar </value></part></template></root>" ),
95 array(
"{{#if: {{{1|}}} | Foo | {{Bar}} }}",
"<root><template><title>#if: <tplarg><title>1</title><part><name index=\"1\" /><value></value></part></tplarg> </title><part><name index=\"1\" /><value> Foo </value></part><part><name index=\"2\" /><value> <template><title>Bar</title></template> </value></part></template></root>" ),
96 array(
"{{#if: {{{1|}}} | Foo | [[Bar]] }}",
"<root><template><title>#if: <tplarg><title>1</title><part><name index=\"1\" /><value></value></part></tplarg> </title><part><name index=\"1\" /><value> Foo </value></part><part><name index=\"2\" /><value> [[Bar]] </value></part></template></root>" ),
97 array(
"{{#if: {{{1|}}} | [[Foo]] | Bar }}",
"<root><template><title>#if: <tplarg><title>1</title><part><name index=\"1\" /><value></value></part></tplarg> </title><part><name index=\"1\" /><value> [[Foo]] </value></part><part><name index=\"2\" /><value> Bar </value></part></template></root>" ),
98 array(
"{{#if: {{{1|}}} | 1 | {{#if: {{{1|}}} | 2 | 3 }} }}",
"<root><template><title>#if: <tplarg><title>1</title><part><name index=\"1\" /><value></value></part></tplarg> </title><part><name index=\"1\" /><value> 1 </value></part><part><name index=\"2\" /><value> <template><title>#if: <tplarg><title>1</title><part><name index=\"1\" /><value></value></part></tplarg> </title><part><name index=\"1\" /><value> 2 </value></part><part><name index=\"2\" /><value> 3 </value></part></template> </value></part></template></root>" ),
99 array(
"{{ {{Foo}}",
"<root>{{ <template><title>Foo</title></template></root>" ),
100 array(
"{{Foobar {{Foo}} {{Bar}} {{Baz}} ",
"<root>{{Foobar <template><title>Foo</title></template> <template><title>Bar</title></template> <template><title>Baz</title></template> </root>" ),
101 array(
"[[Foo]] |",
"<root>[[Foo]] |</root>" ),
102 array(
"{{Foo|Bar|",
"<root>{{Foo|Bar|</root>" ),
103 array(
"[[Foo]",
"<root>[[Foo]</root>" ),
104 array(
"[[Foo|Bar]",
"<root>[[Foo|Bar]</root>" ),
105 array(
"{{Foo| [[Bar] }}",
"<root>{{Foo| [[Bar] }}</root>" ),
106 array(
"{{Foo| [[Bar|Baz] }}",
"<root>{{Foo| [[Bar|Baz] }}</root>" ),
107 array(
"{{Foo|bar=[[baz]}}",
"<root>{{Foo|bar=[[baz]}}</root>" ),
108 array(
"{{foo|",
"<root>{{foo|</root>" ),
109 array(
"{{foo|}",
"<root>{{foo|}</root>" ),
110 array(
"{{foo|} }}",
"<root><template><title>foo</title><part><name index=\"1\" /><value>} </value></part></template></root>" ),
111 array(
"{{foo|bar=|}",
"<root>{{foo|bar=|}</root>" ),
112 array(
"{{Foo|} Bar=",
"<root>{{Foo|} Bar=</root>" ),
113 array(
"{{Foo|} Bar=}}",
"<root><template><title>Foo</title><part><name>} Bar</name>=<value></value></part></template></root>" ),
126 if ( method_exists( $this->mPreprocessor,
'preprocessToXml' ) ) {
127 return $this->
normalizeXml( $this->mPreprocessor->preprocessToXml( $wikiText ) );
130 $dom = $this->mPreprocessor->preprocessToObj( $wikiText );
131 if ( is_callable(
array( $dom,
'saveXML' ) ) ) {
132 return $dom->saveXML();
145 return preg_replace(
'!<([a-z]+)/>!',
'<$1></$1>', str_replace(
' />',
'/>', $xml ) );
161 array(
"QuoteQuran" ), # http:
162 array(
"Factorial" ), # http:
163 array(
"All_system_messages" ), # http:
164 array(
"Fundraising" ), # http:
165 array(
"NestedTemplates" ), # bug 27936
174 $folder = __DIR__ .
"/../../../parser/preprocess";
175 $wikiText = file_get_contents(
"$folder/$filename.txt" );
178 $expectedFilename =
"$folder/$filename.expected";
179 if ( file_exists( $expectedFilename ) ) {
180 $expectedXml = $this->
normalizeXml( file_get_contents( $expectedFilename ) );
181 $this->assertEquals( $expectedXml,
$output );
183 $tempFilename = tempnam( $folder,
"$filename." );
184 file_put_contents( $tempFilename,
$output );
185 $this->markTestIncomplete(
"File $expectedFilename missing. Output stored as $tempFilename" );
194 array(
"== h ==<!--c1-->",
"<root><h level=\"2\" i=\"1\">== h ==<comment><!--c1--></comment></h></root>" ),
195 array(
"== h == <!--c1-->",
"<root><h level=\"2\" i=\"1\">== h == <comment><!--c1--></comment></h></root>" ),
196 array(
"== h ==<!--c1--> ",
"<root><h level=\"2\" i=\"1\">== h ==<comment><!--c1--></comment> </h></root>" ),
197 array(
"== h == <!--c1--> ",
"<root><h level=\"2\" i=\"1\">== h == <comment><!--c1--></comment> </h></root>" ),
198 array(
"== h ==<!--c1--><!--c2-->",
"<root><h level=\"2\" i=\"1\">== h ==<comment><!--c1--></comment><comment><!--c2--></comment></h></root>" ),
199 array(
"== h == <!--c1--><!--c2-->",
"<root><h level=\"2\" i=\"1\">== h == <comment><!--c1--></comment><comment><!--c2--></comment></h></root>" ),
200 array(
"== h ==<!--c1--><!--c2--> ",
"<root><h level=\"2\" i=\"1\">== h ==<comment><!--c1--></comment><comment><!--c2--></comment> </h></root>" ),
201 array(
"== h == <!--c1--><!--c2--> ",
"<root><h level=\"2\" i=\"1\">== h == <comment><!--c1--></comment><comment><!--c2--></comment> </h></root>" ),
202 array(
"== h == <!--c1--> <!--c2-->",
"<root><h level=\"2\" i=\"1\">== h == <comment><!--c1--></comment> <comment><!--c2--></comment></h></root>" ),
203 array(
"== h ==<!--c1--> <!--c2--> ",
"<root><h level=\"2\" i=\"1\">== h ==<comment><!--c1--></comment> <comment><!--c2--></comment> </h></root>" ),
204 array(
"== h == <!--c1--> <!--c2--> ",
"<root><h level=\"2\" i=\"1\">== h == <comment><!--c1--></comment> <comment><!--c2--></comment> </h></root>" ),
205 array(
"== h ==<!--c1--><!--c2--><!--c3-->",
"<root><h level=\"2\" i=\"1\">== h ==<comment><!--c1--></comment><comment><!--c2--></comment><comment><!--c3--></comment></h></root>" ),
206 array(
"== h ==<!--c1--> <!--c2--><!--c3-->",
"<root><h level=\"2\" i=\"1\">== h ==<comment><!--c1--></comment> <comment><!--c2--></comment><comment><!--c3--></comment></h></root>" ),
207 array(
"== h ==<!--c1--><!--c2--> <!--c3-->",
"<root><h level=\"2\" i=\"1\">== h ==<comment><!--c1--></comment><comment><!--c2--></comment> <comment><!--c3--></comment></h></root>" ),
208 array(
"== h ==<!--c1--> <!--c2--> <!--c3-->",
"<root><h level=\"2\" i=\"1\">== h ==<comment><!--c1--></comment> <comment><!--c2--></comment> <comment><!--c3--></comment></h></root>" ),
209 array(
"== h == <!--c1--><!--c2--><!--c3-->",
"<root><h level=\"2\" i=\"1\">== h == <comment><!--c1--></comment><comment><!--c2--></comment><comment><!--c3--></comment></h></root>" ),
210 array(
"== h == <!--c1--> <!--c2--><!--c3-->",
"<root><h level=\"2\" i=\"1\">== h == <comment><!--c1--></comment> <comment><!--c2--></comment><comment><!--c3--></comment></h></root>" ),
211 array(
"== h == <!--c1--><!--c2--> <!--c3-->",
"<root><h level=\"2\" i=\"1\">== h == <comment><!--c1--></comment><comment><!--c2--></comment> <comment><!--c3--></comment></h></root>" ),
212 array(
"== h == <!--c1--> <!--c2--> <!--c3-->",
"<root><h level=\"2\" i=\"1\">== h == <comment><!--c1--></comment> <comment><!--c2--></comment> <comment><!--c3--></comment></h></root>" ),
213 array(
"== h ==<!--c1--><!--c2--><!--c3--> ",
"<root><h level=\"2\" i=\"1\">== h ==<comment><!--c1--></comment><comment><!--c2--></comment><comment><!--c3--></comment> </h></root>" ),
214 array(
"== h ==<!--c1--> <!--c2--><!--c3--> ",
"<root><h level=\"2\" i=\"1\">== h ==<comment><!--c1--></comment> <comment><!--c2--></comment><comment><!--c3--></comment> </h></root>" ),
215 array(
"== h ==<!--c1--><!--c2--> <!--c3--> ",
"<root><h level=\"2\" i=\"1\">== h ==<comment><!--c1--></comment><comment><!--c2--></comment> <comment><!--c3--></comment> </h></root>" ),
216 array(
"== h ==<!--c1--> <!--c2--> <!--c3--> ",
"<root><h level=\"2\" i=\"1\">== h ==<comment><!--c1--></comment> <comment><!--c2--></comment> <comment><!--c3--></comment> </h></root>" ),
217 array(
"== h == <!--c1--><!--c2--><!--c3--> ",
"<root><h level=\"2\" i=\"1\">== h == <comment><!--c1--></comment><comment><!--c2--></comment><comment><!--c3--></comment> </h></root>" ),
218 array(
"== h == <!--c1--> <!--c2--><!--c3--> ",
"<root><h level=\"2\" i=\"1\">== h == <comment><!--c1--></comment> <comment><!--c2--></comment><comment><!--c3--></comment> </h></root>" ),
219 array(
"== h == <!--c1--><!--c2--> <!--c3--> ",
"<root><h level=\"2\" i=\"1\">== h == <comment><!--c1--></comment><comment><!--c2--></comment> <comment><!--c3--></comment> </h></root>" ),
220 array(
"== h == <!--c1--> <!--c2--> <!--c3--> ",
"<root><h level=\"2\" i=\"1\">== h == <comment><!--c1--></comment> <comment><!--c2--></comment> <comment><!--c3--></comment> </h></root>" ),
221 array(
"== h ==<!--c1--> <!--c2-->",
"<root><h level=\"2\" i=\"1\">== h ==<comment><!--c1--></comment> <comment><!--c2--></comment></h></root>" ),
222 array(
"== h == <!--c1--> <!--c2-->",
"<root><h level=\"2\" i=\"1\">== h == <comment><!--c1--></comment> <comment><!--c2--></comment></h></root>" ),
223 array(
"== h ==<!--c1--> <!--c2--> ",
"<root><h level=\"2\" i=\"1\">== h ==<comment><!--c1--></comment> <comment><!--c2--></comment> </h></root>" ),
226 array(
"== h == x <!--c1--><!--c2--><!--c3--> ",
"<root>== h == x <comment><!--c1--></comment><comment><!--c2--></comment><comment><!--c3--></comment> </root>" ),
227 array(
"== h ==<!--c1--> x <!--c2--><!--c3--> ",
"<root>== h ==<comment><!--c1--></comment> x <comment><!--c2--></comment><comment><!--c3--></comment> </root>" ),
228 array(
"== h ==<!--c1--><!--c2--><!--c3--> x ",
"<root>== h ==<comment><!--c1--></comment><comment><!--c2--></comment><comment><!--c3--></comment> x </root>" ),
236 public function testHeadings( $wikiText, $expectedXml ) {
preprocessToXml( $wikiText)
Get XML preprocessor tree from the preprocessor (which may not be the native XML-based one).
Set options of the Parser.
skin txt MediaWiki includes four core it has been set as the default in MediaWiki since the replacing Monobook it had been been the default skin since before being replaced by Vector largely rewritten in while keeping its appearance Several legacy skins were removed in the as the burden of supporting them became too heavy to bear Those in etc for skin dependent CSS etc for skin dependent JavaScript These can also be customised on a per user by etc This feature has led to a wide variety of user styles becoming that gallery is a good place to ending in php
normalizeXml( $xml)
Normalize XML string to the form that a DOMDocument saves out.
this class mediates it Skin Encapsulates a look and feel for the wiki All of the functions that render HTML and make choices about how to render it are here and are called from various other places when and is meant to be subclassed with other skins that may override some of its functions The User object contains a reference to a and so rather than having a global skin object we just rely on the global User and get the skin with $wgUser and also has some character encoding functions and other locale stuff The current user interface language is instantiated as and the content language as $wgContLang
static newFromUserAndLang(User $user, Language $lang)
Get a ParserOptions object from a given user and language.
the array() calling protocol came about after MediaWiki 1.4rc1.
List of Api Query prop modules.
when a variable name is used in a it is silently declared as a new masking the global
Preprocessor $mPreprocessor
testPreprocessorOutput( $wikiText, $expectedXml)
@dataProvider provideCases @covers Preprocessor_DOM::preprocessToXml
Allows to change the fields on the form that will be generated $name
static provideFiles()
These are more complex test cases taken out of wiki articles.
static provideHeadings()
Tests from Bug 28642 ยท https://bugzilla.wikimedia.org/28642.
testHeadings( $wikiText, $expectedXml)
@dataProvider provideHeadings @covers Preprocessor_DOM::preprocessToXml
testPreprocessorOutputFiles( $filename)
@dataProvider provideFiles @covers Preprocessor_DOM::preprocessToXml
The User object encapsulates all of the user-specific settings (user_id, name, rights,...