# 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 # parsoid parsoid-only test (not run by PHP parser) # php php-only test (not run by the parsoid parser) # showtitle make the first line the title # comment run through Linker::formatComment() instead of main parser # local format section links in edit comment text as local links # # 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 !!article Template:Foo !!text FOO !!endarticle !! article Template:Blank !! text !! endarticle !! article Template:pipe !! text | !! endarticle !!article MediaWiki:bad image list !!text * [[File:Bad.jpg]] except [[Nasty page]] !!endarticle !! article Template:inner list !! text * item 1 !! endarticle !! article Template:tbl-start !! text {| !! endarticle !! article Template:tbl-end !! text |} !! endarticle !! article Template:! !! text | !! endarticle !! article Template:echo !! text {{{1}}} !! endarticle !! article Template:echo_with_span !! text {{{1}}} !! endarticle !! article Template:echo_with_div !! text
{{{1}}}
!! endarticle !! article Template:attr_str !! text {{{1}}}="{{{2}}}" !! endarticle !! article Template:table_attribs !! text |style="color: red"| Foo !! endarticle !! article A?b !! text Weirdo titles! !! 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 Paragraphs with extra newline spacing !! input foo bar baz booz !! result

foo

bar


baz


booz

!! end !! test Parsing an URL !! input http://fr.wikipedia.org/wiki/🍺 !! result

http://fr.wikipedia.org/wiki/🍺

!! 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 * plain l''''bold''' plain !! result !! end ### ### 2-quote opening sequence tests ### !! test Italics and bold: 2-quote opening sequence: (2,2) !! input ''foo'' !! result

foo

!!end !! test Italics and bold: 2-quote opening sequence: (2,3) !! input ''foo''' !! result

foo'

!!end !! test Italics and bold: 2-quote opening sequence: (2,4) !! input ''foo'''' !! result

foo''

!!end !! test Italics and bold: 2-quote opening sequence: (2,5) !! input ''foo''''' !! result

foo

!!end ### ### 3-quote opening sequence tests ### !! test Italics and bold: 3-quote opening sequence: (3,2) !! input '''foo'' !! result

'foo

!!end !! test Italics and bold: 3-quote opening sequence: (3,3) !! input '''foo''' !! result

foo

!!end !! test Italics and bold: 3-quote opening sequence: (3,4) !! input '''foo'''' !! result

foo'

!!end !! test Italics and bold: 3-quote opening sequence: (3,5) !! input '''foo''''' !! result

foo

!!end ### ### 4-quote opening sequence tests ### !! test Italics and bold: 4-quote opening sequence: (4,2) !! input ''''foo'' !! result

''foo

!!end !! test Italics and bold: 4-quote opening sequence: (4,3) !! input ''''foo''' !! result

'foo

!!end !! test Italics and bold: 4-quote opening sequence: (4,4) !! input ''''foo'''' !! result

'foo'

!!end !! test Italics and bold: 4-quote opening sequence: (4,5) !! input ''''foo''''' !! result

'foo

!!end ### ### 5-quote opening sequence tests ### !! test Italics and bold: 5-quote opening sequence: (5,2) !! input '''''foo'' !! result

foo

!!end !! test Italics and bold: 5-quote opening sequence: (5,3) !! input '''''foo''' !! result

foo

!!end !! test Italics and bold: 5-quote opening sequence: (5,4) !! input '''''foo'''' !! result

foo'

!!end !! test Italics and bold: 5-quote opening sequence: (5,5) !! input '''''foo''''' !! result

foo

!!end ### ### multiple quote sequences in a line ### !! test Italics and bold: multiple quote sequences: (2,4,2) !! input ''foo''''bar'' !! result

foo'bar

!!end !! test Italics and bold: multiple quote sequences: (2,4,3) !! input ''foo''''bar''' !! result

foo'bar

!!end !! test Italics and bold: multiple quote sequences: (2,4,4) !! input ''foo''''bar'''' !! result

foo'bar'

!!end !! test Italics and bold: multiple quote sequences: (3,4,2) !! input '''foo''''bar'' !! result

foo'bar

!!end !! test Italics and bold: multiple quote sequences: (3,4,3) !! input '''foo''''bar''' !! result

foo'bar

!!end ### ### other quote tests ### !! test Italics and bold: other quote tests: (2,3,5) !! input ''this is about '''foo's family''''' !! result

this is about foo's family

!!end !! test Italics and bold: other quote tests: (2,(3,3),2) !! input ''this is about '''foo's''' family'' !! result

this is about foo's family

!!end !! test Italics and bold: other quote tests: (3,2,3,2) !! input '''this is about ''foo'''s family'' !! result

this is about foos family

!!end !! test Italics and bold: other quote tests: (3,2,3,3) !! input '''this is about ''foo'''s family''' !! result

'this is about foos family

!!end !! test Italics and bold: other quote tests: (3,(2,2),3) !! input '''this is about ''foo's'' family''' !! result

this is about foo's family

!!end !! test Italicized possessive !! input The ''[[Main Page]]'''s talk page. !! result

The Main Page's talk page.

!! end ### ### Non-html5 tags ### !! test Non-html5 tags should be accepted !! input
''foo''
''foo'' ''foo'' ''foo'' ''foo'' !! result
foo

foo foo foo foo

!! 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 !! test Entities inside !! input < !! result

<

!! end ### ### Comments ### !! test Comments and Indent-Pre !! input asdf asdf asdf xyz asdf xyz !! result
asdf
asdf
asdf

xyz

asdf
xyz
!! end !! test Comment test 2a !! input asdf jkl !! result

asdf jkl

!! end !! test Comment test 2b !! 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 oo}} !! result

FOO

!! end !! test Comment on its own line post-expand !! input a {{blank}} b !! result

a

b

!! end !! test Comment on its own line post-expand with non-significant whitespace !! input a {{blank}} b !! result

a

b

!! end ### ### paragraph wraping tests ### !! test No block tags !! input a b !! result

a

b

!! end !! test Block tag on one line !! input a
foo
b !! result a
foo

b

!! end !! test Block tag on both lines !! input a
foo
b
foo
!! result a
foo
b
foo
!! end !! test Multiple lines without block tags !! input
foo
a b c d e x
foo
z !! result
foo
a

b c d e

x
foo
z !! end !! test Empty lines between block tags to test open p-tags are closed between the block tags !! input
a b !! result


a

b

!! end ### ### Preformatted text ### !! test Preformatted text !! input This is some Preformatted text With ''italic'' And '''bold''' And a [[Main Page|link]] !! result
This is some
Preformatted text
With italic
And bold
And a link
!! end !! test Ident preformatting with inline content !! input a ''b'' !! result
a
b
!! end !! test
 with  inside (compatibility with 1.6 and earlier)
!! input




!! result
<b>
<cite>
<em>
!! end !! test Regression with preformatted in
!! input
Blah
!! result
Blah
!! end # Expected output in the following test is not really expected (there should be #
 in the output) -- it's only testing for well-formedness.
!! test
Bug 6200: Preformatted in 
!! input
Blah
!! result
Blah
!! end !! test
 with attributes (bug 3202)
!! input
Bluescreen of WikiDeath
!! result
Bluescreen of WikiDeath
!! end !! test
 with width attribute (bug 3202)
!! input
Narrow screen goodies
!! result
Narrow screen goodies
!! end !! test
 with forbidden attribute (bug 3202)
!! input
Narrow screen goodies
!! result
Narrow screen goodies
!! end !! test Entities inside
!! input
<
!! result
<
!! end !! test
 with forbidden attribute values (bug 3202)
!! input
Narrow screen goodies
!! result
Narrow screen goodies
!! end !! test inside
 (bug 13238)
!! input


Foo
!! result
<nowiki>

<nowiki>Foo</nowiki>
!! end !! test and
 preference (first one wins)
!! input


!! result
<nowiki>

</nowiki> </pre>

<pre> <nowiki> </pre> </pre>

!! end !! test
inside nowiki !! input
!! result

</pre>

!! end !!test Templates: Indent-Pre: 1a. Templates that break a line should suppress
!!input
 {{echo|}}
!!result

!!end

!!test
Templates: Indent-Pre: 1b. Templates that break a line should suppress 
!!input
 {{echo|
foo}}
!!result

foo

!!end !! test Templates: Indent-Pre: 1c: Wrapping should be based on expanded content !! input {{echo|a b}} !!result
a

b

!!end !! test Templates: Indent-Pre: 1d: Wrapping should be based on expanded content !! input {{echo|a b c d e }} !!result
a

b c

d

e

!!end !!test Templates: Indent-Pre: 1e. Wrapping should be based on expanded content !!input {{echo| foo}} {{echo| foo}}{{echo| bar}} {{echo| foo}} {{echo| bar}} {{echo| foo}} {{echo| foo}} {{echo|{{echo| }}bar}} !!result
foo
foo bar
foo
bar
foo
foo
bar
!!end !! test Templates: Indent-Pre: 1f: Wrapping should be based on expanded content !! input {{echo| }}a {{echo| }}a {{echo| b}} {{echo|a }}b {{echo|a }} b !!result
a


a


b

a

b

a

b
!!end !! test Templates: Single-line variant of parameter whitespace stripping test !! input {{echo| a}} {{echo|1= a}} {{echo|{{echo| a}}}} {{echo|1={{echo| a}}}} !! result
a

a

a

a

!! end !! test Templates: Strip whitespace from named parameters, but not positional ones !! input {{echo| foo}} {{echo| * foo}} {{echo| 1 = foo}} {{echo| 1 = * foo}} !! result
foo


  • foo

foo

  • foo
!! end ### ### Parsoid-centric tests for testing RT edge cases for pre ### !!test 1a. Indent-Pre and Comments !!input a c !!result
a

c

!!end !!test 1b. Indent-Pre and Comments !!input a c !!result
a

c

!!end !!test 1c. Indent-Pre and Comments !!input a a !!result
 a
 a
!!end !!test 2a. Indent-Pre and tables !!input {| |- !h1!!h2 |foo||bar |} !!result
h1 h2 foo bar
!!end !!test 2b. Indent-Pre and tables !!input {| |- |foo |} !!result
foo
!!end !!test 2c. Indent-Pre and tables (bug 42252) !!input {| |+ foo ! | bar |} !!result
foo
bar
!!end !!test 3a. Indent-Pre and block tags (single-line html) !!input

foo

foo
foo !!result

foo

foo
 foo 
!!end !!test 3b. Indent-Pre and block tags (pre-content on separate line) !!input

foo

foo
foo
foo
foo
  • foo
!!result

foo

foo
foo
foo
foo
  • foo
!!end !!test 4. Multiple spaces at start-of-line !!input

foo

foo {| |foo |} !!result

foo

   foo
foo
!!end !! test 5. White-space in indent-pre NOTE: the white-space char on 2nd line is significant !! input a
b !! result
a
b
!! end ### ### HTML-pre (some to spec PHP parser behavior and some Parsoid-RT-centric) ### !!test HTML-pre: 1. embedded newlines !!input
foo
foo

foo


foo
!!result
foo
foo

foo


foo
!!end !!test HTML-pre: 2: indented text !!input
 foo
!!result
 foo
!!end !!test HTML-pre: 3: other wikitext !!input
* foo
# bar
= no-h =
'' no-italic ''
[[ NoLink ]]
!!result
* foo
# bar
= no-h =
'' no-italic ''
[[ NoLink ]]
!!end ### ### Definition lists ### !! test Simple definition !! input ; name : Definition !! result
name 
Definition
!! end !! test Definition list for indentation only !! input : Indented text !! result
Indented text
!! end !! test Definition list with no space !! input ;name:Definition !! result
name
Definition
!!end !! test Definition list with URL link !! input ; http://example.com/ : definition !! result
http://example.com/ 
definition
!! end !! test Definition list with bracketed URL link !! input ;[http://www.example.com/ Example]:Something about it !! result
Example
Something about it
!! end !! test Definition list with wikilink containing colon !! input ; [[Help:FAQ]]: The least-read page on Wikipedia !! result
Help:FAQ
The least-read page on Wikipedia
!! end # At Brion's and JeLuF's insistence... :) !! test Definition list with news link containing colon !! input ; news:alt.wikipedia.rox: This isn't even a real newsgroup! !! result
news:alt.wikipedia.rox
This isn't even a real newsgroup!
!! end !! test Malformed definition list with colon !! input ; news:alt.wikipedia.rox -- don't crash or enter an infinite loop !! result
news:alt.wikipedia.rox -- don't crash or enter an infinite loop
!! end !! test Definition lists: colon in external link text !! input ; [http://www.wikipedia2.org/ Wikipedia : The Next Generation]: OK, I made that up !! result
Wikipedia : The Next Generation
OK, I made that up
!! end !! test Definition lists: colon in HTML attribute !! input ;bold !! result
bold
!! end !! test Definition lists: self-closed tag !! input ;one
two : two-line fun !! result
one
two 
two-line fun
!! end !! test Bug 11748: Literal closing tags !! input
test 1
test test test test test
test 2
test test test test test
!! result
test 1
test test test test test
test 2
test test test test test
!! end !! test Definition and unordered list using wiki syntax nested in unordered list using html tags. !! input
  • ; term : description * unordered
!! result
  • term 
    description
    • unordered
!! end !! test Definition list with empty definition and following paragraph !! input ; term: Paragraph text !! result
term

Paragraph text

!! end !! test Nested definition lists using html syntax !! input
Foo
!! result
Foo
!! end !! test Definition Lists: No nesting: Multiple dd's !! input ;x :a :b !! result
x
a
b
!! end !! test Definition Lists: Indentation: Regular !! input :i1 ::i2 :::i3 !! result
i1
i2
i3
!! end !! test Definition Lists: Indentation: Missing 1st level !! input ::i2 :::i3 !! result
i2
i3
!! end !! test Definition Lists: Indentation: Multi-level indent !! input :::i3 !! result
i3
!! end !! test Definition Lists: Hacky use to indent tables !! input ::{| |foo |bar |} this text should be left alone !! result
foo bar

this text should be left alone

!! end ## The PHP parser treats : items (dd) without a corresponding ; item (dt) ## as an empty dt item. It also ignores all but the last ";" when followed ## by ":" later on. So, ";" are not ignored in ";;;t3" but are ignored in ## ";;;t3 :d1". So, PHP parser behavior is a little inconsistent wrt multiple ## ";"s. ## ## Ex: ";;t2 ::d2" is transformed into: ## ##
##
t2
##
##
##
##
d2
##
##
##
## ## But, Parsoid treats "; :" as a tight atomic unit and excess ":" as plain text ## So, the same wikitext above (;;t2 ::d2) is transformed into: ## ##
##
##
##
t2
##
:d2
##
##
##
## ## All Parsoid only definition list tests have this difference. ## ## See also: https://bugzilla.wikimedia.org/show_bug.cgi?id=6569 ## and http://lists.wikimedia.org/pipermail/wikitext-l/2011-November/000483.html !! test Table / list interaction: indented table with lists in table contents !! input :{| |- | a * b |- | c * d |} !! result
a
  • b
c
  • d
!! end !!test Table / list interaction: lists nested in tables nested in indented lists !!input :{| | :a :b | *c *d |} *e *f !!result
a
b
  • c
  • d
  • e
  • f
!!end !! test Definition Lists: Nesting: Multi-level (Parsoid only) !! options parsoid !! input ;t1 :d1 ;;t2 ::d2 ;;;t3 :::d3 !! result
t1
d1
t2
:d2
t3
::d3
!! end !! test Definition Lists: Nesting: Test 2 (Parsoid only) !! options parsoid !! input ;t1 ::d2 !! result
t1
d2
!! end !! test Definition Lists: Nesting: Test 3 (Parsoid only) !! options parsoid !! input :;t1 ::::d2 !! result
t1
d2
!! end !! test Definition Lists: Nesting: Test 4 !! input ::;t3 :::d3 !! result
t3
d3
!! end !! test Definition Lists: Mixed Lists: Test 1 !! input :;* foo ::* bar :; baz !! result
  • foo
  • bar
baz
!! end !! test Definition Lists: Mixed Lists: Test 2 !! input *: d1 *: d2 !! result
  • d1
    d2
!! end !! test Definition Lists: Mixed Lists: Test 3 !! input *::: d1 *::: d2 !! result
  • d1
    d2
!! end !! test Definition Lists: Mixed Lists: Test 4 !! input *;d1 :d2 *;d3 :d4 !! result
  • d1 
    d2
    d3 
    d4
!! end !! test Definition Lists: Mixed Lists: Test 5 !! input *:d1 *:: d2 !! result
  • d1
    d2
!! end !! test Definition Lists: Mixed Lists: Test 6 !! input #*:d1 #*::: d3 !! result
    • d1
      d3
!! end !! test Definition Lists: Mixed Lists: Test 7 !! input :* d1 :* d2 !! result
  • d1
  • d2
!! end !! test Definition Lists: Mixed Lists: Test 8 !! input :* d1 ::* d2 !! result
  • d1
  • d2
!! end !! test Definition Lists: Mixed Lists: Test 9 !! input *;foo :bar !! result
  • foo 
    bar
!! end !! test Definition Lists: Mixed Lists: Test 10 !! input *#;foo :bar !! result
    1. foo 
      bar
!! end !! test Definition Lists: Mixed Lists: Test 11 !! input *#*#;*;;foo :bar *#*#;boo :baz !! result
        1. foo 
          • bar
      boo 
      baz
!! end !! test Definition Lists: Weird Ones: Test 1 !! input *#;*::;; foo : bar (who uses this?) !! result
    1. foo 
      • bar (who uses this?)
!! end ### ### External links ### !! test External links: non-bracketed !! input Non-bracketed: http://example.com !! result

Non-bracketed: http://example.com

!! end !! test External links: numbered !! input Numbered: [http://example.com] Numbered: [http://example.net] Numbered: [http://example.com] !! result

Numbered: [1] Numbered: [2] Numbered: [3]

!!end !! test External links: specified text !! input Specified text: [http://example.com link] !! result

Specified text: link

!!end !! test External links: trail !! input Linktrails should not work for external links: [http://example.com link]s !! result

Linktrails should not work for external links: links

!! end !! test External links: dollar sign in URL !! input http://example.com/1$2345 !! result

http://example.com/1$2345

!! end !! test External links: dollar sign in URL (named) !! input [http://example.com/1$2345] !! result

[1]

!!end !! test External links: open square bracket forbidden in URL (bug 4377) !! input http://example.com/1[2345 !! result

http://example.com/1[2345

!! end !! test External links: open square bracket forbidden in URL (named) (bug 4377) !! input [http://example.com/1[2345] !! result

[2345

!!end !! test External links: nowiki in URL link text (bug 6230) !!input [http://example.com/ ''example site''] !! result

''example site''

!! end !! test External links: newline forbidden in text (bug 6230 regression check) !! input [http://example.com/ first second] !! result

[http://example.com/ first second]

!!end !! test External links: Pipe char between url and text !! input [http://example.com | link] !! result

| link

!!end !! test External links: protocol-relative URL in brackets !! input [//example.com/ Test] !! result

Test

!! end !! test External links: protocol-relative URL in brackets without text !! input [//example.com] !! result

[1]

!! end !! test External links: protocol-relative URL in free text is left alone !! input //example.com/Foo !! result

//example.com/Foo

!!end !! test External links: protocol-relative URL in the middle of a word is left alone (bug 30269) !! input foo//example.com/Foo !! result

foo//example.com/Foo

!! end !! test External image !! input External image: http://meta.wikimedia.org/upload/f/f1/Ncwikicol.png !! result

External image: Ncwikicol.png

!! end !! test External image from https !! input External image from https: https://meta.wikimedia.org/upload/f/f1/Ncwikicol.png !! result

External image from https: Ncwikicol.png

!! end !! test Link to non-http image, no img tag !! input Link to non-http image, no img tag: ftp://example.com/test.jpg !! result

Link to non-http image, no img tag: ftp://example.com/test.jpg

!! end !! test External links: terminating separator !! input Terminating separator: http://example.com/thing, !! result

Terminating separator: http://example.com/thing,

!! end !! test External links: intervening separator !! input Intervening separator: http://example.com/1,2,3 !! result

Intervening separator: http://example.com/1,2,3

!! end !! test External links: old bug with URL in query !! input Old bug with URL in query: [http://example.com/thing?url=http://example.com link] !! result

Old bug with URL in query: link

!! end !! test External links: old URL-in-URL bug, mixed protocols !! input And again with mixed protocols: [ftp://example.com?url=http://example.com link] !! result

And again with mixed protocols: link

!!end !! test External links: URL in text !! input URL in text: [http://example.com http://example.com] !! result

URL in text: http://example.com

!! end !! test External links: Clickable images !! input ja-style clickable images: [http://example.com http://meta.wikimedia.org/upload/f/f1/Ncwikicol.png] !! result

ja-style clickable images: Ncwikicol.png

!!end !! test External links: raw ampersand !! input Old & use: http://x&y !! result

Old & use: http://x&y

!! end !! test External links: encoded ampersand !! input Old & use: http://x&y !! result

Old & use: http://x&y

!! end !! test External links: encoded equals (bug 6102) !! input http://example.com/?foo=bar !! result

http://example.com/?foo=bar

!! end !! test External links: [raw ampersand] !! input Old & use: [http://x&y] !! result

Old & use: [1]

!! end !! test External links: [encoded ampersand] !! input Old & use: [http://x&y] !! result

Old & use: [1]

!! end !! test External links: [encoded equals] (bug 6102) !! input [http://example.com/?foo=bar] !! result

[1]

!! end !! test External links: [IDN ignored character reference in hostname; strip it right off] !! input [http://e‌xample.com/] !! result

[1]

!! end # FIXME: This test (the IDN characters in the text of a link) is an inconsistency. # Where an external link could easily circumvent the sanitization of the text of # a link like this (where an IDN-ignore character is in the URL somewhere), this # test demands a higher standard. That's a bit strange. # # Example: # # http://e‌xample.com -> [http://example.com|http://example.com] # [http://example.com|http://e‌xample.com] -> [http://example.com|http://e‌xample.com] # # The first example is sanitized, but the second is not. Any security benefits # from this production are trivial to circumvent. Either remove this test and # let the parser(s) do their thing unaccosted, or fix the inconsistency and change # the test accordingly. # # All our love, # The Parsoid team. !! test External links: IDN ignored character reference in hostname; strip it right off !! input http://e‌xample.com/ !! result

http://example.com/

!! end !! test External links: www.jpeg.org (bug 554) !! input http://www.jpeg.org !!result

http://www.jpeg.org

!! end !! test External links: URL within URL (original bug 2) !! input [http://www.unausa.org/newindex.asp?place=http://www.unausa.org/programs/mun.asp] !! result

[1]

!! end !! test BUG 361: URL inside bracketed URL !! input [http://www.example.com/foo http://www.example.com/bar] !! result

http://www.example.com/bar

!! end !! test BUG 361: URL within URL, not bracketed !! input http://www.example.com/foo?=http://www.example.com/bar !! result

http://www.example.com/foo?=http://www.example.com/bar

!! end !! test BUG 289: ">"-token in URL-tail !! input http://www.example.com/ !! result

http://www.example.com/<hello>

!!end !! test BUG 289: literal ">"-token in URL-tail !! input http://www.example.com/html !! result

http://www.example.com/html

!!end !! test BUG 289: ">"-token in bracketed URL !! input [http://www.example.com/ stuff] !! result

<hello> stuff

!!end !! test BUG 289: literal ">"-token in bracketed URL !! input [http://www.example.com/html stuff] !! result

html stuff

!!end !! test BUG 289: literal double quote at end of URL !! input http://www.example.com/"hello" !! result

http://www.example.com/"hello"

!!end !! test BUG 289: literal double quote in bracketed URL !! input [http://www.example.com/"hello" stuff] !! result

"hello" stuff

!!end !! test External links: multiple legal whitespace is fine, Magnus. Don't break it please. (bug 5081) !! input [http://www.example.com test] !! result

test

!! end !! test External links: link text with spaces !! input [http://www.example.com a b c] [http://www.example.com ''a'' ''b''] !! result

a b c a b

!! end !! test External links: wiki links within external link (Bug 3695) !! input [http://example.com [[wikilink]] embedded in ext link] !! result

wikilink embedded in ext link

!! end !! test BUG 787: Links with one slash after the url protocol are invalid !! input http:/example.com [http:/example.com title] !! result

http:/example.com

[http:/example.com title]

!! end !! test Bracketed external links with template-generated invalid target !! input [{{echo|http:/example.com}} title] !! result

[http:/example.com title]

!! end !! test Bug 2702: Mismatched , and tags are invalid !! input ''[http://example.com text''] [http://example.com '''text]''' ''Something [http://example.com in italic''] ''Something [http://example.com mixed''''', even bold]''' '''''Now [http://example.com both'''''] !! result

text text Something in italic Something mixed, even bold Now both

!! end !! test Bug 4781: %26 in URL !! input http://www.example.com/?title=AT%26T !! result

http://www.example.com/?title=AT%26T

!! end # According to http://dev.w3.org/html5/spec/Overview.html#parsing-urls a plain # % is actually legal in HTML5. Any change in output would need testing though. !! test Bug 4781, 5267: %25 in URL !! input http://www.example.com/?title=100%25_Bran !! result

http://www.example.com/?title=100%25_Bran

!! end !! test Bug 4781, 5267: %28, %29 in URL !! input http://www.example.com/?title=Ben-Hur_%281959_film%29 !! result

http://www.example.com/?title=Ben-Hur_%281959_film%29

!! end !! test Bug 4781: %26 in autonumber URL !! input [http://www.example.com/?title=AT%26T] !! result

[1]

!! end !! test Bug 4781, 5267: %26 in autonumber URL !! input [http://www.example.com/?title=100%25_Bran] !! result

[1]

!! end !! test Bug 4781, 5267: %28, %29 in autonumber URL !! input [http://www.example.com/?title=Ben-Hur_%281959_film%29] !! result

[1]

!! end !! test Bug 4781: %26 in bracketed URL !! input [http://www.example.com/?title=AT%26T link] !! result

link

!! end !! test Bug 4781, 5267: %26 in bracketed URL !! input [http://www.example.com/?title=100%25_Bran link] !! result

link

!! end !! test Bug 4781, 5267: %28, %29 in bracketed URL !! input [http://www.example.com/?title=Ben-Hur_%281959_film%29 link] !! result

link

!! end !! test External link containing double-single-quotes in text '' (bug 4598 sanity check) !! input Some [http://example.com/ pretty ''italics'' and stuff]! !! result

Some pretty italics and stuff!

!! end !! test External link containing double-single-quotes in text embedded in italics (bug 4598 sanity check) !! input ''Some [http://example.com/ pretty ''italics'' and stuff]!'' !! result

Some pretty italics and stuff!

!! end !! test External link containing double-single-quotes with no space separating the url from text in italics !! input [http://www.musee-picasso.fr/pages/page_id18528_u1l2.htm''La muerte de Casagemas'' (1901) en el sitio de [[Museo Picasso (París)|Museo Picasso]].] !! result

La muerte de Casagemas (1901) en el sitio de Museo Picasso.

!! end !! test URL-encoding in URL functions (single parameter) !! input {{localurl:Some page|amp=&}} !! result

/index.php?title=Some_page&amp=&

!! end !! test URL-encoding in URL functions (multiple parameters) !! input {{localurl:Some page|q=?&=&}} !! result

/index.php?title=Some_page&q=?&amp=&

!! end !! test Brackets in urls !! input http://example.com/index.php?foozoid%5B%5D=bar http://example.com/index.php?foozoid[]=bar !! result

http://example.com/index.php?foozoid%5B%5D=bar

http://example.com/index.php?foozoid%5B%5D=bar

!! end !! test IPv6 urls (bug 21261) !! options disabled !! input http://[2404:130:0:1000::187:2]/index.php !! result

http://[2404:130:0:1000::187:2]/index.php

!! end !! test Non-extlinks in brackets !! input [foo] [foo bar] [foo ''bar''] [fool's] errand [fool's errand] [{{echo|foo}}] [{{echo|foo}} bar] [{{echo|foo}} ''bar''] [{{echo|foo}}l's] errand [{{echo|foo}}l's errand] [url={{echo|foo}}] [url=http://example.com] !! result

[foo] [foo bar] [foo bar] [fool's] errand [fool's errand] [foo] [foo bar] [foo bar] [fool's] errand [fool's errand] [url=foo] [url=http://example.com]

!! end ### ### Quotes ### !! test Quotes !! input Normal text. '''Bold text.''' Normal text. ''Italic text.'' Normal text. '''''Bold italic text.''''' Normal text. !!result

Normal text. Bold text. Normal text. Italic text.

Normal text. Bold italic text. Normal text.

!! end !! test Unclosed and unmatched quotes !! input '''''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. ''Tom'''s car is bigger than ''Susan'''s. Plain ''italic'''s plain !! 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.

Plain italic's plain

!! 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 A table with caption with default-spaced attributes and a table row !! input {| |+ style="color: red;" | caption1 |- | foo |} !! result
caption1
foo
!! end !! test A table with captions with non-default spaced attributes and a table row !! input {| |+style="color: red;"|caption2 |+ style="color: red;"| caption3 |- | foo |} !! result
caption2 caption3
foo
!! end !! test Table td-cell syntax variations !! input {| | foo bar foo | baz | foo bar foo || baz | style='color:red;' | baz | style='color:red;' || baz |} !! result
baz foo bar foo baz baz style='color:red;' baz
!! end !! test Simple table !! input {| | 1 || 2 |- | 3 || 4 |} !! result
1 2
3 4
!! end !! test Simple table but with multiple dashes for row wikitext !! input {| | foo |----- | bar |} !! result
foo
bar
!! 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 Accept "||" in table headings !! input {| !h1 || h2 |} !! result
h1 h2
!! end !! test Accept "||" in indented table headings !! input :{| !h1 || h2 |} !! result
h1 h2
!! end !! test Accept empty attributes in td/th cells (td/th cells starting with leading ||) !! input {| !| h1 || a |} !! result
h1 a
!! end !!test Accept "| !" at start of line in tables (ignore !-attribute) !!input {| |- | !style="color:red" | bar |} !!result
bar
!!end !!test Allow +/- in 2nd and later cells in a row, in 1st cell when td-attrs are present, or in 1st cell when there is a space between "|" and +/- !!input {| |- |style='color:red;'|+1 |style='color:blue;'|-1 |- | 1 || 2 || 3 | 1 ||+2 ||-3 |- | +1 | -1 |} !!result
+1 -1
1 2 3 1 +2 -3
+1 -1
!!end !! test Table rowspan !! input {| 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 !! test Table security: embedded pipes (http://lists.wikimedia.org/mailman/htdig/wikitech-l/2006-April/022293.html) !! input {| | |[ftp://|x||]" onmouseover="alert(document.cookie)">test !! result
[ftp://%7Cx ]" onmouseover="alert(document.cookie)">test
!! end !! test Indented table markup mixed with indented pre content (proposed in bug 6200) !! input
Text that should be rendered preformatted
!! result
Text that should be rendered preformatted
!! end !! test Template-generated table cell attributes and cell content !! input {| |{{table_attribs}} |} !! result
Foo
!! end !! test Table with row followed by newlines and table heading !! input {| |- ! foo |} !! result
foo
!! end # FIXME: Preserve the attribute properly (with an empty string as value) in # the PHP parser. Parsoid implements the behavior below. !! test Table attributes with empty value !! options disabled !! input {| | style=| hello |} !! result
hello
!! end !! test Wikitext table with a lot of comments !! input {| | foo |- | |} !! result
foo
!! 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 Broken link with fragment !! input [[Zigzagzogzagzig#zug]] !! result

Zigzagzogzagzig#zug

!! end !! test Special page link with fragment !! input [[Special:Version#anchor]] !! result

Special:Version#anchor

!! end !! test Nonexistent special page link with fragment !! input [[Special:ThisNameWillHopefullyNeverBeUsed#anchor]] !! result

Special:ThisNameWillHopefullyNeverBeUsed#anchor

!! 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, [[Main Page]]!!! !! result

Main Pagexxx, Main PageXXX, Main Page!!!

!! end !! article prefixed article !! text Some text !! endarticle !! test Bug 43661: Piped links with identical prefixes !! input [[prefixed article|prefixed articles with spaces]] [[prefixed article|prefixed articlesaoeu]] [[Main Page|Main Page test]] !! result

prefixed articles with spaces

prefixed articlesaoeu

Main Page test

!! end !! test Link with HTML entity in suffix / tail !! input [[Main Page]]", [[Main Page]]a !! result

Main Page", Main Pagea

!! 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 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 Link with double quotes in title part (literal) and alternate part (interpreted) !! input [[File:Denys Savchenko ''Pentecoste''.jpg]] [[''Pentecoste'']] [[''Pentecoste''|Pentecoste]] [[''Pentecoste''|''Pentecoste'']] !! result

File:Denys Savchenko Pentecoste.jpg

''Pentecoste''

Pentecoste

Pentecoste

!! end !! test Broken image links with HTML captions (bug 39700) !! input [[File:Nonexistent|]] [[File:Nonexistent|100px|]] [[File:Nonexistent|<]] [[File:Nonexistent|abc]] !! result

<script></script> <script></script> < abc

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

[[1]]

!! end !! test Plain link to URL with link text !! input [[http://www.example.com Link text]] !! result

[Link text]

!! end !! test Plain link to protocol-relative URL !! input [[//www.example.com]] !! result

[[1]]

!! end !! test Plain link to protocol-relative URL with link text !! input [[//www.example.com Link text]] !! result

[Link text]

!! end !! test Plain link to page with question mark in title !! input [[A?b]] [[A?b|Baz]] !! result

A?b

Baz

!! 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.com|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 !! article 00 !! text This is 00. !! endarticle !!test Self-link to numeric title !!options title=[[0]] !!input [[0]] !!result

0

!!end !!test Link to numeric-equivalent title !!options title=[[0]] !!input [[00]] !!result

00

!!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 !! test Non-breaking spaces in title !! input [[  Main   Page  ]] !! result

  Main   Page  

!!end !! test Internal link with ca linktrail, surrounded by bold apostrophes (bug 27473 primary issue) !! options language=ca !! input '''[[Main Page]]''' !! result

Main Page

!! end !! test Internal link with ca linktrail, surrounded by italic apostrophes (bug 27473 primary issue) !! options language=ca !! input ''[[Main Page]]'' !! result

Main Page

!! end !! test Internal link with en linktrail: no apostrophes (bug 27473) !! options language=en !! input [[Something]]'nice !! result

Something'nice

!! end !! test Internal link with ca linktrail with apostrophes (bug 27473) !! options language=ca !! input [[Something]]'nice !! result

Something'nice

!! end !! test Internal link with kaa linktrail with apostrophes (bug 27473) !! options language=kaa !! input [[Something]]'nice !! result

Something'nice

!! end !! test Parsoid-centric test: Whitespace in ext- and wiki-links should be preserved !! input [[Foo| bar]] [[Foo| ''bar'']] [http://wp.org foo] [http://wp.org ''foo''] !! result

bar

bar

foo

foo

!! 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 !! test Interlanguage link !! input Blah blah blah [[zh:Chinese]] !!result

Blah blah blah

!! end !! test Double interlanguage link !! input Blah blah blah [[es:Spanish]] [[zh:Chinese]] !!result

Blah blah blah

!! end !! test Interlanguage link, with prefix links !! options language=ln !! input Blah blah blah [[zh:Chinese]] !!result

Blah blah blah

!! end !! test Double interlanguage link, with prefix links (bug 8897) !! options language=ln !! input Blah blah blah [[es:Spanish]] [[zh:Chinese]] !!result

Blah blah blah

!! end !! test Parsoid-specific test: Wikilinks with   should RT properly !! options language=ln !! input [[WW II]] !!result

WW II

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

1
2
3

!! end !! test Broken br tag sanitization !! input
!! result

</br>

!! 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 Handling html with a div self-closing tag !! input
!! result

<div title /> <div title/>

<div title=bar /> <div title=bar/>

!! end !! test Handling html with a br self-closing tag !! input





!! result







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

foo
bar !! result

foo
bar !! end !! test Horizontal ruler -- 4+ dashes render hr !! input ---- !! result
!! end !! test Horizontal ruler -- eats additional dashes on the same line !! input --------- !! result
!! end !! test Horizontal ruler -- does not collaps dashes on consecutive lines !! input ---- ---- !! result

!! end !! test Horizontal ruler -- <4 dashes render as plain text !! input --- !! result

---

!! end !! test Horizontal ruler -- Supports content following dashes on same line !! input ---- Foo !! result
Foo !! 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 *** Level 3 #** Level 3, but ordered !! 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
      • Level 3
      • Level 3, but ordered
!! end !! test Nested lists 1 !! input *foo **bar !! result
  • foo
    • bar
!! end !! test Nested lists 2 !! input **foo *bar !! result
    • foo
  • bar
!! end !! test Nested lists 3 (first element empty) !! input * **bar !! result
    • bar
!! end !! test Nested lists 4 (first element empty) !! input ** *bar !! result
  • bar
!! end !! test Nested lists 5 (both elements empty) !! input ** * !! result
!! end !! test Nested lists 6 (both elements empty) !! input * ** !! result
!! end !! test Nested lists 7 (skip initial nesting levels) !! input *** foo !! result
      • foo
!! end !! test Nested lists 8 (multiple nesting transitions) !! input * foo *** bar ** baz * boo !! result
  • foo
      • bar
    • baz
  • boo
!! end !! test 1. Lists with start-of-line-transparent tokens before bullets: Comments !! input *foo *bar *baz !! result
  • foo
  • bar
  • baz
!! end !! test 2. Lists with start-of-line-transparent tokens before bullets: Template close !! input *foo {{echo|bar }}*baz !! result
  • foo bar
  • baz
!! end !! test Unbalanced closing block tags break a list (Disabled since php parser generates broken html -- relies on Tidy to fix up) !! options disabled !! input
*a
*b
!! result
  • a
  • b
!! end !! test Unbalanced closing non-block tags don't break a list (Disabled since php parser generates broken html -- relies on Tidy to fix up) !! options disabled !! input *a *b !! result

  • a
  • b
!! end !! test Unclosed formatting tags that straddle lists are closed and reopened (Disabled since php parser generates broken html -- relies on Tidy to fix up) !! options disabled !! input # a # b !! result
  1. a
  2. b
!! end !!test List embedded in a non-block tag (Ugly Parsoid output -- worth fixing; Disabled for PHP parser since it relies on Tidy) !! options parsoid !!input * foo !!result

  • foo

!!end !! test List items are not parsed correctly following a
 block (bug 785)
!! input
* 
foo
*
bar
* zar !! result
  • foo
  • bar
  • zar
!! end !! test List items from template !! input {{inner list}} * item 2 * item 0 {{inner list}} * item 2 * item 0 * notSOL{{inner list}} * item 2 !! result
  • item 1
  • item 2
  • item 0
  • item 1
  • item 2
  • item 0
  • notSOL
  • item 1
  • item 2
!! end !! test List interrupted by empty line or heading !! input * foo ** bar == A heading == * Another list item !! result
  • foo
    • bar

[edit] A heading

  • Another list item
!!end !!test Multiple list tags generated by templates !!input {{echo|
  • }}a {{echo|
  • }}b {{echo|
  • }}c !!result
  • a
  • b
  • c
  • !!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]] !! input {{NAMESPACE}} !! result

    User

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

    User

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

    2

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

    2

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

    Ævar Arnfjörð Bjarmason

    !! end !! test Magic Word: {{PAGENAME}} with metacharacters !! options title=[['foo & bar = baz']] !! input ''{{PAGENAME}}'' !! result

    'foo & bar = baz'

    !! end !! test Magic Word: {{PAGENAME}} with metacharacters (bug 26781) !! options title=[[*RFC 1234 http://example.com/]] !! input {{PAGENAME}} !! result

    *RFC 1234 http://example.com/

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

    %C3%86var_Arnfj%C3%B6r%C3%B0_Bjarmason

    !! end !! test Magic Word: {{PAGENAMEE}} with metacharacters (bug 26781) !! options title=[[*RFC 1234 http://example.com/]] !! input {{PAGENAMEE}} !! result

    *RFC_1234_http://example.com/

    !! 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://example.org

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

    example.org

    !! 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 User {{ns:User}} !! input {{ns:User}} !! result

    User

    !! end !! test Namespace User talk {{ns:User_talk}} !! input {{ns:User_talk}} !! result

    User talk

    !! end !! test Namespace User talk {{ns:uSeR tAlK}} !! input {{ns:uSeR tAlK}} !! result

    User talk

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

    File

    !! end !! test Namespace File {{ns:Image}} !! input {{ns:Image}} !! result

    File

    !! end !! test Namespace (lang=de) Benutzer {{ns:User}} !! options language=de !! input {{ns:User}} !! result

    Benutzer

    !! end !! test Namespace (lang=de) Benutzer Diskussion {{ns:3}} !! options language=de !! input {{ns:3}} !! result

    Benutzer Diskussion

    !! end !! test Urlencode !! input {{urlencode:hi world?!}} {{urlencode:hi world?!|WIKI}} {{urlencode:hi world?!|PATH}} {{urlencode:hi world?!|QUERY}} !! result

    hi+world%3F%21 hi_world%3F! hi%20world%3F%21 hi+world%3F%21

    !! 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 Nonexistent template !! input {{thistemplatedoesnotexist}} !! result

    Template:Thistemplatedoesnotexist

    !! end !! test Template with invalid target containing tags !! input {{ab|{{echo|foo}}|{{echo|a}}={{echo|b}}|a = b}} !! result

    {{ab|foo|a=b|a = b}}

    !! end !! test Template with invalid target containing unclosed tag !! input {{a|{{echo|foo}}|{{echo|a}}={{echo|b}}|a = b}} !! result

    {{a|foo|a=b|a = b}}

    !! 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 !!test Template-generated attribute string (k='v') !!input bar !!result

    bar

    !!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}}]] [[{{linktest2}}|Main Page]] [[{{linktest2}}]]Page !! result

    Main Page

    Main Page

    Main PagePage

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

    Template loop detected: Template: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 !! test Template with targets containing wikilinks !! input {{[[foo]]}} {{[[{{echo|foo}}]]}} {{{{echo|[[foo}}]]}} !! result

    {{foo}}

    {{foo}}

    {{[[foo}}]]

    !! end !! article Template:MSGNW test !! text ''None'' of '''this''' should be * interpreted 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 * interpreted 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 Un-closed !! input !! result !! end !! test on a page !! input Foobar !! result

    Foobar

    !! end !! test Un-closed !! input !! result !! end !!test Self-closed noinclude, includeonly, onlyinclude tags !!input !!result


    !!end !!test Unbalanced includeonly and noinclude tags !!input {| |a
    |b
    |c
    |d
    |} !!result
    a b c</includeonly> d</includeonly></includeonly>
    !!end !! article Template:Includeonly section !! text ==Includeonly section== ==Section T-1== !!endarticle !! test Bug 6563: Edit link generation for section shown by !! input {{includeonly section}} !! result

    [edit] Includeonly section

    [edit] Section T-1

    !! end # Uses same input as the contents of [[Template:Includeonly section]] !! test Bug 6563: Section extraction for section shown by !! options section=T-2 !! input ==Includeonly section== ==Section T-2== !! result ==Section T-2== !! end !! test Bug 6563: Edit link generation for section suppressed by !! input ==Includeonly section== ==Section 1== !! result

    [edit] Section 1

    !! end !! test Bug 6563: Section extraction for section suppressed by !! options section=1 !! input ==Includeonly section== ==Section 1== !! result ==Section 1== !! end !! test Un-closed !! input !! result !! end ### ### and in attributes ### !!test 0. includeonly around the entire attribute !!input id="v1"id="v2">bar !!result

    bar

    !!end !!test 1. includeonly in html attr key !!input idabout="foo">bar !!result

    bar

    !!end !!test 2. includeonly in html attr value !!input bar "v1""v2">bar !!result

    bar bar

    !!end !!test 3. includeonly in part of an attr value !!input bar !!result

    bar

    !!end ### ### Testing parsing of templates where a template arg ### has the same name as the template itself. ### !! article Template:quote !! text {{{quote|{{{1}}}}}} !! endarticle !!test Templates: Template Name/Arg clash: 1. Use of positional param !!input {{quote|foo}} !!result

    foo

    !!end !!test Templates: Template Name/Arg clash: 2. Use of named param !!input {{quote|quote=foo}} !!result

    foo

    !!end !!test Templates: Template Name/Arg clash: 3. Use of named param with empty input !!input {{quote|quote}} !!result

    quote

    !!end ### ### Parsoid-centric tests to stress Parsoid's ability to RT them unchanged ### !!test Templates: 1. Simple use !!input {{echo|Foo}} !!result

    Foo

    !!end !!test Templates: 2. Inside a block tag !!input
    {{echo|Foo}}
    !!result
    Foo
    !!end !!test Templates: P-wrapping: 1a. Templates on consecutive lines !!input {{echo|Foo}} {{echo|bar}} !!result

    Foo bar

    !!end !!test Templates: P-wrapping: 1b. Templates on consecutive lines !!input Foo {{echo|bar}} {{echo|baz}} !!result

    Foo

    bar baz

    !!end !!test Templates: P-wrapping: 1c. Templates on consecutive lines !!input {{echo|Foo}} {{echo|bar}}
    baz
    !!result

    Foo

    bar
    baz
    !!end !!test Templates: Inline Text: 1. Multiple tmeplate uses !!input {{echo|Foo}}bar{{echo|baz}} !!result

    Foobarbaz

    !!end !!test Templates: Inline Text: 2. Back-to-back template uses !!input {{echo|Foo}}{{echo|bar}} !!result

    Foobar

    !!end !!test Templates: Block Tags: 1. Multiple template uses !!input {{echo|
    Foo
    }}
    bar
    {{echo|
    baz
    }} !!result
    Foo
    bar
    baz
    !!end !!test Templates: Block Tags: 2. Back-to-back template uses !!input {{echo|
    Foo
    }}{{echo|
    bar
    }} !!result
    Foo
    bar
    !!end !!test Templates: Links: 1. Simple example !!input {{echo|[[Foo|bar]]}} !!result

    bar

    !!end !!test Templates: Links: 2. Generation of link href !!input [[{{echo|Foo}}|bar]] !!result

    bar

    !!end !!test Templates: Links: 3. Generation of part of a link href !!input [[Fo{{echo|o}}|bar]] [[Foo{{echo|bar}}]] [[Foo{{echo|bar}}baz]] [[Foo{{echo|bar}}|bar]] [[:Foo{{echo|bar}}]] [[:Foo{{echo|bar}}|bar]] !!result

    bar

    Foobar

    Foobarbaz

    bar

    Foobar

    bar

    !!end !!test Templates: Links: 4. Multiple templates generating link href !!input [[{{echo|F}}{{echo|o}}ob{{echo|ar}}]] !!result

    Foobar

    !!end !!test Templates: Links: 5. Generation of link text !!input [[Foo|{{echo|bar}}]] !!result

    bar

    !!end !!test Templates: Links: 5. Nested templates (only outermost template should be marked) !!input {{echo|[[{{echo|Foo}}|bar]]}} !!result

    bar

    !!end !!test Templates: HTML Tag: 1. Generation of HTML attr. key !!input
    foo
    !!result
    foo
    !!end !!test Templates: HTML Tag: 2. Generation of HTML attr. value !!input
    foo
    !!result
    foo
    !!end !!test Templates: HTML Tag: 3. Generation of HTML attr key and value !!input
    foo
    !!result
    foo
    !!end !!test Templates: HTML Tag: 4. Generation of starting piece of HTML attr value !!input
    foo
    !!result
    foo
    !!end !!test Templates: HTML Tag: 5. Generation of middle piece of HTML attr value !!input
    foo
    !!result
    foo
    !!end !!test Templates: HTML Tag: 6. Generation of end piece of HTML attr value !!input
    foo
    !!result
    foo
    !!end !!test Templates: HTML Tables: 1. Generating start of a HTML table !!input {{echo|}}
    foo
    !!result
    foo
    !!end !!test Templates: HTML Tables: 2a. Generating middle of a HTML table !!input {{echo|}}
    foo
    !!result
    foo
    !!end !!test Templates: HTML Tables: 2b. Generating middle of a HTML table !!input {{echo|}}
    foo
    !!result
    foo
    !!end !!test Templates: HTML Tables: 3. Generating end of a HTML table !!input {{echo|
    foo
    }} !!result
    foo
    !!end !!test Templates: HTML Tables: 4a. Generating a single tag of a HTML table !!input {{echo|}}
    foo
    !!result
    foo
    !!end !!test Templates: HTML Tables: 4b. Generating a single tag of a HTML table !!input {{echo|}}
    foo
    !!result
    foo
    !!end !!test Templates: HTML Tables: 4c. Generating a single tag of a HTML table !!input {{echo|
    }}foo
    !!result
    foo
    !!end !!test Templates: HTML Tables: 4d. Generating a single tag of a HTML table !!input }}
    foo{{echo|
    !!result
    foo
    !!end !!test Templates: HTML Tables: 4e. Generating a single tag of a HTML table !!input {{echo|}}
    foo
    !!result
    foo
    !!end !!test Templates: HTML Tables: 4f. Generating a single tag of a HTML table !!input {{echo|
    foo
    }} !!result
    foo
    !!end !!test Templates: Wiki Tables: 1a. Fostering of entire template content !!input {| {{echo|a}} |} !!result a
    !!end !!test Templates: Wiki Tables: 1b. Fostering of entire template content !!input {| {{echo|
    }} foo {{echo|
    }} |} !!result

    foo

    !!end !!test Templates: Wiki Tables: 2. Fostering of partial template content !!input {| {{echo|a
    b
    }} |} !!result a
    b
    !!end !!test Templates: Wiki Tables: 3. td-content via multiple templates !!input {| {{echo|{{pipe}}a}}{{echo|b}} |} !!result
    ab
    !!end !!test Templates: Wiki Tables: 4. Templated tags, no content !!input {{tbl-start}} {{tbl-end}} !!result
    !!end !!test Templates: Wiki Tables: 5. Templated tags, regular td-tags !!input {{tbl-start}} |foo {{tbl-end}} !!result
    foo
    !!end !!test Templates: Wiki Tables: 6. Templated tags, templated td-tags !!input {{tbl-start}} {{!}}foo {{tbl-end}} !!result
    foo
    !!end !!test Templates: Lists: Multi-line list-items via templates !!input *{{echo|a {{nonexistent| unused}}}} *{{echo|b {{nonexistent| unused}}}} !!result !!end !!test Templates: Ugly nesting: 1. Quotes opened/closed across templates (echo) !!input {{echo|''a}}{{echo|b''c''d}}{{echo|''e}} !!result

    abcde

    !!end !!test Templates: Ugly nesting: 2. Quotes opened/closed across templates (echo_with_span) (PHP parser generates misnested html) !! options disabled !!input {{echo_with_span|''a}}{{echo_with_span|b''c''d}}{{echo_with_span|''e}} !!result

    abcde

    !!end !!test Templates: Ugly nesting: 3. Quotes opened/closed across templates (echo_with_div) (PHP parser generates misnested html) !! options disabled !!input {{echo_with_div|''a}}{{echo_with_div|b''c''d}}{{echo_with_div|''e}} !!result
    a
    bcd
    e
    !!end !!test Templates: Ugly nesting: 4. Divs opened/closed across templates !!input a
    b{{echo|c
    d}}e !!result a
    bc
    de !!end !!test Templates: Ugly templates: 1. Navbox template parses badly leading to table misnesting (Parsoid-centric) !! options parsoid !!input {| |{{echo|foo}} |bar |} !!result
    foo
    bar !!end !!test Templates: Ugly templates: 2. Navbox template parses badly leading to table misnesting (Parsoid-centric) !! options parsoid !!input
    1. {{echo|foo
    }}
    bar 2. {{echo|baz
    }} abc xyz !!result
    1. foo
    bar 2. baz
    abc xyz !!end !! test Templates: Ugly templates: 3. newline-only template parameter !! input foo {{echo| }} !! result

    foo

    !! end # This looks like a bug: a single newline triggers p/br for some reason. !! test Templates: Ugly templates: 4. newline-only template parameter inconsistency !! input {{echo| }} !! result


    !! end !!test Parser Functions: 1. Simple example !!input {{uc:foo}} !!result

    FOO

    !!end !!test Parser Functions: 2. Nested use (only outermost should be marked up) !!input {{uc:{{lc:FOO}}}} !!result

    FOO

    !!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: nonexistent 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: 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 !! article Template:SubstTest !!text {{subst:Includes}} !! endarticle !! article Template:SafeSubstTest !! text {{safesubst:Includes}} !! endarticle !! test bug 22297: safesubst: works during PST !! options pst !! input {{subst:SafeSubstTest}}{{safesubst:SubstTest}} !! result FoobarFoobar !! end !! test bug 22297: safesubst: works during normal parse !! input {{SafeSubstTest}} !! result

    Foobar

    !! end !! test: subst: does not work during normal parse !! input {{SubstTest}} !! result

    {{subst:Includes}}

    !! 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 !! test pre-save transform: context links ("pipe trick") with full-width parens and no space (Japanese and Chinese style, bug 30149) !! options pst !! input [[Article(context)|]] [[Bar:Article(context)|]] [[:Bar:Article(context)|]] [[|Article(context)]] [[Bar:X(Y)Z|]] [[:Bar:X(Y)Z|]] !! result [[Article(context)|Article]] [[Bar:Article(context)|Article]] [[:Bar:Article(context)|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 full-width parens and space (Japanese and Chinese style, bug 30149) !! options pst !! input [[Article (context)|]] [[Bar:Article (context)|]] [[:Bar:Article (context)|]] [[|Article (context)]] [[Bar:X (Y) Z|]] [[:Bar:X (Y) Z|]] !! result [[Article (context)|Article]] [[Bar:Article (context)|Article]] [[:Bar:Article (context)|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 parens and no space (Korean style, bug 30149) !! options pst !! input [[Article(context)|]] [[Bar:Article(context)|]] [[:Bar:Article(context)|]] [[|Article(context)]] [[Bar:X(Y)Z|]] [[:Bar:X(Y)Z|]] !! result [[Article(context)|Article]] [[Bar:Article(context)|Article]] [[:Bar:Article(context)|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 commas (bug 21660) !! options pst !! input [[Article (context), context|]] [[Article (context),context|]] [[Bar:Article (context), context|]] [[Bar:Article (context),context|]] [[:Bar:Article (context), context|]] [[:Bar:Article (context),context|]] !! result [[Article (context), context|Article]] [[Article (context),context|Article]] [[Bar:Article (context), context|Article]] [[Bar:Article (context),context|Article]] [[:Bar:Article (context), context|Article]] [[:Bar:Article (context),context|Article]] !! end !! test pre-save transform: trim trailing empty lines !! options pst !! input Empty lines are trimmed !! result Empty lines are trimmed !! end !! test pre-save transform: Signature expansion !! options pst !! input * ~~~ * ~~~ * ~~~ * ~~~ !! result * [[Special:Contributions/127.0.0.1|127.0.0.1]] * [[Special:Contributions/127.0.0.1|127.0.0.1]] * [[Special:Contributions/127.0.0.1|127.0.0.1]] * [[Special:Contributions/127.0.0.1|127.0.0.1]] !! end !! test pre-save transform: Signature expansion in nowiki tags (bug 93) !! options pst disabled !! input Shall not expand: ~~~~ ~~~~ ~~~~ ~~~~ {{subst:Foo}} shall be converted to FOO As well as inside noinclude/onlyinclude {{subst:Foo}} {{subst:Foo}} But not inside includeonly {{subst:Foo}} !! result Shall not expand: ~~~~ ~~~~ ~~~~ ~~~~ FOO shall be converted to FOO As well as inside noinclude/onlyinclude FOO FOO But not inside includeonly {{subst:Foo}} !! 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 message transform: in transcluded template (bug 4926) !! options msg !! input {{Includes}} !! result Foobar !! end !! test 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 with subpage, known !! options msg !! input {{#special:Recentchanges/param}} !! result Special:RecentChanges/param !! end !! test {{#special:}} page name, unknown !! options msg !! input {{#special:foobarnonexistent}} !! result No such special page !! end !! test {{#speciale:}} page name, known !! options msg !! input {{#speciale:Recentchanges}} !! result Special:RecentChanges !! end !! test {{#speciale:}} page name with subpage, known !! options msg !! input {{#speciale:Recentchanges/param}} !! result Special:RecentChanges/param !! end !! test {{#speciale:}} page name, unknown !! options msg !! input {{#speciale:foobarnonexistent}} !! result No_such_special_page !! end ### ### Images ### !! test Simple image !! input [[Image:foobar.jpg]] !! result

    Foobar.jpg

    !! end !! test Right-aligned image !! input [[Image:foobar.jpg|right]] !! result
    Foobar.jpg
    !! end !! test Simple image (using File: namespace, now canonical) !! input [[File:foobar.jpg]] !! result

    Foobar.jpg

    !! end !! test Image with caption !! input [[Image:foobar.jpg|right|Caption text]] !! result
    Caption text
    !! end !! test Image with empty attribute !! input [[Image:foobar.jpg|right||Caption text]] !! result
    Caption text
    !! end !! test Image with link tails !! input 123[[Image:foobar.jpg]]456 123[[Image:foobar.jpg|right]]456 123[[Image:foobar.jpg|thumb]]456 !! result

    123Foobar.jpg456

    123
    Foobar.jpg
    456 123
    Foobar.jpg
    456 !! end !! test Image with multiple captions -- only last one is accepted !! input [[Image:foobar.jpg|right|Caption1 - ignored|[[Caption2]] - ignored|Caption3 - accepted]] !! result
    Caption3 - accepted
    !! end !! test Image with width attribute at different positions !! input [[Image:foobar.jpg|200px|right|Caption]] [[Image:foobar.jpg|right|200px|Caption]] [[Image:foobar.jpg|right|Caption|200px]] !! result
    Caption
    Caption
    Caption
    !! end !! test Image with link parameter, wiki target !! input [[Image:foobar.jpg|link=Target page]] !! result

    Foobar.jpg

    !! end !! test Image with link parameter, URL target !! input [[Image:foobar.jpg|link=http://example.com/]] !! result

    Foobar.jpg

    !! end !! test Image with link parameter, wgExternalLinkTarget !! input [[Image:foobar.jpg|link=http://example.com/]] !! config wgExternalLinkTarget='foobar' !! result

    Foobar.jpg

    !! end !! test Image with link parameter, wgNoFollowLinks set to false !! input [[Image:foobar.jpg|link=http://example.com/]] !! config wgNoFollowLinks=false !! result

    Foobar.jpg

    !! end !! test Image with link parameter, wgNoFollowDomainExceptions !! input [[Image:foobar.jpg|link=http://example.com/]] !! config wgNoFollowDomainExceptions='example.com' !! result

    Foobar.jpg

    !! end !! test Image with link parameter, wgExternalLinkTarget, unnamed parameter !! input [[Image:foobar.jpg|link=http://example.com/|Title]] !! config wgExternalLinkTarget='foobar' !! result

    Title

    !! end !! test Image with empty link parameter !! input [[Image:foobar.jpg|link=]] !! result

    Foobar.jpg

    !! end !! test Image with link parameter (wiki target) and unnamed parameter !! input [[Image:foobar.jpg|link=Target page|Title]] !! result

    Title

    !! end !! test Image with link parameter (URL target) and unnamed parameter !! input [[Image:foobar.jpg|link=http://example.com/|Title]] !! result

    Title

    !! end !! test Thumbnail image with link parameter !! input [[Image:foobar.jpg|thumb|link=http://example.com/|Title]] !! result
    Title
    !! 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
    !! end !! test Image with frame and link and explicit alt !! input [[Image:Foobar.jpg|frame|left|This is a test image [[Main Page]]|alt=Altitude]] !! result
    Altitude
    This is a test image Main Page
    !! end !! test Image with wiki markup in implicit alt !! input [[Image:Foobar.jpg|testing '''bold''' in alt]] !! result

    testing bold in alt

    !! end !! test Image with wiki markup in explicit alt !! input [[Image:Foobar.jpg|alt=testing '''bold''' in alt]] !! result

    testing bold in alt

    !! end !! test Link to image page- image page normally doesn't exists, hence edit link Add test with existing image page #

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

    Image:test

    !! end !! test bug 18784 Link to non-existent image page with caption should use caption as link text !! input [[:Image:test|caption]] !! result

    caption

    !! 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 Thumbnail image caption with a free URL and explicit alt !! input [[Image:foobar.jpg|thumb|http://example.com|alt=Alteration]] !! 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
    !! end !! test BUG 1887: A mailto link with a thumbnail !! input [[Image:foobar.jpg|thumb|Please mailto:nobody@example.com]] !! result !! 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 inside it!
    !! end !! test Image caption containing a newline !! input [[Image:Foobar.jpg|This *is some text]] !! result

    This *is some text

    !!end !!test Parsoid: Image caption containing leading space (The leading space should not trigger nowiki escaping in wt2wt mode) !! input [[Image:Foobar.jpg|thumb| bar]] !! result
    bar
    !!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.
    !! end !! test Custom class !! input [[Image:foobar.jpg|a|class=b]] !! result

    a

    !! end !! test Localized image handling (1). !! options language=es !! input [[Archivo:Foobar.jpg|izquierda|enlace=foo|caption]] !! result
    caption
    !! end !! test Localized image handling (2). !! options language=es !! input [[Archivo:Foobar.jpg|miniatura|izquierda|enlace=foo|caption]] !! result
    caption
    !! end !! test "border", "frameless" and "class" attributes on an image. !! input [[File:Foobar.jpg|frameless|border|class=extra|caption]] !! result

    caption

    !! end !! article File:Barfoo.jpg !! text #REDIRECT [[File:Barfoo.jpg]] !! endarticle !! test Redirected image !! input [[Image:Barfoo.jpg]] !! result

    File:Barfoo.jpg

    !! end !! test Missing image with uploads disabled !! options wgEnableUploads=0 !! input [[Image:Foobaz.jpg]] !! result

    File:Foobaz.jpg

    !! 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 !! test PAGESINCATEGORY invalid title fatal (r33546 fix) !! input {{PAGESINCATEGORY:}} !! result

    0

    !! end !! test Category with different sort key !! options cat !! input [[Category:MediaWiki User's Guide|Foo]] !! result MediaWiki User's Guide !! end !! test Category with identical sort key !! options cat !! input [[Category:MediaWiki User's Guide|MediaWiki User's Guide]] !! result MediaWiki User's Guide !! end !! test Category with empty sort key !! options cat pst !! input [[Category:MediaWiki User's Guide|]] !! result [[Category:MediaWiki User's Guide|MediaWiki User's Guide]] !! end !! test Category with empty sort key and parentheses !! options cat pst !! input [[Category:Foo (bar)|]] !! result [[Category:Foo (bar)|Foo]] !! end !! test Category with link tail !! options cat pst !! input 123[[Category:Foo]]456 !! result 123[[Category:Foo]]456 !! end !! test Category with template !! options cat pst !! input [[Category:{{echo|Foo}}]] !! result [[Category:{{echo|Foo}}]] !! end !! test Category with template in sort key !! options cat pst !! input [[Category:Foo|{{echo|Bar}}]] !! result [[Category:Foo|{{echo|Bar}}]] !! end !! test Category with template in sort key and title !! options cat pst !! input [[Category:{{echo|Foo}}|{{echo|Bar}}]] !! result [[Category:{{echo|Foo}}|{{echo|Bar}}]] !! end !! test Category / paragraph interactions !! input Foo [[Category:Baz]] Bar Foo [[Category:Baz]] Bar Foo [[Category:Baz]] Bar Foo [[Category:Baz]] Bar Foo [[Category:Baz]] [[Category:Baz]] [[Category:Baz]] Bar [[Category:Baz]] [[Category:Baz]] [[Category:Baz]] [[Category:Baz]] {{echo|[[Category:Baz]]}} [[Category:Baz]] !! result

    Foo Bar

    Foo Bar

    Foo Bar

    Foo Bar

    Foo Bar

    !! end ### ### Inter-language links ### !! test Inter-language links !! options ill !! input [[es:Alimento]] [[fr:Nourriture]] [[zh:食品]] !! result es:Alimento fr:Nourriture zh:食品 !! end !! test Duplicate interlanguage links (bug 24502) !! options ill !! input [[es:1]] [[es:2]] [[fr:1]] [[fr:2]] !! result es:1 fr:1 !! 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 TOC regression (bug 9764) !! input == title 1 == === title 1.1 === ==== title 1.1.1 ==== === title 1.2 === == title 2 == === title 2.1 === !! result

    Contents

    [edit] title 1

    [edit] title 1.1

    [edit] title 1.1.1

    [edit] title 1.2

    [edit] title 2

    [edit] title 2.1

    !! end !! test TOC with wgMaxTocLevel=3 (bug 6204) !! options wgMaxTocLevel=3 !! input == title 1 == === title 1.1 === ==== title 1.1.1 ==== === title 1.2 === == title 2 == === title 2.1 === !! result

    Contents

    [edit] title 1

    [edit] title 1.1

    [edit] title 1.1.1

    [edit] title 1.2

    [edit] title 2

    [edit] title 2.1

    !! end !! test TOC with wgMaxTocLevel=3 and two level four headings (bug 6204) !! options wgMaxTocLevel=3 !! input ==Section 1== ===Section 1.1=== ====Section 1.1.1==== ====Section 1.1.1.1==== ==Section 2== !! result

    Contents

    [edit] Section 1

    [edit] Section 1.1

    [edit] Section 1.1.1

    [edit] Section 1.1.1.1

    [edit] Section 2

    !! end !! test Resolving duplicate section names !! input == Foo bar == == Foo bar == !! result

    [edit] Foo bar

    [edit] Foo bar

    !! end !! test Resolving duplicate section names with differing case (bug 10721) !! 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 TOC regression (bug 12077) !! input __TOC__ == title 1 == === title 1.1 === == title 2 == !! result

    Contents

    [edit] title 1

    [edit] title 1.1

    [edit] title 2

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

    http://example.com Foobar.jpg

    !!end !! test Short headings with trailing space should match behavior of Parser::doHeadings (bug 19910) !! input === The line above must have a trailing space! === But just in case it doesn't... !! result

    [edit] =

    The line above must have a trailing space!

    [edit] =

    But just in case it doesn't...

    !! end !! test Header with special characters (bug 25462) !! input The tooltips shall not show entities to the user (ie. be double escaped) == text > text == section 1 == text < text == section 2 == text & text == section 3 == text ' text == section 4 == text " text == section 5 !! result

    The tooltips shall not show entities to the user (ie. be double escaped)

    Contents

    [edit] text > text

    section 1

    [edit] text < text

    section 2

    [edit] text & text

    section 3

    [edit] text ' text

    section 4

    [edit] text " text

    section 5

    !! end !! test Headers with excess '=' characters (Are similar tests necessary beyond the 1st level?) !! input =foo== ==foo= =''italic'' heading== ==''italic'' heading= !! result

    Contents

    [edit] foo=

    [edit] =foo

    [edit] italic heading=

    [edit] =italic heading

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

    http://example.comFoobar.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 ### ### HTML tags and HTML attributes ### !! 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 # FIXME: produce empty string instead of "class" in the PHP parser, following # the HTML5 spec. !! test div with empty attribute value, space before equals !! options disabled !! input
    HTML rocks
    !! result
    HTML rocks
    !! end # The PHP parser escapes the opening brace to { for some reason, so # disabled this test for it. !! test div with braces in attribute value !! options disabled !! input
    Foo
    !! result
    Foo
    !! end # This it very inconsistent in the PHP parser: it returns # class="class" if there is a space between the name and the equal sign (see # 'div with empty attribute value, space before equals'), but strips the # attribute completely if the space is missing. We hope that not much content # depends on this, so are implementing the behavior below in Parsoid for # consistencies' sake. Disabled for the PHP parser. # FIXME: fix this behavior in the PHP parser? !! test div with empty attribute value, no space before equals !! options disabled !! 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 Non-ASCII pseudo-tags are rendered as text !! input !! result

    <khyô>

    !! end !! test Pseudo-tag with URL 'name' renders as url link !! input !! result

    <http://example.com/>

    !! 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 entity-escaped character entity-like string: eacute !! input I always thought &eacute; was a cute letter. !! result

    I always thought &eacute; 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

    File: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 !! article אַ !! text Test for unicode normalization The page's name is U+05d0 U+05b7, with non-canonical form U+FB2E !! endarticle !! test (bug 19451) Links should refer to the normalized form. !! input [[אַ]] [[אַ]] [[אַ]] [[אַ]] [[אַ]] !! result

    אַ אַ אַ אַ

    !! 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
    <script>alert(document.cookie)</script>">Magic div
    !! end !! test Bug 2304: HTML attribute safety (unsafe breakout parameter 2; 2309) !! input {{div style|" >}} !! result
    <script>alert(document.cookie)</script>">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 # 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 CSS safety test: vertical tab !! input

    A

    !! result

    A

    !! end !! test MSIE CSS safety test: Fullwidth !! input

    A

    B
    !! result

    A

    B
    !! end !! test MSIE CSS safety test: IPA extensions !! input
    A

    B

    !! result
    A

    B

    !! end !! test MSIE CSS safety test: sup/sub script !! input
    A
    B

    C

    !! result
    A
    B

    C

    !! end !! test MSIE CSS safety test: Repetition markers !! input

    A

    B

    C

    D

    E

    F

    G

    !! result

    A

    B

    C

    D

    E

    F

    G

    !! 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 !! test CSS line continuation 1 !! input
    !! result
    !! end !! test CSS line continuation 2 !! input
    !! result
    !! 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
    ''
    array (
    )
    
    !! end !! test Parser hook: empty input using terminated empty elements !! input !! result
    NULL
    array (
    )
    
    !! end !! test Parser hook: empty input using terminated empty elements (space before) !! input !! result
    NULL
    array (
    )
    
    !! end !! test Parser hook: basic input !! input input !! result
    'input'
    array (
    )
    
    !! end !! test Parser hook: case insensitive !! input input !! result
    'input'
    array (
    )
    
    !! end !! test Parser hook: case insensitive, redux !! input input !! result
    'input'
    array (
    )
    
    !! end !! test Parser hook: nested tags !! options noxml !! input !! result
    ''
    array (
    )
    
    </tag> !! end !! test Parser hook: basic arguments !! input !! result
    ''
    array (
      'width' => '200',
      'height' => '100',
      'depth' => '50',
      'square' => 'square',
    )
    
    !! end !! test Parser hook: argument containing a forward slash (bug 5344) !! input !! result
    ''
    array (
      'filename' => '/tmp/bla',
    )
    
    !! end !! test Parser hook: empty input using terminated empty elements (bug 2374) !! input text !! result
    NULL
    array (
      'foo' => '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 (
      'width' => '200',
      'height' => '100',
      'depth' => '50',
      'square' => '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 definitely 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 Sanitizer: Validating that and work, but only for Microdata !! input
    !! result

    <meta http-equiv="refresh" content="5">

    <link rel="stylesheet" href="http://example.org">
    !! 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 Punctuation: nbsp before exclamation !! input C'est grave ! !! result

    C'est grave !

    !! end !! test Punctuation: CSS !important (bug 11874) !! input
    important
    !! result
    important
    !!end !! test Punctuation: CSS ! important (bug 11874; with space after) !! input
    important
    !! result
    important
    !!end !! test HTML bullet list, closed tags (bug 5497) !! input
    • One
    • Two
    !! result
    • One
    • Two
    !! end !! test HTML bullet list, unclosed tags (bug 5497) !! options disabled !! 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 HTML ordered list, unclosed tags (bug 5497) !! options disabled !! 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 HTML nested bullet list, open tags (bug 5497) !! options disabled !! 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 HTML nested ordered list, open tags (bug 5497) !! options disabled !! 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 # Note: the current result listed for this is not what the original one was, # but the original bug was JavaScript injection, which is fixed in any case. # It's not clear that the original result listed was any more correct than the # current one. Original result: #

    {{{| #

    #
  • # }}}blah" onmouseover="alert('hello world');" align="left"MOVE MOUSE CURSOR OVER HERE !!test Fuzz testing: Parser25 (bug 6055) !! input {{{ |
  • }}}blah" onmouseover="alert('hello world');" align="left"'''MOVE MOUSE CURSOR OVER HERE !! result

    <LI CLASS=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
    Error creating thumbnail:
    !!end !! test Fuzz testing: encoded newline in generated HTML replacements (bug 6577) !! input
    
    !! result
    
    
    
    !! end
    
    !! test
    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 Inline HTML vs wiki block nesting !! options disabled !! input Bold paragraph New wiki paragraph !! result

    Bold paragraph

    New wiki paragraph

    !! end # Original result was this: #

    boldboldbolditalics #

    # While that might be marginally more intuitive, maybe, the six-apostrophe # construct is clearly pathological and the result stated here (which is what # the parser actually does) is about as reasonable as anything. !!test Mixing markup for italics and bold !! options !! input '''bold''''''bold''bolditalics''''' !! result

    'bold'boldbolditalics

    !! 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== ==b== ==c== !! result ==a== !! end !! test Section extraction test with comment after heading (section 2) !! options section=2 !! input ==a== ==b== ==c== !! result ==b== !! 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 # Formerly testing for bug 2587, now resolved by the use of unmarked sections # instead of respecting commented sections !! test Section extraction prefixed by comment (section 1) !! options section=1 !! input ==sec1== ==sec2== !!result ==sec2== !!end !! test Section extraction prefixed by comment (section 2) !! options section=2 !! input ==sec1== ==sec2== !!result !!end # Formerly testing for bug 2607, now resolved by the use of unmarked sections # instead of respecting HTML-style headings !! test Section extraction, mixed wiki and html (section 1) !! options section=1 !! input

    unmarked

    unmarked ==1== one ==2== two !! result ==1== one !! end !! test Section extraction, mixed wiki and html (section 2) !! options section=2 !! input

    unmarked

    unmarked ==1== one ==2== two !! result ==2== two !! end # Formerly testing for bug 3342 !! test Section extraction, heading surrounded by !! options section=1 !! input ==unmarked== ==marked== !! result ==marked== !!end # Test behavior of bug 19910 !! test Sectiion with all-equals !! options section=2 !! input === The line above must have a trailing space === But just in case it doesn't... !! result === But just in case it doesn't... !! 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 replacement test with initial whitespace (bug 13728) !! options replace=2,"xxx" !! input Preformatted initial line ==a== ===a=== !! result Preformatted initial line ==a== xxx !! 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 Section extraction,
     around bogus header (bug 10309)
    !! options
    noxml section=2
    !! input
    == Section One ==
    
    =======
    
    == Section Two == stuff !! result == Section Two == stuff !! end !! test Section replacement,
     around bogus header (bug 10309)
    !! options
    noxml replace=2,"xxx"
    !! input
    == Section One ==
    
    =======
    
    == Section Two == stuff !! result == Section One ==
    =======
    
    xxx !! end !! test Handling of in URLs !! input **irc:// a !! result !!end !! test 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 Gallery (with options) !! input File:Nonexistant.jpg|caption File:Nonexistant.jpg image:foobar.jpg|some '''caption''' [[Main Page]] image:foobar.jpg image:foobar.jpg|Blabla|alt=This is a foo-bar.|blabla. !! result !! end !! test Gallery with wikitext inside caption !! input File:foobar.jpg|[[File:foobar.jpg|20px|desc|alt=inneralt]]|alt=galleryalt File:foobar.jpg|{{Test|unamedParam|alt=param}}|alt=galleryalt !! result !! end !! test gallery (with showfilename option) !! input File:Nonexistant.jpg|caption File:Nonexistant.jpg image:foobar.jpg|some '''caption''' [[Main Page]] File:Foobar.jpg !! result !! end !! test Gallery (with namespace-less filenames) !! input File:Nonexistant.jpg Nonexistant.jpg image:foobar.jpg foobar.jpg !! result !! end !! test HTML Hex character encoding (spells the word "JavaScript") !! input JavaScript !! result

    JavaScript

    !! end !! test HTML Hex character encoding bogus encoding (bug 26437 regression check) !! input &#xsee;&#XSEE; !! result

    &#xsee;&#XSEE;

    !! end !! test HTML Hex character encoding mixed case !! input îî !! result

    îî

    !! 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 Bug 22905: followed by ISBN followed by !! input (fr) ISBN 2753300917 [http://www.example.com example.com] !! result

    (fr) ISBN 2753300917 example.com

    !! 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
    Foobar.jpg
    !!end !! test None-aligned image !! input [[Image:foobar.jpg|none]] !! result
    Foobar.jpg
    !!end !! test Width + Height sized image (using px) (height is ignored) !! input [[Image:foobar.jpg|640x480px]] !! result

    Foobar.jpg

    !!end !! test Width-sized image (using px, no following whitespace) !! input [[Image:foobar.jpg|640px]] !! result

    Foobar.jpg

    !!end !! test Width-sized image (using px, with following whitespace - test regression from r39467) !! input [[Image:foobar.jpg|640px ]] !! result

    Foobar.jpg

    !!end !! test Width-sized image (using px, with preceding whitespace - test regression from r39467) !! input [[Image:foobar.jpg| 640px]] !! result

    Foobar.jpg

    !!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 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
    !!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 subpage title=[[Subpage test/L1/L2/L3]] !! input [[../../|L1]]2 [[../../|L1]]l !! result

    L12

    L1l

    !! end !! test Parents of subpages, two levels up, without trailing slash or name. !! options subpage title=[[Subpage test/L1/L2/L3]] !! input [[../..]] !! result

    [[../..]]

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

    ///

    !! end !! test Definition list code coverage !! input ; title : def ; title : def ;title: def !! result
    title  
    def
    title 
    def
    title
    def
    !! end !! test 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 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 anchorencode !! input {{anchorencode:foo bar©#%n}} !! result

    foo_bar.C2.A9.23.25n

    !! end !! test anchorencode trims spaces !! input {{anchorencode: __pretty__please__}} !! result

    pretty_please

    !! end !! test anchorencode deals with links !! input {{anchorencode: [[hello|world]] [[hi]]}} !! result

    world_hi

    !! end !! test anchorencode deals with templates !! input {{anchorencode: {{Foo}} }} !! result

    FOO

    !! end !! test anchorencode encodes like the TOC generator: (bug 18431) !! input === _ +:.3A%3A&&]] === {{anchorencode: _ +:.3A%3A&&]] }} __NOEDITSECTION__ !! result

    _ +:.3A%3A&&]]

    .2B:.3A.253A.26.26.5D.5D

    !! end # Expected output in the following test is not necessarily expected (there # should probably be

    tags inside the

    in the output) -- it's # only testing for well-formedness. !! test Bug 6200: blockquotes and paragraph formatting !! input
    foo
    bar baz !! result
    foo

    bar

    baz
    
    !! 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 !! article Дуна !! text content !! endarticle !! test Link to another existing title shouldn't be parsed as self-link even if it's a variant of this title !! options title=[[Duna]] language=sr !! input [[Дуна]] is not a self-link while [[Duna]] and [[Dуна]] are still self-links. !! result

    Дуна is not a self-link while Duna and Dуна are still self-links.

    !! 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 !! article Category:分类 !! text blah !! endarticle !! article Category:分類 !! text blah !! endarticle !! test Don't convert blue categorylinks to another variant (bug 33210) !! options language=zh cat !! input [[A]][[Category:分类]] !! result 分类 !! 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 Conversion around HTML tags !! options language=sr variant=sr-ec !! input -{H|span=>sr-ec:script;title=>sr-ec:src;}- ski !! result

    ски

    !! end !! test Explicit session-wise language variant mapping (A flag and - flag) !! options language=zh variant=zh-tw !! input Taiwan is not China. But -{A|zh:China;zh-tw:Taiwan}- is China, (This-{-|zh:China;zh-tw:Taiwan}- should be stripped!) and -{China}- is China. !! result

    Taiwan is not China. But Taiwan is Taiwan, (This should be stripped!) and China is China.

    !! end !! test Explicit session-wise language variant mapping (H flag for hide) !! options language=zh variant=zh-tw !! input (This-{H|zh:China;zh-tw:Taiwan}- should be stripped!) Taiwan is China. !! result

    (This should be stripped!) Taiwan is Taiwan.

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

    Should be stripped!

    !! end !! test Testing that changing the language variant here in the tests actually works !! options language=zh variant=zh showtitle !! input Should be stripped-{T|zh:China;zh-tw:Taiwan}-! !! result China

    Should be stripped!

    !! end !! test Recursive conversion of alt and title attrs shouldn't clear converter state !! options language=zh variant=zh-cn showtitle !! input -{H|zh-cn:Exclamation;zh-tw:exclamation;}- Should be stripped-{T|zh-cn:China;zh-tw:Taiwan}-! !! result China

    Should be stripped!

    !! end !! test Bug 24072: more test on conversion rule for title !! options language=zh variant=zh-tw showtitle !! input This should be stripped-{T|zh:China;zh-tw:Taiwan}-! This won't take interferes with the title rule-{H|zh:Beijing;zh-tw:Taipei}-. !! result Taiwan

    This should be stripped! This won't take interferes with the title rule.

    !! 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 Nested using of manual convert syntax !! options language=zh variant=zh-hk !! input Nested: -{zh-hans:Hi -{zh-cn:China;zh-sg:Singapore;}-;zh-hant:Hello -{zh-tw:Taiwan;zh-hk:H-{ong}- K-{}-ong;}-;}-! !! result

    Nested: Hello Hong Kong!

    !! end !! test Proper conversion of text in external links !! options language=sr variant=sr-ec !! input http://www.google.com gopher://www.google.com [http://www.google.com http://www.google.com] [gopher://www.google.com gopher://www.google.com] [https://www.google.com irc://www.google.com] [ftp://www.google.com www.google.com/ftp://dir] [//www.google.com www.google.com] !! result

    http://www.google.com gopher://www.google.com http://www.google.com gopher://www.google.com irc://www.google.com www.гоогле.цом/фтп://дир www.гоогле.цом

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

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

    !! end !! test Unclosed language converter markup "-{" !! options language=sr !! input -{T|hello !! result

    -{T|hello

    !! end !! test Don't convert raw rule "-{R|=>}-" to "=>" !! options language=sr !! input -{R|=>}- !! result

    =>

    !!end !!article Template:Bullet !!text * Bar !!endarticle !! test Bug 529: Uncovered bullet !! input * Foo {{bullet}} !! result
    • Foo
    • Bar
    !! end # Plain MediaWiki does not remove empty lists, but tidy actually does. # Templates in Wikipedia rely on this behavior, as tidy has always been # enabled there. These tests are normally run *without* tidy, so specify the # full output here. # To test realistic parsing behavior, apply a tidy-like transformation to both # the expected output and your parser's output. !! test Bug 529: Uncovered bullet leaving empty list, normally removed by tidy !! input ******* Foo {{bullet}} !! result
                • Foo
    • Bar
    !! end !! test Bug 529: Uncovered table already at line-start !! input x {{table}} y !! result

    x

    1 2
    3 4

    y

    !! end !! test Bug 529: Uncovered bullet in parser function result !! input * Foo {{lc:{{bullet}} }} !! result
    • Foo
    • bar
    !! end !! test Bug 5678: Double-parsed template argument !! input {{lc:{{{1}}}|hello}} !! result

    {{{1}}}

    !! end !! test Bug 5678: Double-parsed template invocation !! input {{lc:{{paramtest {{!}} param = hello }} }} !! result

    {{paramtest | param = hello }}

    !! end !! test Case insensitivity of parser functions for non-ASCII characters (bug 8143) !! options language=cs title=[[Main Page]] !! input {{PRVNÍVELKÉ:ěščř}} {{prvnívelké:ěščř}} {{PRVNÍMALÉ:ěščř}} {{prvnímalé:ěščř}} {{MALÁ:ěščř}} {{malá:ěščř}} {{VELKÁ:ěščř}} {{velká:ěščř}} !! result

    Ěščř Ěščř ěščř ěščř ěščř ěščř ĚŠČŘ ĚŠČŘ

    !! end !! test Morwen/13: Unclosed link followed by heading !! input [[link ==heading== !! result

    [[link

    [edit] heading

    !! end !! test HHP2.1: Heuristics for headings in preprocessor parenthetical structures !! input {{foo| =heading= !! result

    {{foo|

    heading

    !! end !! test HHP2.2: Heuristics for headings in preprocessor parenthetical structures !! input {{foo| ==heading== !! result

    {{foo|

    [edit] heading

    !! end !! test Tildes in comments !! options pst !! input !! result !! end !! test Paragraphs inside divs (no extra line breaks) !! input
    Line one Line two
    !! result
    Line one Line two
    !! end !! test Paragraphs inside divs (extra line break on open) !! input
    Line one Line two
    !! result

    Line one

    Line two
    !! end !! test Paragraphs inside divs (extra line break on close) !! input
    Line one Line two
    !! result
    Line one

    Line two

    !! end !! test Paragraphs inside divs (extra line break on open and close) !! input
    Line one Line two
    !! result

    Line one

    Line two

    !! end !! test Nesting tags, paragraphs on lines which begin with
    !! options disabled !! input
    A B !! result

    A B

    !! end # Bug 6200:
    should behave like
    with respect to line breaks !! test Bug 6200: paragraphs inside blockquotes (no extra line breaks) !! options disabled !! input
    Line one Line two
    !! result
    Line one Line two
    !! end !! test Bug 6200: paragraphs inside blockquotes (extra line break on open) !! options disabled !! input
    Line one Line two
    !! result

    Line one

    Line two
    !! end !! test Bug 6200: paragraphs inside blockquotes (extra line break on close) !! options disabled !! input
    Line one Line two
    !! result
    Line one

    Line two

    !! end !! test Bug 6200: paragraphs inside blockquotes (extra line break on open and close) !! options disabled !! input
    Line one Line two
    !! result

    Line one

    Line two

    !! end !! test Paragraphs inside blockquotes/divs (no extra line breaks) !! input
    Line one Line two
    !! result
    Line one Line two
    !! end !! test Paragraphs inside blockquotes/divs (extra line break on open) !! input
    Line one Line two
    !! result

    Line one

    Line two
    !! end !! test Paragraphs inside blockquotes/divs (extra line break on close) !! input
    Line one Line two
    !! result
    Line one

    Line two

    !! end !! test Paragraphs inside blockquotes/divs (extra line break on open and close) !! input
    Line one Line two
    !! result

    Line one

    Line two

    !! end !! test Interwiki links trounced by replaceExternalLinks after early LinkHolderArray expansion !! options wgLinkHolderBatchSize=0 !! input [[meatball:1]] [[meatball:2]] [[meatball:3]] !! result

    meatball:1 meatball:2 meatball:3

    !! end !! test Free external link invading image caption !! input [[Image:Foobar.jpg|thumb|http://x|hello]] !! result
    hello
    !! end !! test Bug 15196: localised external link numbers !! options language=fa !! input [http://en.wikipedia.org/] !! result

    [۱]

    !! end !! test Multibyte character in padleft !! input {{padleft:-Hello|7|Æ}} !! result

    Æ-Hello

    !! end !! test Multibyte character in padright !! input {{padright:Hello-|7|Æ}} !! result

    Hello-Æ

    !! end !!test formatdate parser function !!input {{#formatdate:2009-03-24}} !! result

    2009-03-24

    !! end !!test formatdate parser function, with default format !!input {{#formatdate:2009-03-24|mdy}} !! result

    March 24, 2009

    !! end !! test Spacing of numbers in formatted dates !! input {{#formatdate:January 15}} !! result

    January 15

    !! end !! test formatdate parser function, with default format and on a page of which the content language is always English and different from the wiki content language !! options language=nl title=[[MediaWiki:Common.css]] !! input {{#formatdate:2009-03-24|dmy}} !! result

    24 March 2009

    !! end # # # # # Edit comments # !! test Edit comment with link !! options comment !! input I like the [[Main Page]] a lot !! result I like the Main Page a lot !!end !! test Edit comment with link and link text !! options comment !! input I like the [[Main Page|best pages]] a lot !! result I like the best pages a lot !!end !! test Edit comment with link and link text with suffix !! options comment !! input I like the [[Main Page|best page]]s a lot !! result I like the best pages a lot !!end !! test Edit comment with section link (non-local, eg in history list) !! options comment title=[[Main Page]] !! input /* External links */ removed bogus entries !! result External links: removed bogus entries !!end !! test Edit comment with section link and text before it (non-local, eg in history list) !! options comment title=[[Main Page]] !! input pre-comment text /* External links */ removed bogus entries !! result pre-comment text - External links: removed bogus entries !!end !! test Edit comment with section link (local, eg in diff view) !! options comment local title=[[Main Page]] !! input /* External links */ removed bogus entries !! result External links: removed bogus entries !!end !! test Edit comment with subpage link (bug 14080) !! options comment subpage title=[[Subpage test]] !! input Poked at a [[/subpage]] here... !! result Poked at a /subpage here... !!end !! test Edit comment with subpage link and link text (bug 14080) !! options comment subpage title=[[Subpage test]] !! input Poked at a [[/subpage|neat little page]] here... !! result Poked at a neat little page here... !!end !! test Edit comment with bogus subpage link in non-subpage NS (bug 14080) !! options comment title=[[Subpage test]] !! input Poked at a [[/subpage]] here... !! result Poked at a /subpage here... !!end !! test Edit comment with bare anchor link (local, as on diff) !! options comment local title=[[Main Page]] !!input [[#section]] !! result #section !! end !! test Edit comment with bare anchor link (non-local, as on history) !! options comment title=[[Main Page]] !!input [[#section]] !! result #section !! end !! test Anchor starting with underscore !!input [[#_ref|One]] !! result

    One

    !! end !! test Id starting with underscore !!input
    !! result
    !! end !! test Space normalisation on autocomment (bug 22784) !! options comment title=[[Main Page]] !!input /* __hello__world__ */ !! result __hello__world__ !! end !! test percent-encoding and + signs in comments (Bug 26410) !! options comment !!input [[ABC%33D% ++]] [[ABC%33D% ++|+%20]] !! result ABC3D% ++ +%20 !! end !! test Bad images - basic functionality !! options disabled !! input [[File:Bad.jpg]] !! result !! end !! test Bad images - bug 16039: text after bad image disappears !! options disabled !! input Foo bar [[File:Bad.jpg]] Bar foo !! result

    Foo bar

    Bar foo

    !! end !! test Verify that displaytitle works (bug #22501) no displaytitle !! options showtitle !! config wgAllowDisplayTitle=true wgRestrictDisplayTitle=false !! input this is not the the title !! result Parser test

    this is not the the title

    !! end !! test Verify that displaytitle works (bug #22501) RestrictDisplayTitle=false !! options showtitle title=[[Screen]] !! config wgAllowDisplayTitle=true wgRestrictDisplayTitle=false !! input this is not the the title {{DISPLAYTITLE:whatever}} !! result whatever

    this is not the the title

    !! end !! test Verify that displaytitle works (bug #22501) RestrictDisplayTitle=true mismatch !! options showtitle title=[[Screen]] !! config wgAllowDisplayTitle=true wgRestrictDisplayTitle=true !! input this is not the the title {{DISPLAYTITLE:whatever}} !! result Screen

    this is not the the title

    !! end !! test Verify that displaytitle works (bug #22501) RestrictDisplayTitle=true matching !! options showtitle title=[[Screen]] !! config wgAllowDisplayTitle=true wgRestrictDisplayTitle=true !! input this is not the the title {{DISPLAYTITLE:screen}} !! result screen

    this is not the the title

    !! end !! test Verify that displaytitle works (bug #22501) AllowDisplayTitle=false !! options showtitle title=[[Screen]] !! config wgAllowDisplayTitle=false !! input this is not the the title {{DISPLAYTITLE:screen}} !! result Screen

    this is not the the title Template:DISPLAYTITLE:screen

    !! end !! test Verify that displaytitle works (bug #22501) AllowDisplayTitle=false no DISPLAYTITLE !! options showtitle title=[[Screen]] !! config wgAllowDisplayTitle=false !! input this is not the the title !! result Screen

    this is not the the title

    !! end !! test preload: check and !! options preload !! input Hello cruelkind world. !! result Hello kind world. !! end !! test preload: check !! options preload !! input Goodbye Hello world !! result Hello world !! end !! test preload: can pass tags through if we want to !! options preload !! input <includeonly>Hello world</includeonly> !! result Hello world !! end !! test preload: check that it doesn't try to do tricks !! options preload !! input * ''{{world}}'' {{subst:How are you}}{{ {{{|safesubst:}}} #if:1|2|3}} !! result * ''{{world}}'' {{subst:How are you}}{{ {{{|safesubst:}}} #if:1|2|3}} !! end !! test Play a bit with r67090 and bug 3158 !! options disabled !! input
     
     
     
     
    !! result
     
     
     
     
    !! end !! test HTML5 data attributes !! input Baz

    Quuz

    !! result

    Baz

    Quuz

    !! end !! test percent-encoding and + signs in internal links (Bug 26410) !! input [[User:+%]] [[Page+title%]] [[%+]] [[%+|%20]] [[%+ ]] [[%+r]] [[%]] [[+]] [[image:%+abc%39|foo|[[bar]]]] [[%33%45]] [[%33%45+]] !! result

    User:+% Page+title% %+ %20 %+ %+r % + bar 3E 3E+

    !! end !! test Special characters in embedded file links (bug 27679) !! input [[File:Contains & ampersand.jpg]] [[File:Does not exist.jpg|Title with & ampersand]] !! result

    File:Contains & ampersand.jpg Title with & ampersand

    !! end !! test Confirm that 'apos' named character reference doesn't make it to output (not legal in HTML 4) !! input Text's been normalized? !! result

    Text's been normalized?

    !! end !! test Bug 19052 U+3000 IDEOGRAPHIC SPACE should terminate free external links !! input http://www.example.org/ <-- U+3000 (vim: ^Vu3000) !! result

    http://www.example.org/ <-- U+3000 (vim: ^Vu3000)

    !! end !! test Bug 19052 U+3000 IDEOGRAPHIC SPACE should terminate bracketed external links !! input [http://www.example.org/ ideograms] !! result

    ideograms

    !! end !! test Bug 19052 U+3000 IDEOGRAPHIC SPACE should terminate external images links !! input http://www.example.org/pic.png <-- U+3000 (vim: ^Vu3000) !! result

    pic.png <-- U+3000 (vim: ^Vu3000)

    !! end !! article Mediawiki:loop1 !! text {{Identical|A}} !! endarticle !! article Mediawiki:loop2 !! text {{Identical|B}} !! endarticle !! article Template:Identical !! text {{int:loop1}} {{int:loop2}} !! endarticle !! test Bug 31098 Template which includes system messages which includes the template !! input {{Identical}} !! result

    Template loop detected: Template:Identical Template loop detected: Template:Identical

    !! end !! test Bug31490 Turkish: ucfirst 'blah' !! options language=tr !! input {{ucfirst:blah}} !! result

    Blah

    !! end !! test Bug31490 Turkish: ucfirst 'ix' !! options language=tr !! input {{ucfirst:ix}} !! result

    İx

    !! end !! test Bug31490 Turkish: lcfirst 'BLAH' !! options language=tr !! input {{lcfirst:BLAH}} !! result

    bLAH

    !! end !! test Bug31490 Turkish: ucfırst (with a dotless i) !! options language=tr !! input {{ucfırst:blah}} !! result

    Şablon:Ucfırst:blah

    !! end !! test Bug31490 ucfırst (with a dotless i) with English language !! options language=en !! input {{ucfırst:blah}} !! result

    Template:Ucfırst:blah

    !! end !! test Bug 26375: TOC with italics !! options title=[[Main Page]] !! input __TOC__ == ''Lost'' episodes == !! result

    Contents

    [edit] Lost episodes

    !! end !! test Bug 26375: TOC with bold !! options title=[[Main Page]] !! input __TOC__ == '''should be bold''' then normal text == !! result

    Contents

    [edit] should be bold then normal text

    !! end !! test Bug 33845: Headings become cursive in TOC when they contain an image !! options title=[[Main Page]] !! input __TOC__ == Image [[Image:foobar.jpg]] == !! result

    Contents

    [edit] Image Foobar.jpg

    !! end !! test Bug 33845 (2): Headings become bold in TOC when they contain a blockquote !! options title=[[Main Page]] !! input __TOC__ ==
    Quote
    == !! result

    Contents

    [edit]
    Quote

    !! end !! test Unclosed tags in TOC !! options title=[[Main Page]] !! input __TOC__ == Proof: 2 < 3 == Hanc marginis exiguitas non caperet. QED !! result

    Contents

    [edit] Proof: 2 < 3

    Hanc marginis exiguitas non caperet. QED

    !! end !! test Multiple tags in TOC !! input __TOC__ == Foo Bar == == Foo
    Bar
    == !! result

    Contents

    [edit] Foo Bar

    [edit] Foo
    Bar

    !! end !! test Tags with parameters in TOC !! input __TOC__ == Hello == == Evilbye == !! result

    Contents

    [edit] Hello

    [edit] b">Evilbye

    !! end !! test span tags with directionality in TOC !! input __TOC__ == C++ == == זבנג! == == The attributes on these span tags must be deleted from the TOC == == All attributes on these span tags must be deleted from the TOC == == Attributes after dir on these span tags must be deleted from the TOC == !! result

    Contents

    [edit] C++

    [edit] זבנג!

    [edit] The attributes on these span tags must be deleted from the TOC

    [edit] All attributes on these span tags must be deleted from the TOC

    [edit] Attributes after dir on these span tags must be deleted from the TOC

    !! end !! article MediaWiki:Bug32057 !! text == {{int:headline_sample}} == !! endarticle !! test Bug 32057: Title needed when expanding nodes. !! options title=[[Main Page]] !! input {{int:Bug32057}} !! result

    [edit] Headline text

    !! end !! test Strip marker in urlencode !! input {{urlencode:xy}} {{urlencode:xy|wiki}} {{urlencode:xy|path}} !! result

    xy xy xy

    !! end !! test Strip marker in lc !! input {{lc:xy}} !! result

    xy

    !! end !! test Strip marker in uc !! input {{uc:xy}} !! result

    XY

    !! end !! test Strip marker in formatNum !! input {{formatnum:12}} {{formatnum:12|R}} !! result

    12 12

    !! end !! test Check noCommafy in formatNum !! options language=be-tarask !! input {{formatnum:123456.78}} {{formatnum:123456.78|NOSEP}} !! result

    123 456,78 123456.78

    !! end !! test Strip marker in grammar !! options language=fi !! input {{grammar:elative|foobar}} !! result

    foobarista

    !! end !! test Strip marker in padleft !! input {{padleft:|2|xy}} !! result

    xy

    !! end !! test Strip marker in padright !! input {{padright:|2|xy}} !! result

    xy

    !! end !! test Strip marker in anchorencode !! input {{anchorencode:xy}} !! result

    xy

    !! end !! test nowiki inside link inside heading (bug 18295) !! input ==[[foo|xyz]]== !! result

    [edit] xyz

    !! end !! test new support for bdi element (bug 31817) !! input

    ולדימיר לנין (ברוסית: Владимир Ленин, 24 באפריל 1870–22 בינואר 1924) הוא מנהיג פוליטי קומוניסטי רוסי.

    !! result

    ולדימיר לנין (ברוסית: Владимир Ленин, 24 באפריל 1870–22 בינואר 1924) הוא מנהיג פוליטי קומוניסטי רוסי.

    !!end !! test Ignore pipe between table row attributes !! input {| | quux |- id=foo | style='color: red' | bar |} !! result
    quux
    bar
    !! end !!test Gallery override link with WikiLink (bug 34852) !! input File:foobar.jpg|caption|alt=galleryalt|link=InterWikiLink !! result !! end !!test Gallery override link with absolute external link (bug 34852) !! input File:foobar.jpg|caption|alt=galleryalt|link=http://www.example.org !! result !! end !!test Gallery override link with malicious javascript (bug 34852) !! input File:foobar.jpg|caption|alt=galleryalt|link=" onclick="alert('malicious javascript code!'); !! result !! end !!test Gallery with invalid title as link (bug 43964) !! input File:foobar.jpg|link=< !! result !! end !!test Language parser function !! input {{#language:ar}} !! result

    العربية

    !! end !!test Padleft and padright as substr !! input {{padleft:|3|abcde}} {{padright:|3|abcde}} !! result

    abc abc

    !! end !!test Bug 34939 - Case insensitive link parsing ([HttP://]) !! input [HttP://MediaWiki.Org/] !! result

    [1]

    !! end !!test Bug 34939 - Case insensitive link parsing ([HttP:// title]) !! input [HttP://MediaWiki.Org/ MediaWiki] !! result

    MediaWiki

    !! end !!test Bug 34939 - Case insensitive link parsing (HttP://) !! input HttP://MediaWiki.Org/ !! result

    HttP://MediaWiki.Org/

    !! end ### ### Parsoids-specific tests ### Parsoid-PHP parser incompatibilities ### !!test 1. SOL-sensitive wikitext tokens as template-args !!options disabled !!input {{echo|*a}} {{echo|#a}} {{echo|:a}} !!result

    *a #a :a

    !!end #### The following section of tests are primarily to test #### wikitext escaping capabilities of Parsoid. #### A lot of the tests are disabled for the PHP parser either #### because of minor newline diffs or other reasons. #### As Parsoid serializer can handle newlines and other HTML #### more robustly, some of these tests might get reenabled #### for the PHP parser. #### --------------- Headings --------------- #### 0. Unnested #### 1. Nested inside html

    =foo=

    #### 2. Outside heading nest on a single line

    foo

    *bar #### 3. Nested inside html with wikitext split by html tags #### 4. No escape needed #### 5. Empty headings

    #### 6. Heading chars in SOL context #### ---------------------------------------- !! test Headings: 0. Unnested !! input =foo= =foo''a''= !! result

    =foo=

    =fooa=

    !!end !! test Headings: 1. Nested inside html !! options disabled !! input ==foo== ===foo=== ====foo==== =====foo===== ======foo====== =======foo======= !! result

    =foo=

    =foo=

    =foo=

    =foo=

    =foo=
    =foo=
    !!end !! test Headings: 2. Outside heading nest on a single line

    foo

    *bar !! options disabled !! input =foo= *bar =foo= =bar =foo= =bar= !! result

    foo

    *bar

    foo

    =bar

    foo

    =bar= !!end !! test Headings: 3. Nested inside html with wikitext split by html tags !! options disabled !! input =='''bold'''foo== !! result

    =boldfoo=

    !!end !! test Headings: 4. No escaping needed (testing just h1 and h2) !! options disabled !! input ==foo= =foo== ===foo== ==foo=== =''=''foo== === !! result

    =foo

    foo=

    =foo

    foo=

    =foo=

    =

    !!end !! test Headings: 5. Empty headings !! options disabled !! input == ==== ====== ======== ========== ============ !! result

    !!end !! test Headings: 6. Heading chars in SOL context !! options disabled !! input =h1= !! result

    =h1=

    !!end #### --------------- Lists --------------- #### 0. Outside nests (*foo, etc.) #### 1. Nested inside html
    • *foo
    #### 2. Inside definition lists #### 3. Only bullets at start should be escaped #### 4. No escapes needed #### 5. No unnecessary escapes #### 6. Escape bullets in SOL position #### 7. Escape bullets in a multi-line context #### ---------------------------------------- !! test Lists: 0. Outside nests !! input *foo #foo !! result

    *foo

    #foo

    !!end !! test Lists: 1. Nested inside html !! input **foo *#foo *:foo *;foo #*foo ##foo #:foo #;foo !! result
    • *foo
    • #foo
    • :foo
    • ;foo
    1. *foo
    1. #foo
    1. :foo
    1. ;foo
    !!end !! test Lists: 2. Inside definition lists !! input ;;foo ;:foo ;:foo :bar ::foo !! result
    ;foo
    :foo
    :foo
    bar
    :foo
    !!end !! test Lists: 3. Only bullets at start of text should be escaped !! input **foo*bar **foo''it''*bar !! result
    • *foo*bar
    • *fooit*bar
    !!end !! test Lists: 4. No escapes needed !! options disabled !! input *foo*bar *''foo''*bar *[[Foo]]: bar !! result
    • foo*bar
    • foo*bar
    !!end !! test Lists: 5. No unnecessary escapes !! input * bar [[foo]] *=bar [[foo]] *[[bar [[foo]] *]]bar [[foo]] *=bar foo]]= !! result
    • bar [[foo]]
    • =bar [[foo]]
    • [[bar [[foo]]
    • ]]bar [[foo]]
    • =bar foo]]=
    !!end !! test Lists: 6. Escape bullets in SOL position !! options disabled !! input *foo !! result

    *foo

    !!end !! test Lists: 7. Escape bullets in a multi-line context !! input a *b !! result

    a *b

    !!end #### --------------- HRs --------------- #### 1. Single line #### ----------------------------------- !! test HRs: 1. Single line !! options disabled !! input ---- ---- ---- =foo= ---- *foo !! result
    ----
    =foo=
    *foo !! end #### --------------- Tables --------------- #### 1a. Simple example #### 1b. No escaping needed (!foo) #### 1c. No escaping needed (|foo) #### 1d. No escaping needed (|}foo) #### #### 2a. Nested in td (foo|bar) #### 2b. Nested in td (foo||bar) #### 2c. Nested in td -- no escaping needed(foo!!bar) #### #### 3a. Nested in th (foo!bar) #### 3b. Nested in th (foo!!bar) #### 3c. Nested in th -- no escaping needed(foo||bar) #### #### 4a. Escape - #### 4b. Escape + #### 4c. No escaping needed #### -------------------------------------- !! test Tables: 1a. Simple example !! input {| |} !! result

    {| |}

    !! end !! test Tables: 1b. No escaping needed !! input !foo !! result

    !foo

    !! end !! test Tables: 1c. No escaping needed !! input |foo !! result

    |foo

    !! end !! test Tables: 1d. No escaping needed !! input |}foo !! result

    |}foo

    !! end !! test Tables: 2a. Nested in td !! options disabled !! input {| |foo|bar |} !! result
    foo|bar
    !! end !! test Tables: 2b. Nested in td !! options disabled !! input {| |foo||bar |''it''foo||bar |} !! result
    foo||bar itfoo||bar
    !! end !! test Tables: 2c. Nested in td -- no escaping needed !! options disabled !! input {| |foo!!bar |} !! result
    foo!!bar
    !! end !! test Tables: 3a. Nested in th !! options disabled !! input {| !foo!bar |} !! result
    foo!bar
    !! end !! test Tables: 3b. Nested in th !! options disabled !! input {| !foo!!bar |} !! result
    foo!!bar
    !! end !! test Tables: 3c. Nested in th -- no escaping needed !! options disabled !! input {| !foo||bar |} !! result
    foo||bar
    !! end !! test Tables: 4a. Escape - !! options disabled !! input {| |- !-bar |- |-bar |} !! result
    -bar
    -bar
    !! end !! test Tables: 4b. Escape + !! options disabled !! input {| |- !+bar |- |+bar |} !! result
    +bar
    +bar
    !! end !! test Tables: 4c. No escaping needed !! options disabled !! input {| |- |foo-bar |foo+bar |- |''foo''-bar |''foo''+bar |} !! result
    foo-barfoo+bar
    foo-barfoo+bar
    !! end !! test Tables: 4d. No escaping needed !! input {| ||+1 ||-2 |} !! result
    +1 -2
    !! end #### --------------- Links --------------- #### 1. Quote marks in link text #### 2. Wikilinks: Escapes needed #### 3. Wikilinks: No escapes needed #### 4. Extlinks: Escapes needed #### 5. Extlinks: No escapes needed #### -------------------------------------- !! test Links 1. Quote marks in link text !! options disabled !! input [[Foo|Foo''boo'']] !! result Foo''boo'' !! end !! test Links 2. WikiLinks: Escapes needed !! options disabled !! input [[Foo|[Foobar]]] [[Foo|Foobar]]] [[Foo|x [Foobar] x]] [[Foo|x [http://google.com g] x]] [[Foo|[[Bar]]]] [[Foo|x [[Bar]] x]] [[Foo||Bar]] !! result [Foobar] Foobar] x [Foobar] x x [http://google.com g] x [[Bar]] x [[Bar]] x |Bar !! end !! test Links 3. WikiLinks: No escapes needed !! options disabled !! input [[Foo|[Foobar]] [[Foo|foo|bar]] !! result [Foobar foo|bar !! end !! test Links 4. ExtLinks: Escapes needed !! options disabled !! input [http://google.com [google]] [http://google.com google]] !! result [google] google] !! end !! test Links 5. ExtLinks: No escapes needed !! options disabled !! input [http://google.com [google] !! result [google !! end #### --------------- Quotes --------------- #### 1. Quotes inside and #### 2. Link fragments separated by and tags #### 3. Link fragments inside and #### -------------------------------------- !! test 1. Quotes inside and !! input '''foo''' ''''foo'''' '''''foo''''' ''''foo'''' '''''foo''''' ''''''foo'''''' '''foo'''bar'''baz''' !! result

    'foo' ''foo'' '''foo''' 'foo' ''foo'' '''foo''' foo'bar'baz

    !! end !! test 2. Link fragments separated by and tags !! input [[''foo''hello]] [['''foo'''hello]] !! result

    [[foohello]]

    [[foohello]]

    !! end !! test 2. Link fragments inside and (FIXME: Escaping one or both of [[ and ]] is also acceptable -- this is one of the shortcomings of this format) !! input ''[[foo'']] '''[[foo''']] !! result

    [[foo]]

    [[foo]]

    !! end #### --------------- Paragraphs --------------- #### 1. No unnecessary escapes #### -------------------------------------- !! test 1. No unnecessary escapes !! input bar [[foo]] =bar [[foo]] [[bar [[foo]] ]]bar [[foo]] =bar foo]]= !! result

    bar [[foo]]

    =bar [[foo]]

    [[bar [[foo]]

    ]]bar [[foo]]

    =bar foo]]=

    !!end #### --------------- PRE ------------------ #### 1. Leading space in SOL context should be escaped #### -------------------------------------- !! test 1. Leading space in SOL context should be escaped !! options disabled !! input foo foo !! result

    foo foo

    !! end #### --------------- HTML tags --------------- #### 1. a tags #### 2. other tags #### 3. multi-line html tag #### -------------------------------------- !! test 1. a tags !! options disabled !! input google !! result <a href="http://google.com">google</a> !! end !! test 2. other tags !! input
    foo
    foo
    !! result

    <div>foo</div> <div style="color:red">foo</div>

    !! end !! test 3. multi-line html tag !! input
    foo
    !! result

    <div >foo</div >

    !! end #### --------------- Others --------------- !! test Escaping nowikis !! input <nowiki>foo</nowiki> !! result

    <nowiki>foo</nowiki>

    !! end !! test Tag-like HTML structures are passed through as text !! input 1>2 xb 1f !! result

    <x y>

    <x.y>

    <x-y>

    1>2

    x<y

    a>b

    1<d e>f

    !! end # This fails in the PHP parser (see bug 40670, # https://bugzilla.wikimedia.org/show_bug.cgi?id=40670), so disabled for it. !! test Tag names followed by punctuation should not be recognized as tags !! options disabled !! input text !! result

    <s.ome> text

    !! end !! test HTML tag with necessary entities in attributes !! input foo !! result

    foo

    !! end !! test HTML tag with 'unnecessary' entity encoding in attributes !! input foo !! result

    foo

    !! end !! test HTML tag with broken attribute value quoting !! input Foo !! result

    Foo

    !! end !! test Table with broken attribute value quoting !! input {| | title="Hello world|Foo |} !! result
    Foo
    !! end !! test Table with broken attribute value quoting on consecutive lines !! input {| | title="Hello world|Foo | style="color:red|Bar |} !! result
    Foo Bar
    !! end !! test Parsoid-only: Table with broken attribute value quoting on consecutive lines !! options parsoid !! input {| | title="Hello world|Foo | style="color:red|Bar |} !! result
    Foo Bar
    !! end !!test Accept empty td cell attribute !!input {| | align="center" | foo || | |} !!result
    foo
    !!end !!test Non-empty attributes in th-cells !!input {| ! Foo !! style="color: red" | Bar |} !!result
    Foo Bar
    !!end !!test Accept empty attributes in th-cells !!input {| !| foo !!| bar |} !!result
    foo bar
    !!end !!test Empty table rows go away !!input {| | Hello | there |- class="foo" |- |} !! result
    Hello there
    !! end TODO: more images more tables character entities and much more Try for 100% code coverage