# MediaWiki Parser test cases # Some taken from http://meta.wikimedia.org/wiki/Parser_testing # All (C) their respective authors and released under the GPL # # The syntax should be fairly self-explanatory. # # Currently supported test options: # One of the following three: # # (default) generate HTML output # pst apply pre-save transform # msg apply message transform # # Plus any combination of these: # # cat add category links # ill add inter-language links # subpage enable subpages (disabled by default) # noxml don't check for XML well formdness # title=[[XXX]] run test using article title XXX # language=XXX set content language to XXX for this test # variant=XXX set the variant of language for this test (eg zh-tw) # disabled do not run test # # For testing purposes, temporary articles can created: # !!article / NAMESPACE:TITLE / !!text / ARTICLE TEXT / !!endarticle # where '/' denotes a newline. # This is the standard article assumed to exist. !! article Main Page !! text blah blah !! endarticle ### ### Basic tests ### !! test Blank input !! input !! result !! end !! test Simple paragraph !! input This is a simple paragraph. !! result

This is a simple paragraph.

!! end !! test Simple list !! input * Item 1 * Item 2 !! result !! end !! test Italics and bold !! input * plain * plain''italic''plain * plain''italic''plain''italic''plain * plain'''bold'''plain * plain'''bold'''plain'''bold'''plain * plain''italic''plain'''bold'''plain * plain'''bold'''plain''italic''plain * plain''italic'''bold-italic'''italic''plain * plain'''bold''bold-italic''bold'''plain * plain'''''bold-italic'''italic''plain * plain'''''bold-italic''bold'''plain * plain''italic'''bold-italic'''''plain * plain'''bold''bold-italic'''''plain * plain l'''italic''plain !! result !! end ### ### test cases ### !! test unordered list !! input * This is not an unordered list item. !! result

* This is not an unordered list item.

!! end !! test spacing !! input Lorem ipsum dolor sed abit. sed nullum. :and a colon !! result

Lorem ipsum dolor sed abit. sed nullum. :and a colon

!! end !! test nowiki 3 !! input :There is not nowiki. :There is nowiki. #There is not nowiki. #There is nowiki. *There is not nowiki. *There is nowiki. !! result
There is not nowiki.
There is nowiki.
  1. There is not nowiki.
  2. There is nowiki.
  • There is not nowiki.
  • There is nowiki.
!! end ### ### Comments ### !! test Comment test 1 !! input asdf !! result
asdf
!! end !! test Comment test 2 !! input asdf jkl !! result

asdf jkl

!! end !! test Comment test 3 !! input asdf jkl !! result

asdf jkl

!! end !! test Comment test 4 !! input asdfjkl !! result

asdfjkl

!! end !! test Comment spacing !! input a b c !! result

a

 b 

c

!! end !! test Comment whitespace !! input !! result !! end !! test Comment semantics and delimiters !! input !! result !! end !! test Comment semantics and delimiters, redux !! input !! result !! end !! test Comment semantics and delimiters: directors cut !! input --> !! result

-->

!! end !! test Comment semantics: nesting !! input --> !! result

-->

!! end !! test Comment semantics: unclosed comment at end !! input '''This year''''s election ''should'' beat '''last year''''s. ''Tom'''s car is bigger than ''Susan'''s. !! result

Bold italic text with bold deactivated in between.

Bold italic text with italic deactivated in between.

Bold text..

..spanning two paragraphs (should not work).

Bold tag left open

Italic tag left open

Normal text.

This year's election should beat last year's.

Toms car is bigger than Susans.

!! end ### ### Tables ### ### some content taken from http://meta.wikimedia.org/wiki/MediaWiki_User%27s_Guide:_Using_tables ### # This should not produce
as
# is the bare minimun required by the spec, see: # http://www.w3.org/TR/xhtml-modularization/dtd_module_defs.html#a_module_Basic_Tables !! test A table with no data. !! input {||} !! result !! end # A table with nothing but a caption is invalid XHTML, we might want to render # this as

caption

!! test A table with nothing but a caption !! input {| |+ caption |} !! result
caption
!! end !! test Simple table !! input {| | 1 || 2 |- | 3 || 4 |} !! result
1 2
3 4
!! end !! test Multiplication table !! input {| border="1" cellpadding="2" |+Multiplication table |- ! × !! 1 !! 2 !! 3 |- ! 1 | 1 || 2 || 3 |- ! 2 | 2 || 4 || 6 |- ! 3 | 3 || 6 || 9 |- ! 4 | 4 || 8 || 12 |- ! 5 | 5 || 10 || 15 |} !! result
Multiplication table
× 1 2 3
1 1 2 3
2 2 4 6
3 3 6 9
4 4 8 12
5 5 10 15
!! end !! test Table rowspan !! input {| align=right border=1 | Cell 1, row 1 |rowspan=2| Cell 2, row 1 (and 2) | Cell 3, row 1 |- | Cell 1, row 2 | Cell 3, row 2 |} !! result
Cell 1, row 1 Cell 2, row 1 (and 2) Cell 3, row 1
Cell 1, row 2 Cell 3, row 2
!! end !! test Nested table !! input {| border=1 | α | {| bgcolor=#ABCDEF border=2 |nested |- |table |} |the original table again |} !! result
α
nested
table
the original table again
!! end !! test Invalid attributes in table cell (bug 1830) !! input {| |Cell:|broken |} !! result
broken
!! end # FIXME: this one has incorrect tag nesting still. !! test TODO: Table security: embedded pipes (http://mail.wikipedia.org/pipermail/wikitech-l/2006-April/034637.html) !! input {| | |[ftp://|x||]" onmouseover="alert(document.cookie)">test !! result
[1]" onmouseover="alert(document.cookie)">test
!! end ### ### Internal links ### !! test Plain link, capitalized !! input [[Main Page]] !! result

Main Page

!! end !! test Plain link, uncapitalized !! input [[main Page]] !! result

main Page

!! end !! test Piped link !! input [[Main Page|The Main Page]] !! result

The Main Page

!! end !! test Broken link !! input [[Zigzagzogzagzig]] !! result

Zigzagzogzagzig

!! end !! test Link with prefix !! input xxx[[main Page]], xxx[[Main Page]], Xxx[[main Page]] XXX[[main Page]], XXX[[Main Page]] !! result

xxxmain Page, xxxMain Page, Xxxmain Page XXXmain Page, XXXMain Page

!! end !! test Link with suffix !! input [[Main Page]]xxx, [[Main Page]]XXX !! result

Main Pagexxx, Main PageXXX

!! end !! test Link with 3 brackets !! input [[[main page]]] !! result

[[[main page]]]

!! end !! test Piped link with 3 brackets !! input [[[main page|the main page]]] !! result

[[[main page|the main page]]]

!! end !! test Link with multiple pipes !! input [[Main Page|The|Main|Page]] !! result

The|Main|Page

!! end !! test Link to namespaces !! input [[Talk:Parser testing]], [[Meta:Disclaimers]] !! result

Talk:Parser testing, Meta:Disclaimers

!! end !! test Piped link to namespace !! input [[Meta:Disclaimers|The disclaimers]] !! result

The disclaimers

!! end !! test Link containing } !! input [[Usually caused by a typo (oops}]] !! result

[[Usually caused by a typo (oops}]]

!! end !! test Link containing % (not as a hex sequence) !! input [[7% Solution]] !! result

7% Solution

!! end !! test Link containing % as a single hex sequence interpreted to char !! input [[7%25 Solution]] !! result

7% Solution

!!end !! test Link containing % as a double hex sequence interpreted to hex sequence !! input [[7%2525 Solution]] !! result

[[7%2525 Solution]]

!!end !! test Link containing "#<" and "#>" % as a hex sequences- these are valid section anchors Example for such a section: == < == !! input [[%23%3c]][[%23%3e]] !! result

#<#>

!! end !! test Link containing "<#" and ">#" as a hex sequences !! input [[%3c%23]][[%3e%23]] !! result

[[%3c%23]][[%3e%23]]

!! end !! test TODO: Link containing double-single-quotes '' (bug 4598) !! input [[Lista d''e paise d''o munno]] !! result

Lista d''e paise d''o munno

!! end !! test Link containing double-single-quotes '' in text (bug 4598 sanity check) !! input Some [[Link|pretty ''italics'' and stuff]]! !! result

Some pretty italics and stuff!

!! end !! test Link containing double-single-quotes '' in text embedded in italics (bug 4598 sanity check) !! input ''Some [[Link|pretty ''italics'' and stuff]]! !! result

Some pretty italics and stuff!

!! end !! test Plain link to URL !! input [[http://www.example.org]] !! result

[[1]]

!! end # I'm fairly sure the expected result here is wrong. # We want these to be URL links, not pseudo-pages with URLs for titles.... # However the current output is also pretty screwy. # # ---- # I'm changing it to match the current output--it arguably makes more # sense in the light of the test above. Old expected result was: #

Piped link to URL: an example URL #

# But I think this test is bordering on "garbage in, garbage out" anyway. # -- wtm !! test Piped link to URL !! input Piped link to URL: [[http://www.example.org|an example URL]] !! result

Piped link to URL: [example URL]

!! end !! test BUG 2: [[page|http://url/]] should link to page, not http://url/ !! input [[Main Page|http://url/]] !! result

http://url/

!! end !! test BUG 337: Escaped self-links should be bold !! options title=[[Bug462]] !! input [[Bug462]] [[Bug462]] !! result

Bug462 Bug462

!! end !! test Self-link to section should not be bold !! options title=[[Main Page]] !! input [[Main Page#section]] !! result

Main Page#section

!! end !! test inside a link !! input [[Main Page]] [[Main Page|the main page [it's not very good]]] !! result

[[Main Page]] the main page [it's not very good]

!! end ### ### Interwiki links (see maintenance/interwiki.sql) ### !! test Inline interwiki link !! input [[MeatBall:SoftSecurity]] !! result

MeatBall:SoftSecurity

!! end !! test Inline interwiki link with empty title (bug 2372) !! input [[MeatBall:]] !! result

MeatBall:

!! end !! test Interwiki link encoding conversion (bug 1636) !! input *[[Wikipedia:ro:Olteniţa]] *[[Wikipedia:ro:Olteniţa]] !! result !! end !! test Interwiki link with fragment (bug 2130) !! input [[MeatBall:SoftSecurity#foo]] !! result

MeatBall:SoftSecurity#foo

!! end ## ## XHTML tidiness ### !! test
to
!! input 1
2
3 !! result

1
2
3

!! end !! test Incorrecly removing closing slashes from correctly formed XHTML !! input
!! result


!! end !! test Failing to transform badly formed HTML into correct XHTML !! input


!! result




!!end !! test Horizontal ruler (should it add that extra space?) !! input

foo
bar !! result

foo
bar !! end ### ### Block-level elements ### !! test Common list !! input *Common list * item 2 *item 3 !! result
  • Common list
  • item 2
  • item 3
!! end !! test Numbered list !! input #Numbered list #item 2 # item 3 !! result
  1. Numbered list
  2. item 2
  3. item 3
!! end !! test Mixed list !! input *Mixed list *# with numbers ** and bullets *# and numbers *bullets again **bullet level 2 ***bullet level 3 ***#Number on level 4 **bullet level 2 **#Number on level 3 **#Number on level 3 *#number level 2 *Level 1 !! result
  • Mixed list
    1. with numbers
    • and bullets
    1. and numbers
  • bullets again
    • bullet level 2
      • bullet level 3
        1. Number on level 4
    • bullet level 2
      1. Number on level 3
      2. Number on level 3
    1. number level 2
  • Level 1
!! end !! test List items are not parsed correctly following a
 block (bug 785)
!! input
* 
foo
*
bar
* zar !! result
  • foo
  • bar
  • zar
!! end ### ### Magic Words ### !! test Magic Word: {{CURRENTDAY}} !! input {{CURRENTDAY}} !! result

1

!! end !! test Magic Word: {{CURRENTDAY2}} !! input {{CURRENTDAY2}} !! result

01

!! end !! test Magic Word: {{CURRENTDAYNAME}} !! input {{CURRENTDAYNAME}} !! result

Thursday

!! end !! test Magic Word: {{CURRENTDOW}} !! input {{CURRENTDOW}} !! result

4

!! end !! test Magic Word: {{CURRENTMONTH}} !! input {{CURRENTMONTH}} !! result

01

!! end !! test Magic Word: {{CURRENTMONTHABBREV}} !! input {{CURRENTMONTHABBREV}} !! result

Jan

!! end !! test Magic Word: {{CURRENTMONTHNAME}} !! input {{CURRENTMONTHNAME}} !! result

January

!! end !! test Magic Word: {{CURRENTMONTHNAMEGEN}} !! input {{CURRENTMONTHNAMEGEN}} !! result

January

!! end !! test Magic Word: {{CURRENTTIME}} !! input {{CURRENTTIME}} !! result

00:02

!! end !! test Magic Word: {{CURRENTWEEK}} (@bug 4594) !! input {{CURRENTWEEK}} !! result

1

!! end !! test Magic Word: {{CURRENTYEAR}} !! input {{CURRENTYEAR}} !! result

1970

!! end !! test Magic Word: {{FULLPAGENAME}} !! options title=[[User:Ævar Arnfjörð Bjarmason]] !! input {{FULLPAGENAME}} !! result

User:Ævar Arnfjörð Bjarmason

!! end !! test Magic Word: {{FULLPAGENAMEE}} !! options title=[[User:Ævar Arnfjörð Bjarmason]] !! input {{FULLPAGENAMEE}} !! result

User:%C3%86var_Arnfj%C3%B6r%C3%B0_Bjarmason

!! end !! test Magic Word: {{NAMESPACE}} !! options title=[[User:Ævar Arnfjörð Bjarmason]] disabled # FIXME !! input {{NAMESPACE}} !! result

User

!! end !! test Magic Word: {{NAMESPACEE}} !! options title=[[User:Ævar Arnfjörð Bjarmason]] disabled # FIXME !! input {{NAMESPACEE}} !! result

User

!! end !! test Magic Word: {{NUMBEROFARTICLES}} !! input {{NUMBEROFARTICLES}} !! result

1

!! end !! test Magic Word: {{NUMBEROFFILES}} !! input {{NUMBEROFFILES}} !! result

1

!! end !! test Magic Word: {{PAGENAME}} !! options title=[[User:Ævar Arnfjörð Bjarmason]] disabled # FIXME !! input {{PAGENAME}} !! result

Ævar Arnfjörð Bjarmason

!! end !! test Magic Word: {{PAGENAMEE}} !! options title=[[User:Ævar Arnfjörð Bjarmason]] !! input {{PAGENAMEE}} !! result

User:%C3%86var_Arnfj%C3%B6r%C3%B0_Bjarmason

!! end !! test Magic Word: {{REVISIONID}} !! input {{REVISIONID}} !! result

1337

!! end !! test Magic Word: {{SCRIPTPATH}} !! input {{SCRIPTPATH}} !! result

/

!! end !! test Magic Word: {{SERVER}} !! input {{SERVER}} !! result

http://localhost

!! end !! test Magic Word: {{SERVERNAME}} !! input {{SERVERNAME}} !! result

Britney Spears

!! end !! test Magic Word: {{SITENAME}} !! input {{SITENAME}} !! result

MediaWiki

!! end !! test Namespace 1 {{ns:1}} !! input {{ns:1}} !! result

Talk

!! end !! test Namespace 1 {{ns:01}} !! input {{ns:01}} !! result

Talk

!! end !! test Namespace 0 {{ns:0}} (bug 4783) !! input {{ns:0}} !! result !! end !! test Namespace 0 {{ns:00}} (bug 4783) !! input {{ns:00}} !! result !! end !! test Namespace -1 {{ns:-1}} !! input {{ns:-1}} !! result

Special

!! end !! test Namespace Project {{ns:User}} !! input {{ns:User}} !! result

User

!! end ### ### Magic links ### !! test Magic links: internal link to RFC (bug 479) !! input [[RFC 123]] !! result

RFC 123

!! end !! test Magic links: RFC (bug 479) !! input RFC 822 !! result

RFC 822

!! end !! test Magic links: ISBN (bug 1937) !! input ISBN 0-306-40615-2 !! result

ISBN 0-306-40615-2

!! end !! test Magic links: PMID incorrectly converts space to underscore !! input PMID 1234 !! result

PMID 1234

!! end ### ### Templates #### !! test Nonexistant template !! input {{thistemplatedoesnotexist}} !! result

Template:Thistemplatedoesnotexist

!! end !! article Template:test !! text This is a test template !! endarticle !! test Simple template !! input {{test}} !! result

This is a test template

!! end !! test Template with explicit namespace !! input {{Template:test}} !! result

This is a test template

!! end !! article Template:paramtest !! text This is a test template with parameter {{{param}}} !! endarticle !! test Template parameter !! input {{paramtest|param=foo}} !! result

This is a test template with parameter foo

!! end !! article Template:paramtestnum !! text [[{{{1}}}|{{{2}}}]] !! endarticle !! test Template unnamed parameter !! input {{paramtestnum|Main Page|the main page}} !! result

the main page

!! end !! article Template:templatesimple !! text (test) !! endarticle !! article Template:templateredirect !! text #redirect [[Template:templatesimple]] !! endarticle !! article Template:templateasargtestnum !! text {{{{{1}}}}} !! endarticle !! article Template:templateasargtest !! text {{template{{{templ}}}}} !! endarticle !! article Template:templateasargtest2 !! text {{{{{templ}}}}} !! endarticle !! test Template with template name as unnamed argument !! input {{templateasargtestnum|templatesimple}} !! result

(test)

!! end !! test Template with template name as argument !! input {{templateasargtest|templ=simple}} !! result

(test)

!! end !! test Template with template name as argument (2) !! input {{templateasargtest2|templ=templatesimple}} !! result

(test)

!! end !! article Template:templateasargtestdefault !! text {{{{{templ|templatesimple}}}}} !! endarticle !! article Template:templa !! text '''templ''' !! endarticle !! test Template with default value !! input {{templateasargtestdefault}} !! result

(test)

!! end !! test Template with default value (value set) !! input {{templateasargtestdefault|templ=templa}} !! result

templ

!! end !! test Template redirect !! input {{templateredirect}} !! result

(test)

!! end !! test Template with argument in separate line !! input {{ templateasargtest | templ = simple }} !! result

(test)

!! end !! test Template with complex template as argument !! input {{paramtest| param ={{ templateasargtest | templ = simple }}}} !! result

This is a test template with parameter (test)

!! end !! test Template with thumb image (with link in description) !! input {{paramtest| param =[[Image:noimage.png|thumb|[[no link|link]] [[no link|caption]]]]}} !! result This is a test template with parameter !! end !! article Template:complextemplate !! text {{{1}}} {{paramtest| param ={{{param}}}}} !! endarticle !! test Template with complex arguments !! input {{complextemplate| param ={{ templateasargtest | templ = simple }}|[[Template:complextemplate|link]]}} !! result

link This is a test template with parameter (test)

!! end !! test BUG 553: link with two variables in a piped link !! input {| |[[{{{1}}}|{{{2}}}]] |} !! result
[[{{{1}}}|{{{2}}}]]
!! end !! test Magic variable as template parameter !! input {{paramtest|param={{SITENAME}}}} !! result

This is a test template with parameter MediaWiki

!! end !! article Template:linktest !! text [[{{{param}}}|link]] !! endarticle !! test Template parameter as link source !! input {{linktest|param=Main Page}} !! result

link

!! end !!article Template:paramtest2 !! text including another template, {{paramtest|param={{{arg}}}}} !! endarticle !! test Template passing argument to another template !! input {{paramtest2|arg='hmm'}} !! result

including another template, This is a test template with parameter 'hmm'

!! end !! article Template:Linktest2 !! text Main Page !! endarticle !! test Template as link source !! input [[{{linktest2}}]] !! result

Main Page

!! end !! article Template:loop1 !! text {{loop2}} !! endarticle !! article Template:loop2 !! text {{loop1}} !! endarticle !! test Template infinite loop !! input {{loop1}} !! result

loop1

!! end !! test Template from main namespace !! input {{:Main Page}} !! result

blah blah

!! end !! article Template:table !! text {| | 1 || 2 |- | 3 || 4 |} !! endarticle !! test BUG 529: Template with table, not included at beginning of line !! input foo {{table}} !! result

foo

1 2
3 4
!! end !! test BUG 523: Template shouldn't eat newline (or add an extra one before table) !! input foo {{table}} !! result

foo

1 2
3 4
!! end !! test BUG 41: Template parameters shown as broken links !! input {{{parameter}}} !! result

{{{parameter}}}

!! end !! article Template:MSGNW test !! text ''None'' of '''this''' should be * interepreted but rather passed unmodified {{test}} !! endarticle # hmm, fix this or just deprecate msgnw and document its behavior? !! test msgnw keyword !! options disabled !! input {{msgnw:MSGNW test}} !! result

''None'' of '''this''' should be * interepreted but rather passed unmodified {{test}}

!! end !! test int keyword !! input {{int:youhavenewmessages|lots of money|not!}} !! result

You have lots of money (not!).

!! end !! article Template:Includes !! text Foozarbar !! endarticle !! test and being included !! input {{Includes}} !! result

Foobar

!! end !! article Template:Includes2 !! text Foobar !! endarticle !! test being included !! input {{Includes2}} !! result

Foo

!! end !! article Template:Includes3 !! text Foobarzar !! endarticle !! test and being included !! input {{Includes3}} !! result

Foo

!! end !! test and on a page !! input Foozarbar !! result

Foozar

!! end !! test on a page !! input Foobar !! result

Foobar

!! end ### ### Pre-save transform tests ### !! test pre-save transform: subst: !! options PST !! input {{subst:test}} !! result This is a test template !! end !! test pre-save transform: normal template !! options PST !! input {{test}} !! result {{test}} !! end !! test pre-save transform: nonexistant template !! options PST !! input {{thistemplatedoesnotexist}} !! result {{thistemplatedoesnotexist}} !! end !! test pre-save transform: subst magic variables !! options PST !! input {{subst:SITENAME}} !! result MediaWiki !! end # This is bug 89, which I fixed. -- wtm !! test pre-save transform: subst: templates with parameters !! options pst !! input {{subst:paramtest|param="something else"}} !! result This is a test template with parameter "something else" !! end !! article Template:nowikitest !! text '''not wiki''' !! endarticle !! test pre-save transform: nowiki in subst (bug 1188) !! options pst !! input {{subst:nowikitest}} !! result '''not wiki''' !! end !! article Template:commenttest !! text This template has in it. !! endarticle !! test pre-save transform: comment in subst (bug 1936) !! options pst !! input {{subst:commenttest}} !! result This template has in it. !! end !! test pre-save transform: unclosed tag !! options pst noxml !! input '''not wiki''' !! result '''not wiki''' !! end !! test pre-save transform: mixed tag case !! options pst noxml !! input '''not wiki''' !! result '''not wiki''' !! end !! test pre-save transform: unclosed comment in !! options pst noxml !! input wikinowiki !!result !!end !! test pre-save transform: comment containing extension !! options pst !! input !!result !!end !! test pre-save transform: comment containing nowiki !! options pst !! input !!result !!end !! test pre-save transform: comment containing math !! options pst !! input !!result !!end !! test pre-save transform: in subst (bug 3298) !! options pst !! input {{subst:Includes}} !! result Foobar !! end !! test pre-save transform: in subst (bug 3298) !! options pst !! input {{subst:Includes2}} !! result Foo !! end !! test pre-save transform: context links ("pipe trick") !! options pst !! input [[Article (context)|]] [[Bar:Article|]] [[:Bar:Article|]] [[Bar:Article (context)|]] [[:Bar:Article (context)|]] [[|Article]] [[|Article (context)]] [[Bar:X (Y) Z|]] [[:Bar:X (Y) Z|]] !! result [[Article (context)|Article]] [[Bar:Article|Article]] [[:Bar:Article|Article]] [[Bar:Article (context)|Article]] [[:Bar:Article (context)|Article]] [[Article]] [[Article (context)]] [[Bar:X (Y) Z|X (Y) Z]] [[:Bar:X (Y) Z|X (Y) Z]] !! end !! test pre-save transform: context links ("pipe trick") with interwiki prefix !! options pst !! input [[interwiki:Article|]] [[:interwiki:Article|]] [[interwiki:Bar:Article|]] [[:interwiki:Bar:Article|]] !! result [[interwiki:Article|Article]] [[:interwiki:Article|Article]] [[interwiki:Bar:Article|Bar:Article]] [[:interwiki:Bar:Article|Bar:Article]] !! end !! test pre-save transform: context links ("pipe trick") with parens in title !! options pst title=[[Somearticle (context)]] !! input [[|Article]] !! result [[Article (context)|Article]] !! end !! test pre-save transform: context links ("pipe trick") with comma in title !! options pst title=[[Someplace, Somewhere]] !! input [[|Otherplace]] [[Otherplace, Elsewhere|]] [[Otherplace, Elsewhere, Anywhere|]] !! result [[Otherplace, Somewhere|Otherplace]] [[Otherplace, Elsewhere|Otherplace]] [[Otherplace, Elsewhere, Anywhere|Otherplace]] !! end !! test pre-save transform: context links ("pipe trick") with parens and comma !! options pst title=[[Someplace (IGNORED), Somewhere]] !! input [[|Otherplace]] [[Otherplace (place), Elsewhere|]] !! result [[Otherplace, Somewhere|Otherplace]] [[Otherplace (place), Elsewhere|Otherplace]] !! end !! test pre-save transform: context links ("pipe trick") with comma and parens !! options pst title=[[Who, me? (context)]] !! input [[|Yes, you.]] [[Me, Myself, and I (1937 song)|]] !! result [[Yes, you. (context)|Yes, you.]] [[Me, Myself, and I (1937 song)|Me, Myself, and I]] !! end !! test pre-save transform: context links ("pipe trick") with namespace !! options pst title=[[Ns:Somearticle]] !! input [[|Article]] !! result [[Ns:Article|Article]] !! end !! test pre-save transform: context links ("pipe trick") with namespace and parens !! options pst title=[[Ns:Somearticle (context)]] !! input [[|Article]] !! result [[Ns:Article (context)|Article]] !! end !! test pre-save transform: context links ("pipe trick") with namespace and comma !! options pst title=[[Ns:Somearticle, Context, Whatever]] !! input [[|Article]] !! result [[Ns:Article, Context, Whatever|Article]] !! end !! test pre-save transform: context links ("pipe trick") with namespace, comma and parens !! options pst title=[[Ns:Somearticle, Context (context)]] !! input [[|Article]] !! result [[Ns:Article (context)|Article]] !! end !! test pre-save transform: context links ("pipe trick") with namespace, parens and comma !! options pst title=[[Ns:Somearticle (IGNORED), Context]] !! input [[|Article]] !! result [[Ns:Article, Context|Article]] !! end ### ### Message transform tests ### !! test message transform: magic variables !! options msg !! input {{SITENAME}} !! result MediaWiki !! end !! test message transform: should not transform wiki markup !! options msg !! input ''test'' !! result ''test'' !! end !! test TODO: message transform: in transcluded template (bug 4926) !! options msg !! input {{Includes}} !! result Foobar !! end !! test TODO: message transform: in transcluded template (bug 4926) !! options msg !! input {{Includes2}} !! result Foo !! end !! test {{#special:}} page name, known !! options msg !! input {{#special:Recentchanges}} !! result Special:Recentchanges !! end !! test {{#special:}} page name, unknown !! options msg !! input {{#special:foobarnonexistent}} !! result No such special page !! end ### ### Images ### !! test Simple image !! input [[Image:foobar.jpg]] !! result

Image:foobar.jpg

!! end !! test Right-aligned image !! input [[Image:foobar.jpg|right]] !! result
!! end !! test Image with caption !! input [[Image:foobar.jpg|right|Caption text]] !! result
Caption text
!! end !! test Image with frame and link !! input [[Image:Foobar.jpg|frame|left|This is a test image [[Main Page]]]] !! result
This is a test image Main Page
This is a test image Main Page
!! end !! test Link to image page- image page normally doesn't exists, hence edit link TODO: Add test with existing image page #

Image:test !! input [[:Image:test]] !! result

Image:test

!! end !! test Frameless image caption with a free URL !! input [[Image:foobar.jpg|http://example.com]] !! result

http://example.com

!! end !! test Thumbnail image caption with a free URL !! input [[Image:foobar.jpg|thumb|http://example.com]] !! result !! end !! test BUG 1887: A ISBN with a thumbnail !! input [[Image:foobar.jpg|thumb|ISBN 1235467890]] !! result !! end !! test BUG 1887: A RFC with a thumbnail !! input [[Image:foobar.jpg|thumb|This is RFC 12354]] !! result
This is RFC 12354
This is RFC 12354
!! end !! test BUG 1887: A mailto link with a thumbnail !! input [[Image:foobar.jpg|thumb|Please mailto:nobody@example.com]] !! result !! end !! test BUG 1887: A with a thumbnail- we don't render math in the parsertests by default, so math is not stripped and turns up as escaped <math> tags. !! input [[Image:foobar.jpg|thumb|2+2]] !! result
<math>2+2</math>
<math>2+2</math>
!! end !! test BUG 1887, part 2: A with a thumbnail- math enabled !! options math !! input [[Image:foobar.jpg|thumb|2+2]] !! result
2 + 2
2 + 2
!! end # Pending resolution to bug 368 !! test BUG 648: Frameless image caption with a link !! input [[Image:foobar.jpg|text with a [[link]] in it]] !! result

text with a link in it

!! end !! test BUG 648: Frameless image caption with a link (suffix) !! input [[Image:foobar.jpg|text with a [[link]]foo in it]] !! result

text with a linkfoo in it

!! end !! test BUG 648: Frameless image caption with an interwiki link !! input [[Image:foobar.jpg|text with a [[MeatBall:Link]] in it]] !! result

text with a MeatBall:Link in it

!! end !! test BUG 648: Frameless image caption with a piped interwiki link !! input [[Image:foobar.jpg|text with a [[MeatBall:Link|link]] in it]] !! result

text with a link in it

!! end !! test Escape HTML special chars in image alt text !! input [[Image:foobar.jpg|& < > "]] !! result

& < > "

!! end !! test BUG 499: Alt text should have Ӓ, not &1234; !! input [[Image:foobar.jpg|♀]] !! result

♀

!! end !! test Broken image caption with link !! input [[Image:Foobar.jpg|thumb|This is a broken caption. But [[Main Page|this]] is just an ordinary link. !! result

[[Image:Foobar.jpg|thumb|This is a broken caption. But this is just an ordinary link.

!! end !! test Image caption containing another image !! input [[Image:Foobar.jpg|thumb|This is a caption with another [[Image:icon.png|image]] inside it!]] !! result
This is a caption with another Image:Icon.png inside it!
This is a caption with another Image:Icon.png inside it!
!! end !! test Image caption containing a newline !! input [[Image:Foobar.jpg|This *is some text]] !! result

This *is some text

!!end !! test Bug 3090: External links other than http: in image captions !! input [[Image:Foobar.jpg|thumb|200px|This caption has [irc://example.net irc] and [https://example.com Secure] ext links in it.]] !! result
This caption has irc and Secure ext links in it.
This caption has irc and Secure ext links in it.
!! end ### ### Subpages ### !! article Subpage test/subpage !! text foo !! endarticle !! test Subpage link !! options subpage title=[[Subpage test]] !! input [[/subpage]] !! result

/subpage

!! end !! test Subpage noslash link !! options subpage title=[[Subpage test]] !!input [[/subpage/]] !! result

subpage

!! end !! test Disabled subpages !! input [[/subpage]] !! result

/subpage

!! end !! test BUG 561: {{/Subpage}} !! options subpage title=[[Page]] !! input {{/Subpage}} !! result

Page/Subpage

!! end ### ### Categories ### !! article Category:MediaWiki User's Guide !! text blah !! endarticle !! test Link to category !! input [[:Category:MediaWiki User's Guide]] !! result

Category:MediaWiki User's Guide

!! end !! test Simple category !! options cat !! input [[Category:MediaWiki User's Guide]] !! result MediaWiki User's Guide !! end ### ### Inter-language links ### !! test Inter-language links !! options ill !! input [[es:Alimento]] [[fr:Nourriture]] [[zh:食品]] !! result es:Alimento fr:Nourriture zh:食品 !! end ### ### Sections ### !! test Basic section headings !! input == Headline 1 == Some text ==Headline 2== More ===Smaller headline=== Blah blah !! result

[edit] Headline 1

Some text

[edit] Headline 2

More

[edit] Smaller headline

Blah blah

!! end !! test Section headings with TOC !! input == Headline 1 == === Subheadline 1 === ===== Skipping a level ===== ====== Skipping a level ====== == Headline 2 == Some text ===Another headline=== !! result

Contents

[edit] Headline 1

[edit] Subheadline 1

[edit] Skipping a level
[edit] Skipping a level

[edit] Headline 2

Some text

[edit] Another headline

!! end # perl -e 'print "="x$_," Level $_ heading","="x$_,"\n" for 1..10' !! test Handling of sections up to level 6 and beyond !! input = Level 1 Heading= == Level 2 Heading== === Level 3 Heading=== ==== Level 4 Heading==== ===== Level 5 Heading===== ====== Level 6 Heading====== ======= Level 7 Heading======= ======== Level 8 Heading======== ========= Level 9 Heading========= ========== Level 10 Heading========== !! result

Contents

[edit] Level 1 Heading

[edit] Level 2 Heading

[edit] Level 3 Heading

[edit] Level 4 Heading

[edit] Level 5 Heading
[edit] Level 6 Heading
[edit] = Level 7 Heading=
[edit] == Level 8 Heading==
[edit] === Level 9 Heading===
[edit] ==== Level 10 Heading====
!! end !! test Resolving duplicate section names !! input == Foo bar == == Foo bar == !! result

[edit] Foo bar

[edit] Foo bar

!! end !! article Template:sections !! text ===Section 1=== ==Section 2== !! endarticle !! test Template with sections, __NOTOC__ !! input __NOTOC__ ==Section 0== {{sections}} ==Section 4== !! result

[edit] Section 0

[edit] Section 1

[edit] Section 2

[edit] Section 4

!! end !! test __NOEDITSECTION__ keyword !! input __NOEDITSECTION__ ==Section 1== ==Section 2== !! result

Section 1

Section 2

!! end !! test Link inside a section heading !! input ==Section with a [[Main Page|link]] in it== !! result

[edit] Section with a link in it

!! end !! test BUG 1219 URL next to image (good) !! input http://example.com [[Image:foobar.jpg]] !! result

http://example.com Image:foobar.jpg

!!end !! test BUG 1219 URL next to image (broken) !! input http://example.com[[Image:foobar.jpg]] !! result

http://example.comImage:foobar.jpg

!!end !! test Bug 1186 news: in the middle of text !! input http://en.wikinews.org/wiki/Wikinews:Workplace !! result

http://en.wikinews.org/wiki/Wikinews:Workplace

!!end !! test Namespaced link must have a title !! input [[Project:]] !! result

[[Project:]]

!!end !! test Namespaced link must have a title (bad fragment version) !! input [[Project:#fragment]] !! result

[[Project:#fragment]]

!!end !! test div with no attributes !! input
HTML rocks
!! result
HTML rocks
!! end !! test div with double-quoted attribute !! input
HTML rocks
!! result
HTML rocks
!! end !! test div with single-quoted attribute !! input
HTML rocks
!! result
HTML rocks
!! end !! test div with unquoted attribute !! input
HTML rocks
!! result
HTML rocks
!! end !! test div with illegal double attributes !! input
HTML rocks
!! result
HTML rocks
!!end !! test HTML multiple attributes correction !! input

Awesome!

!! result

Awesome!

!!end !! test Table multiple attributes correction !! input {| !+ class="error" class="awesome"| status |} !! result
status
!!end !! test DIV IN UPPERCASE !! input
HTML ROCKS
!! result
HTML ROCKS
!!end !! test text with amp in the middle of nowhere !! input Remember AT&T? !!result

Remember AT&T?

!! end !! test text with character entity: eacute !! input I always thought é was a cute letter. !! result

I always thought é was a cute letter.

!! end !! test text with undefined character entity: xacute !! input I always thought &xacute; was a cute letter. !! result

I always thought &xacute; was a cute letter.

!! end ### ### Media links ### !! test Media link !! input [[Media:Foobar.jpg]] !! result

Media:Foobar.jpg

!! end !! test Media link with text !! input [[Media:Foobar.jpg|A neat file to look at]] !! result

A neat file to look at

!! end # FIXME: this is still bad HTML tag nesting !! test Media link with nasty text fixme: doBlockLevels won't wrap this in a paragraph because it contains a div !! input [[Media:Foobar.jpg|Safe Link
" onmouseover="alert(document.cookie)" onfoo="
]] !! result Safe Link<div style="display:none">" onmouseover="alert(document.cookie)" onfoo="</div> !! end !! test Media link to nonexistent file (bug 1702) !! input [[Media:No such.jpg]] !! result

Media:No such.jpg

!! end !! test Image link to nonexistent file (bug 1850 - good) !! input [[Image:No such.jpg]] !! result

Image:No such.jpg

!! end !! test :Image link to nonexistent file (bug 1850 - bad) !! input [[:Image:No such.jpg]] !! result

Image:No such.jpg

!! end !! test Character reference normalization in link text (bug 1938) !! input [[Main Page|this&that]] !! result

this&that

!!end !! test Empty attribute crash test (bug 2067) !! input foo !! result

foo

!! end !! test Empty attribute crash test single-quotes (bug 2067) !! input foo !! result

foo

!! end !! test Attribute test: equals, then nothing !! input foo !! result

foo

!! end !! test Attribute test: unquoted value !! input foo !! result

foo

!! end !! test Attribute test: unquoted but illegal value (hash) !! input foo !! result

foo

!! end !! test Attribute test: no value !! input foo !! result

foo

!! end !! test Bug 2095: link with three closing brackets !! input [[Main Page]]] !! result

Main Page]

!! end !! test Bug 2095: link with pipe and three closing brackets !! input [[Main Page|link]]] !! result

link]

!! end !! test Bug 2095: link with pipe and three closing brackets, version 2 !! input [[Main Page|[http://example.com/]]] !! result

[http://example.com/]

!! end ### ### Safety ### !! article Template:Dangerous attribute !! text " onmouseover="alert(document.cookie) !! endarticle !! article Template:Dangerous style attribute !! text border-size: expression(alert(document.cookie)) !! endarticle !! article Template:Div style !! text
Magic div
!! endarticle !! test Bug 2304: HTML attribute safety (safe template; regression bug 2309) !! input
!! result
!! end !! test Bug 2304: HTML attribute safety (dangerous template; 2309) !! input
!! result
!! end !! test Bug 2304: HTML attribute safety (dangerous style template; 2309) !! input
!! result
!! end !! test Bug 2304: HTML attribute safety (safe parameter; 2309) !! input {{div style|width: 200px}} !! result
Magic div
!! end !! test Bug 2304: HTML attribute safety (unsafe parameter; 2309) !! input {{div style|width: expression(alert(document.cookie))}} !! result
Magic div
!! end !! test Bug 2304: HTML attribute safety (unsafe breakout parameter; 2309) !! input {{div style|">}} !! result
Magic div
!! end !! test Bug 2304: HTML attribute safety (unsafe breakout parameter 2; 2309) !! input {{div style|" >}} !! result
Magic div
!! end !! test Bug 2304: HTML attribute safety (link) !! input
!! result
!! end !! test Bug 2304: HTML attribute safety (italics) !! input
!! result
!! end !! test Bug 2304: HTML attribute safety (bold) !! input
!! result
!! end !! test Bug 2304: HTML attribute safety (ISBN) !! input
!! result
!! end !! test Bug 2304: HTML attribute safety (RFC) !! input
!! result
!! end !! test Bug 2304: HTML attribute safety (PMID) !! input
!! result
!! end !! test Bug 2304: HTML attribute safety (web link) !! input
!! result
!! end !! test Bug 2304: HTML attribute safety (named web link) !! input
!! result
!! end !! test Bug 3244: HTML attribute safety (extension; safe) !! input
!! result
!! end !! test Bug 3244: HTML attribute safety (extension; unsafe) !! input
!! result
!! end !! test Math section safety when disabled !! input !! result

<math><script>alert(document.cookies);</script></math>

!! end # More MSIE fun discovered by Tom Gilder !! test MSIE CSS safety test: spurious slash !! input
evil
!! result
evil
!! end !! test MSIE CSS safety test: hex code !! input
evil
!! result
evil
!! end !! test MSIE CSS safety test: comment in url !! input
evil
!! result
evil
!! end !! test MSIE CSS safety test: comment in expression !! input
evil4
!! result
evil4
!! end !! test Table attribute legitimate extension !! input {| !+ style="color:blue"| status |} !! result
status
!!end !! test Table attribute safety !! input {| !+ style="border-width:expression(0+alert(document.cookie))"| status |} !! result
status
!! end !! article Template:Identity !! text {{{1}}} !! endarticle !! test Expansion of multi-line templates in attribute values (bug 6255) !! input
-
!! result
-
!! end !! test Expansion of multi-line templates in attribute values (bug 6255 sanity check) !! input
-
!! result
-
!! end !! test Expansion of multi-line templates in attribute values (bug 6255 sanity check 2) !! input
-
!! result
-
!! end ### ### Parser hooks (see maintenance/parserTestsParserHook.php for the extension) ### !! test Parser hook: empty input !! input !! result
string(0) ""
array(0) {
}
!! end !! test Parser hook: empty input using terminated empty elements !! input !! result
NULL
array(0) {
}
!! end !! test Parser hook: empty input using terminated empty elements (space before) !! input !! result
NULL
array(0) {
}
!! end !! test Parser hook: basic input !! input input !! result
string(5) "input"
array(0) {
}
!! end !! test Parser hook: case insensetive !! input input !! result
string(5) "input"
array(0) {
}
!! end !! test Parser hook: case insensetive, redux !! input input !! result
string(5) "input"
array(0) {
}
!! end !! test Parser hook: nested tags !! options noxml !! input !! result
string(5) ""
array(0) {
}
</tag> !! end !! test Parser hook: basic arguments !! input !! result
string(0) ""
array(4) {
  ["width"]=>
  string(3) "200"
  ["height"]=>
  string(3) "100"
  ["depth"]=>
  string(2) "50"
  ["square"]=>
  string(6) "square"
}
!! end !! test Parser hook: argument containing a forward slash (bug 5344) !! input !! result
string(0) ""
array(1) {
  ["filename"]=>
  string(8) "/tmp/bla"
}
!! end !! test Parser hook: empty input using terminated empty elements (bug 2374) !! input text !! result
NULL
array(1) {
  ["foo"]=>
  string(3) "bar"
}
text !! end #
should be output literally since there is no matching tag that begins it !! test Parser hook: basic arguments using terminated empty elements (bug 2374) !! input other stuff !! result
NULL
array(4) {
  ["width"]=>
  string(3) "200"
  ["height"]=>
  string(3) "100"
  ["depth"]=>
  string(2) "50"
  ["square"]=>
  string(6) "square"
}

other stuff </tag>

!! end ### ### (see maintenance/parserTestsStaticParserHook.php for the extension) ### !! test Parser hook: static parser hook not inside a comment !! input hello, world !! result

hello, world

!! end !! test Parser hook: static parser hook inside a comment !! input !! result


!! end # Nested template calls; this case was broken by Parser.php rev 1.506, # since reverted. !! article Template:One-parameter !! text (My parameter is: {{{1}}}) !! endarticle !! article Template:Map-one-parameter !! text {{{{{1}}}|{{{2}}}}} !! endarticle !! test Nested template calls !! input {{Map-one-parameter|One-parameter|param}} !! result

(My parameter is: param)

!! end ### ### Sanitizer ### !! test Sanitizer: Closing of open tags !! input
!! result
!! end !! test Sanitizer: Closing of open but not closed tags !! input foo !! result

foo

!! end !! test Sanitizer: Closing of closed but not open tags !! input
!! result

</s>

!! end !! test Sanitizer: Closing of closed but not open table tags !! input Table not started !! result

Table not started</td></tr></table>

!! end !! test Sanitizer: Escaping of spaces, multibyte characters, colons & other stuff in id="" !! input byte[[#æ: v|backlink]] !! result

bytebacklink

!! end !! test Sanitizer: Validating the contents of the id attribute (bug 4515) !! options disabled !! input
!! result Something, but defenetly not
... !! end !! test Sanitizer: Validating id attribute uniqueness (bug 4515, bug 6301) !! options disabled !! input

!! result Something need to be done. foo-2 ? !! end !! test Language converter: output gets cut off unexpectedly (bug 5757) !! options language=zh !! input this bit is safe: }- but if we add a conversion instance: -{zh-cn:xxx;zh-tw:yyy}- then we get cut off here: }- all additional text is vanished !! result

this bit is safe: }-

but if we add a conversion instance: xxx

then we get cut off here: }-

all additional text is vanished

!! end !! test Self closed html pairs (bug 5487) !! options !! input
Centered text
In div text
!! result
<font id="bug" />Centered text
<font id="bug2" />In div text
!! end # # # !! test HTML bullet list, closed tags (bug 5497) !! input
  • One
  • Two
!! result
  • One
  • Two
!! end !! test TODO: HTML bullet list, unclosed tags (bug 5497) !! input
  • One
  • Two
!! result
  • One
  • Two
!! end !! test HTML ordered list, closed tags (bug 5497) !! input
  1. One
  2. Two
!! result
  1. One
  2. Two
!! end !! test TODO: HTML ordered list, unclosed tags (bug 5497) !! input
  1. One
  2. Two
!! result
  1. One
  2. Two
!! end !! test HTML nested bullet list, closed tags (bug 5497) !! input
  • One
  • Two:
    • Sub-one
    • Sub-two
!! result
  • One
  • Two:
    • Sub-one
    • Sub-two
!! end !! test TODO: HTML nested bullet list, open tags (bug 5497) !! input
  • One
  • Two:
    • Sub-one
    • Sub-two
!! result
  • One
  • Two:
    • Sub-one
    • Sub-two
!! end !! test HTML nested ordered list, closed tags (bug 5497) !! input
  1. One
  2. Two:
    1. Sub-one
    2. Sub-two
!! result
  1. One
  2. Two:
    1. Sub-one
    2. Sub-two
!! end !! test TODO: HTML nested ordered list, open tags (bug 5497) !! input
  1. One
  2. Two:
    1. Sub-one
    2. Sub-two
!! result
  1. One
  2. Two:
    1. Sub-one
    2. Sub-two
!! end !! test HTML ordered list item with parameters oddity !! input
  1. One
!! result
  1. One
!! end !!test bug 5918: autonumbering !! input [http://first/] [http://second] [ftp://ftp] ftp://inlineftp [mailto:enclosed@mail.tld With target] [mailto:enclosed@mail.tld] mailto:inline@mail.tld !! result

[1] [2] [3]

ftp://inlineftp

With target

[4]

mailto:inline@mail.tld

!! end # # Security and HTML correctness # From Nick Jenkins' fuzz testing # !! test Fuzz testing: Parser13 !! input {| | http://a| !! result
!! end !! test Fuzz testing: Parser14 !! input == onmouseover= == http://__TOC__ !! result

[edit] onmouseover=

http://

Contents

!! end !! test Fuzz testing: Parser14-table !! input ==a== {| STYLE=__TOC__ !! result

[edit] a

!! end # Known to produce bogus xml (extra ) !! test Fuzz testing: Parser16 !! options noxml !! input {| !https://|||||| !! result
https://
!! end !! test Fuzz testing: Parser21 !! input {| ! irc://{{ftp://a" onmouseover="alert('hello world');" | !! result
irc://{{ftp://a" onmouseover="alert('hello world');"
!! end !! test Fuzz testing: Parser22 !! input http://===r:::https://b {| !!result

http://===r:::https://b

!! end # Known to produce bad XML for now !! test Fuzz testing: Parser24 !! options noxml !! input {| {{{| }}}} >
MOVE YOUR MOUSE CURSOR OVER THIS TEXT | !! result } >
MOVE YOUR MOUSE CURSOR OVER THIS TEXT
!! end # Known to produce bad XML for now !!test Fuzz testing: Parser25 (bug 6055) !! options noxml !! input {{{ |
  • }}}blah" onmouseover="alert('hello world');" align="left"'''MOVE MOUSE CURSOR OVER HERE !! result
  • blah" onmouseover="alert('hello world');" align="left"MOVE MOUSE CURSOR OVER HERE !! end !!test Fuzz testing: URL adjacent extension (with space, clean) !! options !! input http://example.com junk !! result

    http://example.com junk

    !!end !!test Fuzz testing: URL adjacent extension (no space, dirty; nowiki) !! options !! input http://example.comjunk !! result

    http://example.comjunk

    !!end !!test Fuzz testing: URL adjacent extension (no space, dirty; pre) !! options !! input http://example.com
    junk
    !! result http://example.com
    junk
    !!end !!test Fuzz testing: image with bogus manual thumbnail !!input [[Image:foobar.jpg|thumbnail= ]] !!result
    !!end !! test Fuzz testing: encoded newline in generated HTML replacements (bug 6577) !! input
    
    !! result
    
    
    
    !! end
    
    !! test
    TODO: Parsing optional HTML elements (Bug 6171)
    !! options
    !! input
    
    Some tabular data More tabular data ... And yet som tabular data
    !! result
    Some tabular data More tabular data ... And yet som tabular data
    !! end !! test Correct handling of , (Bug 6171) !! options !! input
    Some tabular data More tabular data ... And yet som tabular data
    !! result
    Some tabular data More tabular data ... And yet som tabular data
    !! end !! test Parsing crashing regression (fr:JavaScript) !! input !! result

    </body></x>

    !! end !! test Inline wiki vs wiki block nesting !! input '''Bold paragraph New wiki paragraph !! result

    Bold paragraph

    New wiki paragraph

    !! end !! test TODO: Inline HTML vs wiki block nesting !! input Bold paragraph New wiki paragraph !! result

    Bold paragraph

    New wiki paragraph

    !! end !!test TODO: Mixing markup for italics and bold !! options !! input '''bold''''''bold''bolditalics''''' !! result

    boldboldbolditalics

    !! end !! article Xyzzyx !! text Article for special page transclusion test !! endarticle !! test Special page transclusion !! options !! input {{Special:Prefixindex/Xyzzyx}} !! result


    Xyzzyx
    !! end !! test Special page transclusion twice (bug 5021) !! options !! input {{Special:Prefixindex/Xyzzyx}} {{Special:Prefixindex/Xyzzyx}} !! result


    Xyzzyx


    Xyzzyx
    !! end !! test Transclusion of default MediaWiki message !! input {{MediaWiki:Mainpage}} !!result

    Main Page

    !! end !! test Transclusion of nonexistent MediaWiki message !! input {{MediaWiki:Mainpagexxx}} !!result

    MediaWiki:Mainpagexxx

    !! end !! test Transclusion of MediaWiki message with underscore !! input {{MediaWiki:history_short}} !! result

    History

    !! end !! test Transclusion of MediaWiki message with space !! input {{MediaWiki:history short}} !! result

    History

    !! end !! test Invalid header with following text !! input = x = y !! result

    = x = y

    !! end !! test Section extraction test (section 0) !! options section=0 !! input start ==a== ===aa=== ====aaa==== ==b== ===ba=== ===bb=== ====bba==== ===bc=== ==c== ===ca=== !! result start !! end !! test Section extraction test (section 1) !! options section=1 !! input start ==a== ===aa=== ====aaa==== ==b== ===ba=== ===bb=== ====bba==== ===bc=== ==c== ===ca=== !! result ==a== ===aa=== ====aaa==== !! end !! test Section extraction test (section 2) !! options section=2 !! input start ==a== ===aa=== ====aaa==== ==b== ===ba=== ===bb=== ====bba==== ===bc=== ==c== ===ca=== !! result ===aa=== ====aaa==== !! end !! test Section extraction test (section 3) !! options section=3 !! input start ==a== ===aa=== ====aaa==== ==b== ===ba=== ===bb=== ====bba==== ===bc=== ==c== ===ca=== !! result ====aaa==== !! end !! test Section extraction test (section 4) !! options section=4 !! input start ==a== ===aa=== ====aaa==== ==b== ===ba=== ===bb=== ====bba==== ===bc=== ==c== ===ca=== !! result ==b== ===ba=== ===bb=== ====bba==== ===bc=== !! end !! test Section extraction test (section 5) !! options section=5 !! input start ==a== ===aa=== ====aaa==== ==b== ===ba=== ===bb=== ====bba==== ===bc=== ==c== ===ca=== !! result ===ba=== !! end !! test Section extraction test (section 6) !! options section=6 !! input start ==a== ===aa=== ====aaa==== ==b== ===ba=== ===bb=== ====bba==== ===bc=== ==c== ===ca=== !! result ===bb=== ====bba==== !! end !! test Section extraction test (section 7) !! options section=7 !! input start ==a== ===aa=== ====aaa==== ==b== ===ba=== ===bb=== ====bba==== ===bc=== ==c== ===ca=== !! result ====bba==== !! end !! test Section extraction test (section 8) !! options section=8 !! input start ==a== ===aa=== ====aaa==== ==b== ===ba=== ===bb=== ====bba==== ===bc=== ==c== ===ca=== !! result ===bc=== !! end !! test Section extraction test (section 9) !! options section=9 !! input start ==a== ===aa=== ====aaa==== ==b== ===ba=== ===bb=== ====bba==== ===bc=== ==c== ===ca=== !! result ==c== ===ca=== !! end !! test Section extraction test (section 10) !! options section=10 !! input start ==a== ===aa=== ====aaa==== ==b== ===ba=== ===bb=== ====bba==== ===bc=== ==c== ===ca=== !! result ===ca=== !! end !! test Section extraction test (nonexistent section 11) !! options section=11 !! input start ==a== ===aa=== ====aaa==== ==b== ===ba=== ===bb=== ====bba==== ===bc=== ==c== ===ca=== !! result !! end !! test Section extraction test with bogus heading (section 1) !! options section=1 !! input ==a== ==bogus== not a legal section ==b== !! result ==a== ==bogus== not a legal section !! end !! test Section extraction test with bogus heading (section 2) !! options section=2 !! input ==a== ==bogus== not a legal section ==b== !! result ==b== !! end !! test Section extraction test with comment after heading (section 1) !! options section=1 !! input ==a== ==legal== ==b== !! result ==a== !! end !! test Section extraction test with comment after heading (section 2) !! options section=2 !! input ==a== ==legal== ==b== !! result ==legal== !! end !! test Section extraction test with bogus heading (section 1) !! options section=1 !! input ==a== ==bogus== not a legal section ==b== !! result ==a== ==bogus== not a legal section !! end !! test Section extraction test with bogus heading (section 2) !! options section=2 !! input ==a== ==bogus== not a legal section ==b== !! result ==b== !! end !! test Section extraction prefixed by comment (section 1) (bug 2587) !! options section=1 !! input ==sec1== ==sec2== !!result ==sec1== !!end !! test Section extraction prefixed by comment (section 2) (bug 2587) !! options section=2 !! input ==sec1== ==sec2== !!result ==sec2== !!end !! test Section extraction, mixed wiki and html (section 1) (bug 2607) !! options section=1 !! input

    1

    one ==2== two ==3== three !! result

    1

    one !! end !! test Section extraction, mixed wiki and html (section 2) (bug 2607) !! options section=2 !! input

    1

    one ==2== two ==3== three !! result ==2== two !! end !! test Section extraction, heading surrounded by (bug 3342) !! options section=1 !! input ==a== text !! result ==a== text !!end !! test Section extraction, HTML heading subsections (bug 5272) !! options section=1 !! input

    a

    aa

    b

    !! result

    a

    aa

    !! end !! test Section extraction, HTML headings should be ignored in extensions (bug 3476) !! options section=2 !! input

    a

    not b

    b

    !! result

    b

    !! end !! test Section replacement test (section 0) !! options replace=0,"xxx" !! input start ==a== ===aa=== ====aaa==== ==b== ===ba=== ===bb=== ====bba==== ===bc=== ==c== ===ca=== !! result xxx ==a== ===aa=== ====aaa==== ==b== ===ba=== ===bb=== ====bba==== ===bc=== ==c== ===ca=== !! end !! test Section replacement test (section 1) !! options replace=1,"xxx" !! input start ==a== ===aa=== ====aaa==== ==b== ===ba=== ===bb=== ====bba==== ===bc=== ==c== ===ca=== !! result start xxx ==b== ===ba=== ===bb=== ====bba==== ===bc=== ==c== ===ca=== !! end !! test Section replacement test (section 2) !! options replace=2,"xxx" !! input start ==a== ===aa=== ====aaa==== ==b== ===ba=== ===bb=== ====bba==== ===bc=== ==c== ===ca=== !! result start ==a== xxx ==b== ===ba=== ===bb=== ====bba==== ===bc=== ==c== ===ca=== !! end !! test Section replacement test (section 3) !! options replace=3,"xxx" !! input start ==a== ===aa=== ====aaa==== ==b== ===ba=== ===bb=== ====bba==== ===bc=== ==c== ===ca=== !! result start ==a== ===aa=== xxx ==b== ===ba=== ===bb=== ====bba==== ===bc=== ==c== ===ca=== !! end !! test Section replacement test (section 4) !! options replace=4,"xxx" !! input start ==a== ===aa=== ====aaa==== ==b== ===ba=== ===bb=== ====bba==== ===bc=== ==c== ===ca=== !! result start ==a== ===aa=== ====aaa==== xxx ==c== ===ca=== !! end !! test Section replacement test (section 5) !! options replace=5,"xxx" !! input start ==a== ===aa=== ====aaa==== ==b== ===ba=== ===bb=== ====bba==== ===bc=== ==c== ===ca=== !! result start ==a== ===aa=== ====aaa==== ==b== xxx ===bb=== ====bba==== ===bc=== ==c== ===ca=== !! end !! test Section replacement test (section 6) !! options replace=6,"xxx" !! input start ==a== ===aa=== ====aaa==== ==b== ===ba=== ===bb=== ====bba==== ===bc=== ==c== ===ca=== !! result start ==a== ===aa=== ====aaa==== ==b== ===ba=== xxx ===bc=== ==c== ===ca=== !! end !! test Section replacement test (section 7) !! options replace=7,"xxx" !! input start ==a== ===aa=== ====aaa==== ==b== ===ba=== ===bb=== ====bba==== ===bc=== ==c== ===ca=== !! result start ==a== ===aa=== ====aaa==== ==b== ===ba=== ===bb=== xxx ===bc=== ==c== ===ca=== !! end !! test Section replacement test (section 8) !! options replace=8,"xxx" !! input start ==a== ===aa=== ====aaa==== ==b== ===ba=== ===bb=== ====bba==== ===bc=== ==c== ===ca=== !! result start ==a== ===aa=== ====aaa==== ==b== ===ba=== ===bb=== ====bba==== xxx ==c== ===ca=== !!end !! test Section replacement test (section 9) !! options replace=9,"xxx" !! input start ==a== ===aa=== ====aaa==== ==b== ===ba=== ===bb=== ====bba==== ===bc=== ==c== ===ca=== !! result start ==a== ===aa=== ====aaa==== ==b== ===ba=== ===bb=== ====bba==== ===bc=== xxx !! end !! test Section replacement test (section 10) !! options replace=10,"xxx" !! input start ==a== ===aa=== ====aaa==== ==b== ===ba=== ===bb=== ====bba==== ===bc=== ==c== ===ca=== !! result start ==a== ===aa=== ====aaa==== ==b== ===ba=== ===bb=== ====bba==== ===bc=== ==c== xxx !! end !! test Section extraction, HTML headings not at line boundaries (section 0) !! options section=0 !! input

    Evil

    blah blah blah evil blah

    Nice

    nice blah extra evil

    Extra nasty

    extra nasty !! result !! end !! test Section extraction, HTML headings not at line boundaries (section 1) !! options section=1 !! input

    Evil

    blah blah blah evil blah

    Nice

    nice blah extra evil

    Extra nasty

    extra nasty !! result

    Evil

    blah blah blah evil blah !! end !! test Section extraction, HTML headings not at line boundaries (section 2) !! options section=2 !! input

    Evil

    blah blah blah evil blah

    Nice

    nice blah extra evil

    Extra nasty

    extra nasty !! result

    Nice

    nice blah extra evil !! end !! test Section extraction, HTML headings not at line boundaries (section 3) !! options section=3 !! input

    Evil

    blah blah blah evil blah

    Nice

    nice blah extra evil

    Extra nasty

    extra nasty !! result

    Extra nasty

    extra nasty !! end !! test Section extraction, heading followed by pre with 20 spaces (bug 6398) !! options section=1 !! input ==a== a !! result ==a== a !! end !! test Section extraction, heading followed by pre with 19 spaces (bug 6398 sanity check) !! options section=1 !! input ==a== a !! result ==a== a !! end !! test Handling of in URLs !! input **irc:// a !! result !!end !! test TODO: 5 quotes, code coverage +1 line !! input ''''' !! result !! end !! test Special:Search page linking. !! input {{Special:search}} !! result

    Special:Search

    !! end !! test Say the magic word !! input * {{PAGENAME}} * {{BASEPAGENAME}} * {{SUBPAGENAME}} * {{SUBPAGENAMEE}} * {{BASEPAGENAME}} * {{BASEPAGENAMEE}} * {{TALKPAGENAME}} * {{TALKPAGENAMEE}} * {{SUBJECTPAGENAME}} * {{SUBJECTPAGENAMEE}} * {{NAMESPACEE}} * {{NAMESPACE}} * {{TALKSPACE}} * {{TALKSPACEE}} * {{SUBJECTSPACE}} * {{SUBJECTSPACEE}} * {{Dynamic|{{NUMBEROFUSERS}}|{{NUMBEROFPAGES}}|{{CURRENTVERSION}}|{{CONTENTLANGUAGE}}|{{DIRECTIONMARK}}|{{CURRENTTIMESTAMP}}|{{NUMBEROFARTICLES}}}} !! result
    • Parser test
    • Parser test
    • Parser test
    • Parser_test
    • Parser test
    • Parser_test
    • Talk:Parser test
    • Talk:Parser_test
    • Parser test
    • Parser_test
    • Talk
    • Talk
    • Template:Dynamic
    !! end ### Note: Above tests excludes the "{{NUMBEROFADMINS}}" magic word because it generates a MySQL error when included. !! test Gallery !! input image1.png | image2.gif||||| image3| image4 |300px| centre image5.svg| http:///////// [[x|xx]]]] * image6 !! result !! end !! test HTML Hex character encoding (spells the word "JavaScript") !! input JavaScript !! result

    JavaScript

    !! end !! test __FORCETOC__ override !! input __NEWSECTIONLINK__ __FORCETOC__ !! result


    !! end !! test ISBN code coverage !! input ISBN 978-0-1234-56 789 !! result

    ISBN 978-0-1234-56 789

    !! end !! test ISBN followed by 5 spaces !! input ISBN !! result

    ISBN

    !! end !! test Double ISBN !! input ISBN ISBN 1234567890 !! result

    ISBN ISBN 1234567890

    !! end !! test Double RFC !! input RFC RFC 1234 !! result

    RFC RFC 1234

    !! end !! test Double RFC with a wiki link !! input RFC [[RFC 1234]] !! result

    RFC RFC 1234

    !! end !! test RFC code coverage !! input RFC 983 987 !! result

    RFC 983 987

    !! end !! test Centre-aligned image !! input [[Image:foobar.jpg|centre]] !! result
    !!end !! test None-aligned image !! input [[Image:foobar.jpg|none]] !! result
    !!end !! test Width + Height sized image (using px) (height is ignored) !! input [[Image:foobar.jpg|640x480px]] !! result

    !!end !! test Another italics / bold test !! input ''' ''x' !! result
    ' x'
    
    !!end # Note the results may be incorrect, as parserTest output included this: # XML error: Mismatched tag at byte 6120: # ...
    !!end # Images with the "|" character in external URLs in comment tags; Eats half the comment, leaves unmatched "" tag. !! test TODO: Images with the "|" character in the comment !! input [[image:Foobar.jpg|thumb|An [http://test/?param1=|left|¶m2=|x external] URL]] !! result
    An external URL
    An external URL
    !!end !! test [Before] HTML without raw HTML enabled ($wgRawHtml==false) !! input !! result

    <html><script>alert(1);</script></html>

    !! end !! test HTML with raw HTML ($wgRawHtml==true) !! options rawhtml !! input !! result

    !! end !! test Parents of subpages, one level up !! options subpage title=[[Subpage test/L1/L2/L3]] !! input [[../|L2]] !! result

    L2

    !! end !! test Parents of subpages, one level up, not named !! options subpage title=[[Subpage test/L1/L2/L3]] !! input [[../]] !! result

    Subpage test/L1/L2

    !! end !! test Parents of subpages, two levels up !! options disabled subpage title=[[Subpage test/L1/L2/L3]] !! input [[../../|L1]]2 !! result

    L1

    !! end # Question: should result be "/index.php?title=Subpage_test/L1&action=edit" instead? !! test TODO: Parents of subpages, two levels up, without trailing slash or name. !! options subpage title=[[Subpage test/L1/L2/L3]] !! input [[../..]] !! result

    ../..

    !! end # Question: Why should the link text in the above test be "../..", yet in this test the "../.." part is silently dropped? # Current result:

    /// !! test TODO: Parents of subpages, two levels up, with lots of extra trailing slashes. !! options subpage title=[[Subpage test/L1/L2/L3]] !! input [[../../////]] !! result

    Subpage test/L1

    !! end !! test Definition list code coverage !! input ; title : def ; title : def ;title: def !! result
    title  
    def
    title 
    def
    title
    def
    !! end !! test TODO: Don't fall for the self-closing div !! input
    hello world
    !! result
    hello world
    !! end !! test MSGNW magic word !! input {{MSGNW:msg}} !! result

    [[:Template:Msg]]

    !! end !! test RAW magic word !! input {{RAW:QUERTY}} !! result

    Template:QUERTY

    !! end # This isn't needed for XHTML conformance, but would be handy as a fallback security measure !! test TODO: Always escape literal '>' in output, not just after '<' !! input ><> !! result

    ><>

    !! end !! test Template caching !! input {{Test}} {{Test}} !! result

    This is a test template This is a test template

    !! end !! article MediaWiki:Fake !! text ==header== !! endarticle !! test Inclusion of !userCanEdit() content !! input {{MediaWiki:Fake}} !! result

    [edit] header

    !! end !! test Out-of-order TOC heading levels !! input ==2== ======6====== ===3=== =1= =====5===== ==2== !! result

    Contents

    [edit] 2

    [edit] 6

    [edit] 3

    [edit] 1

    [edit] 5

    [edit] 2

    !! end !! test ISBN with a dummy number !! input ISBN --- !! result

    ISBN ---

    !! end !! test ISBN with space-delimited number !! input ISBN 92 9017 032 8 !! result

    ISBN 92 9017 032 8

    !! end !! test ISBN with multiple spaces, no number !! input ISBN foo !! result

    ISBN foo

    !! end !! test ISBN length !! input ISBN 123456789 ISBN 1234567890 ISBN 12345678901 !! result

    ISBN 123456789

    ISBN 1234567890

    ISBN 12345678901

    !! end !! test ISBN with trailing year (bug 8110) !! input ISBN 1-234-56789-0 - 2006 ISBN 1 234 56789 0 - 2006 !! result

    ISBN 1-234-56789-0 - 2006

    ISBN 1 234 56789 0 - 2006

    !! end !! test Pages in namespace (Magic word disabled currently) !! input {{PAGESINNAMESPACE:}} !! result !! end !! test anchorencode !! input {{anchorencode:foo bar©#%n}} !! result

    foo_bar.C2.A9.23.25n

    !! end !! test Bug 8293: Use of center tag ruins paragraph formatting !! input
    foo
    bar baz !! result

    foo

    bar

    baz
    
    !! end ### ### Language variants related tests ### !! test Self-link in language variants !! options title=[[Dunav]] language=sr !! input Both [[Dunav]] and [[Дунав]] are names for this river. !! result

    Both Dunav and Дунав are names for this river.

    !!end !! test Link to pages in language variants !! options language=sr !! input Main Page can be written as [[Маин Паге]] !! result

    Main Page can be written as Маин Паге

    !!end !! test Multiple links to pages in language variants !! options language=sr !! input [[Main Page]] can be written as [[Маин Паге]] same as [[Маин Паге]]. !! result

    Main Page can be written as Маин Паге same as Маин Паге.

    !!end !! test Simple template in language variants !! options language=sr !! input {{тест}} !! result

    This is a test template

    !! end !! test Template with explicit namespace in language variants !! options language=sr !! input {{Template:тест}} !! result

    This is a test template

    !! end !! test Basic test for template parameter in language variants !! options language=sr !! input {{парамтест|param=foo}} !! result

    This is a test template with parameter foo

    !! end !! test Simple category in language variants !! options language=sr cat !! input [[:Category:МедиаWики Усер'с Гуиде]] !! result MediaWiki User's Guide !! end !! test Stripping -{}- tags (language variants) !! options language=sr !! input Latin proverb: -{Ne nuntium necare}- !! result

    Latin proverb: Ne nuntium necare

    !! end !! test Prevent conversion with -{}- tags (language variants) !! options language=sr variant=sr-ec !! input Latinski: -{Ne nuntium necare}- !! result

    Латински: Ne nuntium necare

    !! end !! test Prevent conversion of text with -{}- tags (language variants) !! options language=sr variant=sr-ec !! input Latinski: -{Ne nuntium necare}- !! result

    Латински: Ne nuntium necare

    !! end !! test Prevent conversion of links with -{}- tags (language variants) !! options language=sr variant=sr-ec !! input -{[[Main Page]]}- !! result

    Main Page

    !! end !! test -{}- tags within headlines (within html for parserConvert()) !! options language=sr variant=sr-ec !! input == -{Naslov}- == !! result

    [уреди] Naslov

    !! end !! test Explicit definition of language variant alternatives !! options language=zh variant=zh-tw !! input -{zh:China;zh-tw:Taiwan}-, not China !! result

    Taiwan, not China

    !! end !! test Adding explicit session-wise language variant mapping (A flag) !! options language=zh variant=zh-tw !! input -{A|zh:China;zh-tw:Taiwan}- is China !! result

    Taiwan is Taiwan

    !! end !! test Adding explicit conversion rule for title (T flag) !! options language=zh variant=zh-tw !! input Should be stripped-{T|zh:China;zh-tw:Taiwan}-! !! result

    Should be stripped!

    !! end !! test Raw output of variant escape tags (R flag) !! options language=zh variant=zh-tw !! input Raw: -{R|zh:China;zh-tw:Taiwan}- !! result

    Raw: zh:China;zh-tw:Taiwan

    !! end !! test Do not convert roman numbers to language variants !! options language=sr variant=sr-ec !! input Fridrih IV je car. !! result

    Фридрих IV је цар.

    !! end # # # TODO: more images more tables math character entities and much more Try for 100% code coverage