# 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
#
# You can also set the following parser properties via test options:
#  wgEnableUploads, wgAllowExternalImages, wgMaxTocLevel,
#  wgLinkHolderBatchSize, wgRawHtml
#
# 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
<span>{{{1}}}</span>
!! endarticle

!! article
Template:echo_with_div
!! text
<div>{{{1}}}</div>
!! endarticle

!! article
Template:attr_str
!! text
{{{1}}}="{{{2}}}"
!! endarticle

!! article
Template:table_attribs
!! text
<noinclude>
|</noinclude>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
<p>This is a simple paragraph.
</p>
!! end

!! test
Paragraphs with extra newline spacing
!! input
foo

bar


baz



booz
!! result
<p>foo
</p><p>bar
</p><p><br />
baz
</p><p><br />
</p><p>booz
</p>
!! end

!! test
Paragraphs with newline spacing with comment lines in between
!! input
----
a
<!--foo-->
b
----
a
<!--foo--><!--More than 1 comment disables stripping of this line!-->
b
----
a
<!--foo-->

b
----
a

<!--foo-->
b
----
a
<!--foo-->


b
----
a


<!--foo-->
b
----
!! result
<hr />
<p>a
b
</p>
<hr />
<p>a
</p><p>b
</p>
<hr />
<p>a
</p><p>b
</p>
<hr />
<p>a
</p><p>b
</p>
<hr />
<p>a
</p><p><br />
b
</p>
<hr />
<p>a
</p><p><br />
b
</p>
<hr />

!! end

!! test
Paragraphs with newline spacing with non-empty white-space lines in between
!! input
----
a
 
b
----
a
 
 
b
----
!! result
<hr />
<p>a
</p><p>b
</p>
<hr />
<p>a
</p><p><br /> 
b
</p>
<hr />

!! end

!! test
Paragraphs with newline spacing with non-empty mixed comment and white-space lines in between
!! input
----
a
 <!--foo-->
b
----
a
 <!--foo--><!--More than 1 comment disables stripping of this line!-->
b
----
a
 
<!--foo-->
 <!--bar-->
b
----
a
 
 <!--foo-->
 <!--bar-->
 
b
----
!! result
<hr />
<p>a
b
</p>
<hr />
<p>a
</p><p>b
</p>
<hr />
<p>a
</p><p>b
</p>
<hr />
<p>a
</p><p><br /> 
b
</p>
<hr />

!! end

!! test
Extra newlines: More paragraphs with indented comment
!! input
a

   <!--boo-->

b
!!result
<p>a
</p><p><br />
b
</p>
!!end

!! test
Extra newlines followed by heading
!! input
a



=b=
[[a]]


=b=
!! result
<p>a
</p><p><br />
</p>
<h1><span class="mw-headline" id="b">b</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=1" title="Edit section: b">edit</a><span class="mw-editsection-bracket">]</span></span></h1>
<p><a href="/index.php?title=A&amp;action=edit&amp;redlink=1" class="new" title="A (page does not exist)">a</a>
</p><p><br />
</p>
<h1><span class="mw-headline" id="b_2">b</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=2" title="Edit section: b">edit</a><span class="mw-editsection-bracket">]</span></span></h1>

!! end

!! test
Extra newlines between heading and content are swallowed
!! input
=b=



[[a]]
!! result
<h1><span class="mw-headline" id="b">b</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=1" title="Edit section: b">edit</a><span class="mw-editsection-bracket">]</span></span></h1>
<p><a href="/index.php?title=A&amp;action=edit&amp;redlink=1" class="new" title="A (page does not exist)">a</a>
</p>
!! end

!! test
Parsing an URL
!! input
http://fr.wikipedia.org/wiki/🍺
<!-- EasterEgg we love beer, better be able be able to link to it -->
!! result
<p><a rel="nofollow" class="external free" href="http://fr.wikipedia.org/wiki/🍺">http://fr.wikipedia.org/wiki/🍺</a>
</p>
!! end

!! test
Simple list
!! input
* Item 1
* Item 2
!! result
<ul><li> Item 1
</li><li> Item 2
</li></ul>

!! 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
<ul><li> plain
</li><li> plain<i>italic</i>plain
</li><li> plain<i>italic</i>plain<i>italic</i>plain
</li><li> plain<b>bold</b>plain
</li><li> plain<b>bold</b>plain<b>bold</b>plain
</li><li> plain<i>italic</i>plain<b>bold</b>plain
</li><li> plain<b>bold</b>plain<i>italic</i>plain
</li><li> plain<i>italic<b>bold-italic</b>italic</i>plain
</li><li> plain<b>bold<i>bold-italic</i>bold</b>plain
</li><li> plain<i><b>bold-italic</b>italic</i>plain
</li><li> plain<b><i>bold-italic</i>bold</b>plain
</li><li> plain<i>italic<b>bold-italic</b></i>plain
</li><li> plain<b>bold<i>bold-italic</i></b>plain
</li><li> plain l'<i>italic</i>plain
</li><li> plain l'<b>bold</b> plain
</li></ul>

!! end

# this example taken from the simple/Moon article
!! test
Italics and possessives
!! input
obtained by ''[[Lunar Prospector]]'''s gamma-ray spectrometer
!! result
<p>obtained by <i><a href="/index.php?title=Lunar_Prospector&amp;action=edit&amp;redlink=1" class="new" title="Lunar Prospector (page does not exist)">Lunar Prospector</a>'</i>s gamma-ray spectrometer
</p>
!! end

###
### 2-quote opening sequence tests
###
!! test
Italics and bold: 2-quote opening sequence: (2,2)
!! input
''foo''
!! result
<p><i>foo</i>
</p>
!!end


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


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


!! test
Italics and bold: 2-quote opening sequence: (2,5) (php)
!! options
php
!! input
''foo'''''
!! result
<p><i>foo</i>
</p>
!!end
# The PHP parser strips the empty tags out for giggles; parsoid doesn't.
!! test
Italics and bold: 2-quote opening sequence: (2,5) (parsoid)
!! options
parsoid
!! input
''foo'''''
!! result
<p><i>foo</i><b></b>
</p>
!!end


###
### 3-quote opening sequence tests
###

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


!! test
Italics and bold: 3-quote opening sequence: (3,3)
!! input
'''foo'''
!! result
<p><b>foo</b>
</p>
!!end


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


!! test
Italics and bold: 3-quote opening sequence: (3,5) (php)
!! options
php
!! input
'''foo'''''
!! result
<p><b>foo</b>
</p>
!!end
# The PHP parser strips the empty tags out for giggles; parsoid doesn't.
!! test
Italics and bold: 3-quote opening sequence: (3,5) (parsoid)
!! options
parsoid
!! input
'''foo'''''
!! result
<p><b>foo<i></i></b>
</p>
!!end


###
### 4-quote opening sequence tests
###

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


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


!! test
Italics and bold: 4-quote opening sequence: (4,4)
!! input
''''foo''''
!! result
<p>'<b>foo'</b>
</p>
!!end


!! test
Italics and bold: 4-quote opening sequence: (4,5) (php)
!! options
php
!! input
''''foo'''''
!! result
<p>'<b>foo</b>
</p>
!!end
# The PHP parser strips the empty tags out for giggles; parsoid doesn't.
!! test
Italics and bold: 4-quote opening sequence: (4,5) (parsoid)
!! options
parsoid
!! input
''''foo'''''
!! result
<p>'<b>foo<i></i></b>
</p>
!!end


###
### 5-quote opening sequence tests
###

!! test
Italics and bold: 5-quote opening sequence: (5,2) (php)
!! options
php
!! input
'''''foo''
!! result
<p><b><i>foo</i></b>
</p>
!!end
# Parsoid reverses the nesting order, compared to the PHP parser
!! test
Italics and bold: 5-quote opening sequence: (5,2) (parsoid)
!! options
parsoid
!! input
'''''foo''
!! result
<p><i><b>foo</b></i>
</p>
!!end


!! test
Italics and bold: 5-quote opening sequence: (5,3)
!! input
'''''foo'''
!! result
<p><i><b>foo</b></i>
</p>
!!end


!! test
Italics and bold: 5-quote opening sequence: (5,4)
!! input
'''''foo''''
!! result
<p><i><b>foo'</b></i>
</p>
!!end


!! test
Italics and bold: 5-quote opening sequence: (5,5)
!! input
'''''foo'''''
!! result
<p><i><b>foo</b></i>
</p>
!!end

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


!! test
Italics and bold: multiple quote sequences: (2,4,3)
!! input
''foo''''bar'''
!! result
<p><i>foo'<b>bar</b></i>
</p>
!!end


!! test
Italics and bold: multiple quote sequences: (2,4,4)
!! input
''foo''''bar''''
!! result
<p><i>foo'<b>bar'</b></i>
</p>
!!end


!! test
Italics and bold: multiple quote sequences: (3,4,2) (php)
!! options
php
!! input
'''foo''''bar''
!! result
<p><b>foo'</b>bar
</p>
!!end
# The PHP parser strips the empty tags out for giggles; parsoid doesn't.
!! test
Italics and bold: multiple quote sequences: (3,4,2) (parsoid)
!! options
parsoid
!! input
'''foo''''bar''
!! result
<p><b>foo'</b>bar<i></i>
</p>
!!end


!! test
Italics and bold: multiple quote sequences: (3,4,3) (php)
!! options
php
!! input
'''foo''''bar'''
!! result
<p><b>foo'</b>bar
</p>
!!end
# The PHP parser strips the empty tags out for giggles; parsoid doesn't.
!! test
Italics and bold: multiple quote sequences: (3,4,3) (parsoid)
!! options
parsoid
!! input
'''foo''''bar'''
!! result
<p><b>foo'</b>bar<b></b>
</p>
!!end

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


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


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


# The Parsoid team believes the PHP parser's output on this test is wrong.
# It only checks for convert-to-bold-on-single-character-word when the word
# matches with a bold tag ("'''") that is *odd* in the list of quote tokens.
# This means that the bold token in position 2 (0-indexed) gets converted by
# parsoid, but doesn't get changed by the PHP parser.
!! test
Italics and bold: other quote tests: (3,2,3,3) (php)
!! options
php
!! input
'''this is about ''foo'''s family'''
!! result
<p>'<i>this is about </i>foo<b>s family</b>
</p>
!!end
# This is the output the Parsoid team believes to be correct.
!! test
Italics and bold: other quote tests: (3,2,3,3) (parsoid)
!! options
parsoid
!! input
'''this is about ''foo'''s family'''
!! result
<p><b>this is about <i>foo'</i>s family</b>
</p>
!!end


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


!! test
Italicized possessive
!! input
The ''[[Main Page]]'''s talk page.
!! result
<p>The <i><a href="/wiki/Main_Page" title="Main Page">Main Page</a>'</i>s talk page.
</p>
!! end

!! test
Parsoid only: Quote balancing context should be restricted to td/th cells on the same wikitext line
(Requires tidy for PHP parser output to be fixed up)
!! options
parsoid=wt2html,wt2wt
!! input
{|
!''a!!''b
|''a||''b
|}
!! result
<table>
<tbody><tr><th><i>a</i></th><th><i>b</i></th>
<td><i>a</i></td><td><i>b</i></td></tr>
</tbody></table>
!! end

###
### Non-html5 tags
###

!! test
Non-html5 tags should be accepted
!! input
<center>''foo''</center>
<big>''foo''</big>
<font>''foo''</font>
<strike>''foo''</strike>
<tt>''foo''</tt>
!! result
<center><i>foo</i></center>
<p><big><i>foo</i></big>
<font><i>foo</i></font>
<strike><i>foo</i></strike>
<tt><i>foo</i></tt>
</p>
!! end

###
### <nowiki> test cases
###

!! test
<nowiki> unordered list
!! input
<nowiki>* This is not an unordered list item.</nowiki>
!! result
<p>* This is not an unordered list item.
</p>
!! end

!! test
<nowiki> spacing
!! input
<nowiki>Lorem ipsum dolor

sed abit.
  sed nullum.

:and a colon
</nowiki>
!! result
<p>Lorem ipsum dolor

sed abit.
  sed nullum.

:and a colon

</p>
!! end

!! test
nowiki 3
!! input
:There is not nowiki.
:There is <nowiki>nowiki</nowiki>.

#There is not nowiki.
#There is <nowiki>nowiki</nowiki>.

*There is not nowiki.
*There is <nowiki>nowiki</nowiki>.
!! result
<dl><dd>There is not nowiki.
</dd><dd>There is nowiki.
</dd></dl>
<ol><li>There is not nowiki.
</li><li>There is nowiki.
</li></ol>
<ul><li>There is not nowiki.
</li><li>There is nowiki.
</li></ul>

!! end

!! test
Entities inside <nowiki>
!! input
<nowiki>&lt;</nowiki>
!! result
<p>&lt;
</p>
!! end

!! test
Entities inside template parameters
!! options
parsoid
!! input
{{echo|&ndash;}}
!! result
<p><span typeof="mw:Transclusion mw:Entity" data-mw='{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"&amp;ndash;"}},"i":0}'>&ndash;</span>
</p>
!! end

###
### Comments
###
!! test
Comments and Indent-Pre
!! input
<!-- comment 1 --> asdf

<!-- comment 1 --> asdf
<!-- comment 2 -->

<!-- comment 1 --> asdf
<!-- comment 2 -->xyz

<!-- comment 1 --> asdf
<!-- comment 2 --> xyz
!! result
<pre>asdf
</pre>
<pre>asdf
</pre>
<pre>asdf
</pre>
<p>xyz
</p>
<pre>asdf
xyz
</pre>
!! end

!! test
Comment test 2a
!! input
asdf
<!-- comment 1 -->
jkl
!! result
<p>asdf
jkl
</p>
!! end

!! test
Comment test 2b
!! input
asdf
<!-- comment 1 -->

jkl
!! result
<p>asdf
</p><p>jkl
</p>
!! end

!! test
Comment test 3
!! input
asdf
<!-- comment 1 -->
<!-- comment 2 -->
jkl
!! result
<p>asdf
jkl
</p>
!! end

!! test
Comment test 4
!! input
asdf<!-- comment 1 -->jkl
!! result
<p>asdfjkl
</p>
!! end

!! test
Comment spacing
!! input
a
 <!-- foo --> b <!-- bar -->
c
!! result
<p>a
</p>
<pre> b 
</pre>
<p>c
</p>
!! end

!! test
Comment whitespace
!! input
<!-- returns a single newline, not nothing, since the newline after > is not stripped -->
!! result

!! end

!! test
Comment semantics and delimiters
!! input
<!-- --><!----><!-----><!------>
!! result

!! end

!! test
Comment semantics and delimiters, redux
!! input
<!-- In SGML every "foo" here would actually show up in the text -- foo -- bar
-- foo -- funky huh? ... -->
!! result

!! end

!! test
Comment semantics and delimiters: directors cut
!! input
<!-- ... However we like to keep things simple and somewhat XML-ish so we eat
everything starting with < followed by !-- until the first -- and > we see,
that wouldn't be valid XML however, since in XML -- has to terminate a comment
-->-->
!! result
<p>--&gt;
</p>
!! end

!! test
Comment semantics: nesting
!! input
<!--<!-- no, we're not going to do anything fancy here -->-->
!! result
<p>--&gt;
</p>
!! end

!! test
Comment semantics: unclosed comment at end
!! input
<!--This comment will run out to the end of the document
!! result

!! end

!! test
Comment in template title
!! input
{{f<!---->oo}}
!! result
<p>FOO
</p>
!! end

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

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

###
### paragraph wrapping tests
###
!! test
No block tags
!! input
a

b
!! result
<p>a
</p><p>b
</p>
!! end
!! test
Block tag on one line
!! input
a <div>foo</div>

b
!! result
a <div>foo</div>
<p>b
</p>
!! end

!! test
Block tag on both lines
!! input
a <div>foo</div>

b <div>foo</div>
!! result
a <div>foo</div>
b <div>foo</div>

!! end

!! test
Multiple lines without block tags
!! input
<div>foo</div> a
b
c
d<!--foo--> e
x <div>foo</div> z
!! result
<div>foo</div> a
<p>b
c
d e
</p>
x <div>foo</div> z

!! end

!! test
Empty lines between lines with block tags
!! input
<div></div>


<div></div>a

b
<div>a</div>b

<div>b</div>d


<div>e</div>
!! result
<div></div>
<p><br />
</p>
<div></div>a
<p>b
</p>
<div>a</div>b
<div>b</div>d
<p><br />
</p>
<div>e</div>

!! end

###
### Preformatted text
###
!! test
Preformatted text
!! input
 This is some
 Preformatted text
 With ''italic''
 And '''bold'''
 And a [[Main Page|link]]
!! result
<pre>This is some
Preformatted text
With <i>italic</i>
And <b>bold</b>
And a <a href="/wiki/Main_Page" title="Main Page">link</a>
</pre>
!! end

!! test
Ident preformatting with inline content
!! input
 a
 ''b''
!! result
<pre>a
<i>b</i>
</pre>
!! end

!! test
<pre> with <nowiki> inside (compatibility with 1.6 and earlier)
!! input
<pre><nowiki>
<b>
<cite>
<em>
</nowiki></pre>
!! result
<pre>
&lt;b&gt;
&lt;cite&gt;
&lt;em&gt;
</pre>

!! end

!! test
Regression with preformatted in <center>
!! input
<center>
 Blah
</center>
!! result
<center>
<pre>Blah
</pre>
</center>

!! end

# Expected output in the following test is not really expected (there should be
# <pre> in the output) -- it's only testing for well-formedness.
!! test
Bug 6200: Preformatted in <blockquote>
!! input
<blockquote>
 Blah
</blockquote>
!! result
<blockquote>
 Blah
</blockquote>

!! end

!! test
<pre> with attributes (bug 3202)
!! input
<pre style="background: blue; color:white">Bluescreen of WikiDeath</pre>
!! result
<pre style="background: blue; color:white">Bluescreen of WikiDeath</pre>

!! end

!! test
<pre> with width attribute (bug 3202)
!! input
<pre width="8">Narrow screen goodies</pre>
!! result
<pre width="8">Narrow screen goodies</pre>

!! end

!! test
<pre> with forbidden attribute (bug 3202)
!! input
<pre width="8" onmouseover="alert(document.cookie)">Narrow screen goodies</pre>
!! result
<pre width="8">Narrow screen goodies</pre>

!! end

!! test
Entities inside <pre>
!! input
<pre>&lt;</pre>
!! result
<pre>&lt;</pre>

!! end

!! test
<pre> with forbidden attribute values (bug 3202)
!! input
<pre width="8" style="border-width: expression(alert(document.cookie))">Narrow screen goodies</pre>
!! result
<pre width="8" style="/* insecure input */">Narrow screen goodies</pre>

!! end

!! test
<nowiki> inside <pre> (bug 13238)
!! input
<pre>
<nowiki>
</pre>
<pre>
<nowiki></nowiki>
</pre>
<pre><nowiki><nowiki></nowiki>Foo<nowiki></nowiki></nowiki></pre>
!! result
<pre>
&lt;nowiki&gt;
</pre>
<pre>

</pre>
<pre>&lt;nowiki&gt;Foo&lt;/nowiki&gt;</pre>

!! end

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

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

!! result
<pre>
&lt;nowiki&gt;
</pre>
<p>&lt;/nowiki&gt;
&lt;/pre&gt;
</p><p>
&lt;pre&gt;
&lt;nowiki&gt;
&lt;/pre&gt;

&lt;/pre&gt;
</p>
!! end

!! test
</pre> inside nowiki
!! input
<nowiki></pre></nowiki>
!! result
<p>&lt;/pre&gt;
</p>
!! end

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

!!end

!!test
Templates: Indent-Pre: 1b. Templates that break a line should suppress <pre>
!!input
 {{echo|
foo}}
!!result
<p>foo
</p>
!!end

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

!! test
Templates: Indent-Pre: 1d: Wrapping should be based on expanded content
!! input
 {{echo|a
b
c
 d
e
}}
!!result
<pre>a
</pre>
<p>b
c
</p>
<pre>d
</pre>
<p>e
</p>
!!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|<!--cmt--> foo}}

<!--cmt-->{{echo| foo}}

{{echo|{{echo| }}bar}}
!!result
<pre>foo
</pre>
<pre>foo bar
</pre>
<pre>foo
bar
</pre>
<pre>foo
</pre>
<pre>foo
</pre>
<pre>bar
</pre>
!!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
<pre>a
</pre>
<p><br />
</p>
<pre>a
</pre>
<p><br />
</p>
<pre>b
</pre>
<p>a
</p>
<pre>b
</pre>
<p>a
</p>
<pre>b
</pre>
!!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
<pre>a
</pre>
<p>a
</p>
<pre>a
</pre>
<p>a
</p>
!! end

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

{{echo|
* foo}}

{{echo| 1 =
 foo}}

{{echo| 1 =
* foo}}
!! result
<pre>foo
</pre>
<p><br />
</p>
<ul><li> foo
</li></ul>
<p>foo
</p>
<ul><li> foo
</li></ul>

!! end

!! test
Templates: Dont strip whitespace from whitespace/comment-only arguments
!! input
{{echo| }}
{{echo|<!--cmt-->}}
{{echo| <!--cmt--> }}
!! result
<p><br />
</p>
!! end

!! test
Templates: Parsoid parameter escaping test 1
!! options
parsoid
!! input
{{echo|[foo]|{{echo|[bar]}}}}
!! result
<p about="#mwt1" typeof="mw:Transclusion"
data-mw="{&quot;target&quot;:{&quot;wt&quot;:&quot;echo&quot;,&quot;href&quot;:&quot;./Template:Echo&quot;},&quot;params&quot;:{&quot;1&quot;:{&quot;wt&quot;:&quot;[foo]&quot;},&quot;2&quot;:{&quot;wt&quot;:&quot;{{echo|[bar]}}&quot;}},&quot;i&quot;:0}">[foo]</p>
!! end

!! test
Parsoid: Pipes in external links in template parameter
!! options
parsoid
!! input
{{echo|[{{echo|http://example.com}} link]}}
!! result
<p><a rel="mw:ExtLink" href="http://example.com" about="#mwt31" typeof="mw:Transclusion" data-mw="{&quot;target&quot;:{&quot;wt&quot;:&quot;echo&quot;,&quot;href&quot;:&quot;./Template:Echo&quot;},&quot;params&quot;:{&quot;1&quot;:{&quot;wt&quot;:&quot;[{{echo|http://example.com}} link]&quot;}},&quot;i&quot;:0}">link</a></p>
!! end

!! test
Parsoid: pipe in transclusion parameter
!! options
parsoid
!! input
{{echo|http://foo.com/a&#124;b}}
!! result
<p><a rel="mw:ExtLink" href="http://foo.com/a|b" about="#mwt1"
typeof="mw:Transclusion"
data-mw='{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"http://foo.com/a|b"}},"i":0}'>http://foo.com/a|b</a></p>
!! end

!! test
Parsoid: Pipe in external link target and content in template parameter
!! options
parsoid=html2wt,wt2wt
!! input
{{echo|[http://foo.com/a&#124;b a&#124;b]}}
!! result
<p><a rel="mw:ExtLink" href="http://foo.com/a|b" about="#mwt1"
typeof="mw:Transclusion"
data-mw='{"target":{"wt":"echo","href":"./Template:Echo"},
"params":{"1":{"wt":"[http://foo.com/a|b a|b]"}},"i":0}'>a|b</a></p>
!! end

!! test
Templates: Dont escape already nowiki-escaped text in template parameters
!! options
parsoid=html2wt,wt2wt
!! input
{{echo|foo<nowiki>|</nowiki>bar}}
{{echo|<nowiki>&lt;div&gt;</nowiki>}}
{{echo|<nowiki></nowiki>}}
!! result
<p><span about="#mwt1" typeof="mw:Transclusion" data-mw='{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"foo<nowiki>|</nowiki>bar"}},"i":0}'}'>foo</span><span typeof="mw:Nowiki" about="#mwt1">|</span><span about="#mwt1">bar</span>
<span typeof="mw:Transclusion mw:Nowiki" about="#mwt2" data-mw='{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"<nowiki>&amp;lt;div&amp;gt;</nowiki>"}},"i":0}'><span typeof="mw:Entity">&lt;</span>div<span typeof="mw:Entity">&gt;</span></span>
<span typeof="mw:Transclusion mw:Nowiki" about="#mwt3" data-mw='{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"<nowiki></nowiki>"}},"i":0}'></span>
</p>
!! end

###
### Parsoid-centric tests for testing RT edge cases for pre
###

!!test
1a. Indent-Pre and Comments
!!input
 a
<!--a-->
c
!!result
<pre>a
</pre>
<p>c
</p>
!!end

!!test
1b. Indent-Pre and Comments
!!input
 a
 <!--a-->
c
!!result
<pre>a
</pre>
<p>c
</p>
!!end

!!test
1c. Indent-Pre and Comments
!!input
<!--a-->  a

 <!--a--> a
!!result
<pre> a
</pre>
<pre> a
</pre>
!!end

!!test
2a. Indent-Pre and tables
!!input
 {|
 |-
 !h1!!h2
 |foo||bar
 |}
!!result
<table>

<tr>
<th>h1</th>
<th>h2
</th>
<td>foo</td>
<td>bar
</td></tr></table>

!!end

!!test
2b. Indent-Pre and tables
!!input
  {|
 |-
|foo
|}
!!result
<table>

<tr>
<td>foo
</td></tr></table>

!!end

!!test
2c. Indent-Pre and tables (bug 42252)
!!input
{|
 |+ foo
 !  | bar
|}
!!result
<table>
<caption> foo
</caption>
<tr>
<th> bar
</th></tr></table>

!!end

!!test
3a. Indent-Pre and block tags (single-line html)
!!input
 <p> foo </p>
 <div> foo </div>
 <span> foo </span>
!!result
 <p> foo </p>
 <div> foo </div>
<pre><span> foo </span>
</pre>
!!end

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

<div>
 foo
</div>

<center>
 foo
</center>

<blockquote>
 foo
</blockquote>

<table><tr><td>
 foo
</td></tr></table>

<ul><li>
  foo
</li></ul>

!!result
<p>
 foo
</p>
<div>
<pre>foo
</pre>
</div>
<center>
<pre>foo
</pre>
</center>
<blockquote>
 foo
</blockquote>
<table><tr><td>
<pre>foo
</pre>
</td></tr></table>
<ul><li>
  foo
</li></ul>

!!end

!!test
4. Multiple spaces at start-of-line
!!input
    <p> foo </p>
    foo
	{|
|foo
|}
!!result
    <p> foo </p>
<pre>   foo
</pre>
<table>
<tr>
<td>foo
</td></tr></table>

!!end

!! test
5. White-space in indent-pre
NOTE: the white-space char on 2nd line is significant
!! input
 a<br/>
 
 b
!! result
<pre>a<br />

b
</pre>
!! end

###
### HTML-pre (some to spec PHP parser behavior and some Parsoid-RT-centric)
###

!!test
HTML-pre: 1. embedded newlines
!!input
<pre>foo</pre>

<pre>
foo
</pre>

<pre>

foo
</pre>

<pre>


foo
</pre>
!!result
<pre>foo</pre>
<pre>
foo
</pre>
<pre>

foo
</pre>
<pre>


foo
</pre>

!!end

!!test
HTML-pre: 2: indented text
!!input
<pre>
 foo
</pre>
!!result
<pre>
 foo
</pre>

!!end

!!test
HTML-pre: 3: other wikitext
!!input
<pre>
* foo
# bar
= no-h =
'' no-italic ''
[[ NoLink ]]
</pre>
!!result
<pre>
* foo
# bar
= no-h =
'' no-italic ''
[[ NoLink ]]
</pre>

!!end

###
### Definition lists
###
!! test
Simple definition
!! input
; name : Definition
!! result
<dl><dt> name&#160;</dt><dd> Definition
</dd></dl>

!! end

!! test
Definition list for indentation only
!! input
: Indented text
!! result
<dl><dd> Indented text
</dd></dl>

!! end

!! test
Definition list with no space
!! input
;name:Definition
!! result
<dl><dt>name</dt><dd>Definition
</dd></dl>

!!end

!! test
Definition list with URL link
!! input
; http://example.com/ : definition
!! result
<dl><dt> <a rel="nofollow" class="external free" href="http://example.com/">http://example.com/</a>&#160;</dt><dd> definition
</dd></dl>

!! end

!! test
Definition list with bracketed URL link
!! input
;[http://www.example.com/ Example]:Something about it
!! result
<dl><dt><a rel="nofollow" class="external text" href="http://www.example.com/">Example</a></dt><dd>Something about it
</dd></dl>

!! end

!! test
Definition list with wikilink containing colon
!! input
; [[Help:FAQ]]: The least-read page on Wikipedia
!! result
<dl><dt> <a href="/index.php?title=Help:FAQ&amp;action=edit&amp;redlink=1" class="new" title="Help:FAQ (page does not exist)">Help:FAQ</a></dt><dd> The least-read page on Wikipedia
</dd></dl>

!! 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
<dl><dt>  <a rel="nofollow" class="external free" href="news:alt.wikipedia.rox">news:alt.wikipedia.rox</a></dt><dd> This isn't even a real newsgroup!
</dd></dl>

!! end

!! test
Malformed definition list with colon
!! input
;  news:alt.wikipedia.rox -- don't crash or enter an infinite loop
!! result
<dl><dt>  <a rel="nofollow" class="external free" href="news:alt.wikipedia.rox">news:alt.wikipedia.rox</a> -- don't crash or enter an infinite loop
</dt></dl>

!! end

!! test
Definition lists: colon in external link text
!! input
; [http://www.wikipedia2.org/ Wikipedia : The Next Generation]: OK, I made that up
!! result
<dl><dt> <a rel="nofollow" class="external text" href="http://www.wikipedia2.org/">Wikipedia&#160;: The Next Generation</a></dt><dd> OK, I made that up
</dd></dl>

!! end

!! test
Definition lists: colon in HTML attribute
!! input
;<b style="display: inline">bold</b>
!! result
<dl><dt><b style="display: inline">bold</b>
</dt></dl>

!! end

!! test
Definition lists: self-closed tag
!! input
;one<br/>two : two-line fun
!! result
<dl><dt>one<br />two&#160;</dt><dd> two-line fun
</dd></dl>

!! end

!! test
Bug 11748: Literal closing tags
!! input
<dl>
<dt>test 1</dt>
<dd>test test test test test</dd>
<dt>test 2</dt>
<dd>test test test test test</dd>
</dl>
!! result
<dl>
<dt>test 1</dt>
<dd>test test test test test</dd>
<dt>test 2</dt>
<dd>test test test test test</dd>
</dl>

!! end

!! test
Definition and unordered list using wiki syntax nested in unordered list using html tags.
!! input
<ul><li>
; term : description
* unordered
</li>
</ul>
!! result
<ul><li>
<dl><dt> term&#160;</dt><dd> description
</dd></dl>
<ul><li> unordered
</li></ul>
</li>
</ul>

!! end

!! test

Definition list with empty definition and following paragraph
!! input
; term:
Paragraph text
!! result
<dl><dt> term</dt><dd>
</dd></dl>
<p>Paragraph text
</p>
!! end

!! test
Nested definition lists using html syntax
!! input
<dl><dd>
<dl>
<dd>Foo</dd>
</dl>
</dd></dl>
!! result
<dl><dd>
<dl>
<dd>Foo</dd>
</dl>
</dd></dl>

!! end

!! test
Definition Lists: No nesting: Multiple dd's
!! input
;x
:a
:b
!! result
<dl><dt>x
</dt><dd>a
</dd><dd>b
</dd></dl>

!! end

!! test
Definition Lists: Indentation: Regular
!! input
:i1
::i2
:::i3
!! result
<dl><dd>i1
<dl><dd>i2
<dl><dd>i3
</dd></dl>
</dd></dl>
</dd></dl>

!! end

!! test
Definition Lists: Indentation: Missing 1st level
!! input
::i2
:::i3
!! result
<dl><dd><dl><dd>i2
<dl><dd>i3
</dd></dl>
</dd></dl>
</dd></dl>

!! end

!! test
Definition Lists: Indentation: Multi-level indent
!! input
:::i3
!! result
<dl><dd><dl><dd><dl><dd>i3
</dd></dl>
</dd></dl>
</dd></dl>

!! end

!! test
Definition Lists: Hacky use to indent tables
!! input
::{|
|foo
|bar
|}
this text
should be left alone
!! result
<dl><dd><dl><dd><table>
<tr>
<td>foo
</td>
<td>bar
</td></tr></table></dd></dl></dd></dl>
<p>this text
should be left alone
</p>
!! 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:
##
## <dl>
##   <dt>t2 </dt>
##   <dd>
##     <dl>
##       <dt></dt>
##       <dd>d2</dd>
##     </dl>
##   </dd>
## </dl>
##
## But, Parsoid treats "; :" as a tight atomic unit and excess ":" as plain text
## So, the same wikitext above (;;t2 ::d2) is transformed into:
##
## <dl>
##   <dt>
##     <dl>
##       <dt>t2 </dt>
##       <dd>:d2</dd>
##     </dl>
##    </dt>
## </dl>
##
## 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
<dl><dd><table>

<tr>
<td> a
<ul><li> b
</li></ul>
</td></tr>
<tr>
<td> c
<ul><li> d
</li></ul>
</td></tr></table></dd></dl>

!! end

!!test
Table / list interaction: lists nested in tables nested in indented lists
!!input
:{|
|
:a
:b
|
*c
*d
|}

*e
*f
!!result
<dl><dd><table>
<tr>
<td>
<dl><dd>a
</dd><dd>b
</dd></dl>
</td>
<td>
<ul><li>c
</li><li>d
</li></ul>
</td></tr></table></dd></dl>
<ul><li>e
</li><li>f
</li></ul>

!!end

!! test
Definition Lists: Nesting: Multi-level (Parsoid only)
!! options
parsoid
!! input
;t1 :d1
;;t2 ::d2
;;;t3 :::d3
!! result
<dl>
  <dt>t1 </dt>
  <dd>d1</dd>
  <dt>
    <dl>
      <dt>t2 </dt>
      <dd>:d2</dd>
      <dt>
        <dl>
          <dt>t3 </dt>
          <dd>::d3</dd>
        </dl>
      </dt>
    </dl>
  </dt>
</dl>


!! end


!! test
Definition Lists: Nesting: Test 2 (Parsoid only)
!! options
parsoid
!! input
;t1
::d2
!! result
<dl>
  <dt>t1</dt>
  <dd>
    <dl>
      <dd>d2</dd>
    </dl>
  </dd>
</dl>

!! end


!! test
Definition Lists: Nesting: Test 3 (Parsoid only)
!! options
parsoid
!! input
:;t1
::::d2
!! result
<dl>
  <dd>
    <dl>
      <dt>t1</dt>
      <dd>
        <dl>
          <dd>
            <dl>
              <dd>d2</dd>
            </dl>
          </dd>
        </dl>
      </dd>
    </dl>
  </dd>
</dl>

!! end


!! test
Definition Lists: Nesting: Test 4
!! input
::;t3
:::d3
!! result
<dl><dd><dl><dd><dl><dt>t3
</dt><dd>d3
</dd></dl>
</dd></dl>
</dd></dl>

!! end


## The Parsoid team believes the following three test exposes a
## bug in the PHP parser.  (Parsoid team thinks the PHP parser is
## wrong to close the <dl> after the <dt> containing the <ul>.)
!! test
Definition Lists: Mixed Lists: Test 1 (php)
!! options
php
!! input
:;* foo
::* bar
:; baz
!! result
<dl><dd><dl><dt><ul><li> foo
</li><li> bar
</li></ul>
</dt></dl>
<dl><dt> baz
</dt></dl>
</dd></dl>

!! end
!! test
Definition Lists: Mixed Lists: Test 1 (parsoid)
!! options
parsoid
!! input
:;* foo
::* bar
:; baz
!! result
<dl><dd><dl><dt><ul><li> foo
</li></ul></dt><dd><ul><li> bar
</li></ul></dd><dt> baz</dt></dl></dd></dl>
!! end

!! test
Definition Lists: Mixed Lists: Test 2
!! input
*: d1
*: d2
!! result
<ul><li><dl><dd> d1
</dd><dd> d2
</dd></dl>
</li></ul>

!! end


!! test
Definition Lists: Mixed Lists: Test 3
!! input
*::: d1
*::: d2
!! result
<ul><li><dl><dd><dl><dd><dl><dd> d1
</dd><dd> d2
</dd></dl>
</dd></dl>
</dd></dl>
</li></ul>

!! end


!! test
Definition Lists: Mixed Lists: Test 4
!! input
*;d1 :d2
*;d3 :d4
!! result
<ul><li><dl><dt>d1&#160;</dt><dd>d2
</dd><dt>d3&#160;</dt><dd>d4
</dd></dl>
</li></ul>

!! end


!! test
Definition Lists: Mixed Lists: Test 5
!! input
*:d1
*:: d2
!! result
<ul><li><dl><dd>d1
<dl><dd> d2
</dd></dl>
</dd></dl>
</li></ul>

!! end


!! test
Definition Lists: Mixed Lists: Test 6
!! input
#*:d1
#*::: d3
!! result
<ol><li><ul><li><dl><dd>d1
<dl><dd><dl><dd> d3
</dd></dl>
</dd></dl>
</dd></dl>
</li></ul>
</li></ol>

!! end


!! test
Definition Lists: Mixed Lists: Test 7
!! input
:* d1
:* d2
!! result
<dl><dd><ul><li> d1
</li><li> d2
</li></ul>
</dd></dl>

!! end


!! test
Definition Lists: Mixed Lists: Test 8
!! input
:* d1
::* d2
!! result
<dl><dd><ul><li> d1
</li></ul>
<dl><dd><ul><li> d2
</li></ul>
</dd></dl>
</dd></dl>

!! end


!! test
Definition Lists: Mixed Lists: Test 9
!! input
*;foo :bar
!! result
<ul><li><dl><dt>foo&#160;</dt><dd>bar
</dd></dl>
</li></ul>

!! end


!! test
Definition Lists: Mixed Lists: Test 10
!! input
*#;foo :bar
!! result
<ul><li><ol><li><dl><dt>foo&#160;</dt><dd>bar
</dd></dl>
</li></ol>
</li></ul>

!! end

# The Parsoid team disagrees with the PHP parser's seemingly-random
# rules regarding dd/dt on the next two tests.  Parsoid is more
# consistent, and recognizes the shared nesting and keeps the
# still-open tags around until the nesting is complete.

!! test
Definition Lists: Mixed Lists: Test 11 (php)
!! options
php
!! input
*#*#;*;;foo :bar
*#*#;boo :baz
!! result
<ul><li><ol><li><ul><li><ol><li><dl><dt>foo&#160;</dt><dd><ul><li><dl><dt><dl><dt>bar
</dt></dl>
</dd></dl>
</li></ul>
</dd></dl>
<dl><dt>boo&#160;</dt><dd>baz
</dd></dl>
</li></ol>
</li></ul>
</li></ol>
</li></ul>

!! end
!! test
Definition Lists: Mixed Lists: Test 11 (parsoid)
!! options
parsoid
!! input
*#*#;*;;foo :bar
*#*#;boo :baz
!! result
<ul>
<li>
<ol>
<li>
<ul>
<li>
<ol>
<li>
<dl>
<dt>
<ul>
<li>
<dl>
<dt>
<dl>
<dt>foo<span typeof="mw:Placeholder" data-parsoid='{"src":" "}'>&nbsp;</span></dt>
<dd data-parsoid='{"stx":"row"}'>bar</dd></dl></dt></dl></li></ul></dt>
<dt>boo<span typeof="mw:Placeholder" data-parsoid='{"src":" "}'>&nbsp;</span></dt>
<dd data-parsoid='{"stx":"row"}'>baz</dd></dl></li></ol></li></ul></li></ol></li></ul>
!! end


!! test
Definition Lists: Weird Ones: Test 1 (php)
!! options
php
!! input
*#;*::;; foo : bar (who uses this?)
!! result
<ul><li><ol><li><dl><dt> foo&#160;</dt><dd><ul><li><dl><dd><dl><dd><dl><dt><dl><dt> bar (who uses this?)
</dt></dl>
</dd></dl>
</dd></dl>
</dd></dl>
</li></ul>
</dd></dl>
</li></ol>
</li></ul>

!! end
!! test
Definition Lists: Weird Ones: Test 1 (parsoid)
!! options
parsoid
!! input
*#;*::;; foo : bar (who uses this?)
!! result
<ul>
<li>
<ol>
<li>
<dl>
<dt>
<ul>
<li>
<dl>
<dd>
<dl>
<dd>
<dl>
<dt>
<dl>
<dt> foo<span typeof="mw:Placeholder" data-parsoid='{"src":" "}'>&nbsp;</span></dt>
<dd data-parsoid='{"stx":"row"}'> bar (who uses this?)</dd></dl></dt></dl></dd></dl></dd></dl></li></ul></dt></dl></li></ol></li></ul>
!! end

###
### External links
###
!! test
External links: non-bracketed
!! input
Non-bracketed: http://example.com
!! result
<p>Non-bracketed: <a rel="nofollow" class="external free" href="http://example.com">http://example.com</a>
</p>
!! end

!! test
External links: numbered
!! input
Numbered: [http://example.com]
Numbered: [http://example.net]
Numbered: [http://example.com]
!! result
<p>Numbered: <a rel="nofollow" class="external autonumber" href="http://example.com">[1]</a>
Numbered: <a rel="nofollow" class="external autonumber" href="http://example.net">[2]</a>
Numbered: <a rel="nofollow" class="external autonumber" href="http://example.com">[3]</a>
</p>
!!end

!! test
External links: specified text
!! input
Specified text: [http://example.com link]
!! result
<p>Specified text: <a rel="nofollow" class="external text" href="http://example.com">link</a>
</p>
!!end

!! test
External links: trail
!! input
Linktrails should not work for external links: [http://example.com link]s
!! result
<p>Linktrails should not work for external links: <a rel="nofollow" class="external text" href="http://example.com">link</a>s
</p>
!! end

!! test
External links: dollar sign in URL
!! input
http://example.com/1$2345
!! result
<p><a rel="nofollow" class="external free" href="http://example.com/1$2345">http://example.com/1$2345</a>
</p>
!! end

!! test
External links: dollar sign in URL (named)
!! input
[http://example.com/1$2345]
!! result
<p><a rel="nofollow" class="external autonumber" href="http://example.com/1$2345">[1]</a>
</p>
!!end

!! test
External links: open square bracket forbidden in URL (bug 4377)
!! input
http://example.com/1[2345
!! result
<p><a rel="nofollow" class="external free" href="http://example.com/1">http://example.com/1</a>[2345
</p>
!! end

!! test
External links: open square bracket forbidden in URL (named) (bug 4377)
!! input
[http://example.com/1[2345]
!! result
<p><a rel="nofollow" class="external text" href="http://example.com/1">[2345</a>
</p>
!!end

!! test
External links: nowiki in URL link text (bug 6230)
!!input
[http://example.com/ <nowiki>''example site''</nowiki>]
!! result
<p><a rel="nofollow" class="external text" href="http://example.com/">''example site''</a>
</p>
!! end

!! test
External links: newline forbidden in text (bug 6230 regression check)
!! input
[http://example.com/ first
second]
!! result
<p>[<a rel="nofollow" class="external free" href="http://example.com/">http://example.com/</a> first
second]
</p>
!!end

!! test
External links: Pipe char between url and text
!! input
[http://example.com | link]
!! result
<p><a rel="nofollow" class="external text" href="http://example.com">| link</a>
</p>
!!end

!! test
External links: protocol-relative URL in brackets
!! input
[//example.com/ Test]
!! result
<p><a rel="nofollow" class="external text" href="//example.com/">Test</a>
</p>
!! end

!! test
External links: protocol-relative URL in brackets without text
!! input
[//example.com]
!! result
<p><a rel="nofollow" class="external autonumber" href="//example.com">[1]</a>
</p>
!! end

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

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

!! test
External image
!! input
External image: http://meta.wikimedia.org/upload/f/f1/Ncwikicol.png
!! result
<p>External image: <img src="http://meta.wikimedia.org/upload/f/f1/Ncwikicol.png" alt="Ncwikicol.png" />
</p>
!! end

!! test
External image from https
!! input
External image from https: https://meta.wikimedia.org/upload/f/f1/Ncwikicol.png
!! result
<p>External image from https: <img src="https://meta.wikimedia.org/upload/f/f1/Ncwikicol.png" alt="Ncwikicol.png" />
</p>
!! end

!! test
External image (when not allowed)
!! options
wgAllowExternalImages=0
!! input
External image: http://meta.wikimedia.org/upload/f/f1/Ncwikicol.png
!! result
<p>External image: <a rel="nofollow" class="external free" href="http://meta.wikimedia.org/upload/f/f1/Ncwikicol.png">http://meta.wikimedia.org/upload/f/f1/Ncwikicol.png</a>
</p>
!! 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
<p>Link to non-http image, no img tag: <a rel="nofollow" class="external free" href="ftp://example.com/test.jpg">ftp://example.com/test.jpg</a>
</p>
!! end

!! test
External links: terminating separator
!! input
Terminating separator: http://example.com/thing,
!! result
<p>Terminating separator: <a rel="nofollow" class="external free" href="http://example.com/thing">http://example.com/thing</a>,
</p>
!! end

!! test
External links: intervening separator
!! input
Intervening separator: http://example.com/1,2,3
!! result
<p>Intervening separator: <a rel="nofollow" class="external free" href="http://example.com/1,2,3">http://example.com/1,2,3</a>
</p>
!! 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
<p>Old bug with URL in query: <a rel="nofollow" class="external text" href="http://example.com/thing?url=http://example.com">link</a>
</p>
!! 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
<p>And again with mixed protocols: <a rel="nofollow" class="external text" href="ftp://example.com?url=http://example.com">link</a>
</p>
!!end

!! test
External links: URL in text
!! input
URL in text: [http://example.com http://example.com]
!! result
<p>URL in text: <a rel="nofollow" class="external free" href="http://example.com">http://example.com</a>
</p>
!! end

!! test
External links: Clickable images
!! input
ja-style clickable images: [http://example.com http://meta.wikimedia.org/upload/f/f1/Ncwikicol.png]
!! result
<p>ja-style clickable images: <a rel="nofollow" class="external text" href="http://example.com"><img src="http://meta.wikimedia.org/upload/f/f1/Ncwikicol.png" alt="Ncwikicol.png" /></a>
</p>
!!end

!! test
External links: raw ampersand
!! input
Old &amp; use: http://x&y
!! result
<p>Old &amp; use: <a rel="nofollow" class="external free" href="http://x&amp;y">http://x&amp;y</a>
</p>
!! end

!! test
External links: encoded ampersand
!! input
Old &amp; use: http://x&amp;y
!! result
<p>Old &amp; use: <a rel="nofollow" class="external free" href="http://x&amp;y">http://x&amp;y</a>
</p>
!! end

!! test
External links: encoded equals (bug 6102)
!! input
http://example.com/?foo&#61;bar
!! result
<p><a rel="nofollow" class="external free" href="http://example.com/?foo=bar">http://example.com/?foo=bar</a>
</p>
!! end

!! test
External links: [raw ampersand]
!! input
Old &amp; use: [http://x&y]
!! result
<p>Old &amp; use: <a rel="nofollow" class="external autonumber" href="http://x&amp;y">[1]</a>
</p>
!! end

!! test
External links: [encoded ampersand]
!! input
Old &amp; use: [http://x&amp;y]
!! result
<p>Old &amp; use: <a rel="nofollow" class="external autonumber" href="http://x&amp;y">[1]</a>
</p>
!! end

!! test
External links: [encoded equals] (bug 6102)
!! input
[http://example.com/?foo&#61;bar]
!! result
<p><a rel="nofollow" class="external autonumber" href="http://example.com/?foo=bar">[1]</a>
</p>
!! end

!! test
External links: [IDN ignored character reference in hostname; strip it right off]
!! input
[http://e&zwnj;xample.com/]
!! result
<p><a rel="nofollow" class="external autonumber" href="http://example.com/">[1]</a>
</p>
!! 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&zwnj;xample.com/
!! result
<p><a rel="nofollow" class="external free" href="http://example.com/">http://example.com/</a>
</p>
!! end

!! test
External links: www.jpeg.org (bug 554)
!! input
http://www.jpeg.org
!!result
<p><a rel="nofollow" class="external free" href="http://www.jpeg.org">http://www.jpeg.org</a>
</p>
!! 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
<p><a rel="nofollow" class="external autonumber" href="http://www.unausa.org/newindex.asp?place=http://www.unausa.org/programs/mun.asp">[1]</a>
</p>
!! end

!! test
BUG 361: URL inside bracketed URL
!! input
[http://www.example.com/foo http://www.example.com/bar]
!! result
<p><a rel="nofollow" class="external text" href="http://www.example.com/foo">http://www.example.com/bar</a>
</p>
!! end

!! test
BUG 361: URL within URL, not bracketed
!! input
http://www.example.com/foo?=http://www.example.com/bar
!! result
<p><a rel="nofollow" class="external free" href="http://www.example.com/foo?=http://www.example.com/bar">http://www.example.com/foo?=http://www.example.com/bar</a>
</p>
!! end

!! test
BUG 289: ">"-token in URL-tail
!! input
http://www.example.com/<hello>
!! result
<p><a rel="nofollow" class="external free" href="http://www.example.com/">http://www.example.com/</a>&lt;hello&gt;
</p>
!!end

!! test
BUG 289: literal ">"-token in URL-tail
!! input
http://www.example.com/<b>html</b>
!! result
<p><a rel="nofollow" class="external free" href="http://www.example.com/">http://www.example.com/</a><b>html</b>
</p>
!!end

!! test
BUG 289: ">"-token in bracketed URL
!! input
[http://www.example.com/<hello> stuff]
!! result
<p><a rel="nofollow" class="external text" href="http://www.example.com/">&lt;hello&gt; stuff</a>
</p>
!!end

!! test
BUG 289: literal ">"-token in bracketed URL
!! input
[http://www.example.com/<b>html</b> stuff]
!! result
<p><a rel="nofollow" class="external text" href="http://www.example.com/"><b>html</b> stuff</a>
</p>
!!end

!! test
BUG 289: literal double quote at end of URL
!! input
http://www.example.com/"hello"
!! result
<p><a rel="nofollow" class="external free" href="http://www.example.com/">http://www.example.com/</a>"hello"
</p>
!!end

!! test
BUG 289: literal double quote in bracketed URL
!! input
[http://www.example.com/"hello" stuff]
!! result
<p><a rel="nofollow" class="external text" href="http://www.example.com/">"hello" stuff</a>
</p>
!!end

!! test
External links: multiple legal whitespace is fine, Magnus. Don't break it please. (bug 5081)
!! input
[http://www.example.com  test]
!! result
<p><a rel="nofollow" class="external text" href="http://www.example.com">test</a>
</p>
!! end

!! test
External links: link text with spaces
!! input
[http://www.example.com a b c]
[http://www.example.com ''a'' ''b'']
!! result
<p><a rel="nofollow" class="external text" href="http://www.example.com">a b c</a>
<a rel="nofollow" class="external text" href="http://www.example.com"><i>a</i> <i>b</i></a>
</p>
!! end

!! test
External links: wiki links within external link (Bug 3695)
!! input
[http://example.com [[wikilink]] embedded in ext link]
!! result
<p><a rel="nofollow" class="external text" href="http://example.com"></a><a href="/index.php?title=Wikilink&amp;action=edit&amp;redlink=1" class="new" title="Wikilink (page does not exist)">wikilink</a><a rel="nofollow" class="external text" href="http://example.com"> embedded in ext link</a>
</p>
!! end

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

[http:/example.com title]
!! result
<p>http:/example.com
</p><p>[http:/example.com title]
</p>
!! end

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

!! test
Bug 2702: Mismatched <i>, <b> and <a> 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
<p><a rel="nofollow" class="external text" href="http://example.com"><i>text</i></a>
<a rel="nofollow" class="external text" href="http://example.com"><b>text</b></a>
<i>Something </i><a rel="nofollow" class="external text" href="http://example.com"><i>in italic</i></a>
<i>Something </i><a rel="nofollow" class="external text" href="http://example.com"><i>mixed</i><b>, even bold</b></a>
<i><b>Now </b></i><a rel="nofollow" class="external text" href="http://example.com"><i><b>both</b></i></a>
</p>
!! end


!! test
Bug 4781: %26 in URL
!! input
http://www.example.com/?title=AT%26T
!! result
<p><a rel="nofollow" class="external free" href="http://www.example.com/?title=AT%26T">http://www.example.com/?title=AT%26T</a>
</p>
!! 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
<p><a rel="nofollow" class="external free" href="http://www.example.com/?title=100%25_Bran">http://www.example.com/?title=100%25_Bran</a>
</p>
!! end

!! test
Bug 4781, 5267: %28, %29 in URL
!! input
http://www.example.com/?title=Ben-Hur_%281959_film%29
!! result
<p><a rel="nofollow" class="external free" href="http://www.example.com/?title=Ben-Hur_%281959_film%29">http://www.example.com/?title=Ben-Hur_%281959_film%29</a>
</p>
!! end


!! test
Bug 4781: %26 in autonumber URL
!! input
[http://www.example.com/?title=AT%26T]
!! result
<p><a rel="nofollow" class="external autonumber" href="http://www.example.com/?title=AT%26T">[1]</a>
</p>
!! end

!! test
Bug 4781, 5267: %26 in autonumber URL
!! input
[http://www.example.com/?title=100%25_Bran]
!! result
<p><a rel="nofollow" class="external autonumber" href="http://www.example.com/?title=100%25_Bran">[1]</a>
</p>
!! end

!! test
Bug 4781, 5267: %28, %29 in autonumber URL
!! input
[http://www.example.com/?title=Ben-Hur_%281959_film%29]
!! result
<p><a rel="nofollow" class="external autonumber" href="http://www.example.com/?title=Ben-Hur_%281959_film%29">[1]</a>
</p>
!! end


!! test
Bug 4781: %26 in bracketed URL
!! input
[http://www.example.com/?title=AT%26T link]
!! result
<p><a rel="nofollow" class="external text" href="http://www.example.com/?title=AT%26T">link</a>
</p>
!! end

!! test
Bug 4781, 5267: %26 in bracketed URL
!! input
[http://www.example.com/?title=100%25_Bran link]
!! result
<p><a rel="nofollow" class="external text" href="http://www.example.com/?title=100%25_Bran">link</a>
</p>
!! end

!! test
Bug 4781, 5267: %28, %29 in bracketed URL
!! input
[http://www.example.com/?title=Ben-Hur_%281959_film%29 link]
!! result
<p><a rel="nofollow" class="external text" href="http://www.example.com/?title=Ben-Hur_%281959_film%29">link</a>
</p>
!! end

!! test
External link containing double-single-quotes in text '' (bug 4598 sanity check)
!! input
Some [http://example.com/ pretty ''italics'' and stuff]!
!! result
<p>Some <a rel="nofollow" class="external text" href="http://example.com/">pretty <i>italics</i> and stuff</a>!
</p>
!! 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
<p><i>Some </i><a rel="nofollow" class="external text" href="http://example.com/"><i>pretty </i>italics<i> and stuff</i></a><i>!</i>
</p>
!! 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
<p><a rel="nofollow" class="external text" href="http://www.musee-picasso.fr/pages/page_id18528_u1l2.htm"><i>La muerte de Casagemas</i> (1901) en el sitio de <a href="/index.php?title=Museo_Picasso_(Par%C3%ADs)&amp;action=edit&amp;redlink=1" class="new" title="Museo Picasso (París) (page does not exist)">Museo Picasso</a>.</a>
</p>
!! end

!! test
External link with comments in link text
!! input
[http://www.google.com Google <!-- comment -->]
!! result
<p><a rel="nofollow" class="external text" href="http://www.google.com">Google </a>
</p>
!! end

!! test
URL-encoding in URL functions (single parameter)
!! input
{{localurl:Some page|amp=&}}
!! result
<p>/index.php?title=Some_page&amp;amp=&amp;
</p>
!! end

!! test
URL-encoding in URL functions (multiple parameters)
!! input
{{localurl:Some page|q=?&amp=&}}
!! result
<p>/index.php?title=Some_page&amp;q=?&amp;amp=&amp;
</p>
!! end

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

http://example.com/index.php?foozoid&#x5B;&#x5D;=bar
!! result
<p><a rel="nofollow" class="external free" href="http://example.com/index.php?foozoid%5B%5D=bar">http://example.com/index.php?foozoid%5B%5D=bar</a>
</p><p><a rel="nofollow" class="external free" href="http://example.com/index.php?foozoid%5B%5D=bar">http://example.com/index.php?foozoid%5B%5D=bar</a>
</p>
!! end

!! test
IPv6 urls (bug 21261)
!! options
disabled
!! input
http://[2404:130:0:1000::187:2]/index.php
!! result
<p><a rel="nofollow" class="external free" href="http://[2404:130:0:1000::187:2]/index.php">http://[2404:130:0:1000::187:2]/index.php</a>
</p>
!! 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
<p>[foo]
[foo bar]
[foo <i>bar</i>]
[fool's] errand
[fool's errand]
[foo]
[foo bar]
[foo <i>bar</i>]
[fool's] errand
[fool's errand]
[url=foo]
[url=<a rel="nofollow" class="external free" href="http://example.com">http://example.com</a>]
</p>
!! end

!! test
Parsoid: Percent encoding in external links
!! options
parsoid
!! input
[https://github.com/search?l=&q=ResourceLoader+%40wikimedia Search]
!! result
<p><a rel="mw:ExtLink"
href="https://github.com/search?l=&amp;q=ResourceLoader+%40wikimedia">Search</a></p>
!! end

!! test
Parsoid: use url link syntax for links where the content is equal the link
target
!! options
parsoid
!! input
http://example.com
!! result
<p><a rel="mw:ExtLink" href="http://example.com">http://example.com</a></p>
!! end

###
### Quotes
###

!! test
Quotes
!! input
Normal text. '''Bold text.''' Normal text. ''Italic text.''

Normal text. '''''Bold italic text.''''' Normal text.
!!result
<p>Normal text. <b>Bold text.</b> Normal text. <i>Italic text.</i>
</p><p>Normal text. <i><b>Bold italic text.</b></i> Normal text.
</p>
!! end


!! test
Unclosed and unmatched quotes (php)
!! options
php
!! 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.

<!-- Unmatching number of opening, closing tags: -->
'''This year''''s election ''should'' beat '''last year''''s.

''Tom'''s car is bigger than ''Susan'''s.

Plain ''italic'''s plain
!! result
<p><i><b>Bold italic text </b>with bold deactivated<b> in between.</b></i>
</p><p><b><i>Bold italic text </i>with italic deactivated<i> in between.</i></b>
</p><p><b>Bold text..</b>
</p><p>..spanning two paragraphs (should not work).
</p><p><b>Bold tag left open</b>
</p><p><i>Italic tag left open</i>
</p><p>Normal text.
</p><p><b>This year'</b>s election <i>should</i> beat <b>last year'</b>s.
</p><p><i>Tom<b>s car is bigger than </b></i><b>Susan</b>s.
</p><p>Plain <i>italic'</i>s plain
</p>
!! end
# Parsoid inserts an empty bold tag pair at the end of the line, that the PHP
# parser strips. The wikitext contains just the first half of the bold
# quote pair. (There's also a case where Parsoid nests <b> and <i>
# differently than the PHP parser.)
!! test
Unclosed and unmatched quotes (parsoid)
!! options
parsoid
!! 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.

<!-- Unmatching number of opening, closing tags: -->
'''This year''''s election ''should'' beat '''last year''''s.

''Tom'''s car is bigger than ''Susan'''s.

Plain ''italic'''s plain
!! result
<p><i><b>Bold italic text </b>with bold deactivated<b> in between.</b></i>
</p><p><i><b>Bold italic text </b></i><b>with italic deactivated<i> in between.</i></b>
</p><p><b>Bold text..</b>
</p><p>..spanning two paragraphs (should not work).<b></b>
</p><p><b>Bold tag left open</b>
</p><p><i>Italic tag left open</i>
</p><p>Normal text.
</p><p><b>This year'</b>s election <i>should</i> beat <b>last year'</b>s.
</p><p><i>Tom<b>s car is bigger than </b></i><b>Susan</b>s.
</p><p>Plain <i>italic'</i>s plain
</p>
!! end

###
### Tables
###
### some content taken from http://meta.wikimedia.org/wiki/MediaWiki_User%27s_Guide:_Using_tables
###

# This should not produce <table></table> as <table><tr><td></td></tr></table>
# is the bare minimum 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. (php)
!! options
php
!! input
{||}
!! result
!! end
# Parsoid team replies: empty table tags are legal in HTML5
!! test
A table with no data. (parsoid)
!! options
parsoid
!! input
{||}
!! result
<table></table>
!! end

# A table with nothing but a caption is invalid XHTML, we might want to render
# this as <p>caption</p>
!! test
A table with nothing but a caption (php)
!! options
php
!! input
{|
|+ caption
|}
!! result
<table>
<caption> caption
</caption><tr><td></td></tr></table>

!! end
# Parsoid team replies: table with only a caption is legal in HTML5
!! test
A table with nothing but a caption (parsoid)
!! options
parsoid
!! input
{|
|+ caption
|}
!! result
<table><caption> caption</caption></table>
!! end

!! test
A table with caption with default-spaced attributes and a table row
!! input
{|
|+ style="color: red;" | caption1
|-
| foo
|}
!! result
<table>
<caption style="color: red;"> caption1
</caption>
<tr>
<td> foo
</td></tr></table>

!! 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
<table>
<caption style="color: red;">caption2
</caption>
<caption style="color: red;"> caption3
</caption>
<tr>
<td> foo
</td></tr></table>

!! 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
<table>
<tr>
<td> baz
</td>
<td> foo bar foo </td>
<td> baz
</td>
<td style="color:red;"> baz
</td>
<td> style='color:red;' </td>
<td> baz
</td></tr></table>

!! end

!! test
Simple table
!! input
{|
| 1 || 2
|-
| 3 || 4
|}
!! result
<table>
<tr>
<td> 1 </td>
<td> 2
</td></tr>
<tr>
<td> 3 </td>
<td> 4
</td></tr></table>

!! end

!! test
Simple table but with multiple dashes for row wikitext
!! input
{|
| foo
|-----
| bar
|}
!! result
<table>
<tr>
<td> foo
</td></tr>
<tr>
<td> bar
</td></tr></table>

!! end
!! test
Multiplication table
!! input
{| border="1" cellpadding="2"
|+Multiplication table
|-
! &times; !! 1 !! 2 !! 3
|-
! 1
| 1 || 2 || 3
|-
! 2
| 2 || 4 || 6
|-
! 3
| 3 || 6 || 9
|-
! 4
| 4 || 8 || 12
|-
! 5
| 5 || 10 || 15
|}
!! result
<table border="1" cellpadding="2">
<caption>Multiplication table
</caption>
<tr>
<th> &#215; </th>
<th> 1 </th>
<th> 2 </th>
<th> 3
</th></tr>
<tr>
<th> 1
</th>
<td> 1 </td>
<td> 2 </td>
<td> 3
</td></tr>
<tr>
<th> 2
</th>
<td> 2 </td>
<td> 4 </td>
<td> 6
</td></tr>
<tr>
<th> 3
</th>
<td> 3 </td>
<td> 6 </td>
<td> 9
</td></tr>
<tr>
<th> 4
</th>
<td> 4 </td>
<td> 8 </td>
<td> 12
</td></tr>
<tr>
<th> 5
</th>
<td> 5 </td>
<td> 10 </td>
<td> 15
</td></tr></table>

!! end

!! test
Accept "||" in table headings
!! input
{|
!h1 || h2
|}
!! result
<table>
<tr>
<th>h1 </th>
<th> h2
</th></tr></table>

!! end

!! test
Accept "||" in indented table headings
!! input
:{|
!h1 || h2
|}
!! result
<dl><dd><table>
<tr>
<th>h1 </th>
<th> h2
</th></tr></table></dd></dl>

!! end

!! test
Accept empty attributes in td/th cells (td/th cells starting with leading ||)
!! input
{|
!| h1
|| a
|}
!! result
<table>
<tr>
<th> h1
</th>
<td> a
</td></tr></table>

!! end

!!test
Accept "| !" at start of line in tables (ignore !-attribute)
!!input
{|
|-
| !style="color:red" | bar
|}
!!result
<table>

<tr>
<td> bar
</td></tr></table>

!!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
<table>

<tr>
<td style="color:red;">+1
</td>
<td style="color:blue;">-1
</td></tr>
<tr>
<td> 1 </td>
<td> 2 </td>
<td> 3
</td>
<td> 1 </td>
<td>+2 </td>
<td>-3
</td></tr>
<tr>
<td> +1
</td>
<td> -1
</td></tr></table>

!!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
<table border="1">
<tr>
<td> Cell 1, row 1
</td>
<td rowspan="2"> Cell 2, row 1 (and 2)
</td>
<td> Cell 3, row 1
</td></tr>
<tr>
<td> Cell 1, row 2
</td>
<td> Cell 3, row 2
</td></tr></table>

!! end

!! test
Nested table
!! input
{| border=1
| &alpha;
|
{| bgcolor=#ABCDEF border=2
|nested
|-
|table
|}
|the original table again
|}
!! result
<table border="1">
<tr>
<td> &#945;
</td>
<td>
<table bgcolor="#ABCDEF" border="2">
<tr>
<td>nested
</td></tr>
<tr>
<td>table
</td></tr></table>
</td>
<td>the original table again
</td></tr></table>

!! end

!! test
Invalid attributes in table cell (bug 1830)
!! input
{|
|Cell:|broken
|}
!! result
<table>
<tr>
<td>broken
</td></tr></table>

!! 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
<table>
<tr>
<td>[<a rel="nofollow" class="external free" href="ftp://%7Cx">ftp://%7Cx</a></td>
<td>]" onmouseover="alert(document.cookie)"&gt;test
</td>
</tr>
</table>

!! end


!! test
Indented table markup mixed with indented pre content (proposed in bug 6200)
!! input
 <table>
 <tr>
 <td>
 Text that should be rendered preformatted
 </td>
 </tr>
 </table>
!! result
 <table>
 <tr>
 <td>
<pre>Text that should be rendered preformatted
</pre>
 </td>
 </tr>
 </table>

!! end

!! test
Template-generated table cell attributes and cell content
!! input
{|
|{{table_attribs}}
|}
!! result
<table>
<tr>
<td style="color: red"> Foo
</td></tr></table>

!! end

!! test
Table with row followed by newlines and table heading
!! input
{|
|-

! foo
|}
!! result
<table>


<tr>
<th> foo
</th></tr></table>

!! end

!! test
Table with empty line following the start tag
!! input
{|

|-
| foo
|}
!! result
<table>


<tr>
<td> foo
</td></tr></table>

!! 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
parsoid
!! input
{|
| style=| hello
|}
!! result
<table>
<tbody>
<tr>
<td style=""> hello
</td></tr></tbody></table>

!! end

!! test
Wikitext table with a lot of comments
!! input
{|
<!-- c0 -->
| foo
<!-- c1 -->
|- <!-- c2 -->
<!-- c3 -->
|<!-- c4 -->
<!-- c5 -->
|}
!! result
<table>
<tr>
<td> foo
</td></tr>
<tr>
<td>
</td></tr></table>

!! end

!! test
Wikitext table with double-line table cell
!! input
{|
|a
b
|}
!! result
<table>
<tr>
<td>a
<p>b
</p>
</td></tr></table>

!! end

!! test
Table cell with a single comment
!! input
{|
| <!-- c1 -->
| a
|}
!! result
<table>
<tr>
<td>
</td>
<td> a
</td></tr></table>

!! end

# The expected HTML structure in this test is debatable. The PHP parser does
# not parse this kind of table at all. The main focus for Parsoid is on
# round-tripping, so this output is ok for now. TODO: revisit!
!! test
Wikitext table with html-syntax row (Parsoid)
!! options
parsoid
!! input
{|
|-
<td>foo</td>
|}
!! result
<table>
<tbody>
<tr>
<td>foo</td></tr></tbody></table>
!! end

!! test
Implicit <td> after a |-
(PHP parser relies on Tidy to add the missing <td> tags)
!! options
parsoid=wt2html,wt2wt
!! input
{|
|-
a
|}
!! result
<table>
<tr><td>a</td></tr>
</table>
!! end

!! test
Pres should be recognized in an explicit <td> context, but not in an implicit <td> context
(PHP parser relies on Tidy to add the missing <td> tags)
!! options
parsoid=wt2html,wt2wt
!! input
{|
|-
|
 a
|-
 b
|}
!! result
<table>
<tbody>
<tr><td><pre>a</pre></td></tr>
<tr><td> b</td></tr>
</tbody>
</table>
!! end

!! test
Lists should be recognized in an implicit <td> context
(PHP parser relies on Tidy to add the missing <td> tags)
!! options
parsoid=wt2html,wt2wt
!! input
{|
|-
*a
|}
!! result
<table>
<tr>
<td><ul><li>a</li></ul></td>
</tr>
</table>
!! end

###
### Internal links
###
!! test
Plain link, capitalized
!! input
[[Main Page]]
!! result
<p><a href="/wiki/Main_Page" title="Main Page">Main Page</a>
</p>
!! end

!! test
Plain link, uncapitalized
!! input
[[main Page]]
!! result
<p><a href="/wiki/Main_Page" title="Main Page">main Page</a>
</p>
!! end

!! test
Piped link
!! input
[[Main Page|The Main Page]]
!! result
<p><a href="/wiki/Main_Page" title="Main Page">The Main Page</a>
</p>
!! end

!! test
Piped link with comment in link text
!! input
[[Main Page|The Main<!--front--> Page]]
!! result
<p><a href="/wiki/Main_Page" title="Main Page">The Main Page</a>
</p>
!! end

!! test
Broken link
!! input
[[Zigzagzogzagzig]]
!! result
<p><a href="/index.php?title=Zigzagzogzagzig&amp;action=edit&amp;redlink=1" class="new" title="Zigzagzogzagzig (page does not exist)">Zigzagzogzagzig</a>
</p>
!! end

!! test
Broken link with fragment
!! input
[[Zigzagzogzagzig#zug]]
!! result
<p><a href="/index.php?title=Zigzagzogzagzig&amp;action=edit&amp;redlink=1" class="new" title="Zigzagzogzagzig (page does not exist)">Zigzagzogzagzig#zug</a>
</p>
!! end

!! test
Special page link with fragment
!! input
[[Special:Version#anchor]]
!! result
<p><a href="/wiki/Special:Version#anchor" title="Special:Version">Special:Version#anchor</a>
</p>
!! end

!! test
Nonexistent special page link with fragment
!! input
[[Special:ThisNameWillHopefullyNeverBeUsed#anchor]]
!! result
<p><a href="/wiki/Special:ThisNameWillHopefullyNeverBeUsed" class="new" title="Special:ThisNameWillHopefullyNeverBeUsed (page does not exist)">Special:ThisNameWillHopefullyNeverBeUsed#anchor</a>
</p>
!! end

!! test
Link with prefix
!! input
xxx[[main Page]], xxx[[Main Page]], Xxx[[main Page]] XXX[[main Page]], XXX[[Main Page]]
!! result
<p>xxx<a href="/wiki/Main_Page" title="Main Page">main Page</a>, xxx<a href="/wiki/Main_Page" title="Main Page">Main Page</a>, Xxx<a href="/wiki/Main_Page" title="Main Page">main Page</a> XXX<a href="/wiki/Main_Page" title="Main Page">main Page</a>, XXX<a href="/wiki/Main_Page" title="Main Page">Main Page</a>
</p>
!! end

!! test
Link with suffix
!! input
[[Main Page]]xxx, [[Main Page]]XXX, [[Main Page]]!!!
!! result
<p><a href="/wiki/Main_Page" title="Main Page">Main Pagexxx</a>, <a href="/wiki/Main_Page" title="Main Page">Main Page</a>XXX, <a href="/wiki/Main_Page" title="Main Page">Main Page</a>!!!
</p>
!! 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
<p><a href="/wiki/Prefixed_article" title="Prefixed article">prefixed articles with spaces</a>
</p><p><a href="/wiki/Prefixed_article" title="Prefixed article">prefixed articlesaoeu</a>
</p><p><a href="/wiki/Main_Page" title="Main Page">Main Page test</a>
</p>
!! end


!! test
Link with HTML entity in suffix / tail
!! input
[[Main Page]]&quot;, [[Main Page]]&#97;
!! result
<p><a href="/wiki/Main_Page" title="Main Page">Main Page</a>&quot;, <a href="/wiki/Main_Page" title="Main Page">Main Page</a>&#97;
</p>
!! end

!! test
Link with 3 brackets
!! input
[[[main page]]]
!! result
<p>[[[main page]]]
</p>
!! end

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

!! test
Link with multiple pipes
!! input
[[Main Page|The|Main|Page]]
!! result
<p><a href="/wiki/Main_Page" title="Main Page">The|Main|Page</a>
</p>
!! end

!! test
Link to namespaces
!! input
[[Talk:Parser testing]], [[Meta:Disclaimers]]
!! result
<p><a href="/index.php?title=Talk:Parser_testing&amp;action=edit&amp;redlink=1" class="new" title="Talk:Parser testing (page does not exist)">Talk:Parser testing</a>, <a href="/index.php?title=Meta:Disclaimers&amp;action=edit&amp;redlink=1" class="new" title="Meta:Disclaimers (page does not exist)">Meta:Disclaimers</a>
</p>
!! end

!! test
Piped link to namespace
!! input
[[Meta:Disclaimers|The disclaimers]]
!! result
<p><a href="/index.php?title=Meta:Disclaimers&amp;action=edit&amp;redlink=1" class="new" title="Meta:Disclaimers (page does not exist)">The disclaimers</a>
</p>
!! end

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

!! test
Link containing % (not as a hex sequence)
!! input
[[7% Solution]]
!! result
<p><a href="/index.php?title=7%25_Solution&amp;action=edit&amp;redlink=1" class="new" title="7% Solution (page does not exist)">7% Solution</a>
</p>
!! end

!! test
Link containing % as a single hex sequence interpreted to char
!! input
[[7%25 Solution]]
!! result
<p><a href="/index.php?title=7%25_Solution&amp;action=edit&amp;redlink=1" class="new" title="7% Solution (page does not exist)">7% Solution</a>
</p>
!!end

!! test
Link containing % as a double hex sequence interpreted to hex sequence
!! input
[[7%2525 Solution]]
!! result
<p>[[7%2525 Solution]]
</p>
!!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
<p><a href="#.3C">#&lt;</a><a href="#.3E">#&gt;</a>
</p>
!! end

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

!! test
Link containing an equals sign
!! input
[[Special:BookSources/isbn=4-00-026157-6]]
!! result
<p><a href="/wiki/Special:BookSources/isbn%3D4-00-026157-6" title="Special:BookSources/isbn=4-00-026157-6">Special:BookSources/isbn=4-00-026157-6</a>
</p>
!! end

!! article
Foo~bar
!! text
Just a test of an article title containing a tilde.
!! endarticle

# note that links containing signatures, like [[Foo~~~~]], are
# massaged by the pre-save transform (PST) and so the tildes are never
# seen by the parser.
!! test
Link containing a tilde
!! input
[[Foo~bar]]
!! result
<p><a href="/wiki/Foo%7Ebar" title="Foo~bar">Foo~bar</a>
</p>
!! end

!! test
Link containing double-single-quotes '' (bug 4598)
!! input
[[Lista d''e paise d''o munno]]
!! result
<p><a href="/index.php?title=Lista_d%27%27e_paise_d%27%27o_munno&amp;action=edit&amp;redlink=1" class="new" title="Lista d''e paise d''o munno (page does not exist)">Lista d''e paise d''o munno</a>
</p>
!! end

!! test
Link containing double-single-quotes '' in text (bug 4598 sanity check)
!! input
Some [[Link|pretty ''italics'' and stuff]]!
!! result
<p>Some <a href="/index.php?title=Link&amp;action=edit&amp;redlink=1" class="new" title="Link (page does not exist)">pretty <i>italics</i> and stuff</a>!
</p>
!! end

!! test
Link containing double-single-quotes '' in text embedded in italics (bug 4598 sanity check)
!! input
''Some [[Link|pretty ''italics'' and stuff]]!
!! result
<p><i>Some <a href="/index.php?title=Link&amp;action=edit&amp;redlink=1" class="new" title="Link (page does not exist)">pretty <i>italics</i> and stuff</a>!</i>
</p>
!! 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
<p><a href="/index.php?title=Special:Upload&amp;wpDestFile=Denys_Savchenko_%27%27Pentecoste%27%27.jpg" class="new" title="File:Denys Savchenko &#39;&#39;Pentecoste&#39;&#39;.jpg">File:Denys Savchenko <i>Pentecoste</i>.jpg</a>
</p><p><a href="/index.php?title=%27%27Pentecoste%27%27&amp;action=edit&amp;redlink=1" class="new" title="''Pentecoste'' (page does not exist)">''Pentecoste''</a>
</p><p><a href="/index.php?title=%27%27Pentecoste%27%27&amp;action=edit&amp;redlink=1" class="new" title="''Pentecoste'' (page does not exist)">Pentecoste</a>
</p><p><a href="/index.php?title=%27%27Pentecoste%27%27&amp;action=edit&amp;redlink=1" class="new" title="''Pentecoste'' (page does not exist)"><i>Pentecoste</i></a>
</p>
!! end

!! test
Broken image links with HTML captions (bug 39700)
!! input
[[File:Nonexistent|<script></script>]]
[[File:Nonexistent|100px|<script></script>]]
[[File:Nonexistent|&lt;]]
[[File:Nonexistent|a<i>b</i>c]]
!! result
<p><a href="/index.php?title=Special:Upload&amp;wpDestFile=Nonexistent" class="new" title="File:Nonexistent">&lt;script&gt;&lt;/script&gt;</a>
<a href="/index.php?title=Special:Upload&amp;wpDestFile=Nonexistent" class="new" title="File:Nonexistent">&lt;script&gt;&lt;/script&gt;</a>
<a href="/index.php?title=Special:Upload&amp;wpDestFile=Nonexistent" class="new" title="File:Nonexistent">&lt;</a>
<a href="/index.php?title=Special:Upload&amp;wpDestFile=Nonexistent" class="new" title="File:Nonexistent">abc</a>
</p>
!! end

!! test
Plain link to URL
!! input
[[http://www.example.com]]
!! result
<p>[<a rel="nofollow" class="external autonumber" href="http://www.example.com">[1]</a>]
</p>
!! end

!! test
Plain link to URL with link text
!! input
[[http://www.example.com Link text]]
!! result
<p>[<a rel="nofollow" class="external text" href="http://www.example.com">Link text</a>]
</p>
!! end

!! test
Plain link to protocol-relative URL
!! input
[[//www.example.com]]
!! result
<p>[<a rel="nofollow" class="external autonumber" href="//www.example.com">[1]</a>]
</p>
!! end

!! test
Plain link to protocol-relative URL with link text
!! input
[[//www.example.com Link text]]
!! result
<p>[<a rel="nofollow" class="external text" href="//www.example.com">Link text</a>]
</p>
!! end

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

[[A?b|Baz]]
!! result
<p><a href="/wiki/A%3Fb" title="A?b">A?b</a>
</p><p><a href="/wiki/A%3Fb" title="A?b">Baz</a>
</p>
!! 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:
#<p>Piped link to URL: <a href="/index.php?title=Http://www.example.com&amp;action=edit" class="new">an example URL</a>
#</p>
# 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
<p>Piped link to URL: [<a rel="nofollow" class="external text" href="http://www.example.com%7Can">example URL</a>]
</p>
!! end

!! test
BUG 2: [[page|http://url/]] should link to page, not http://url/
!! input
[[Main Page|http://url/]]
!! result
<p><a href="/wiki/Main_Page" title="Main Page">http://url/</a>
</p>
!! end

!! test
BUG 337: Escaped self-links should be bold
!! options
title=[[Bug462]]
!! input
[[Bu&#103;462]] [[Bug462]]
!! result
<p><strong class="selflink">Bu&#103;462</strong> <strong class="selflink">Bug462</strong>
</p>
!! end

!! test
Self-link to section should not be bold
!! options
title=[[Main Page]]
!! input
[[Main Page#section]]
!! result
<p><a href="/wiki/Main_Page#section" title="Main Page">Main Page#section</a>
</p>
!! end

!! article
00
!! text
This is 00.
!! endarticle

!!test
Self-link to numeric title
!!options
title=[[0]]
!!input
[[0]]
!!result
<p><strong class="selflink">0</strong>
</p>
!!end

!!test
Link to numeric-equivalent title
!!options
title=[[0]]
!!input
[[00]]
!!result
<p><a href="/wiki/00" title="00">00</a>
</p>
!!end

!! test
<nowiki> inside a link
!! input
[[Main<nowiki> Page</nowiki>]] [[Main Page|the main page <nowiki>[it's not very good]</nowiki>]]
!! result
<p>[[Main Page]] <a href="/wiki/Main_Page" title="Main Page">the main page [it's not very good]</a>
</p>
!! end

!! test
Non-breaking spaces in title
!! input
[[&nbsp; Main &nbsp; Page &nbsp;]]
!! result
<p><a href="/wiki/Main_Page" title="Main Page">&#160; Main &#160; Page &#160;</a>
</p>
!!end

!! test
Internal link with ca linktrail, surrounded by bold apostrophes (bug 27473 primary issue)
!! options
language=ca
!! input
'''[[Main Page]]'''
!! result
<p><b><a href="/wiki/Main_Page" title="Main Page">Main Page</a></b>
</p>
!! end

!! test
Internal link with ca linktrail, surrounded by italic apostrophes (bug 27473 primary issue)
!! options
language=ca
!! input
''[[Main Page]]''
!! result
<p><i><a href="/wiki/Main_Page" title="Main Page">Main Page</a></i>
</p>
!! end

!! test
Internal link with en linktrail: no apostrophes (bug 27473)
!! options
language=en
!! input
[[Something]]'nice
!! result
<p><a href="/index.php?title=Something&amp;action=edit&amp;redlink=1" class="new" title="Something (page does not exist)">Something</a>'nice
</p>
!! end

!! test
Internal link with ca linktrail with apostrophes (bug 27473)
!! options
language=ca
!! input
[[Something]]'nice
!! result
<p><a href="/index.php?title=Something&amp;action=edit&amp;redlink=1" class="new" title="Something (encara no existeix)">Something'nice</a>
</p>
!! end

!! test
Internal link with kaa linktrail with apostrophes (bug 27473)
!! options
language=kaa
!! input
[[Something]]'nice
!! result
<p><a href="/index.php?title=Something&amp;action=edit&amp;redlink=1" class="new" title="Something (bet ele jaratılmag'an)">Something'nice</a>
</p>
!! end

!! article
Söfnuður
!! text
Test.
!! endarticle

!! test
Internal link with is link prefix
!! options
language=is
!! input
Aðrir mótmælenda[[söfnuður|söfnuðir]] og
!! result
<p>Aðrir <a href="/wiki/S%C3%B6fnu%C3%B0ur" title="Söfnuður">mótmælendasöfnuðir</a> og
</p>
!! end

!! article
Mótmælendatrú
!! text
Test.
!! endarticle

!! test
Internal link with is link trail and link prefix
!! options
language=is
!! input
[[mótmælendatrú|xxx]]ar
[[mótmælendatrú]]ar
mótmælenda[[söfnuður]]
mótmælenda[[söfnuður|söfnuðir]]
mótmælenda[[söfnuður|söfnuðir]]xxx
!! result
<p><a href="/wiki/M%C3%B3tm%C3%A6lendatr%C3%BA" title="Mótmælendatrú">xxxar</a>
<a href="/wiki/M%C3%B3tm%C3%A6lendatr%C3%BA" title="Mótmælendatrú">mótmælendatrúar</a>
<a href="/wiki/S%C3%B6fnu%C3%B0ur" title="Söfnuður">mótmælendasöfnuður</a>
<a href="/wiki/S%C3%B6fnu%C3%B0ur" title="Söfnuður">mótmælendasöfnuðir</a>
<a href="/wiki/S%C3%B6fnu%C3%B0ur" title="Söfnuður">mótmælendasöfnuðirxxx</a>
</p>
!! end

!! test
Parsoid link trail escaping
!! options
parsoid=html2wt,html2html
!! input
[[apple]]<nowiki/>s
!! result
<p><a rel="mw:WikiLink" href="Apple">apple</a>s</p>
!! end

!! test
Parsoid link prefix escaping
!! options
language=is
parsoid=html2wt,html2html
!! input
Aðrir mótmælenda<nowiki/>[[söfnuður]]
!! result
<p>Aðrir mótmælenda<a rel="mw:WikiLink" href="Söfnuður">söfnuður</a></p>
!! 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
<p><a href="/index.php?title=Foo&amp;action=edit&amp;redlink=1" class="new" title="Foo (page does not exist)">  bar</a>
</p><p><a href="/index.php?title=Foo&amp;action=edit&amp;redlink=1" class="new" title="Foo (page does not exist)">  <i>bar</i></a>
</p><p><a rel="nofollow" class="external text" href="http://wp.org">foo</a>
</p><p><a rel="nofollow" class="external text" href="http://wp.org"><i>foo</i></a>
</p>
!! end

###
### Interwiki links (see maintenance/interwiki.sql)
###

!! test
Inline interwiki link
!! input
[[MeatBall:SoftSecurity]]
!! result
<p><a href="http://www.usemod.com/cgi-bin/mb.pl?SoftSecurity" class="extiw" title="meatball:SoftSecurity">MeatBall:SoftSecurity</a>
</p>
!! end

!! test
Inline interwiki link with empty title (bug 2372)
!! input
[[MeatBall:]]
!! result
<p><a href="http://www.usemod.com/cgi-bin/mb.pl" class="extiw" title="meatball:">MeatBall:</a>
</p>
!! end

!! test
Interwiki link encoding conversion (bug 1636)
!! input
*[[Wikipedia:ro:Olteni&#0355;a]]
*[[Wikipedia:ro:Olteni&#355;a]]
!! result
<ul><li><a href="http://en.wikipedia.org/wiki/ro:Olteni%C5%A3a" class="extiw" title="wikipedia:ro:Olteniţa">Wikipedia:ro:Olteni&#355;a</a>
</li><li><a href="http://en.wikipedia.org/wiki/ro:Olteni%C5%A3a" class="extiw" title="wikipedia:ro:Olteniţa">Wikipedia:ro:Olteni&#355;a</a>
</li></ul>

!! end

!! test
Interwiki link with fragment (bug 2130)
!! input
[[MeatBall:SoftSecurity#foo]]
!! result
<p><a href="http://www.usemod.com/cgi-bin/mb.pl?SoftSecurity#foo" class="extiw" title="meatball:SoftSecurity">MeatBall:SoftSecurity#foo</a>
</p>
!! end

!! test
Interlanguage link
!! input
Blah blah blah
[[zh:Chinese]]
!!result
<p>Blah blah blah
</p>
!! end

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

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

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

!! test
Parsoid-specific test: Wikilinks with &nbsp; should RT properly
!! options
language=ln
!! input
[[WW&nbsp;II]]
!!result
<p><a href="/index.php?title=WW_II&amp;action=edit&amp;redlink=1" class="new" title="WW II (lonkásá  ezalí tɛ̂)">WW&#160;II</a>
</p>
!! end

!! test
Parsoid: handle constructor well
!! options
parsoid
!! input
[[constructor]]

[[constructor:foo]]
!! result
<p data-parsoid="{&quot;dsr&quot;:[0,15,0,0]}"><a rel="mw:WikiLink" href="./Constructor" data-parsoid="{&quot;stx&quot;:&quot;simple&quot;,&quot;a&quot;:{&quot;href&quot;:&quot;./Constructor&quot;},&quot;sa&quot;:{&quot;href&quot;:&quot;constructor&quot;},&quot;dsr&quot;:[0,15,2,2]}">constructor</a></p>


<p data-parsoid="{&quot;dsr&quot;:[17,36,0,0]}"><a rel="mw:WikiLink" href="./Foo" data-parsoid="{&quot;stx&quot;:&quot;simple&quot;,&quot;a&quot;:{&quot;href&quot;:&quot;./Foo&quot;},&quot;sa&quot;:{&quot;href&quot;:&quot;constructor:foo&quot;},&quot;dsr&quot;:[17,36,2,2]}">constructor:foo</a></p>
!! end

##
## Redirects, Parsoid-only
##
!! test
Simple redirect to page
!! options
parsoid
!! input
#REDIRECT [[Main Page]]
!! result
<link rel="mw:PageProp/redirect" href="./Main_Page">
!! end

!! test
Redirect to category
!! options
parsoid=wt2html
!! input
#REDIRECT [[Category:Foo]]
!! result
<link rel="mw:PageProp/redirect" href="./Category:Foo"><link rel="mw:WikiLink/Category" href="./Category:Foo">
!! end

!! test
Redirect to category page
!! options
parsoid=wt2html,html2html
!! input
#REDIRECT [[:Category:Foo]]
!! result
<p><a rel="mw:WikiLink" href="Category:Foo">Category:Foo</a></p>
!! end

!! test
Redirect to image page
!! options
parsoid
!! input
#REDIRECT [[File:Wiki.png]]
!! result
<link rel="mw:PageProp/redirect" href="./File:Wiki.png">
!! end

!! test
Redirect to language
!! options
parsoid
!! input
#REDIRECT [[en:File:Wiki.png]]
!! result
<link rel="mw:PageProp/redirect" href="File:Wiki.png">
!! end

!! test
Redirect to interwiki
!! options
parsoid
!! input
#REDIRECT [[meatball:File:Wiki.png]]
!! result
<link rel="mw:PageProp/redirect" href="File:Wiki.png">
!! end

##
## XHTML tidiness
###

!! test
<br> to <br />
!! input
1<br>2<br />3
!! result
<p>1<br />2<br />3
</p>
!! end

!! test
Broken br tag sanitization
!! options
php
!! input
</br>
!! result
<p>&lt;/br&gt;
</p>
!! end

# TODO: Fix html2html mode (bug 51055)!
!! test
Parsoid: Broken br tag recognition
!! options
parsoid=wt2html
!! input
</br>
!! result
<p><br></p>
!! end

!! test
Incorrecly removing closing slashes from correctly formed XHTML
!! input
<br style="clear:both;" />
!! result
<p><br style="clear:both;" />
</p>
!! end

!! test
Failing to transform badly formed HTML into correct XHTML
!! input
<br style="clear: left;">
<br style="clear: right;">
<br style="clear: both;">
!! result
<p><br style="clear: left;" />
<br style="clear: right;" />
<br style="clear: both;" />
</p>
!!end

!! test
Handling html with a div self-closing tag
!! input
<div title />
<div title/>
<div title/ >
<div title=bar />
<div title=bar/>
<div title=bar/ >
!! result
<p>&lt;div title /&gt;
&lt;div title/&gt;
</p>
<div>
<p>&lt;div title=bar /&gt;
&lt;div title=bar/&gt;
</p>
<div title="bar/"></div>
</div>

!! end

!! test
Handling html with a br self-closing tag
!! input
<br title />
<br title/>
<br title/ >
<br title=bar />
<br title=bar/>
<br title=bar/ >
!! result
<p><br title="title" />
<br title="title" />
<br />
<br title="bar" />
<br title="bar" />
<br title="bar/" />
</p>
!! end

!! test
Horizontal ruler (should it add that extra space?)
!! input
<hr>
<hr >
foo <hr
> bar
!! result
<hr />
<hr />
foo <hr /> bar

!! end

!! test
Horizontal ruler -- 4+ dashes render hr
!! input
----
!! result
<hr />

!! end

!! test
Horizontal ruler -- eats additional dashes on the same line
!! input
---------
!! result
<hr />

!! end

!! test
Horizontal ruler -- does not collapse dashes on consecutive lines
!! input
----
----
!! result
<hr />
<hr />

!! end

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

!! test
Horizontal ruler -- Supports content following dashes on same line
!! input
---- Foo
!! result
<hr /> Foo

!! end

###
### Block-level elements
###
!! test
Common list
!! input
*Common list
* item 2
*item 3
!! result
<ul><li>Common list
</li><li> item 2
</li><li>item 3
</li></ul>

!! end

!! test
Numbered list
!! input
#Numbered list
#item 2
# item 3
!! result
<ol><li>Numbered list
</li><li>item 2
</li><li> item 3
</li></ol>

!! 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
<ul><li>Mixed list
<ol><li> with numbers
</li></ol>
<ul><li> and bullets
</li></ul>
<ol><li> and numbers
</li></ol>
</li><li>bullets again
<ul><li>bullet level 2
<ul><li>bullet level 3
<ol><li>Number on level 4
</li></ol>
</li></ul>
</li><li>bullet level 2
<ol><li>Number on level 3
</li><li>Number on level 3
</li></ol>
</li></ul>
<ol><li>number level 2
</li></ol>
</li><li>Level 1
<ul><li><ul><li> Level 3
</li></ul>
</li></ul>
</li></ul>
<ol><li><ul><li><ul><li> Level 3, but ordered
</li></ul>
</li></ul>
</li></ol>

!! end

!! test
Nested lists 1
!! input
*foo
**bar
!! result
<ul><li>foo
<ul><li>bar
</li></ul>
</li></ul>

!! end

!! test
Nested lists 2
!! input
**foo
*bar
!! result
<ul><li><ul><li>foo
</li></ul>
</li><li>bar
</li></ul>

!! end

!! test
Nested lists 3 (first element empty)
!! input
*
**bar
!! result
<ul><li>
<ul><li>bar
</li></ul>
</li></ul>

!! end

!! test
Nested lists 4 (first element empty)
!! input
**
*bar
!! result
<ul><li><ul><li>
</li></ul>
</li><li>bar
</li></ul>

!! end

!! test
Nested lists 5 (both elements empty)
!! input
**
*
!! result
<ul><li><ul><li>
</li></ul>
</li><li>
</li></ul>

!! end

!! test
Nested lists 6 (both elements empty)
!! input
*
**
!! result
<ul><li>
<ul><li>
</li></ul>
</li></ul>

!! end

!! test
Nested lists 7 (skip initial nesting levels)
!! input
*** foo
!! result
<ul><li><ul><li><ul><li> foo
</li></ul>
</li></ul>
</li></ul>

!! end

!! test
Nested lists 8 (multiple nesting transitions)
!! input
* foo
*** bar
** baz
* boo
!! result
<ul><li> foo
<ul><li><ul><li> bar
</li></ul>
</li><li> baz
</li></ul>
</li><li> boo
</li></ul>

!! end

!! test
1. Lists with start-of-line-transparent tokens before bullets: Comments
!! input
*foo
*<!--cmt-->bar
<!--cmt-->*baz
!! result
<ul><li>foo
</li><li>bar
</li><li>baz
</li></ul>

!! end

!! test
2. Lists with start-of-line-transparent tokens before bullets: Template close
!! input
*foo {{echo|bar
}}*baz
!! result
<ul><li>foo bar
</li><li>baz
</li></ul>

!! end

!! test
List items are not parsed correctly following a <pre> block (bug 785)
!! input
* <pre>foo</pre>
* <pre>bar</pre>
* zar
!! result
<ul><li> <pre>foo</pre>
</li><li> <pre>bar</pre>
</li><li> zar
</li></ul>

!! 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
<ul><li> item 1
</li><li> item 2
</li></ul>
<ul><li> item 0
</li><li> item 1
</li><li> item 2
</li></ul>
<ul><li> item 0
</li><li> notSOL
</li><li> item 1
</li><li> item 2
</li></ul>

!! end

!! test
List interrupted by empty line or heading
!! input
* foo

** bar
== A heading ==
* Another list item
!! result
<ul><li> foo
</li></ul>
<ul><li><ul><li> bar
</li></ul>
</li></ul>
<h2><span class="mw-headline" id="A_heading">A heading</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=1" title="Edit section: A heading">edit</a><span class="mw-editsection-bracket">]</span></span></h2>
<ul><li> Another list item
</li></ul>

!!end

!!test
Multiple list tags generated by templates
!!input
{{echo|<li>}}a
{{echo|<li>}}b
{{echo|<li>}}c
!!result
<li>a
<li>b
<li>c</li>
</li>
</li>

!!end

!!test
Single-comment whitespace lines dont break lists, but multi-comment whitespace lines do
!!input
*a
<!--This line will NOT split the list-->
*b
 <!--This line will NOT split the list either-->
*c
 <!--foo--> <!--This line with more than 1 comment will split the list-->
*d
!!result
<ul><li>a
</li><li>b
</li><li>c
</li></ul>
<ul><li>d
</li></ul>

!!end

!!test
Test the li-hack
(Cannot test this with PHP parser since it relies on Tidy for the hack)
!!options
parsoid=wt2html,wt2wt
!!input
* foo
* <li>li-hack
* {{echo|<li>templated li-hack}}
* <!--foo--> <li> unsupported li-hack with preceding comments

<ul>
<li><li>not a li-hack
</li>
</ul>
!!result
<ul><li> foo</li>
<li>li-hack</li>
<li about="#mwt1" typeof="mw:Transclusion" data-mw='{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"<li>templated li-hack"}}}'>templated li-hack</li>
<li> <!--foo--> </li><li> li-hack with preceding comments</li></ul>

<ul>
<li></li><li>not a li-hack
</li>
</ul>
!!end

!! test
Parsoid: Make sure nested lists are serialized on their own line even if HTML contains no newlines
!! options
parsoid
!! input
# foo
## bar
* foo
** bar
: foo
:: bar
!! result
<ol><li> foo<ol><li> bar</li></ol></li></ol><ul><li> foo<ul><li> bar</li></ul></li></ul><dl><dd> foo<dl><dd> bar</dd></dl></dd></dl>
!! end

# ------------------------------------------------------------------------
# The next set of tests are about Parsoid's ability to handle badly nested
# tags (parse, minimize scope of fixup, and roundtrip back)
# ------------------------------------------------------------------------

!! test
Unbalanced closing block tags break a list
(Parsoid-only since php parser generates broken html -- relies on Tidy to fix up)
!! options
parsoid
!! input
<div>
*a</div><div>
*b</div>
!! result
<div>
<ul><li>a
</li></ul></div><div>
<ul><li>b
</li></ul></div>
!! end

!! test
Unbalanced closing non-block tags don't break a list
(Parsoid-only since php parser generates broken html -- relies on Tidy to fix up)
!! options
parsoid
!! input
<span>
*a</span><span>
*b</span>
!! result
<p><span></span>
</p>
<ul><li>a<span></span>
</li><li>b
</li></ul>
!! end

!! test
Unclosed formatting tags that straddle lists are closed and reopened
(Parsoid-only since php parser generates broken html -- relies on Tidy to fix up)
!! options
parsoid
!! input
# <s> a
# b </s>
!! result
<ol><li> <s> a </s>
</li><li> <s> b </s>
</li></ol>
!! 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
<small>
* foo
</small>
!!result
<p><small></small></p>
<small>
<ul>
<li> foo</li>
</ul>
</small>
<p><small></small></p>
!!end

###
### Magic Words
###

!! test
Magic Word: {{CURRENTDAY}}
!! input
{{CURRENTDAY}}
!! result
<p>1
</p>
!! end

!! test
Magic Word: {{CURRENTDAY2}}
!! input
{{CURRENTDAY2}}
!! result
<p>01
</p>
!! end

!! test
Magic Word: {{CURRENTDAYNAME}}
!! input
{{CURRENTDAYNAME}}
!! result
<p>Thursday
</p>
!! end

!! test
Magic Word: {{CURRENTDOW}}
!! input
{{CURRENTDOW}}
!! result
<p>4
</p>
!! end

!! test
Magic Word: {{CURRENTMONTH}}
!! input
{{CURRENTMONTH}}
!! result
<p>01
</p>
!! end

!! test
Magic Word: {{CURRENTMONTHABBREV}}
!! input
{{CURRENTMONTHABBREV}}
!! result
<p>Jan
</p>
!! end

!! test
Magic Word: {{CURRENTMONTHNAME}}
!! input
{{CURRENTMONTHNAME}}
!! result
<p>January
</p>
!! end

!! test
Magic Word: {{CURRENTMONTHNAMEGEN}}
!! input
{{CURRENTMONTHNAMEGEN}}
!! result
<p>January
</p>
!! end

!! test
Magic Word: {{CURRENTTIME}}
!! input
{{CURRENTTIME}}
!! result
<p>00:02
</p>
!! end

!! test
Magic Word: {{CURRENTWEEK}} (@bug 4594)
!! input
{{CURRENTWEEK}}
!! result
<p>1
</p>
!! end

!! test
Magic Word: {{CURRENTYEAR}}
!! input
{{CURRENTYEAR}}
!! result
<p>1970
</p>
!! end

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

!! test
Magic Word: {{FULLPAGENAMEE}}
!! options
title=[[User:Ævar Arnfjörð Bjarmason]]
!! input
{{FULLPAGENAMEE}}
!! result
<p>User:%C3%86var_Arnfj%C3%B6r%C3%B0_Bjarmason
</p>
!! end

!! test
Magic Word: {{NAMESPACE}}
!! options
title=[[User:Ævar Arnfjörð Bjarmason]]
!! input
{{NAMESPACE}}
!! result
<p>User
</p>
!! end

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

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

!! test
Magic Word: {{NUMBEROFFILES}}
!! input
{{NUMBEROFFILES}}
!! result
<p>4
</p>
!! end

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

!! test
Magic Word: {{PAGENAME}} with metacharacters
!! options
title=[['foo & bar = baz']]
!! input
''{{PAGENAME}}''
!! result
<p><i>&#39;foo &#38; bar &#61; baz&#39;</i>
</p>
!! end

!! test
Magic Word: {{PAGENAME}} with metacharacters (bug 26781)
!! options
title=[[*RFC 1234 http://example.com/]]
!! input
{{PAGENAME}}
!! result
<p>&#42;RFC&#32;1234 http&#58;//example.com/
</p>
!! end

!! test
Magic Word: {{PAGENAMEE}}
!! options
title=[[User:Ævar Arnfjörð Bjarmason]]
!! input
{{PAGENAMEE}}
!! result
<p>%C3%86var_Arnfj%C3%B6r%C3%B0_Bjarmason
</p>
!! end

!! test
Magic Word: {{PAGENAMEE}} with metacharacters (bug 26781)
!! options
title=[[*RFC 1234 http://example.com/]]
!! input
{{PAGENAMEE}}
!! result
<p>&#42;RFC_1234_http&#58;//example.com/
</p>
!! end

!! test
Magic Word: {{REVISIONID}}
!! input
{{REVISIONID}}
!! result
<p>1337
</p>
!! end

!! test
Magic Word: {{SCRIPTPATH}}
!! input
{{SCRIPTPATH}}
!! result
<p>/
</p>
!! end

!! test
Magic Word: {{SERVER}}
!! input
{{SERVER}}
!! result
<p><a rel="nofollow" class="external free" href="http://example.org">http://example.org</a>
</p>
!! end

!! test
Magic Word: {{SERVERNAME}}
!! input
{{SERVERNAME}}
!! result
<p>example.org
</p>
!! end

!! test
Magic Word: {{SITENAME}}
!! input
{{SITENAME}}
!! result
<p>MediaWiki
</p>
!! end

!! test
Case-sensitive magic words, when cased differently, should just be template transclusions
!! input
{{CurrentMonth}}
{{currentday}}
{{cURreNTweEK}}
{{currentHour}}
!! result
<p><a href="/index.php?title=Template:CurrentMonth&amp;action=edit&amp;redlink=1" class="new" title="Template:CurrentMonth (page does not exist)">Template:CurrentMonth</a>
<a href="/index.php?title=Template:Currentday&amp;action=edit&amp;redlink=1" class="new" title="Template:Currentday (page does not exist)">Template:Currentday</a>
<a href="/index.php?title=Template:CURreNTweEK&amp;action=edit&amp;redlink=1" class="new" title="Template:CURreNTweEK (page does not exist)">Template:CURreNTweEK</a>
<a href="/index.php?title=Template:CurrentHour&amp;action=edit&amp;redlink=1" class="new" title="Template:CurrentHour (page does not exist)">Template:CurrentHour</a>
</p>
!! end

!! test
Case-insensitive magic words should still work with weird casing.
!! input
{{sErVeRNaMe}}
{{LCFirst:AOEU}}
{{ucFIRST:aoeu}}
{{SERver}}
!! result
<p>example.org
aOEU
Aoeu
<a rel="nofollow" class="external free" href="http://example.org">http://example.org</a>
</p>
!! end

!! test
Namespace 1 {{ns:1}}
!! input
{{ns:1}}
!! result
<p>Talk
</p>
!! end

!! test
Namespace 1 {{ns:01}}
!! input
{{ns:01}}
!! result
<p>Talk
</p>
!! 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
<p>Special
</p>
!! end

!! test
Namespace User {{ns:User}}
!! input
{{ns:User}}
!! result
<p>User
</p>
!! end

!! test
Namespace User talk {{ns:User_talk}}
!! input
{{ns:User_talk}}
!! result
<p>User talk
</p>
!! end

!! test
Namespace User talk {{ns:uSeR tAlK}}
!! input
{{ns:uSeR tAlK}}
!! result
<p>User talk
</p>
!! end

!! test
Namespace File {{ns:File}}
!! input
{{ns:File}}
!! result
<p>File
</p>
!! end

!! test
Namespace File {{ns:Image}}
!! input
{{ns:Image}}
!! result
<p>File
</p>
!! end

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

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


!! test
Urlencode
!! input
{{urlencode:hi world?!}}
{{urlencode:hi world?!|WIKI}}
{{urlencode:hi world?!|PATH}}
{{urlencode:hi world?!|QUERY}}
!! result
<p>hi+world%3F%21
hi_world%3F!
hi%20world%3F%21
hi+world%3F%21
</p>
!! end

###
### Magic links
###
!! test
Magic links: internal link to RFC (bug 479)
!! input
[[RFC 123]]
!! result
<p><a href="/index.php?title=RFC_123&amp;action=edit&amp;redlink=1" class="new" title="RFC 123 (page does not exist)">RFC 123</a>
</p>
!! end

!! test
Magic links: RFC (bug 479)
!! input
RFC 822
!! result
<p><a class="external mw-magiclink-rfc" rel="nofollow" href="//tools.ietf.org/html/rfc822">RFC 822</a>
</p>
!! end

!! test
Magic links: ISBN (bug 1937)
!! input
ISBN 0-306-40615-2
!! result
<p><a href="/wiki/Special:BookSources/0306406152" class="internal mw-magiclink-isbn">ISBN 0-306-40615-2</a>
</p>
!! end

!! test
Magic links: PMID incorrectly converts space to underscore
!! input
PMID 1234
!! result
<p><a class="external mw-magiclink-pmid" rel="nofollow" href="//www.ncbi.nlm.nih.gov/pubmed/1234?dopt=Abstract">PMID 1234</a>
</p>
!! end

###
### Templates
####

!! test
Nonexistent template
!! input
{{thistemplatedoesnotexist}}
!! result
<p><a href="/index.php?title=Template:Thistemplatedoesnotexist&amp;action=edit&amp;redlink=1" class="new" title="Template:Thistemplatedoesnotexist (page does not exist)">Template:Thistemplatedoesnotexist</a>
</p>
!! end

!! test
Template with invalid target containing tags
!! input
{{a<b>b</b>|{{echo|foo}}|{{echo|a}}={{echo|b}}|a = b}}
!! result
<p>{{a<b>b</b>|foo|a=b|a = b}}
</p>
!! end

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

!! article
Template:test
!! text
This is a test template
!! endarticle

!! test
Simple template
!! input
{{test}}
!! result
<p>This is a test template
</p>
!! end

!! test
Template with explicit namespace
!! input
{{Template:test}}
!! result
<p>This is a test template
</p>
!! end


!! article
Template:paramtest
!! text
This is a test template with parameter {{{param}}}
!! endarticle

!! test
Template parameter
!! input
{{paramtest|param=foo}}
!! result
<p>This is a test template with parameter foo
</p>
!! end

!! article
Template:paramtestnum
!! text
[[{{{1}}}|{{{2}}}]]
!! endarticle

!! test
Template unnamed parameter
!! input
{{paramtestnum|Main Page|the main page}}
!! result
<p><a href="/wiki/Main_Page" title="Main Page">the main page</a>
</p>
!! 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
<p>(test)
</p>
!! end

!! test
Template with template name as argument
!! input
{{templateasargtest|templ=simple}}
!! result
<p>(test)
</p>
!! end

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

!! article
Template:templateasargtestdefault
!! text
{{{{{templ|templatesimple}}}}}
!! endarticle

!! article
Template:templa
!! text
'''templ'''
!! endarticle

!! test
Template with default value
!! input
{{templateasargtestdefault}}
!! result
<p>(test)
</p>
!! end

!! test
Template with default value (value set)
!! input
{{templateasargtestdefault|templ=templa}}
!! result
<p><b>templ</b>
</p>
!! end

!! test
Template redirect
!! input
{{templateredirect}}
!! result
<p>(test)
</p>
!! end

!! test
Template with argument in separate line
!! input
{{ templateasargtest  |
 templ = simple }}
!! result
<p>(test)
</p>
!! end

!! test
Template with complex template as argument
!! input
{{paramtest|
  param ={{ templateasargtest  |
 templ = simple }}}}
!! result
<p>This is a test template with parameter (test)
</p>
!! 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 <div class="thumb tright"><div class="thumbinner" style="width:182px;"><a href="/index.php?title=Special:Upload&amp;wpDestFile=Noimage.png" class="new" title="File:Noimage.png">File:Noimage.png</a>  <div class="thumbcaption"><a href="/index.php?title=No_link&amp;action=edit&amp;redlink=1" class="new" title="No link (page does not exist)">link</a> <a href="/index.php?title=No_link&amp;action=edit&amp;redlink=1" class="new" title="No link (page does not exist)">caption</a></div></div></div>

!! 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
<p><a href="/wiki/Template:Complextemplate" title="Template:Complextemplate">link</a> This is a test template with parameter (test)
</p>
!! end

!! test
BUG 553: link with two variables in a piped link
!! input
{|
|[[{{{1}}}|{{{2}}}]]
|}
!! result
<table>
<tr>
<td>[[{{{1}}}|{{{2}}}]]
</td></tr></table>

!! end

!! test
Magic variable as template parameter
!! input
{{paramtest|param={{SITENAME}}}}
!! result
<p>This is a test template with parameter MediaWiki
</p>
!! end

!! article
Template:linktest
!! text
[[{{{param}}}|link]]
!! endarticle

!! test
Template parameter as link source
!! input
{{linktest|param=Main Page}}
!! result
<p><a href="/wiki/Main_Page" title="Main Page">link</a>
</p>
!! end

!!test
Template-generated attribute string (k='v')
!!input
<span {{attr_str|id|v1}}>bar</span>
!!result
<p><span id="v1">bar</span>
</p>
!!end

!!article
Template:paramtest2
!! text
including another template, {{paramtest|param={{{arg}}}}}
!! endarticle

!! test
Template passing argument to another template
!! input
{{paramtest2|arg='hmm'}}
!! result
<p>including another template, This is a test template with parameter 'hmm'
</p>
!! end

!! article
Template:Linktest2
!! text
Main Page
!! endarticle

!! test
Template as link source
!! input
[[{{linktest2}}]]

[[{{linktest2}}|Main Page]]

[[{{linktest2}}]]Page
!! result
<p><a href="/wiki/Main_Page" title="Main Page">Main Page</a>
</p><p><a href="/wiki/Main_Page" title="Main Page">Main Page</a>
</p><p><a href="/wiki/Main_Page" title="Main Page">Main Page</a>Page
</p>
!! end


!! article
Template:loop1
!! text
{{loop2}}
!! endarticle

!! article
Template:loop2
!! text
{{loop1}}
!! endarticle

!! test
Template infinite loop
!! input
{{loop1}}
!! result
<p><span class="error">Template loop detected: <a href="/wiki/Template:Loop1" title="Template:Loop1">Template:Loop1</a></span>
</p>
!! end

!! test
Template from main namespace
!! input
{{:Main Page}}
!! result
<p>blah blah
</p>
!! 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
<p>foo 
</p>
<table>
<tr>
<td> 1 </td>
<td> 2
</td></tr>
<tr>
<td> 3 </td>
<td> 4
</td></tr></table>

!! end

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

!! end

!! test
BUG 41: Template parameters shown as broken links
!! input
{{{parameter}}}
!! result
<p>{{{parameter}}}
</p>
!! end

!! test
Template with targets containing wikilinks
!! input
{{[[foo]]}}

{{[[{{echo|foo}}]]}}

{{{{echo|[[foo}}]]}}
!! result
<p>{{<a href="/index.php?title=Foo&amp;action=edit&amp;redlink=1" class="new" title="Foo (page does not exist)">foo</a>}}
</p><p>{{<a href="/index.php?title=Foo&amp;action=edit&amp;redlink=1" class="new" title="Foo (page does not exist)">foo</a>}}
</p><p>{{[[foo}}]]
</p>
!! 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
<p>''None'' of '''this''' should be 
* interpreted
 but rather passed unmodified
{{test}}
</p>
!! end

!! test
int keyword
!! input
{{int:youhavenewmessages|lots of money|not!}}
!! result
<p>You have lots of money (not!).
</p>
!! end

!! article
Template:Includes
!! text
Foo<noinclude>zar</noinclude><includeonly>bar</includeonly>
!! endarticle

!! test
<includeonly> and <noinclude> being included
!! input
{{Includes}}
!! result
<p>Foobar
</p>
!! end

!! article
Template:Includes2
!! text
<onlyinclude>Foo</onlyinclude>bar
!! endarticle

!! test
<onlyinclude> being included
!! input
{{Includes2}}
!! result
<p>Foo
</p>
!! end


!! article
Template:Includes3
!! text
<onlyinclude>Foo</onlyinclude>bar<includeonly>zar</includeonly>
!! endarticle

!! test
<onlyinclude> and <includeonly> being included
!! input
{{Includes3}}
!! result
<p>Foo
</p>
!! end

!! test
<includeonly> and <noinclude> on a page
!! input
Foo<noinclude>zar</noinclude><includeonly>bar</includeonly>
!! result
<p>Foozar
</p>
!! end

!! test
Un-closed <noinclude>
!! input
<noinclude>
!! result
!! end

!! test
<onlyinclude> on a page
!! input
<onlyinclude>Foo</onlyinclude>bar
!! result
<p>Foobar
</p>
!! end

!! test
Un-closed <onlyinclude>
!! input
<onlyinclude>
!! result
!! end

!!test
Self-closed noinclude, includeonly, onlyinclude tags
!!input
<noinclude />
<includeonly />
<onlyinclude />
!!result
<p><br />
</p>
!!end

!!test
Unbalanced includeonly and noinclude tags
!!input
{|
|a</noinclude>
|b</noinclude></noinclude>
|c</noinclude></includeonly>
|d</includeonly></includeonly>
|}
!!result
<table>
<tr>
<td>a
</td>
<td>b
</td>
<td>c&lt;/includeonly&gt;
</td>
<td>d&lt;/includeonly&gt;&lt;/includeonly&gt;
</td></tr></table>

!!end

!! article
Template:Includeonly section
!! text
<includeonly>
==Includeonly section==
</includeonly>
==Section T-1==
!!endarticle

!! test
Bug 6563: Edit link generation for section shown by <includeonly>
!! input
{{includeonly section}}
!! result
<h2><span class="mw-headline" id="Includeonly_section">Includeonly section</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Template:Includeonly_section&amp;action=edit&amp;section=T-1" title="Template:Includeonly section">edit</a><span class="mw-editsection-bracket">]</span></span></h2>
<h2><span class="mw-headline" id="Section_T-1">Section T-1</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Template:Includeonly_section&amp;action=edit&amp;section=T-2" title="Template:Includeonly section">edit</a><span class="mw-editsection-bracket">]</span></span></h2>

!! end

# Uses same input as the contents of [[Template:Includeonly section]]
!! test
Bug 6563: Section extraction for section shown by <includeonly>
!! options
section=T-2
!! input
<includeonly>
==Includeonly section==
</includeonly>
==Section T-2==
!! result
==Section T-2==
!! end

!! test
Bug 6563: Edit link generation for section suppressed by <includeonly>
!! input
<includeonly>
==Includeonly section==
</includeonly>
==Section 1==
!! result
<h2><span class="mw-headline" id="Section_1">Section 1</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=1" title="Edit section: Section 1">edit</a><span class="mw-editsection-bracket">]</span></span></h2>

!! end

!! test
Bug 6563: Section extraction for section suppressed by <includeonly>
!! options
section=1
!! input
<includeonly>
==Includeonly section==
</includeonly>
==Section 1==
!! result
==Section 1==
!! end

!! test
Un-closed <includeonly>
!! input
<includeonly>
!! result
!! end

###
### <includeonly> and <noinclude> in attributes
###
!!test
0. includeonly around the entire attribute
!!input
<span <includeonly>id="v1"</includeonly><noinclude>id="v2"</noinclude>>bar</span>
!!result
<p><span id="v2">bar</span>
</p>
!!end

!!test
1. includeonly in html attr key
!!input
<span <noinclude>id</noinclude><includeonly>about</includeonly>="foo">bar</span>
!!result
<p><span id="foo">bar</span>
</p>
!!end

!!test
2. includeonly in html attr value
!!input
<span id="<noinclude>v1</noinclude><includeonly>v2</includeonly>">bar</span>
<span id=<noinclude>"v1"</noinclude><includeonly>"v2"</includeonly>>bar</span>
!!result
<p><span id="v1">bar</span>
<span id="v1">bar</span>
</p>
!!end

!!test
3. includeonly in part of an attr value
!!input
<span style="color:<noinclude>red</noinclude><includeonly>blue</includeonly>;">bar</span>
!!result
<p><span style="color:red;">bar</span>
</p>
!!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
<p>foo
</p>
!!end

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

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

###
### Parsoid-centric tests to stress Parsoid's ability to RT them unchanged
###

!!test
Templates: 1. Simple use
!!input
{{echo|Foo}}
!!result
<p>Foo
</p>
!!end

!!test
Templates: 2. Inside a block tag
!!input
<div>{{echo|Foo}}</div>
!!result
<div>Foo</div>

!!end

!!test
Templates: P-wrapping: 1a. Templates on consecutive lines
!!input
{{echo|Foo}}
{{echo|bar}}
!!result
<p>Foo
bar
</p>
!!end

!!test
Templates: P-wrapping: 1b. Templates on consecutive lines
!!input
Foo

{{echo|bar}}
{{echo|baz}}
!!result
<p>Foo
</p><p>bar
baz
</p>
!!end

!!test
Templates: P-wrapping: 1c. Templates on consecutive lines
!!input
{{echo|Foo}}
{{echo|bar}} <div>baz</div>
!!result
<p>Foo
</p>
bar <div>baz</div>

!!end

!!test
Templates: P-wrapping: 1d. Template preceded by comment-only line
!!options
parsoid=wt2html,wt2wt
!!input
<!-- foo -->
{{echo|Bar}}
!!result
<!-- foo -->
<p typeof="mw:Transclusion">Bar
</p>
!!end

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

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

!!test
Templates: Block Tags: 1. Multiple template uses
!!input
{{echo|<div>Foo</div>}}<div>bar</div>{{echo|<div>baz</div>}}
!!result
<div>Foo</div><div>bar</div><div>baz</div>

!!end

!!test
Templates: Block Tags: 2. Back-to-back template uses
!!input
{{echo|<div>Foo</div>}}{{echo|<div>bar</div>}}
!!result
<div>Foo</div><div>bar</div>

!!end

!!test
Templates: Links: 1. Simple example
!!input
{{echo|[[Foo|bar]]}}
!!result
<p><a href="/index.php?title=Foo&amp;action=edit&amp;redlink=1" class="new" title="Foo (page does not exist)">bar</a>
</p>
!!end

!!test
Templates: Links: 2. Generation of link href
!!input
[[{{echo|Foo}}|bar]]
!!result
<p><a href="/index.php?title=Foo&amp;action=edit&amp;redlink=1" class="new" title="Foo (page does not exist)">bar</a>
</p>
!!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
<p><a href="/index.php?title=Foo&amp;action=edit&amp;redlink=1" class="new" title="Foo (page does not exist)">bar</a>
</p><p><a href="/index.php?title=Foobar&amp;action=edit&amp;redlink=1" class="new" title="Foobar (page does not exist)">Foobar</a>
</p><p><a href="/index.php?title=Foobarbaz&amp;action=edit&amp;redlink=1" class="new" title="Foobarbaz (page does not exist)">Foobarbaz</a>
</p><p><a href="/index.php?title=Foobar&amp;action=edit&amp;redlink=1" class="new" title="Foobar (page does not exist)">bar</a>
</p><p><a href="/index.php?title=Foobar&amp;action=edit&amp;redlink=1" class="new" title="Foobar (page does not exist)">Foobar</a>
</p><p><a href="/index.php?title=Foobar&amp;action=edit&amp;redlink=1" class="new" title="Foobar (page does not exist)">bar</a>
</p>
!!end

!!test
Templates: Links: 4. Multiple templates generating link href
!!input
[[{{echo|F}}{{echo|o}}ob{{echo|ar}}]]
!!result
<p><a href="/index.php?title=Foobar&amp;action=edit&amp;redlink=1" class="new" title="Foobar (page does not exist)">Foobar</a>
</p>
!!end

!!test
Templates: Links: 5. Generation of link text
!!input
[[Foo|{{echo|bar}}]]
!!result
<p><a href="/index.php?title=Foo&amp;action=edit&amp;redlink=1" class="new" title="Foo (page does not exist)">bar</a>
</p>
!!end

!!test
Templates: Links: 5. Nested templates (only outermost template should be marked)
!!input
{{echo|[[{{echo|Foo}}|bar]]}}
!!result
<p><a href="/index.php?title=Foo&amp;action=edit&amp;redlink=1" class="new" title="Foo (page does not exist)">bar</a>
</p>
!!end

!!test
Templates: HTML Tag: 1. Generation of HTML attr. key
!!input
<div {{echo|style}}="color:red;">foo</div>
!!result
<div style="color:red;">foo</div>

!!end

!!test
Templates: HTML Tag: 2. Generation of HTML attr. value
!!input
<div style={{echo|'color:red;'}}>foo</div>
!!result
<div style="color:red;">foo</div>

!!end

!!test
Templates: HTML Tag: 3. Generation of HTML attr key and value
!!input
<div {{echo|style}}={{echo|'color:red;'}}>foo</div>
!!result
<div style="color:red;">foo</div>

!!end

!!test
Templates: HTML Tag: 4. Generation of starting piece of HTML attr value
!!input
<div title="{{echo|This is a long title}} with just one piece templated">foo</div>
!!result
<div title="This is a long title with just one piece templated">foo</div>

!!end

!!test
Templates: HTML Tag: 5. Generation of middle piece of HTML attr value
!!input
<div title="This is a long title with just {{echo|one piece}} templated">foo</div>
!!result
<div title="This is a long title with just one piece templated">foo</div>

!!end

!!test
Templates: HTML Tag: 6. Generation of end piece of HTML attr value
!!input
<div title="This is a long title with just one piece {{echo|templated}}">foo</div>
!!result
<div title="This is a long title with just one piece templated">foo</div>

!!end

!!test
Templates: HTML Tag: 7. Generation of partial attribute key string
!!input
<div st{{echo|yle}}="color:red;">foo</div>
!!result
<div style="color:red;">foo</div>

!!end

!!test
Templates: HTML Tables: 1. Generating start of a HTML table
!!input
{{echo|<table><tr><td>foo</td>}}</tr></table>
!!result
<table><tr><td>foo</td></tr></table>

!!end

!!test
Templates: HTML Tables: 2a. Generating middle of a HTML table
!!input
<table><tr>{{echo|<td>foo</td>}}</tr></table>
!!result
<table><tr><td>foo</td></tr></table>

!!end

!!test
Templates: HTML Tables: 2b. Generating middle of a HTML table
!!input
<table>{{echo|<tr><td>foo</td></tr>}}</table>
!!result
<table><tr><td>foo</td></tr></table>

!!end

!!test
Templates: HTML Tables: 3. Generating end of a HTML table
!!input
<table><tr>{{echo|<td>foo</td></tr></table>}}
!!result
<table><tr><td>foo</td></tr></table>

!!end

!!test
Templates: HTML Tables: 4a. Generating a single tag of a HTML table
!!input
{{echo|<table>}}<tr><td>foo</td></tr></table>
!!result
<table><tr><td>foo</td></tr></table>

!!end

!!test
Templates: HTML Tables: 4b. Generating a single tag of a HTML table
!!input
<table>{{echo|<tr>}}<td>foo</td></tr></table>
!!result
<table><tr><td>foo</td></tr></table>

!!end

!!test
Templates: HTML Tables: 4c. Generating a single tag of a HTML table
!!input
<table><tr>{{echo|<td>}}foo</td></tr></table>
!!result
<table><tr><td>foo</td></tr></table>

!!end

!!test
Templates: HTML Tables: 4d. Generating a single tag of a HTML table
!!input
<table><tr><td>foo{{echo|</td>}}</tr></table>
!!result
<table><tr><td>foo</td></tr></table>

!!end

!!test
Templates: HTML Tables: 4e. Generating a single tag of a HTML table
!!input
<table><tr><td>foo</td>{{echo|</tr>}}</table>
!!result
<table><tr><td>foo</td></tr></table>

!!end

!!test
Templates: HTML Tables: 4f. Generating a single tag of a HTML table
!!input
<table><tr><td>foo</td></tr>{{echo|</table>}}
!!result
<table><tr><td>foo</td></tr></table>

!!end

!!test
Templates: HTML Tables: 5. Proper fostering of categories from inside
!!options
parsoid=wt2html,wt2wt
!!input
<table>[[Category:foo1]]<tr><td>foo</td></tr></table>
<!--Two categories (Bug 50330)-->
<table>[[Category:bar1]][[Category:bar2]]<tr><td>foo</td></tr></table>
!!result
<link rel="mw:WikiLink/Category" href="./Category:Foo1"><table><tbody><tr><td>foo</td></tr></tbody></table>
<!--Two categories (Bug 50330)-->
<link rel="mw:WikiLink/Category" href="./Category:Bar1"><link rel="mw:WikiLink/Category" href="./Category:Bar2"><table><tbody><tr><td>foo</td></tr></tbody></table>
!!end

!!test
Templates: Wiki Tables: 1a. Fostering of entire template content
!!input
{|
{{echo|a}}
|}
!!result
<table>
a
<tr><td></td></tr></table>

!!end

!!test
Templates: Wiki Tables: 1b. Fostering of entire template content
!!input
{|
{{echo|<div>}}
foo
{{echo|</div>}}
|}
!!result
<table>
<div>
<p>foo
</p>
</div>
<tr><td></td></tr></table>

!!end

!!test
Templates: Wiki Tables: 2. Fostering of partial template content
!!input
{|
{{echo|a
<div>b</div>}}
|}
!!result
<table>
a
<div>b</div>
<tr><td></td></tr></table>

!!end

!!test
Templates: Wiki Tables: 3. td-content via multiple templates
!!input
{|
{{echo|{{pipe}}a}}{{echo|b}}
|}
!!result
<table>
<tr>
<td>ab
</td></tr></table>

!!end

!!test
Templates: Wiki Tables: 4. Templated tags, no content
!!input
{{tbl-start}}
{{tbl-end}}
!!result
<table>
<tr><td></td></tr></table>

!!end

!!test
Templates: Wiki Tables: 5. Templated tags, regular td-tags
!!input
{{tbl-start}}
|foo
{{tbl-end}}
!!result
<table>
<tr>
<td>foo
</td></tr></table>

!!end

!!test
Templates: Wiki Tables: 6. Templated tags, templated td-tags
!!input
{{tbl-start}}
{{!}}foo
{{tbl-end}}
!!result
<table>
<tr>
<td>foo
</td></tr></table>

!!end

!!test
Templates: Lists: Multi-line list-items via templates
!!input
*{{echo|a {{nonexistent|
unused}}}}
*{{echo|b {{nonexistent|
unused}}}}
!!result
<ul><li>a <a href="/index.php?title=Template:Nonexistent&amp;action=edit&amp;redlink=1" class="new" title="Template:Nonexistent (page does not exist)">Template:Nonexistent</a>
</li><li>b <a href="/index.php?title=Template:Nonexistent&amp;action=edit&amp;redlink=1" class="new" title="Template:Nonexistent (page does not exist)">Template:Nonexistent</a>
</li></ul>

!!end

!!test
Templates: Ugly nesting: 1. Quotes opened/closed across templates (echo)
!!input
{{echo|''a}}{{echo|b''c''d}}{{echo|''e}}
!!result
<p><i>ab</i>c<i>d</i>e
</p>
!!end

!!test
Templates: Ugly nesting: 2. Quotes opened/closed across templates (echo_with_span)
(PHP parser generates misnested html)
!! options
parsoid=wt2html,wt2wt
!!input
{{echo_with_span|''a}}{{echo_with_span|b''c''d}}{{echo_with_span|''e}}
!!result
<p><span typeof="mw:Transclusion"><i>a</i></span><i typeof="mw:Transclusion"><span>b</span></i><span>c</span><i>d</i><span>e</span></p>
!!end

!!test
Templates: Ugly nesting: 3. Quotes opened/closed across templates (echo_with_div)
(PHP parser generates misnested html)
!! options
parsoid=wt2html,wt2wt
!!input
{{echo_with_div|''a}}{{echo_with_div|b''c''d}}{{echo_with_div|''e}}
!!result
<div typeof="mw:Transclusion"><i>a</i></div>
<div typeof="mw:Transclusion"><i>b</i>c<i>d</i></div>
<div typeof="mw:Transclusion">e</div>
!!end

!!test
Templates: Ugly nesting: 4. Divs opened/closed across templates
!!input
a<div>b{{echo|c</div>d}}e
!!result
a<div>bc</div>de

!!end

!!test
Templates: Ugly templates: 1. Navbox template parses badly leading to table misnesting
(Parsoid-centric)
!! options
parsoid
!!input
{|
|{{echo|foo</table>}}
|bar
|}
!!result
<table typeof="mw:Transclusion">
<tbody>
<tr>
<td>foo</td></tr></tbody></table><span>bar</span>
!!end

!!test
Templates: Ugly templates: 2. Navbox template parses badly leading to table misnesting
(Parsoid-centric)
!! options
parsoid
!!input
<table>
  <tr>
    <td>
    <table>
      <tr>
        <td>1. {{echo|foo </table>}}</td>
        <td> bar </td>
        <td>2. {{echo|baz </table>}}</td>
      </tr>
      <tr>
        <td>abc</td>
      </tr>
    </table>
    </td>
  </tr>
  <tr>
    <td>xyz</td>
  </tr>
</table>
!!result
<table  about="#mwt1" typeof="mw:Transclusion">
  <tbody><tr >
    <td >
    <table >
      <tbody><tr >
        <td >1. foo </td></tr></tbody></table></td>
        <td > bar </td>
        <td >2. baz </td></tr></tbody></table><span about="#mwt1">
      </span><span about="#mwt1">
      
        abc</span><span about="#mwt1">
      </span><span about="#mwt1">
    </span><span about="#mwt1">
    </span><span about="#mwt1">
  </span><span about="#mwt1">
  
    xyz</span><span about="#mwt1">
  </span><span about="#mwt1">
</span>
!!end

!! test
Templates: Ugly templates: 3. newline-only template parameter
!! input
foo {{echo|
}}
!! result
<p>foo 
</p>
!! 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
<p><br />
</p>
!! end


!!test
Parser Functions: 1. Simple example
!!input
{{uc:foo}}
!!result
<p>FOO
</p>
!!end

!!test
Parser Functions: 2. Nested use (only outermost should be marked up)
!!input
{{uc:{{lc:FOO}}}}
!!result
<p>FOO
</p>
!!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
<nowiki>'''not wiki'''</nowiki>
!! endarticle

!! test
pre-save transform: nowiki in subst (bug 1188)
!! options
pst
!! input
{{subst:nowikitest}}
!! result
<nowiki>'''not wiki'''</nowiki>
!! end


!! article
Template:commenttest
!! text
This template has <!-- a comment --> in it.
!! endarticle

!! test
pre-save transform: comment in subst (bug 1936)
!! options
pst
!! input
{{subst:commenttest}}
!! result
This template has <!-- a comment --> in it.
!! end

!! test
pre-save transform: unclosed tag
!! options
pst noxml
!! input
<nowiki>'''not wiki'''
!! result
<nowiki>'''not wiki'''
!! end

!! test
pre-save transform: mixed tag case
!! options
pst noxml
!! input
<NOwiki>'''not wiki'''</noWIKI>
!! result
<NOwiki>'''not wiki'''</noWIKI>
!! end

!! test
pre-save transform: unclosed comment in <nowiki>
!! options
pst noxml
!! input
wiki<nowiki>nowiki<!--nowiki</nowiki>wiki
!! result
wiki<nowiki>nowiki<!--nowiki</nowiki>wiki
!!end

# Leading @ in this template definition works around a limitation
# in parsoid's parserTests which otherwise strips the <span> from the
# result (confusing it for a template wrapper)
!! article
Template:dangerous
!!text
@<span onmouseover="alert('crap')">Oh no</span>
!!endarticle

!!test
(confirming safety of fix for subst bug 1936)
!! input
{{Template:dangerous}}
!! result
<p>@<span>Oh no</span>
</p>
!! end

!! test
pre-save transform: comment containing gallery (bug 5024)
!! options
pst
!! input
<!-- <gallery>data</gallery> -->
!!result
<!-- <gallery>data</gallery> -->
!!end

!! test
pre-save transform: comment containing extension
!! options
pst
!! input
<!-- <tag>data</tag> -->
!!result
<!-- <tag>data</tag> -->
!!end

!! test
pre-save transform: comment containing nowiki
!! options
pst
!! input
<!-- <nowiki>data</nowiki> -->
!!result
<!-- <nowiki>data</nowiki> -->
!!end

!! test
pre-save transform: <noinclude> in subst (bug 3298)
!! options
pst
!! input
{{subst:Includes}}
!! result
Foobar
!! end

!! test
pre-save transform: <onlyinclude> in subst (bug 3298)
!! options
pst
!! input
{{subst:Includes2}}
!! result
Foo
!! end

!! article
Template:SubstTest
!!text
{{<includeonly>subst:</includeonly>Includes}}
!! endarticle

!! article
Template:SafeSubstTest
!! text
{{<includeonly>safesubst:</includeonly>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
<p>Foobar
</p>
!! end

!! test:
subst: does not work during normal parse
!! input
{{SubstTest}}
!! result
<p>{{subst:Includes}}
</p>
!! 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
* ~~~
* <noinclude>~~~</noinclude>
* <includeonly>~~~</includeonly>
* <onlyinclude>~~~</onlyinclude>
!! result
* [[Special:Contributions/127.0.0.1|127.0.0.1]]
* <noinclude>[[Special:Contributions/127.0.0.1|127.0.0.1]]</noinclude>
* <includeonly>[[Special:Contributions/127.0.0.1|127.0.0.1]]</includeonly>
* <onlyinclude>[[Special:Contributions/127.0.0.1|127.0.0.1]]</onlyinclude>
!! end


!! test
pre-save transform: Signature expansion in nowiki tags (bug 93)
!! options
pst disabled
!! input
Shall not expand:

<nowiki>~~~~</nowiki>

<includeonly><nowiki>~~~~</nowiki></includeonly>

<noinclude><nowiki>~~~~</nowiki></noinclude>

<onlyinclude><nowiki>~~~~</nowiki></onlyinclude>

{{subst:Foo}} shall be converted to FOO

As well as inside noinclude/onlyinclude
<noinclude>{{subst:Foo}}</noinclude>
<onlyinclude>{{subst:Foo}}</onlyinclude>

But not inside includeonly
<includeonly>{{subst:Foo}}</includeonly>
!! result
Shall not expand:

<nowiki>~~~~</nowiki>

<includeonly><nowiki>~~~~</nowiki></includeonly>

<noinclude><nowiki>~~~~</nowiki></noinclude>

<onlyinclude><nowiki>~~~~</nowiki></onlyinclude>

FOO shall be converted to FOO

As well as inside noinclude/onlyinclude
<noinclude>FOO</noinclude>
<onlyinclude>FOO</onlyinclude>

But not inside includeonly
<includeonly>{{subst:Foo}}</includeonly>
!! 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: <noinclude> in transcluded template (bug 4926)
!! options
msg
!! input
{{Includes}}
!! result
Foobar
!! end

!! test
message transform: <onlyinclude> 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:foobar nonexistent}}
!! result
Special:Foobar nonexistent
!! 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:foobar nonexistent}}
!! result
Special:Foobar_nonexistent
!! end

###
### Images
###
!! test
Simple image
!! input
[[Image:foobar.jpg]]
!! result
<p><a href="/wiki/File:Foobar.jpg" class="image"><img alt="Foobar.jpg" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" /></a>
</p>
!! end

!! test
Right-aligned image
!! input
[[Image:foobar.jpg|right]]
!! result
<div class="floatright"><a href="/wiki/File:Foobar.jpg" class="image"><img alt="Foobar.jpg" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" /></a></div>

!! end

!! test
Simple image (using File: namespace, now canonical)
!! input
[[File:foobar.jpg]]
!! result
<p><a href="/wiki/File:Foobar.jpg" class="image"><img alt="Foobar.jpg" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" /></a>
</p>
!! end

!! test
Image with caption
!! input
[[Image:foobar.jpg|right|Caption text]]
!! result
<div class="floatright"><a href="/wiki/File:Foobar.jpg" class="image" title="Caption text"><img alt="Caption text" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" /></a></div>

!! end

!! test
Image with empty attribute
!! input
[[Image:foobar.jpg|right||Caption text]]
!! result
<div class="floatright"><a href="/wiki/File:Foobar.jpg" class="image" title="Caption text"><img alt="Caption text" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" /></a></div>

!! 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
<p>123<a href="/wiki/File:Foobar.jpg" class="image"><img alt="Foobar.jpg" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" /></a>456
</p>
123<div class="floatright"><a href="/wiki/File:Foobar.jpg" class="image"><img alt="Foobar.jpg" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" /></a></div>456
123<div class="thumb tright"><div class="thumbinner" style="width:182px;"><a href="/wiki/File:Foobar.jpg" class="image"><img alt="Foobar.jpg" src="http://example.com/images/thumb/3/3a/Foobar.jpg/180px-Foobar.jpg" width="180" height="20" class="thumbimage" srcset="http://example.com/images/thumb/3/3a/Foobar.jpg/270px-Foobar.jpg 1.5x, http://example.com/images/thumb/3/3a/Foobar.jpg/360px-Foobar.jpg 2x" /></a>  <div class="thumbcaption"><div class="magnify"><a href="/wiki/File:Foobar.jpg" class="internal" title="Enlarge"><img src="/skins/common/images/magnify-clip.png" width="15" height="11" alt="" /></a></div></div></div></div>456

!! end

!! test
Image with multiple captions -- only last one is accepted
!! input
[[Image:foobar.jpg|right|Caption1 - ignored|[[Caption2]] - ignored|Caption3 - accepted]]
!! result
<div class="floatright"><a href="/wiki/File:Foobar.jpg" class="image" title="Caption3 - accepted"><img alt="Caption3 - accepted" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" /></a></div>

!! 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
<div class="floatright"><a href="/wiki/File:Foobar.jpg" class="image" title="Caption"><img alt="Caption" src="http://example.com/images/thumb/3/3a/Foobar.jpg/200px-Foobar.jpg" width="200" height="23" srcset="http://example.com/images/thumb/3/3a/Foobar.jpg/300px-Foobar.jpg 1.5x, http://example.com/images/thumb/3/3a/Foobar.jpg/400px-Foobar.jpg 2x" /></a></div>
<div class="floatright"><a href="/wiki/File:Foobar.jpg" class="image" title="Caption"><img alt="Caption" src="http://example.com/images/thumb/3/3a/Foobar.jpg/200px-Foobar.jpg" width="200" height="23" srcset="http://example.com/images/thumb/3/3a/Foobar.jpg/300px-Foobar.jpg 1.5x, http://example.com/images/thumb/3/3a/Foobar.jpg/400px-Foobar.jpg 2x" /></a></div>
<div class="floatright"><a href="/wiki/File:Foobar.jpg" class="image" title="Caption"><img alt="Caption" src="http://example.com/images/thumb/3/3a/Foobar.jpg/200px-Foobar.jpg" width="200" height="23" srcset="http://example.com/images/thumb/3/3a/Foobar.jpg/300px-Foobar.jpg 1.5x, http://example.com/images/thumb/3/3a/Foobar.jpg/400px-Foobar.jpg 2x" /></a></div>

!! end

!! test
Image with link parameter, wiki target
!! input
[[Image:foobar.jpg|link=Target page]]
!! result
<p><a href="/wiki/Target_page" title="Target page"><img alt="Foobar.jpg" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" /></a>
</p>
!! end

!! test
Image with link parameter, URL target
!! input
[[Image:foobar.jpg|link=http://example.com/]]
!! result
<p><a href="http://example.com/" rel="nofollow"><img alt="Foobar.jpg" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" /></a>
</p>
!! end

!! test
Image with link parameter, wgExternalLinkTarget
!! input
[[Image:foobar.jpg|link=http://example.com/]]
!! config
wgExternalLinkTarget='foobar'
!! result
<p><a href="http://example.com/" target="foobar" rel="nofollow"><img alt="Foobar.jpg" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" /></a>
</p>
!! end

!! test
Image with link parameter, wgNoFollowLinks set to false
!! input
[[Image:foobar.jpg|link=http://example.com/]]
!! config
wgNoFollowLinks=false
!! result
<p><a href="http://example.com/"><img alt="Foobar.jpg" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" /></a>
</p>
!! end

!! test
Image with link parameter, wgNoFollowDomainExceptions
!! input
[[Image:foobar.jpg|link=http://example.com/]]
!! config
wgNoFollowDomainExceptions='example.com'
!! result
<p><a href="http://example.com/"><img alt="Foobar.jpg" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" /></a>
</p>
!! end

!! test
Image with link parameter, wgExternalLinkTarget, unnamed parameter
!! input
[[Image:foobar.jpg|link=http://example.com/|Title]]
!! config
wgExternalLinkTarget='foobar'
!! result
<p><a href="http://example.com/" title="Title" target="foobar" rel="nofollow"><img alt="Title" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" /></a>
</p>
!! end

!! test
Image with empty link parameter
!! input
[[Image:foobar.jpg|link=]]
!! result
<p><img alt="Foobar.jpg" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" />
</p>
!! end

!! test
Image with link parameter (wiki target) and unnamed parameter
!! input
[[Image:foobar.jpg|link=Target page|Title]]
!! result
<p><a href="/wiki/Target_page" title="Title"><img alt="Title" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" /></a>
</p>
!! end

!! test
Image with link parameter (URL target) and unnamed parameter
!! input
[[Image:foobar.jpg|link=http://example.com/|Title]]
!! result
<p><a href="http://example.com/" title="Title" rel="nofollow"><img alt="Title" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" /></a>
</p>
!! end

!! test
Thumbnail image with link parameter
!! options
php
!! input
[[Image:foobar.jpg|thumb|link=http://example.com/|Title]]
!! result
<div class="thumb tright"><div class="thumbinner" style="width:182px;"><a href="http://example.com/"><img alt="" src="http://example.com/images/thumb/3/3a/Foobar.jpg/180px-Foobar.jpg" width="180" height="20" class="thumbimage" srcset="http://example.com/images/thumb/3/3a/Foobar.jpg/270px-Foobar.jpg 1.5x, http://example.com/images/thumb/3/3a/Foobar.jpg/360px-Foobar.jpg 2x" /></a>  <div class="thumbcaption"><div class="magnify"><a href="/wiki/File:Foobar.jpg" class="internal" title="Enlarge"><img src="/skins/common/images/magnify-clip.png" width="15" height="11" alt="" /></a></div>Title</div></div></div>

!! end

!! test
Manually-specified thumbnail image
!! options
php
!! input
[[Image:Foobar.jpg|thumb=Thumb.png|Title]]
!! result
<div class="thumb tright"><div class="thumbinner" style="width:137px;"><a href="/wiki/File:Foobar.jpg"><img alt="" src="http://example.com/images/e/ea/Thumb.png" width="135" height="135" class="thumbimage" /></a>  <div class="thumbcaption"><div class="magnify"><a href="/wiki/File:Foobar.jpg" class="internal" title="Enlarge"><img src="/skins/common/images/magnify-clip.png" width="15" height="11" alt="" /></a></div>Title</div></div></div>

!! end

!! test
Manually-specified thumbnail image with explicit link to wiki page
!! options
php
!! input
[[Image:Foobar.jpg|thumb=Thumb.png|link=Main Page|Title]]
!! result
<div class="thumb tright"><div class="thumbinner" style="width:137px;"><a href="/wiki/Main_Page" title="Main Page"><img alt="" src="http://example.com/images/e/ea/Thumb.png" width="135" height="135" class="thumbimage" /></a>  <div class="thumbcaption"><div class="magnify"><a href="/wiki/File:Foobar.jpg" class="internal" title="Enlarge"><img src="/skins/common/images/magnify-clip.png" width="15" height="11" alt="" /></a></div>Title</div></div></div>

!! end

!! test
Manually-specified thumbnail image with explicit link to url
!! options
php
!! input
[[Image:Foobar.jpg|thumb=Thumb.png|link=http://example.com|Title]]
!! result
<div class="thumb tright"><div class="thumbinner" style="width:137px;"><a href="http://example.com"><img alt="" src="http://example.com/images/e/ea/Thumb.png" width="135" height="135" class="thumbimage" /></a>  <div class="thumbcaption"><div class="magnify"><a href="/wiki/File:Foobar.jpg" class="internal" title="Enlarge"><img src="/skins/common/images/magnify-clip.png" width="15" height="11" alt="" /></a></div>Title</div></div></div>

!! end

!! test
Manually-specified thumbnail image with explicit no link
!! options
php
!! input
[[Image:Foobar.jpg|thumb=Thumb.png|link=|Title]]
!! result
<div class="thumb tright"><div class="thumbinner" style="width:137px;"><img alt="" src="http://example.com/images/e/ea/Thumb.png" width="135" height="135" class="thumbimage" />  <div class="thumbcaption"><div class="magnify"><a href="/wiki/File:Foobar.jpg" class="internal" title="Enlarge"><img src="/skins/common/images/magnify-clip.png" width="15" height="11" alt="" /></a></div>Title</div></div></div>

!! end

!! test
Manually-specified thumbnail image with explicit link and alt text
!! options
php
!! input
[[Image:Foobar.jpg|thumb=Thumb.png|link=Main Page|alt=alttext|Title]]
!! result
<div class="thumb tright"><div class="thumbinner" style="width:137px;"><a href="/wiki/Main_Page" title="Main Page"><img alt="alttext" src="http://example.com/images/e/ea/Thumb.png" width="135" height="135" class="thumbimage" /></a>  <div class="thumbcaption"><div class="magnify"><a href="/wiki/File:Foobar.jpg" class="internal" title="Enlarge"><img src="/skins/common/images/magnify-clip.png" width="15" height="11" alt="" /></a></div>Title</div></div></div>

!! end

!! test
Image with frame and link
!! input
[[Image:Foobar.jpg|frame|left|This is a test image [[Main Page]]]]
!! result
<div class="thumb tleft"><div class="thumbinner" style="width:1943px;"><a href="/wiki/File:Foobar.jpg" class="image"><img alt="" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" class="thumbimage" /></a>  <div class="thumbcaption">This is a test image <a href="/wiki/Main_Page" title="Main Page">Main Page</a></div></div></div>

!! 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
<div class="thumb tleft"><div class="thumbinner" style="width:1943px;"><a href="/wiki/File:Foobar.jpg" class="image"><img alt="Altitude" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" class="thumbimage" /></a>  <div class="thumbcaption">This is a test image <a href="/wiki/Main_Page" title="Main Page">Main Page</a></div></div></div>

!! end

!! test
Image with wiki markup in implicit alt
!! input
[[Image:Foobar.jpg|testing '''bold''' in alt]]
!! result
<p><a href="/wiki/File:Foobar.jpg" class="image" title="testing bold in alt"><img alt="testing bold in alt" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" /></a>
</p>
!! end

!! test
Image with wiki markup in explicit alt
!! input
[[Image:Foobar.jpg|alt=testing '''bold''' in alt]]
!! result
<p><a href="/wiki/File:Foobar.jpg" class="image"><img alt="testing bold in alt" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" /></a>
</p>
!! end

!! test
Link to image page- image page normally doesn't exists, hence edit link
Add test with existing image page
#<p><a href="/wiki/File:Test" title="Image:Test">Image:test</a>
!! input
[[:Image:test]]
!! result
<p><a href="/index.php?title=File:Test&amp;action=edit&amp;redlink=1" class="new" title="File:Test (page does not exist)">Image:test</a>
</p>
!! end

!! test
bug 18784  Link to non-existent image page with caption should use caption as link text
!! input
[[:Image:test|caption]]
!! result
<p><a href="/index.php?title=File:Test&amp;action=edit&amp;redlink=1" class="new" title="File:Test (page does not exist)">caption</a>
</p>
!! end

!! test
Frameless image caption with a free URL
!! input
[[Image:foobar.jpg|http://example.com]]
!! result
<p><a href="/wiki/File:Foobar.jpg" class="image" title="http://example.com"><img alt="http://example.com" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" /></a>
</p>
!! end

!! test
Thumbnail image caption with a free URL
!! input
[[Image:foobar.jpg|thumb|http://example.com]]
!! result
<div class="thumb tright"><div class="thumbinner" style="width:182px;"><a href="/wiki/File:Foobar.jpg" class="image"><img alt="" src="http://example.com/images/thumb/3/3a/Foobar.jpg/180px-Foobar.jpg" width="180" height="20" class="thumbimage" srcset="http://example.com/images/thumb/3/3a/Foobar.jpg/270px-Foobar.jpg 1.5x, http://example.com/images/thumb/3/3a/Foobar.jpg/360px-Foobar.jpg 2x" /></a>  <div class="thumbcaption"><div class="magnify"><a href="/wiki/File:Foobar.jpg" class="internal" title="Enlarge"><img src="/skins/common/images/magnify-clip.png" width="15" height="11" alt="" /></a></div><a rel="nofollow" class="external free" href="http://example.com">http://example.com</a></div></div></div>

!! end

!! test
Thumbnail image caption with a free URL and explicit alt
!! input
[[Image:foobar.jpg|thumb|http://example.com|alt=Alteration]]
!! result
<div class="thumb tright"><div class="thumbinner" style="width:182px;"><a href="/wiki/File:Foobar.jpg" class="image"><img alt="Alteration" src="http://example.com/images/thumb/3/3a/Foobar.jpg/180px-Foobar.jpg" width="180" height="20" class="thumbimage" srcset="http://example.com/images/thumb/3/3a/Foobar.jpg/270px-Foobar.jpg 1.5x, http://example.com/images/thumb/3/3a/Foobar.jpg/360px-Foobar.jpg 2x" /></a>  <div class="thumbcaption"><div class="magnify"><a href="/wiki/File:Foobar.jpg" class="internal" title="Enlarge"><img src="/skins/common/images/magnify-clip.png" width="15" height="11" alt="" /></a></div><a rel="nofollow" class="external free" href="http://example.com">http://example.com</a></div></div></div>

!! end

!! test
SVG thumbnails with no language set
!! options
!! input
[[File:Foobar.svg|thumb|width=200]]
!! result
<div class="thumb tright"><div class="thumbinner" style="width:182px;"><a href="/wiki/File:Foobar.svg" class="image"><img alt="" src="http://example.com/images/thumb/f/ff/Foobar.svg/180px-Foobar.svg.png" width="180" height="180" class="thumbimage" srcset="http://example.com/images/thumb/f/ff/Foobar.svg/270px-Foobar.svg.png 1.5x, http://example.com/images/thumb/f/ff/Foobar.svg/360px-Foobar.svg.png 2x" /></a>  <div class="thumbcaption"><div class="magnify"><a href="/wiki/File:Foobar.svg" class="internal" title="Enlarge"><img src="/skins/common/images/magnify-clip.png" width="15" height="11" alt="" /></a></div>width=200</div></div></div>

!! end

!! test
SVG thumbnails with language de
!! options
!! input
[[File:Foobar.svg|thumb|width=200|lang=de]]
!! result
<div class="thumb tright"><div class="thumbinner" style="width:182px;"><a href="/index.php?title=File:Foobar.svg&amp;lang=de" class="image"><img alt="" src="http://example.com/images/thumb/f/ff/Foobar.svg/langde-180px-Foobar.svg.png" width="180" height="180" class="thumbimage" srcset="http://example.com/images/thumb/f/ff/Foobar.svg/langde-270px-Foobar.svg.png 1.5x, http://example.com/images/thumb/f/ff/Foobar.svg/langde-360px-Foobar.svg.png 2x" /></a>  <div class="thumbcaption"><div class="magnify"><a href="/wiki/File:Foobar.svg" class="internal" title="Enlarge"><img src="/skins/common/images/magnify-clip.png" width="15" height="11" alt="" /></a></div>width=200</div></div></div>

!! end

!! test
SVG thumbnails with invalid language code
!! options
!! input
[[File:Foobar.svg|thumb|width=200|lang=invalid.language.code]]
!! result
<div class="thumb tright"><div class="thumbinner" style="width:182px;"><a href="/wiki/File:Foobar.svg" class="image"><img alt="" src="http://example.com/images/thumb/f/ff/Foobar.svg/180px-Foobar.svg.png" width="180" height="180" class="thumbimage" srcset="http://example.com/images/thumb/f/ff/Foobar.svg/270px-Foobar.svg.png 1.5x, http://example.com/images/thumb/f/ff/Foobar.svg/360px-Foobar.svg.png 2x" /></a>  <div class="thumbcaption"><div class="magnify"><a href="/wiki/File:Foobar.svg" class="internal" title="Enlarge"><img src="/skins/common/images/magnify-clip.png" width="15" height="11" alt="" /></a></div>lang=invalid.language.code</div></div></div>

!! end

!! test
BUG 1887: A ISBN with a thumbnail
!! input
[[Image:foobar.jpg|thumb|ISBN 1235467890]]
!! result
<div class="thumb tright"><div class="thumbinner" style="width:182px;"><a href="/wiki/File:Foobar.jpg" class="image"><img alt="" src="http://example.com/images/thumb/3/3a/Foobar.jpg/180px-Foobar.jpg" width="180" height="20" class="thumbimage" srcset="http://example.com/images/thumb/3/3a/Foobar.jpg/270px-Foobar.jpg 1.5x, http://example.com/images/thumb/3/3a/Foobar.jpg/360px-Foobar.jpg 2x" /></a>  <div class="thumbcaption"><div class="magnify"><a href="/wiki/File:Foobar.jpg" class="internal" title="Enlarge"><img src="/skins/common/images/magnify-clip.png" width="15" height="11" alt="" /></a></div><a href="/wiki/Special:BookSources/1235467890" class="internal mw-magiclink-isbn">ISBN 1235467890</a></div></div></div>

!! end

!! test
BUG 1887: A RFC with a thumbnail
!! input
[[Image:foobar.jpg|thumb|This is RFC 12354]]
!! result
<div class="thumb tright"><div class="thumbinner" style="width:182px;"><a href="/wiki/File:Foobar.jpg" class="image"><img alt="" src="http://example.com/images/thumb/3/3a/Foobar.jpg/180px-Foobar.jpg" width="180" height="20" class="thumbimage" srcset="http://example.com/images/thumb/3/3a/Foobar.jpg/270px-Foobar.jpg 1.5x, http://example.com/images/thumb/3/3a/Foobar.jpg/360px-Foobar.jpg 2x" /></a>  <div class="thumbcaption"><div class="magnify"><a href="/wiki/File:Foobar.jpg" class="internal" title="Enlarge"><img src="/skins/common/images/magnify-clip.png" width="15" height="11" alt="" /></a></div>This is <a class="external mw-magiclink-rfc" rel="nofollow" href="//tools.ietf.org/html/rfc12354">RFC 12354</a></div></div></div>

!! end

!! test
BUG 1887: A mailto link with a thumbnail
!! input
[[Image:foobar.jpg|thumb|Please mailto:nobody@example.com]]
!! result
<div class="thumb tright"><div class="thumbinner" style="width:182px;"><a href="/wiki/File:Foobar.jpg" class="image"><img alt="" src="http://example.com/images/thumb/3/3a/Foobar.jpg/180px-Foobar.jpg" width="180" height="20" class="thumbimage" srcset="http://example.com/images/thumb/3/3a/Foobar.jpg/270px-Foobar.jpg 1.5x, http://example.com/images/thumb/3/3a/Foobar.jpg/360px-Foobar.jpg 2x" /></a>  <div class="thumbcaption"><div class="magnify"><a href="/wiki/File:Foobar.jpg" class="internal" title="Enlarge"><img src="/skins/common/images/magnify-clip.png" width="15" height="11" alt="" /></a></div>Please <a rel="nofollow" class="external free" href="mailto:nobody@example.com">mailto:nobody@example.com</a></div></div></div>

!! 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
<p><a href="/wiki/File:Foobar.jpg" class="image" title="text with a link in it"><img alt="text with a link in it" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" /></a>
</p>
!! end

!! test
BUG 648: Frameless image caption with a link (suffix)
!! input
[[Image:foobar.jpg|text with a [[link]]foo in it]]
!! result
<p><a href="/wiki/File:Foobar.jpg" class="image" title="text with a linkfoo in it"><img alt="text with a linkfoo in it" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" /></a>
</p>
!! end

!! test
BUG 648: Frameless image caption with an interwiki link
!! input
[[Image:foobar.jpg|text with a [[MeatBall:Link]] in it]]
!! result
<p><a href="/wiki/File:Foobar.jpg" class="image" title="text with a MeatBall:Link in it"><img alt="text with a MeatBall:Link in it" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" /></a>
</p>
!! 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
<p><a href="/wiki/File:Foobar.jpg" class="image" title="text with a link in it"><img alt="text with a link in it" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" /></a>
</p>
!! end

!! test
Escape HTML special chars in image alt text
!! input
[[Image:foobar.jpg|& < > "]]
!! result
<p><a href="/wiki/File:Foobar.jpg" class="image" title="&amp; &lt; &gt; &quot;"><img alt="&amp; &lt; &gt; &quot;" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" /></a>
</p>
!! end

!! test
BUG 499: Alt text should have &#1234;, not &amp;1234;
!! input
[[Image:foobar.jpg|&#9792;]]
!! result
<p><a href="/wiki/File:Foobar.jpg" class="image" title="♀"><img alt="♀" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" /></a>
</p>
!! 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
<p>[[Image:Foobar.jpg|thumb|This is a broken caption. But <a href="/wiki/Main_Page" title="Main Page">this</a> is just an ordinary link.
</p>
!! 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
<div class="thumb tright"><div class="thumbinner" style="width:182px;"><a href="/wiki/File:Foobar.jpg" class="image"><img alt="" src="http://example.com/images/thumb/3/3a/Foobar.jpg/180px-Foobar.jpg" width="180" height="20" class="thumbimage" srcset="http://example.com/images/thumb/3/3a/Foobar.jpg/270px-Foobar.jpg 1.5x, http://example.com/images/thumb/3/3a/Foobar.jpg/360px-Foobar.jpg 2x" /></a>  <div class="thumbcaption"><div class="magnify"><a href="/wiki/File:Foobar.jpg" class="internal" title="Enlarge"><img src="/skins/common/images/magnify-clip.png" width="15" height="11" alt="" /></a></div>This is a caption with another <a href="/index.php?title=Special:Upload&amp;wpDestFile=Icon.png" class="new" title="File:Icon.png">image</a> inside it!</div></div></div>

!! end

!! test
Image caption containing a newline
!! input
[[Image:Foobar.jpg|This
*is some text]]
!! result
<p><a href="/wiki/File:Foobar.jpg" class="image" title="This *is some text"><img alt="This *is some text" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" /></a>
</p>
!!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
<div class="thumb tright"><div class="thumbinner" style="width:182px;"><a href="/wiki/File:Foobar.jpg" class="image"><img alt="" src="http://example.com/images/thumb/3/3a/Foobar.jpg/180px-Foobar.jpg" width="180" height="20" class="thumbimage" srcset="http://example.com/images/thumb/3/3a/Foobar.jpg/270px-Foobar.jpg 1.5x, http://example.com/images/thumb/3/3a/Foobar.jpg/360px-Foobar.jpg 2x" /></a>  <div class="thumbcaption"><div class="magnify"><a href="/wiki/File:Foobar.jpg" class="internal" title="Enlarge"><img src="/skins/common/images/magnify-clip.png" width="15" height="11" alt="" /></a></div>bar</div></div></div>

!!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
<div class="thumb tright"><div class="thumbinner" style="width:202px;"><a href="/wiki/File:Foobar.jpg" class="image"><img alt="" src="http://example.com/images/thumb/3/3a/Foobar.jpg/200px-Foobar.jpg" width="200" height="23" class="thumbimage" srcset="http://example.com/images/thumb/3/3a/Foobar.jpg/300px-Foobar.jpg 1.5x, http://example.com/images/thumb/3/3a/Foobar.jpg/400px-Foobar.jpg 2x" /></a>  <div class="thumbcaption"><div class="magnify"><a href="/wiki/File:Foobar.jpg" class="internal" title="Enlarge"><img src="/skins/common/images/magnify-clip.png" width="15" height="11" alt="" /></a></div>This caption has <a rel="nofollow" class="external text" href="irc://example.net">irc</a> and <a rel="nofollow" class="external text" href="https://example.com">Secure</a> ext links in it.</div></div></div>

!! end

!! test
Custom class
!! input
[[Image:foobar.jpg|a|class=b]]
!! result
<p><a href="/wiki/File:Foobar.jpg" class="image" title="a"><img alt="a" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" class="b" /></a>
</p>
!! end

!! test
Localized image handling (1).
!! options
language=es
!! input
[[Archivo:Foobar.jpg|izquierda|enlace=foo|caption]]
!! result
<div class="floatleft"><a href="/wiki/Foo" title="caption"><img alt="caption" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" /></a></div>

!! end

!! test
Localized image handling (2).
!! options
language=es
!! input
[[Archivo:Foobar.jpg|miniatura|izquierda|enlace=foo|caption]]
!! result
<div class="thumb tleft"><div class="thumbinner" style="width:182px;"><a href="/wiki/Foo" title="Foo"><img alt="" src="http://example.com/images/thumb/3/3a/Foobar.jpg/180px-Foobar.jpg" width="180" height="20" class="thumbimage" srcset="http://example.com/images/thumb/3/3a/Foobar.jpg/270px-Foobar.jpg 1.5x, http://example.com/images/thumb/3/3a/Foobar.jpg/360px-Foobar.jpg 2x" /></a>  <div class="thumbcaption"><div class="magnify"><a href="/wiki/Archivo:Foobar.jpg" class="internal" title="Aumentar"><img src="/skins/common/images/magnify-clip.png" width="15" height="11" alt="" /></a></div>caption</div></div></div>

!! end

!! test
"border", "frameless" and "class" attributes on an image.
!! input
[[File:Foobar.jpg|frameless|border|class=extra|caption]]
!! result
<p><a href="/wiki/File:Foobar.jpg" class="image" title="caption"><img alt="caption" src="http://example.com/images/thumb/3/3a/Foobar.jpg/180px-Foobar.jpg" width="180" height="20" class="extra thumbborder" srcset="http://example.com/images/thumb/3/3a/Foobar.jpg/270px-Foobar.jpg 1.5x, http://example.com/images/thumb/3/3a/Foobar.jpg/360px-Foobar.jpg 2x" /></a>
</p>
!! end

!! article
File:Barfoo.jpg
!! text
#REDIRECT [[File:Barfoo.jpg]]
!! endarticle

!! test
Redirected image
!! input
[[Image:Barfoo.jpg]]
!! result
<p><a href="/wiki/File:Barfoo.jpg" title="File:Barfoo.jpg">File:Barfoo.jpg</a>
</p>
!! end

!! test
Missing image with uploads disabled
!! options
wgEnableUploads=0
!! input
[[Image:Foobaz.jpg]]
!! result
<p><a href="/wiki/File:Foobaz.jpg" title="File:Foobaz.jpg">File:Foobaz.jpg</a>
</p>
!! end

# Parsoid-specific testing for images
# http://www.mediawiki.org/wiki/Parsoid/MediaWiki_DOM_spec#Images
# Currently imperfect due to a flaw in the Parsoid testrunner
# Work in progress

!! test
Parsoid-specific image handling - simple image
!! options
parsoid
!! input
[[Image:Foobar.jpg]]
!! result
<p>
<span class="mw-default-size" typeof="mw:Image">
<a href="File:Foobar.jpg">
<img resource="./File:Foobar.jpg" src="//upload.wikimedia.org/wikipedia/commons/3/3a/Foobar.jpg" height="220" width="1941">
</a>
</span>
</p>
!! end

!! test
Parsoid-specific image handling - simple image without link
!! options
parsoid
!! input
[[Image:Foobar.jpg|link=]]
!! result
<p>
<span class="mw-default-size" typeof="mw:Image">
<span>
<img resource="./File:Foobar.jpg" src="//upload.wikimedia.org/wikipedia/commons/3/3a/Foobar.jpg" height="220" width="1941">
</span>
</span>
</p>
!! end

!! test
Parsoid-specific image handling - simple image with specific link
!! options
parsoid
!! input
[[Image:Foobar.jpg|link=Main Page]]
!! result
<p>
<span class="mw-default-size" typeof="mw:Image">
<a href="Main_Page">
<img resource="./File:Foobar.jpg" src="//upload.wikimedia.org/wikipedia/commons/3/3a/Foobar.jpg" height="220" width="1941">
</a>
</span>
</p>
!! end

!! test
Parsoid-specific image handling - simple image with size and middle alignment
!! options
parsoid
!! input
[[Image:Foobar.jpg|50px|middle]]
!! result
<p>
<span class="mw-valign-middle" typeof="mw:Image">
<a href="File:Foobar.jpg">
<img resource="./File:Foobar.jpg" src="//upload.wikimedia.org/wikipedia/commons/3/3a/Foobar.jpg/50px-Foobar.jpg" height="6" width="50">
</a>
</span>
</p>
!! end

!! test
Parsoid-specific image handling - simple image with both sizes, a baseline alignment, and a caption
!! options
parsoid
!! input
[[Image:Foobar.jpg|500x10px|baseline|caption]]
!! result
<p>
<span class="mw-valign-baseline" typeof="mw:Image" data-mw="{&quot;caption&quot;:&quot;caption&quot;}">
<a href="File:Foobar.jpg">
<img resource="./File:Foobar.jpg" src="//upload.wikimedia.org/wikipedia/commons/3/3a/Foobar.jpg/89px-Foobar.jpg" height="10" width="89">
</a>
</span>
</p>
!! end

!! test
Parsoid-specific image handling - simple image with border and size spec
!! options
parsoid
!! input
[[Image:Foobar.jpg|50px|border|caption]]
!! result
<p>
<span class="mw-image-border" typeof="mw:Image" data-mw="{&quot;caption&quot;:&quot;caption&quot;}">
<a href="File:Foobar.jpg">
<img resource="./File:Foobar.jpg" src="//upload.wikimedia.org/wikipedia/commons/3/3a/Foobar.jpg/50px-Foobar.jpg" height="6" width="50">
</a>
</span>
</p>
!! end

!! test
Parsoid-specific image handling - thumbnail with halign, valign, and caption
!! options
parsoid
!! input
[[Image:Foobar.jpg|thumb|left|baseline|caption content]]
!! result
<figure class="mw-default-size mw-halign-left mw-valign-baseline" typeof="mw:Image/Thumb">
<a href="File:Foobar.jpg">
<img resource="./File:Foobar.jpg" src="//upload.wikimedia.org/wikipedia/commons/3/3a/Foobar.jpg/180px-Foobar.jpg" height="21" width="180" />
</a>
<figcaption>caption content</figcaption>
</figure>
!! end

!! test
Parsoid-specific image handling - thumbnail with specific size, halign, valign, and caption
!! options
parsoid
!! input
[[Image:Foobar.jpg|thumb|50x50px|right|middle|caption]]
!! result
<figure class="mw-halign-right mw-valign-middle" typeof="mw:Image/Thumb">
<a href="File:Foobar.jpg">
<img resource="./File:Foobar.jpg" src="//upload.wikimedia.org/wikipedia/commons/3/3a/Foobar.jpg/50px-Foobar.jpg" height="6" width="50" />
</a>
<figcaption>caption</figcaption>
</figure>
!! end

!! test
Parsoid-specific image handling - framed image with specific size and caption
!! options
parsoid
!! input
[[Image:Foobar.jpg|500x50px|frame|caption]]
!! result
<figure typeof="mw:Image/Frame">
<a href="File:Foobar.jpg">
<img resource="./File:Foobar.jpg" src="//upload.wikimedia.org/wikipedia/commons/3/3a/Foobar.jpg/442px-Foobar.jpg" height="50" width="442" />
</a>
<figcaption>caption</figcaption>
</figure>
!! end

!! test
Parsoid-specific image handling - framed image with specific size, halign, valign, and caption
!! options
parsoid
!! input
[[Image:Foobar.jpg|500x50px|frame|left|baseline|caption]]
!! result
<figure class="mw-halign-left mw-valign-baseline" typeof="mw:Image/Frame">
<a href="File:Foobar.jpg">
<img resource="./File:Foobar.jpg" src="//upload.wikimedia.org/wikipedia/commons/3/3a/Foobar.jpg/442px-Foobar.jpg" height="50" width="442" />
</a>
<figcaption>caption</figcaption>
</figure>
!! end

!! test
Parsoid-specific image handling - frameless image with specific size, border, and caption
!! options
parsoid
!! input
[[Image:Foobar.jpg|frameless|500x50px|border|caption]]
!! result
<p>
<span class="mw-image-border" typeof="mw:Image/Frameless" data-mw="{&quot;caption&quot;:&quot;caption&quot;}">
<a href="File:Foobar.jpg">
<img resource="./File:Foobar.jpg" src="//upload.wikimedia.org/wikipedia/commons/3/3a/Foobar.jpg/442px-Foobar.jpg" height="50" width="442" />
</a>
</p>
!! end

#!! test
#Parsoid-specific image handling - simple image with a formatted caption
#!! options
#parsoid
#!! input
#[[Image:Foobar.jpg|<table><tr><td>a</td><td>b</td></tr><tr><td>c</td></tr></table>]]
#!! result
#<p>
#<span typeof="mw:Image">
#<a class="mw-default-size" href="Image:Foobar.jpg">
#<img alt="Foobar.jpg" class="mw-default-size" src="http://upload.wikimedia.org/wikipedia/commons/3/3a/Foobar.jpg" height="220" width="1941">
#</a>
#<span>abc</span>
#</span>
#</p>


###
### Subpages
###
!! article
Subpage test/subpage
!! text
foo
!! endarticle

!! test
Subpage link
!! options
subpage title=[[Subpage test]]
!! input
[[/subpage]]
!! result
<p><a href="/wiki/Subpage_test/subpage" title="Subpage test/subpage">/subpage</a>
</p>
!! end

!! test
Subpage noslash link
!! options
subpage title=[[Subpage test]]
!!input
[[/subpage/]]
!! result
<p><a href="/wiki/Subpage_test/subpage" title="Subpage test/subpage">subpage</a>
</p>
!! end

# TODO: make this PHP-parser compatible!
!! test
Relative subpage noslash link
!! options
parsoid=wt2wt,wt2html,html2html
subpage title=[[Subpage test/1/2/3/4]]
!!input
[[../../subpage/]]

[[../../subpage]]
!! result
<p><a rel="mw:WikiLink" href="Subpage_test/1/2/subpage/">subpage</a></p>
<p><a rel="mw:WikiLink" href="Subpage_test/1/2/subpage">Subpage_test/1/2/subpage</a></p>
!! end

# TODO: make this PHP-parser compatible!
!! test
Parsoid: dot-slash prefixed wikilinks
!! options
parsoid=wt2wt,wt2html,html2html
!!input
[[./foo]]

[[././bar]]

[[././baz/]]
!! result
<p><a rel="mw:WikiLink" href="./Foo">foo</a></p>
<p><a rel="mw:WikiLink" href="./Bar">bar</a></p>
<p><a rel="mw:WikiLink" href="./Baz/">baz/</a></p>
!! end

!! test
Disabled subpages
!! input
[[/subpage]]
!! result
<p><a href="/index.php?title=/subpage&amp;action=edit&amp;redlink=1" class="new" title="/subpage (page does not exist)">/subpage</a>
</p>
!! end

!! test
BUG 561: {{/Subpage}}
!! options
subpage title=[[Page]]
!! input
{{/Subpage}}
!! result
<p><a href="/index.php?title=Page/Subpage&amp;action=edit&amp;redlink=1" class="new" title="Page/Subpage (page does not exist)">Page/Subpage</a>
</p>
!! end

###
### Categories
###
!! article
Category:MediaWiki User's Guide
!! text
blah
!! endarticle

!! test
Link to category
!! input
[[:Category:MediaWiki User's Guide]]
!! result
<p><a href="/wiki/Category:MediaWiki_User%27s_Guide" title="Category:MediaWiki User's Guide">Category:MediaWiki User's Guide</a>
</p>
!! end

!! test
Simple category
!! options
cat
!! input
[[Category:MediaWiki User's Guide]]
!! result
<a href="/wiki/Category:MediaWiki_User%27s_Guide" title="Category:MediaWiki User's Guide">MediaWiki User's Guide</a>
!! end

!! test
PAGESINCATEGORY invalid title fatal (r33546 fix)
!! input
{{PAGESINCATEGORY:<bogus>}}
!! result
<p>0
</p>
!! end

!! test
Category with different sort key
!! options
cat
!! input
[[Category:MediaWiki User's Guide|Foo]]
!! result
<a href="/wiki/Category:MediaWiki_User%27s_Guide" title="Category:MediaWiki User's Guide">MediaWiki User's Guide</a>
!! end

!! test
Category with identical sort key
!! options
cat
!! input
[[Category:MediaWiki User's Guide|MediaWiki User's Guide]]
!! result
<a href="/wiki/Category:MediaWiki_User%27s_Guide" title="Category:MediaWiki User's Guide">MediaWiki User's Guide</a>
!! 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
<p>Foo Bar
</p><p>Foo
Bar
</p><p>Foo
Bar
</p><p>Foo Bar
</p><p>Foo
Bar
</p>
!! end

!! test
Parsoid: Serialize link to category page with colon escape
!! options
parsoid
!! input

[[:Category:Foo]]
[[:Category:Foo|Bar]]
!! result
<p>
<a rel="mw:WikiLink" href="Category:Foo">Category:Foo</a>
<a rel="mw:WikiLink" href="Category:Foo">Bar</a>
</p>
!! end

!! test
Parsoid: Link prefix/suffixes aren't applied to category links
!! options
parsoid=wt2html,wt2wt,html2html
language=is
!! input
x[[Category:Foo]]y
!! result
<p>x<link rel="mw:WikiLink/Category" href="Category:Foo">y</p>
!! end

!! test
Parsoid: Serialize link to file page with colon escape
!! options
parsoid
!! input

[[:File:Foo.png]]
[[:File:Foo.png|Bar]]
!! result
<p>
<a rel="mw:WikiLink" href="File:Foo.png">File:Foo.png</a>
<a rel="mw:WikiLink" href="File:Foo.png">Bar</a>
</p>
!! end

!! test
Parsoid: Serialize a genuine category link without colon escape
!! options
parsoid
!! input
[[Category:Foo]]
[[Category:Foo|Bar]]
!! result
<link rel="mw:WikiLink/Category" href="Category:Foo">
<link rel="mw:WikiLink/Category" href="Category:Foo#Bar">
!! end

###
### Inter-language links
###
!! test
Inter-language links
!! options
ill
!! input
[[es:Alimento]]
[[fr:Nourriture]]
[[zh:&#39135;&#21697;]]
!! 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
<h2><span class="mw-headline" id="Headline_1">Headline 1</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=1" title="Edit section: Headline 1">edit</a><span class="mw-editsection-bracket">]</span></span></h2>
<p>Some text
</p>
<h2><span class="mw-headline" id="Headline_2">Headline 2</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=2" title="Edit section: Headline 2">edit</a><span class="mw-editsection-bracket">]</span></span></h2>
<p>More
</p>
<h3><span class="mw-headline" id="Smaller_headline">Smaller headline</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=3" title="Edit section: Smaller headline">edit</a><span class="mw-editsection-bracket">]</span></span></h3>
<p>Blah blah
</p>
!! end

!! test
Section headings with TOC
!! input
== Headline 1 ==
=== Subheadline 1 ===
===== Skipping a level =====
====== Skipping a level ======

== Headline 2 ==
Some text
===Another headline===
!! result
<div id="toc" class="toc"><div id="toctitle"><h2>Contents</h2></div>
<ul>
<li class="toclevel-1 tocsection-1"><a href="#Headline_1"><span class="tocnumber">1</span> <span class="toctext">Headline 1</span></a>
<ul>
<li class="toclevel-2 tocsection-2"><a href="#Subheadline_1"><span class="tocnumber">1.1</span> <span class="toctext">Subheadline 1</span></a>
<ul>
<li class="toclevel-3 tocsection-3"><a href="#Skipping_a_level"><span class="tocnumber">1.1.1</span> <span class="toctext">Skipping a level</span></a>
<ul>
<li class="toclevel-4 tocsection-4"><a href="#Skipping_a_level_2"><span class="tocnumber">1.1.1.1</span> <span class="toctext">Skipping a level</span></a></li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
<li class="toclevel-1 tocsection-5"><a href="#Headline_2"><span class="tocnumber">2</span> <span class="toctext">Headline 2</span></a>
<ul>
<li class="toclevel-2 tocsection-6"><a href="#Another_headline"><span class="tocnumber">2.1</span> <span class="toctext">Another headline</span></a></li>
</ul>
</li>
</ul>
</div>
<h2><span class="mw-headline" id="Headline_1">Headline 1</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=1" title="Edit section: Headline 1">edit</a><span class="mw-editsection-bracket">]</span></span></h2>
<h3><span class="mw-headline" id="Subheadline_1">Subheadline 1</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=2" title="Edit section: Subheadline 1">edit</a><span class="mw-editsection-bracket">]</span></span></h3>
<h5><span class="mw-headline" id="Skipping_a_level">Skipping a level</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=3" title="Edit section: Skipping a level">edit</a><span class="mw-editsection-bracket">]</span></span></h5>
<h6><span class="mw-headline" id="Skipping_a_level_2">Skipping a level</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=4" title="Edit section: Skipping a level">edit</a><span class="mw-editsection-bracket">]</span></span></h6>
<h2><span class="mw-headline" id="Headline_2">Headline 2</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=5" title="Edit section: Headline 2">edit</a><span class="mw-editsection-bracket">]</span></span></h2>
<p>Some text
</p>
<h3><span class="mw-headline" id="Another_headline">Another headline</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=6" title="Edit section: Another headline">edit</a><span class="mw-editsection-bracket">]</span></span></h3>

!! 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
<div id="toc" class="toc"><div id="toctitle"><h2>Contents</h2></div>
<ul>
<li class="toclevel-1 tocsection-1"><a href="#Level_1_Heading"><span class="tocnumber">1</span> <span class="toctext">Level 1 Heading</span></a>
<ul>
<li class="toclevel-2 tocsection-2"><a href="#Level_2_Heading"><span class="tocnumber">1.1</span> <span class="toctext">Level 2 Heading</span></a>
<ul>
<li class="toclevel-3 tocsection-3"><a href="#Level_3_Heading"><span class="tocnumber">1.1.1</span> <span class="toctext">Level 3 Heading</span></a>
<ul>
<li class="toclevel-4 tocsection-4"><a href="#Level_4_Heading"><span class="tocnumber">1.1.1.1</span> <span class="toctext">Level 4 Heading</span></a>
<ul>
<li class="toclevel-5 tocsection-5"><a href="#Level_5_Heading"><span class="tocnumber">1.1.1.1.1</span> <span class="toctext">Level 5 Heading</span></a>
<ul>
<li class="toclevel-6 tocsection-6"><a href="#Level_6_Heading"><span class="tocnumber">1.1.1.1.1.1</span> <span class="toctext">Level 6 Heading</span></a></li>
<li class="toclevel-6 tocsection-7"><a href="#.3D_Level_7_Heading.3D"><span class="tocnumber">1.1.1.1.1.2</span> <span class="toctext">= Level 7 Heading=</span></a></li>
<li class="toclevel-6 tocsection-8"><a href="#.3D.3D_Level_8_Heading.3D.3D"><span class="tocnumber">1.1.1.1.1.3</span> <span class="toctext">== Level 8 Heading==</span></a></li>
<li class="toclevel-6 tocsection-9"><a href="#.3D.3D.3D_Level_9_Heading.3D.3D.3D"><span class="tocnumber">1.1.1.1.1.4</span> <span class="toctext">=== Level 9 Heading===</span></a></li>
<li class="toclevel-6 tocsection-10"><a href="#.3D.3D.3D.3D_Level_10_Heading.3D.3D.3D.3D"><span class="tocnumber">1.1.1.1.1.5</span> <span class="toctext">==== Level 10 Heading====</span></a></li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
</ul>
</div>
<h1><span class="mw-headline" id="Level_1_Heading">Level 1 Heading</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=1" title="Edit section: Level 1 Heading">edit</a><span class="mw-editsection-bracket">]</span></span></h1>
<h2><span class="mw-headline" id="Level_2_Heading">Level 2 Heading</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=2" title="Edit section: Level 2 Heading">edit</a><span class="mw-editsection-bracket">]</span></span></h2>
<h3><span class="mw-headline" id="Level_3_Heading">Level 3 Heading</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=3" title="Edit section: Level 3 Heading">edit</a><span class="mw-editsection-bracket">]</span></span></h3>
<h4><span class="mw-headline" id="Level_4_Heading">Level 4 Heading</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=4" title="Edit section: Level 4 Heading">edit</a><span class="mw-editsection-bracket">]</span></span></h4>
<h5><span class="mw-headline" id="Level_5_Heading">Level 5 Heading</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=5" title="Edit section: Level 5 Heading">edit</a><span class="mw-editsection-bracket">]</span></span></h5>
<h6><span class="mw-headline" id="Level_6_Heading">Level 6 Heading</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=6" title="Edit section: Level 6 Heading">edit</a><span class="mw-editsection-bracket">]</span></span></h6>
<h6><span class="mw-headline" id=".3D_Level_7_Heading.3D">= Level 7 Heading=</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=7" title="Edit section: = Level 7 Heading=">edit</a><span class="mw-editsection-bracket">]</span></span></h6>
<h6><span class="mw-headline" id=".3D.3D_Level_8_Heading.3D.3D">== Level 8 Heading==</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=8" title="Edit section: == Level 8 Heading==">edit</a><span class="mw-editsection-bracket">]</span></span></h6>
<h6><span class="mw-headline" id=".3D.3D.3D_Level_9_Heading.3D.3D.3D">=== Level 9 Heading===</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=9" title="Edit section: === Level 9 Heading===">edit</a><span class="mw-editsection-bracket">]</span></span></h6>
<h6><span class="mw-headline" id=".3D.3D.3D.3D_Level_10_Heading.3D.3D.3D.3D">==== Level 10 Heading====</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=10" title="Edit section: ==== Level 10 Heading====">edit</a><span class="mw-editsection-bracket">]</span></span></h6>

!! 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
<div id="toc" class="toc"><div id="toctitle"><h2>Contents</h2></div>
<ul>
<li class="toclevel-1 tocsection-1"><a href="#title_1"><span class="tocnumber">1</span> <span class="toctext">title 1</span></a>
<ul>
<li class="toclevel-2 tocsection-2"><a href="#title_1.1"><span class="tocnumber">1.1</span> <span class="toctext">title 1.1</span></a>
<ul>
<li class="toclevel-3 tocsection-3"><a href="#title_1.1.1"><span class="tocnumber">1.1.1</span> <span class="toctext">title 1.1.1</span></a></li>
</ul>
</li>
<li class="toclevel-2 tocsection-4"><a href="#title_1.2"><span class="tocnumber">1.2</span> <span class="toctext">title 1.2</span></a></li>
</ul>
</li>
<li class="toclevel-1 tocsection-5"><a href="#title_2"><span class="tocnumber">2</span> <span class="toctext">title 2</span></a>
<ul>
<li class="toclevel-2 tocsection-6"><a href="#title_2.1"><span class="tocnumber">2.1</span> <span class="toctext">title 2.1</span></a></li>
</ul>
</li>
</ul>
</div>
<h2><span class="mw-headline" id="title_1">title 1</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=1" title="Edit section: title 1">edit</a><span class="mw-editsection-bracket">]</span></span></h2>
<h3><span class="mw-headline" id="title_1.1">title 1.1</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=2" title="Edit section: title 1.1">edit</a><span class="mw-editsection-bracket">]</span></span></h3>
<h4><span class="mw-headline" id="title_1.1.1">title 1.1.1</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=3" title="Edit section: title 1.1.1">edit</a><span class="mw-editsection-bracket">]</span></span></h4>
<h3><span class="mw-headline" id="title_1.2">title 1.2</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=4" title="Edit section: title 1.2">edit</a><span class="mw-editsection-bracket">]</span></span></h3>
<h2><span class="mw-headline" id="title_2">title 2</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=5" title="Edit section: title 2">edit</a><span class="mw-editsection-bracket">]</span></span></h2>
<h3><span class="mw-headline" id="title_2.1">title 2.1</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=6" title="Edit section: title 2.1">edit</a><span class="mw-editsection-bracket">]</span></span></h3>

!! 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
<div id="toc" class="toc"><div id="toctitle"><h2>Contents</h2></div>
<ul>
<li class="toclevel-1 tocsection-1"><a href="#title_1"><span class="tocnumber">1</span> <span class="toctext">title 1</span></a>
<ul>
<li class="toclevel-2 tocsection-2"><a href="#title_1.1"><span class="tocnumber">1.1</span> <span class="toctext">title 1.1</span></a></li>
<li class="toclevel-2 tocsection-4"><a href="#title_1.2"><span class="tocnumber">1.2</span> <span class="toctext">title 1.2</span></a></li>
</ul>
</li>
<li class="toclevel-1 tocsection-5"><a href="#title_2"><span class="tocnumber">2</span> <span class="toctext">title 2</span></a>
<ul>
<li class="toclevel-2 tocsection-6"><a href="#title_2.1"><span class="tocnumber">2.1</span> <span class="toctext">title 2.1</span></a></li>
</ul>
</li>
</ul>
</div>
<h2><span class="mw-headline" id="title_1">title 1</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=1" title="Edit section: title 1">edit</a><span class="mw-editsection-bracket">]</span></span></h2>
<h3><span class="mw-headline" id="title_1.1">title 1.1</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=2" title="Edit section: title 1.1">edit</a><span class="mw-editsection-bracket">]</span></span></h3>
<h4><span class="mw-headline" id="title_1.1.1">title 1.1.1</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=3" title="Edit section: title 1.1.1">edit</a><span class="mw-editsection-bracket">]</span></span></h4>
<h3><span class="mw-headline" id="title_1.2">title 1.2</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=4" title="Edit section: title 1.2">edit</a><span class="mw-editsection-bracket">]</span></span></h3>
<h2><span class="mw-headline" id="title_2">title 2</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=5" title="Edit section: title 2">edit</a><span class="mw-editsection-bracket">]</span></span></h2>
<h3><span class="mw-headline" id="title_2.1">title 2.1</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=6" title="Edit section: title 2.1">edit</a><span class="mw-editsection-bracket">]</span></span></h3>

!! 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
<div id="toc" class="toc"><div id="toctitle"><h2>Contents</h2></div>
<ul>
<li class="toclevel-1 tocsection-1"><a href="#Section_1"><span class="tocnumber">1</span> <span class="toctext">Section 1</span></a>
<ul>
<li class="toclevel-2 tocsection-2"><a href="#Section_1.1"><span class="tocnumber">1.1</span> <span class="toctext">Section 1.1</span></a></li>
</ul>
</li>
<li class="toclevel-1 tocsection-5"><a href="#Section_2"><span class="tocnumber">2</span> <span class="toctext">Section 2</span></a></li>
</ul>
</div>
<h2><span class="mw-headline" id="Section_1">Section 1</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=1" title="Edit section: Section 1">edit</a><span class="mw-editsection-bracket">]</span></span></h2>
<h3><span class="mw-headline" id="Section_1.1">Section 1.1</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=2" title="Edit section: Section 1.1">edit</a><span class="mw-editsection-bracket">]</span></span></h3>
<h4><span class="mw-headline" id="Section_1.1.1">Section 1.1.1</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=3" title="Edit section: Section 1.1.1">edit</a><span class="mw-editsection-bracket">]</span></span></h4>
<h4><span class="mw-headline" id="Section_1.1.1.1">Section 1.1.1.1</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=4" title="Edit section: Section 1.1.1.1">edit</a><span class="mw-editsection-bracket">]</span></span></h4>
<h2><span class="mw-headline" id="Section_2">Section 2</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=5" title="Edit section: Section 2">edit</a><span class="mw-editsection-bracket">]</span></span></h2>

!! end


!! test
Resolving duplicate section names
!! input
== Foo bar ==
== Foo bar ==
!! result
<h2><span class="mw-headline" id="Foo_bar">Foo bar</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=1" title="Edit section: Foo bar">edit</a><span class="mw-editsection-bracket">]</span></span></h2>
<h2><span class="mw-headline" id="Foo_bar_2">Foo bar</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=2" title="Edit section: Foo bar">edit</a><span class="mw-editsection-bracket">]</span></span></h2>

!! end

!! test
Resolving duplicate section names with differing case (bug 10721)
!! input
== Foo bar ==
== Foo Bar ==
!! result
<h2><span class="mw-headline" id="Foo_bar">Foo bar</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=1" title="Edit section: Foo bar">edit</a><span class="mw-editsection-bracket">]</span></span></h2>
<h2><span class="mw-headline" id="Foo_Bar_2">Foo Bar</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=2" title="Edit section: Foo Bar">edit</a><span class="mw-editsection-bracket">]</span></span></h2>

!! end

!! article
Template:sections
!! text
===Section 1===
==Section 2==
!! endarticle

!! test
Template with sections, __NOTOC__
!! input
__NOTOC__
==Section 0==
{{sections}}
==Section 4==
!! result
<h2><span class="mw-headline" id="Section_0">Section 0</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=1" title="Edit section: Section 0">edit</a><span class="mw-editsection-bracket">]</span></span></h2>
<h3><span class="mw-headline" id="Section_1">Section 1</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Template:Sections&amp;action=edit&amp;section=T-1" title="Template:Sections">edit</a><span class="mw-editsection-bracket">]</span></span></h3>
<h2><span class="mw-headline" id="Section_2">Section 2</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Template:Sections&amp;action=edit&amp;section=T-2" title="Template:Sections">edit</a><span class="mw-editsection-bracket">]</span></span></h2>
<h2><span class="mw-headline" id="Section_4">Section 4</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=2" title="Edit section: Section 4">edit</a><span class="mw-editsection-bracket">]</span></span></h2>

!! end

!! test
__NOEDITSECTION__ keyword
!! input
__NOEDITSECTION__
==Section 1==
==Section 2==
!! result
<h2><span class="mw-headline" id="Section_1">Section 1</span></h2>
<h2><span class="mw-headline" id="Section_2">Section 2</span></h2>

!! end

!! test
Link inside a section heading
!! input
==Section with a [[Main Page|link]] in it==
!! result
<h2><span class="mw-headline" id="Section_with_a_link_in_it">Section with a <a href="/wiki/Main_Page" title="Main Page">link</a> in it</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=1" title="Edit section: Section with a link in it">edit</a><span class="mw-editsection-bracket">]</span></span></h2>

!! end

!! test
TOC regression (bug 12077)
!! input
__TOC__
== title 1 ==
=== title 1.1 ===
== title 2 ==
!! result
<div id="toc" class="toc"><div id="toctitle"><h2>Contents</h2></div>
<ul>
<li class="toclevel-1 tocsection-1"><a href="#title_1"><span class="tocnumber">1</span> <span class="toctext">title 1</span></a>
<ul>
<li class="toclevel-2 tocsection-2"><a href="#title_1.1"><span class="tocnumber">1.1</span> <span class="toctext">title 1.1</span></a></li>
</ul>
</li>
<li class="toclevel-1 tocsection-3"><a href="#title_2"><span class="tocnumber">2</span> <span class="toctext">title 2</span></a></li>
</ul>
</div>
<h2><span class="mw-headline" id="title_1">title 1</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=1" title="Edit section: title 1">edit</a><span class="mw-editsection-bracket">]</span></span></h2>
<h3><span class="mw-headline" id="title_1.1">title 1.1</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=2" title="Edit section: title 1.1">edit</a><span class="mw-editsection-bracket">]</span></span></h3>
<h2><span class="mw-headline" id="title_2">title 2</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=3" title="Edit section: title 2">edit</a><span class="mw-editsection-bracket">]</span></span></h2>

!! end

!! test
BUG 1219 URL next to image (good)
!! input
http://example.com [[Image:foobar.jpg]]
!! result
<p><a rel="nofollow" class="external free" href="http://example.com">http://example.com</a> <a href="/wiki/File:Foobar.jpg" class="image"><img alt="Foobar.jpg" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" /></a>
</p>
!!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
<h1><span class="mw-headline" id=".3D">=</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=1" title="Edit section: =">edit</a><span class="mw-editsection-bracket">]</span></span></h1>
<p>The line above must have a trailing space!
</p>
<h1><span class="mw-headline" id=".3D_2">=</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=2" title="Edit section: =">edit</a><span class="mw-editsection-bracket">]</span></span></h1>
<p>But just in case it doesn't...
</p>
!! 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
<p>The tooltips shall not show entities to the user (ie. be double escaped)
</p>
<div id="toc" class="toc"><div id="toctitle"><h2>Contents</h2></div>
<ul>
<li class="toclevel-1 tocsection-1"><a href="#text_.3E_text"><span class="tocnumber">1</span> <span class="toctext">text &gt; text</span></a></li>
<li class="toclevel-1 tocsection-2"><a href="#text_.3C_text"><span class="tocnumber">2</span> <span class="toctext">text &lt; text</span></a></li>
<li class="toclevel-1 tocsection-3"><a href="#text_.26_text"><span class="tocnumber">3</span> <span class="toctext">text &amp; text</span></a></li>
<li class="toclevel-1 tocsection-4"><a href="#text_.27_text"><span class="tocnumber">4</span> <span class="toctext">text ' text</span></a></li>
<li class="toclevel-1 tocsection-5"><a href="#text_.22_text"><span class="tocnumber">5</span> <span class="toctext">text " text</span></a></li>
</ul>
</div>
<h2><span class="mw-headline" id="text_.3E_text">text &gt; text</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=1" title="Edit section: text > text">edit</a><span class="mw-editsection-bracket">]</span></span></h2>
<p>section 1
</p>
<h2><span class="mw-headline" id="text_.3C_text">text &lt; text</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=2" title="Edit section: text &lt; text">edit</a><span class="mw-editsection-bracket">]</span></span></h2>
<p>section 2
</p>
<h2><span class="mw-headline" id="text_.26_text">text &amp; text</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=3" title="Edit section: text &amp; text">edit</a><span class="mw-editsection-bracket">]</span></span></h2>
<p>section 3
</p>
<h2><span class="mw-headline" id="text_.27_text">text ' text</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=4" title="Edit section: text ' text">edit</a><span class="mw-editsection-bracket">]</span></span></h2>
<p>section 4
</p>
<h2><span class="mw-headline" id="text_.22_text">text " text</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=5" title="Edit section: text &quot; text">edit</a><span class="mw-editsection-bracket">]</span></span></h2>
<p>section 5
</p>
!! end

!! test
Headers with excess '=' characters
(Are similar tests necessary beyond the 1st level?)
!! input
=foo==
==foo=
=''italic'' heading==
==''italic'' heading=
!! result
<div id="toc" class="toc"><div id="toctitle"><h2>Contents</h2></div>
<ul>
<li class="toclevel-1 tocsection-1"><a href="#foo.3D"><span class="tocnumber">1</span> <span class="toctext">foo=</span></a></li>
<li class="toclevel-1 tocsection-2"><a href="#.3Dfoo"><span class="tocnumber">2</span> <span class="toctext">=foo</span></a></li>
<li class="toclevel-1 tocsection-3"><a href="#italic_heading.3D"><span class="tocnumber">3</span> <span class="toctext"><i>italic</i> heading=</span></a></li>
<li class="toclevel-1 tocsection-4"><a href="#.3Ditalic_heading"><span class="tocnumber">4</span> <span class="toctext">=<i>italic</i> heading</span></a></li>
</ul>
</div>
<h1><span class="mw-headline" id="foo.3D">foo=</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=1" title="Edit section: foo=">edit</a><span class="mw-editsection-bracket">]</span></span></h1>
<h1><span class="mw-headline" id=".3Dfoo">=foo</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=2" title="Edit section: =foo">edit</a><span class="mw-editsection-bracket">]</span></span></h1>
<h1><span class="mw-headline" id="italic_heading.3D"><i>italic</i> heading=</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=3" title="Edit section: italic heading=">edit</a><span class="mw-editsection-bracket">]</span></span></h1>
<h1><span class="mw-headline" id=".3Ditalic_heading">=<i>italic</i> heading</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=4" title="Edit section: =italic heading">edit</a><span class="mw-editsection-bracket">]</span></span></h1>

!! end

!! test
HTML headers vs TOC (bug 23393)
(__NOEDITSECTION__ for clearer output, doesn't matter here)
!! input
<h1>Header 1</h1>
== Header 1.1 ==
== Header 1.2 ==

<h1>Header 2
</h1>
== Header 2.1 ==
== Header 2.2 ==
__NOEDITSECTION__
!! result
<div id="toc" class="toc"><div id="toctitle"><h2>Contents</h2></div>
<ul>
<li class="toclevel-1"><a href="#Header_1"><span class="tocnumber">1</span> <span class="toctext">Header 1</span></a>
<ul>
<li class="toclevel-2 tocsection-1"><a href="#Header_1.1"><span class="tocnumber">1.1</span> <span class="toctext">Header 1.1</span></a></li>
<li class="toclevel-2 tocsection-2"><a href="#Header_1.2"><span class="tocnumber">1.2</span> <span class="toctext">Header 1.2</span></a></li>
</ul>
</li>
<li class="toclevel-1"><a href="#Header_2"><span class="tocnumber">2</span> <span class="toctext">Header 2</span></a>
<ul>
<li class="toclevel-2 tocsection-3"><a href="#Header_2.1"><span class="tocnumber">2.1</span> <span class="toctext">Header 2.1</span></a></li>
<li class="toclevel-2 tocsection-4"><a href="#Header_2.2"><span class="tocnumber">2.2</span> <span class="toctext">Header 2.2</span></a></li>
</ul>
</li>
</ul>
</div>
<h1><span class="mw-headline" id="Header_1">Header 1</span></h1>
<h2><span class="mw-headline" id="Header_1.1">Header 1.1</span></h2>
<h2><span class="mw-headline" id="Header_1.2">Header 1.2</span></h2>
<h1><span class="mw-headline" id="Header_2">Header 2</span></h1>
<h2><span class="mw-headline" id="Header_2.1">Header 2.1</span></h2>
<h2><span class="mw-headline" id="Header_2.2">Header 2.2</span></h2>

!! end

!! test
BUG 1219 URL next to image (broken)
!! input
http://example.com[[Image:foobar.jpg]]
!! result
<p><a rel="nofollow" class="external free" href="http://example.com">http://example.com</a><a href="/wiki/File:Foobar.jpg" class="image"><img alt="Foobar.jpg" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" /></a>
</p>
!!end

!! test
Bug 1186 news: in the middle of text
!! input
http://en.wikinews.org/wiki/Wikinews:Workplace
!! result
<p><a rel="nofollow" class="external free" href="http://en.wikinews.org/wiki/Wikinews:Workplace">http://en.wikinews.org/wiki/Wikinews:Workplace</a>
</p>
!!end


!! test
Namespaced link must have a title
!! input
[[Project:]]
!! result
<p>[[Project:]]
</p>
!!end

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


###
### HTML tags and HTML attributes
###

!! test
div with no attributes
!! input
<div>HTML rocks</div>
!! result
<div>HTML rocks</div>

!! end

!! test
div with double-quoted attribute
!! input
<div id="rock">HTML rocks</div>
!! result
<div id="rock">HTML rocks</div>

!! end

!! test
div with single-quoted attribute
!! input
<div id='rock'>HTML rocks</div>
!! result
<div id="rock">HTML rocks</div>

!! end

!! test
div with unquoted attribute
!! input
<div id=rock>HTML rocks</div>
!! result
<div id="rock">HTML rocks</div>

!! end

!! test
div with illegal double attributes
!! input
<div id="a" id="b">HTML rocks</div>
!! result
<div id="b">HTML rocks</div>

!!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
parsoid
!! input
<div class =>HTML rocks</div>
!! result
<div class="">HTML rocks</div>

!! end

# The PHP parser escapes the opening brace to &#123; for some reason, so
# disabled this test for it.
!! test
div with braces in attribute value
!! options
parsoid
!! input
<div title="{}">Foo</div>
!! result
<div title="{}">Foo</div>
!! 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
parsoid
!! input
<div class=>HTML rocks</div>
!! result
<div class="">HTML rocks</div>

!! end

!! test
HTML multiple attributes correction
!! input
<p class="error" class="awesome">Awesome!</p>
!! result
<p class="awesome">Awesome!</p>

!!end

!! test
Table multiple attributes correction
!! input
{|
!+ class="error" class="awesome"| status
|}
!! result
<table>
<tr>
<th class="awesome"> status
</th></tr></table>

!!end

!! test
DIV IN UPPERCASE
!! input
<DIV ID="x">HTML ROCKS</DIV>
!! result
<div id="x">HTML ROCKS</div>

!!end

!! test
Non-ASCII pseudo-tags are rendered as text
!! input
<khyô>
!! result
<p>&lt;khyô&gt;
</p>
!! end

!! test
Pseudo-tag with URL 'name' renders as url link
!! input
<http://example.com/>
!! result
<p>&lt;<a rel="nofollow" class="external free" href="http://example.com/">http://example.com/</a>&gt;
</p>
!! end

!! test
text with amp in the middle of nowhere
!! input
Remember AT&T?
!!result
<p>Remember AT&amp;T?
</p>
!! end

!! test
text with character entity: eacute
!! input
I always thought &eacute; was a cute letter.
!! result
<p>I always thought &#233; was a cute letter.
</p>
!! end

!! test
text with entity-escaped character entity-like string: eacute
!! input
I always thought &amp;eacute; was a cute letter.
!! result
<p>I always thought &amp;eacute; was a cute letter.
</p>
!! end

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


###
### Nesting tests (see bug 41545, 50604, 51081)
###

# This test case is fixed in Parsoid by domino 1.0.12. (bug 50604)
# Note that html2wt is considerably more difficult if we use <b> in
# the test case, instead of <big>
!! test
Ensure that HTML adoption agency algorithm is properly implemented.
!! input
<big>X<big>Y</big>Z</big>
!! result
<p><big>X<big>Y</big>Z</big>
</p>
!! end

# This was bug 41545 in the PHP parser.
!! test
Nesting of <kbd>
!! input
<kbd>X<kbd>Y</kbd>Z</kbd>
!! result
<p><kbd>X<kbd>Y</kbd>Z</kbd>
</p>
!! end

# The following cases were bug 51081 in the PHP parser.
# Note that there are some other nestable tags (b, i, etc) which are
# not covered; see bug 51081 for discussion.
!! test
Nesting of <em>
!! input
<em>X<em>Y</em>Z</em>
!! result
<p><em>X<em>Y</em>Z</em>
</p>
!! end

!! test
Nesting of <strong>
!! input
<strong>X<strong>Y</strong>Z</strong>
!! result
<p><strong>X<strong>Y</strong>Z</strong>
</p>
!! end

!! test
Nesting of <q>
!! input
<q>X<q>Y</q>Z</q>
!! result
<p><q>X<q>Y</q>Z</q>
</p>
!! end

!! test
Nesting of <ruby>
!! input
<ruby>X<ruby>Y</ruby>Z</ruby>
!! result
<p><ruby>X<ruby>Y</ruby>Z</ruby>
</p>
!! end

!! test
Nesting of <bdo>
!! input
<bdo>X<bdo>Y</bdo>Z</bdo>
!! result
<p><bdo>X<bdo>Y</bdo>Z</bdo>
</p>
!! end


###
### Media links
###

!! test
Media link
!! input
[[Media:Foobar.jpg]]
!! result
<p><a href="http://example.com/images/3/3a/Foobar.jpg" class="internal" title="Foobar.jpg">Media:Foobar.jpg</a>
</p>
!! end

!! test
Media link with text
!! input
[[Media:Foobar.jpg|A neat file to look at]]
!! result
<p><a href="http://example.com/images/3/3a/Foobar.jpg" class="internal" title="Foobar.jpg">A neat file to look at</a>
</p>
!! 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<div style=display:none>" onmouseover="alert(document.cookie)" onfoo="</div>]]
!! result
<a href="http://example.com/images/3/3a/Foobar.jpg" class="internal" title="Foobar.jpg">Safe Link&lt;div style="display:none"&gt;" onmouseover="alert(document.cookie)" onfoo="&lt;/div&gt;</a>

!! end

!! test
Media link to nonexistent file (bug 1702)
!! input
[[Media:No such.jpg]]
!! result
<p><a href="/index.php?title=Special:Upload&amp;wpDestFile=No_such.jpg" class="new" title="No such.jpg">Media:No such.jpg</a>
</p>
!! end

!! test
Image link to nonexistent file (bug 1850 - good)
!! input
[[Image:No such.jpg]]
!! result
<p><a href="/index.php?title=Special:Upload&amp;wpDestFile=No_such.jpg" class="new" title="File:No such.jpg">File:No such.jpg</a>
</p>
!! end

!! test
:Image link to nonexistent file (bug 1850 - bad)
!! input
[[:Image:No such.jpg]]
!! result
<p><a href="/index.php?title=File:No_such.jpg&amp;action=edit&amp;redlink=1" class="new" title="File:No such.jpg (page does not exist)">Image:No such.jpg</a>
</p>
!! end



!! test
Character reference normalization in link text (bug 1938)
!! input
[[Main Page|this&that]]
!! result
<p><a href="/wiki/Main_Page" title="Main Page">this&amp;that</a>
</p>
!!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
[[&#xFB2E;]]
[[&#x5d0;&#x5b7;]]
[[&#x5d0;ַ]]
[[א&#x5b7;]]
[[אַ]]
!! result
<p><a href="/wiki/%D7%90%D6%B7" title="אַ">&#xfb2e;</a>
<a href="/wiki/%D7%90%D6%B7" title="אַ">&#x5d0;&#x5b7;</a>
<a href="/wiki/%D7%90%D6%B7" title="אַ">&#x5d0;ַ</a>
<a href="/wiki/%D7%90%D6%B7" title="אַ">א&#x5b7;</a>
<a href="/wiki/%D7%90%D6%B7" title="אַ">אַ</a>
</p>
!! end

!! test
Empty attribute crash test (bug 2067)
!! input
<font color="">foo</font>
!! result
<p><font color="">foo</font>
</p>
!! end

!! test
Empty attribute crash test single-quotes (bug 2067)
!! input
<font color=''>foo</font>
!! result
<p><font color="">foo</font>
</p>
!! end

!! test
Attribute test: equals, then nothing
!! input
<font color=>foo</font>
!! result
<p><font>foo</font>
</p>
!! end

!! test
Attribute test: unquoted value
!! input
<font color=x>foo</font>
!! result
<p><font color="x">foo</font>
</p>
!! end

!! test
Attribute test: unquoted but illegal value (hash)
!! input
<font color=#x>foo</font>
!! result
<p><font color="#x">foo</font>
</p>
!! end

!! test
Attribute test: no value
!! input
<font color>foo</font>
!! result
<p><font color="color">foo</font>
</p>
!! end

!! test
Bug 2095: link with three closing brackets
!! input
[[Main Page]]]
!! result
<p><a href="/wiki/Main_Page" title="Main Page">Main Page</a>]
</p>
!! end

!! test
Bug 2095: link with pipe and three closing brackets
!! input
[[Main Page|link]]]
!! result
<p><a href="/wiki/Main_Page" title="Main Page">link</a>]
</p>
!! end

!! test
Bug 2095: link with pipe and three closing brackets, version 2
!! input
[[Main Page|[http://example.com/]]]
!! result
<p><a href="/wiki/Main_Page" title="Main Page">[http://example.com/]</a>
</p>
!! 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
<div style="float: right; {{{1}}}">Magic div</div>
!! endarticle

!! test
Bug 2304: HTML attribute safety (safe template; regression bug 2309)
!! input
<div title="{{test}}"></div>
!! result
<div title="This is a test template"></div>

!! end

!! test
Bug 2304: HTML attribute safety (dangerous template; 2309)
!! input
<div title="{{dangerous attribute}}"></div>
!! result
<div title=""></div>

!! end

!! test
Bug 2304: HTML attribute safety (dangerous style template; 2309)
!! input
<div style="{{dangerous style attribute}}"></div>
!! result
<div style="/* insecure input */"></div>

!! end

!! test
Bug 2304: HTML attribute safety (safe parameter; 2309)
!! input
{{div style|width: 200px}}
!! result
<div style="float: right; width: 200px">Magic div</div>

!! end

!! test
Bug 2304: HTML attribute safety (unsafe parameter; 2309)
!! input
{{div style|width: expression(alert(document.cookie))}}
!! result
<div style="/* insecure input */">Magic div</div>

!! end

!! test
Bug 2304: HTML attribute safety (unsafe breakout parameter; 2309)
!! input
{{div style|"><script>alert(document.cookie)</script>}}
!! result
<div style="float: right;">&lt;script&gt;alert(document.cookie)&lt;/script&gt;"&gt;Magic div</div>

!! end

!! test
Bug 2304: HTML attribute safety (unsafe breakout parameter 2; 2309)
!! input
{{div style|" ><script>alert(document.cookie)</script>}}
!! result
<div style="float: right;">&lt;script&gt;alert(document.cookie)&lt;/script&gt;"&gt;Magic div</div>

!! end

!! test
Bug 2304: HTML attribute safety (link)
!! input
<div title="[[Main Page]]"></div>
!! result
<div title="&#91;&#91;Main Page]]"></div>

!! end

!! test
Bug 2304: HTML attribute safety (italics)
!! input
<div title="''foobar''"></div>
!! result
<div title="&#39;&#39;foobar&#39;&#39;"></div>

!! end

!! test
Bug 2304: HTML attribute safety (bold)
!! input
<div title="'''foobar'''"></div>
!! result
<div title="&#39;&#39;&#39;foobar&#39;&#39;&#39;"></div>

!! end


!! test
Bug 2304: HTML attribute safety (ISBN)
!! input
<div title="ISBN 1234567890"></div>
!! result
<div title="&#73;SBN 1234567890"></div>

!! end

!! test
Bug 2304: HTML attribute safety (RFC)
!! input
<div title="RFC 1234"></div>
!! result
<div title="&#82;FC 1234"></div>

!! end

!! test
Bug 2304: HTML attribute safety (PMID)
!! input
<div title="PMID 1234567890"></div>
!! result
<div title="&#80;MID 1234567890"></div>

!! end

!! test
Bug 2304: HTML attribute safety (web link)
!! input
<div title="http://example.com/"></div>
!! result
<div title="http&#58;//example.com/"></div>

!! end

!! test
Bug 2304: HTML attribute safety (named web link)
!! input
<div title="[http://example.com/ link]"></div>
!! result
<div title="&#91;http&#58;//example.com/ link]"></div>

!! end

!! test
Bug 3244: HTML attribute safety (extension; safe)
!! input
<div style="<nowiki>background:blue</nowiki>"></div>
!! result
<div style="background:blue"></div>

!! end

!! test
Bug 3244: HTML attribute safety (extension; unsafe)
!! input
<div style="<nowiki>border-left:expression(alert(document.cookie))</nowiki>"></div>
!! result
<div style="/* insecure input */"></div>

!! end

# More MSIE fun discovered by Tom Gilder

!! test
MSIE CSS safety test: spurious slash
!! input
<div style="background-image:u\rl(javascript:alert('boo'))">evil</div>
!! result
<div style="/* insecure input */">evil</div>

!! end

!! test
MSIE CSS safety test: hex code
!! input
<div style="background-image:u\72l(javascript:alert('boo'))">evil</div>
!! result
<div style="/* insecure input */">evil</div>

!! end

!! test
MSIE CSS safety test: comment in url
!! input
<div style="background-image:u/**/rl(javascript:alert('boo'))">evil</div>
!! result
<div style="background-image:u rl(javascript:alert(&#39;boo&#39;))">evil</div>

!! end

!! test
MSIE CSS safety test: comment in expression
!! input
<div style="background-image:expres/**/sion(alert('boo4'))">evil4</div>
!! result
<div style="background-image:expres sion(alert(&#39;boo4&#39;))">evil4</div>

!! end


!! test
Table attribute legitimate extension
!! input
{|
!+ style="<nowiki>color:blue</nowiki>"| status
|}
!! result
<table>
<tr>
<th style="color:blue"> status
</th></tr></table>

!!end

!! test
Table attribute safety
!! input
{|
!+ style="<nowiki>border-width:expression(0+alert(document.cookie))</nowiki>"| status
|}
!! result
<table>
<tr>
<th style="/* insecure input */"> status
</th></tr></table>

!! end

!! test
CSS line continuation 1
!! input
<div style="background-image: u\&#10;rl(test.jpg);"></div>
!! result
<div style="/* insecure input */"></div>

!! end

!! test
CSS line continuation 2
!! input
<div style="background-image: u\&#13;rl(test.jpg); "></div>
!! result
<div style="/* insecure input */"></div>

!! end

!! article
Template:Identity
!! text
{{{1}}}
!! endarticle

!! test
Expansion of multi-line templates in attribute values (bug 6255)
!! input
<div style="background: {{identity|#00FF00}}">-</div>
!! result
<div style="background: #00FF00">-</div>

!! end


!! test
Expansion of multi-line templates in attribute values (bug 6255 sanity check)
!! input
<div style="background: 
#00FF00">-</div>
!! result
<div style="background: #00FF00">-</div>

!! end

!! test
Expansion of multi-line templates in attribute values (bug 6255 sanity check 2)
!! input
<div style="background: &#10;#00FF00">-</div>
!! result
<div style="background: &#10;#00FF00">-</div>

!! end

###
### Parser hooks (see maintenance/parserTestsParserHook.php for the <tag> extension)
###
!! test
Parser hook: empty input
!! input
<tag></tag>
!! result
<pre>
''
array (
)
</pre>

!! end

!! test
Parser hook: empty input using terminated empty elements
!! input
<tag/>
!! result
<pre>
NULL
array (
)
</pre>

!! end

!! test
Parser hook: empty input using terminated empty elements (space before)
!! input
<tag />
!! result
<pre>
NULL
array (
)
</pre>

!! end

!! test
Parser hook: basic input
!! input
<tag>input</tag>
!! result
<pre>
'input'
array (
)
</pre>

!! end


!! test
Parser hook: case insensitive
!! input
<TAG>input</TAG>
!! result
<pre>
'input'
array (
)
</pre>

!! end


!! test
Parser hook: case insensitive, redux
!! input
<TaG>input</TAg>
!! result
<pre>
'input'
array (
)
</pre>

!! end

!! test
Parser hook: nested tags
!! options
noxml
!! input
<tag><tag></tag></tag>
!! result
<pre>
'<tag>'
array (
)
</pre>&lt;/tag&gt;

!! end

!! test
Parser hook: basic arguments
!! input
<tag width=200 height = "100" depth = '50' square></tag>
!! result
<pre>
''
array (
  'width' => '200',
  'height' => '100',
  'depth' => '50',
  'square' => 'square',
)
</pre>

!! end

!! test
Parser hook: argument containing a forward slash (bug 5344)
!! input
<tag filename='/tmp/bla'></tag>
!! result
<pre>
''
array (
  'filename' => '/tmp/bla',
)
</pre>

!! end

!! test
Parser hook: empty input using terminated empty elements (bug 2374)
!! input
<tag foo=bar/>text
!! result
<pre>
NULL
array (
  'foo' => 'bar',
)
</pre>text

!! end

# </tag> 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
<tag width=200 height = "100" depth = '50' square/>
other stuff
</tag>
!! result
<pre>
NULL
array (
  'width' => '200',
  'height' => '100',
  'depth' => '50',
  'square' => 'square',
)
</pre>
<p>other stuff
&lt;/tag&gt;
</p>
!! end

###
### (see maintenance/parserTestsStaticParserHook.php for the <statictag> extension)
###

!! test
Parser hook: static parser hook not inside a comment
!! input
<statictag>hello, world</statictag>
<statictag action=flush/>
!! result
<p>hello, world
</p>
!! end


!! test
Parser hook: static parser hook inside a comment
!! input
<!-- <statictag>hello, world</statictag> -->
<statictag action=flush/>
!! result
<p><br />
</p>
!! 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
<p>(My parameter is: param)
</p>
!! end


###
### Sanitizer
###
!! test
Sanitizer: Closing of open tags
!! input
<s></s><table></table>
!! result
<s></s><table></table>

!! end

!! test
Sanitizer: Closing of open but not closed tags
!! input
<s>foo
!! result
<p><s>foo</s>
</p>
!! end

!! test
Sanitizer: Closing of closed but not open tags
!! input
</s>
!! result
<p>&lt;/s&gt;
</p>
!! end

!! test
Sanitizer: Closing of closed but not open table tags
!! input
Table not started</td></tr></table>
!! result
<p>Table not started&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
</p>
!! end

!! test
Sanitizer: Escaping of spaces, multibyte characters, colons & other stuff in id=""
!! input
<span id="æ: v">byte</span>[[#æ: v|backlink]]
!! result
<p><span id=".C3.A6:_v">byte</span><a href="#.C3.A6:_v">backlink</a>
</p>
!! end

!! test
Sanitizer: Validating the contents of the id attribute (bug 4515)
!! options
disabled
!! input
<br id=9 />
!! result
Something, but definitely not <br id="9" />...
!! end

!! test
Sanitizer: Validating id attribute uniqueness (bug 4515, bug 6301)
!! options
disabled
!! input
<br id="foo" /><br id="foo" />
!! result
Something need to be done. foo-2 ? 
!! end

!! test
Sanitizer: Validating that <meta> and <link> work, but only for Microdata
!! input
<div itemscope>
	<meta itemprop="hello" content="world">
	<meta http-equiv="refresh" content="5">
	<meta itemprop="hello" http-equiv="refresh" content="5">
	<link itemprop="hello" href="{{SERVER}}">
	<link rel="stylesheet" href="{{SERVER}}">
	<link rel="stylesheet" itemprop="hello" href="{{SERVER}}">
</div>
!! result
<div itemscope="itemscope">
<p>	<meta itemprop="hello" content="world" />
	&lt;meta http-equiv="refresh" content="5"&gt;
	<meta itemprop="hello" content="5" />
</p>
	<link itemprop="hello" href="http&#58;//example.org" />
	&lt;link rel="stylesheet" href="<a rel="nofollow" class="external free" href="http://example.org">http://example.org</a>"&gt;
	<link itemprop="hello" href="http&#58;//example.org" />
</div>

!! 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
<p>this bit is safe: }-
</p><p>but if we add a conversion instance: xxx
</p><p>then we get cut off here: }-
</p><p>all additional text is vanished
</p>
!! end

!! test
Self closed html pairs (bug 5487)
!! options
!! input
<center><font id="bug" />Centered text</center>
<div><font id="bug2" />In div text</div>
!! result
<center>&lt;font id="bug" /&gt;Centered text</center>
<div>&lt;font id="bug2" /&gt;In div text</div>

!! end

#
#
#

!! test
Punctuation: nbsp before exclamation
!! input
C'est grave !
!! result
<p>C'est grave&#160;!
</p>
!! end

!! test
Punctuation: CSS !important (bug 11874)
!! input
<div style="width:50% !important">important</div>
!! result
<div style="width:50% !important">important</div>

!!end

!! test
Punctuation: CSS ! important (bug 11874; with space after)
!! input
<div style="width:50% ! important">important</div>
!! result
<div style="width:50% ! important">important</div>

!!end


!! test
HTML bullet list, closed tags (bug 5497)
!! input
<ul>
<li>One</li>
<li>Two</li>
</ul>
!! result
<ul>
<li>One</li>
<li>Two</li>
</ul>

!! end

!! test
HTML bullet list, unclosed tags (bug 5497)
!! options
disabled
!! input
<ul>
<li>One
<li>Two
</ul>
!! result
<ul>
<li>One
</li><li>Two
</li></ul>

!! end

!! test
HTML ordered list, closed tags (bug 5497)
!! input
<ol>
<li>One</li>
<li>Two</li>
</ol>
!! result
<ol>
<li>One</li>
<li>Two</li>
</ol>

!! end

!! test
HTML ordered list, unclosed tags (bug 5497)
!! options
disabled
!! input
<ol>
<li>One
<li>Two
</ol>
!! result
<ol>
<li>One
</li><li>Two
</li></ol>

!! end

!! test
HTML nested bullet list, closed tags (bug 5497)
!! input
<ul>
<li>One</li>
<li>Two:
<ul>
<li>Sub-one</li>
<li>Sub-two</li>
</ul>
</li>
</ul>
!! result
<ul>
<li>One</li>
<li>Two:
<ul>
<li>Sub-one</li>
<li>Sub-two</li>
</ul>
</li>
</ul>

!! end

!! test
HTML nested bullet list, open tags (bug 5497)
!! options
disabled
!! input
<ul>
<li>One
<li>Two:
<ul>
<li>Sub-one
<li>Sub-two
</ul>
</ul>
!! result
<ul>
<li>One
</li><li>Two:
<ul>
<li>Sub-one
</li><li>Sub-two
</li></ul>
</li></ul>

!! end

!! test
HTML nested ordered list, closed tags (bug 5497)
!! input
<ol>
<li>One</li>
<li>Two:
<ol>
<li>Sub-one</li>
<li>Sub-two</li>
</ol>
</li>
</ol>
!! result
<ol>
<li>One</li>
<li>Two:
<ol>
<li>Sub-one</li>
<li>Sub-two</li>
</ol>
</li>
</ol>

!! end

!! test
HTML nested ordered list, open tags (bug 5497)
!! options
disabled
!! input
<ol>
<li>One
<li>Two:
<ol>
<li>Sub-one
<li>Sub-two
</ol>
</ol>
!! result
<ol>
<li>One
</li><li>Two:
<ol>
<li>Sub-one
</li><li>Sub-two
</li></ol>
</li></ol>

!! end

!! test
HTML ordered list item with parameters oddity
!! input
<ol><li id="fragment">One</li></ol>
!! result
<ol><li id="fragment">One</li></ol>

!! 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
<p><a rel="nofollow" class="external autonumber" href="http://first/">[1]</a> <a rel="nofollow" class="external autonumber" href="http://second">[2]</a> <a rel="nofollow" class="external autonumber" href="ftp://ftp">[3]</a>
</p><p><a rel="nofollow" class="external free" href="ftp://inlineftp">ftp://inlineftp</a>
</p><p><a rel="nofollow" class="external text" href="mailto:enclosed@mail.tld">With target</a>
</p><p><a rel="nofollow" class="external autonumber" href="mailto:enclosed@mail.tld">[4]</a>
</p><p><a rel="nofollow" class="external free" href="mailto:inline@mail.tld">mailto:inline@mail.tld</a>
</p>
!! end


#
# Security and HTML correctness
# From Nick Jenkins' fuzz testing
#

!! test
Fuzz testing: Parser13
!! input
{| 
| http://a|
!! result
<table>
<tr>
<td>
</td>
</tr>
</table>

!! end

!! test
Fuzz testing: Parser14
!! input
== onmouseover= ==
http://__TOC__
!! result
<h2><span class="mw-headline" id="onmouseover.3D">onmouseover=</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=1" title="Edit section: onmouseover=">edit</a><span class="mw-editsection-bracket">]</span></span></h2>
http://<div id="toc" class="toc"><div id="toctitle"><h2>Contents</h2></div>
<ul>
<li class="toclevel-1 tocsection-1"><a href="#onmouseover.3D"><span class="tocnumber">1</span> <span class="toctext">onmouseover=</span></a></li>
</ul>
</div>

!! end

!! test
Fuzz testing: Parser14-table
!! input
==a==
{| STYLE=__TOC__
!! result
<h2><span class="mw-headline" id="a">a</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=1" title="Edit section: a">edit</a><span class="mw-editsection-bracket">]</span></span></h2>
<table style="&#95;_TOC&#95;_">
<tr><td></td></tr>
</table>

!! end

# Known to produce bogus xml (extra </td>)
!! test
Fuzz testing: Parser16
!! options
noxml
!! input
{|
!https://||||||
!! result
<table>
<tr>
<th>https://</th>
<th></th>
<th></th>
<th>
</td>
</tr>
</table>

!! end

!! test
Fuzz testing: Parser21
!! input
{|
! irc://{{ftp://a" onmouseover="alert('hello world');"
|
!! result
<table>
<tr>
<th> <a rel="nofollow" class="external free" href="irc://{{ftp://a">irc://{{ftp://a</a>" onmouseover="alert('hello world');"
</th>
<td>
</td>
</tr>
</table>

!! end

!! test
Fuzz testing: Parser22
!! input
http://===r:::https://b

{|
!!result
<p><a rel="nofollow" class="external free" href="http://===r:::https://b">http://===r:::https://b</a>
</p>
<table>
<tr><td></td></tr>
</table>

!! end

# Known to produce bad XML for now
!! test
Fuzz testing: Parser24
!! options
noxml
!! input
{|
{{{|
<u CLASS=
| {{{{SSSll!!!!!!!VVVV)]]][[Special:*xxxxxxx--><noinclude>}}}} >
<br style="onmouseover='alert(document.cookie);' " />

MOVE YOUR MOUSE CURSOR OVER THIS TEXT
|
!! result
<table>
{{{|
<u class="&#124;">}}}} &gt;
<br style="onmouseover=&#39;alert(document.cookie);&#39;" />

MOVE YOUR MOUSE CURSOR OVER THIS TEXT
<tr>
<td></u>
</td>
</tr>
</table>

!! 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:
# <p>{{{| 
# </p>
# <li class="&#124;&#124;">
# }}}blah" onmouseover="alert('hello world');" align="left"<b>MOVE MOUSE CURSOR OVER HERE</b>
!!test
Fuzz testing: Parser25 (bug 6055)
!! input
{{{
| 
<LI CLASS=||
 >
}}}blah" onmouseover="alert('hello world');" align="left"'''MOVE MOUSE CURSOR OVER HERE
!! result
<p>&lt;LI CLASS=blah" onmouseover="alert('hello world');" align="left"<b>MOVE MOUSE CURSOR OVER HERE</b>
</p>
!! end

!!test
Fuzz testing: URL adjacent extension (with space, clean)
!! options
!! input
http://example.com <nowiki>junk</nowiki>
!! result
<p><a rel="nofollow" class="external free" href="http://example.com">http://example.com</a> junk
</p>
!!end

!!test
Fuzz testing: URL adjacent extension (no space, dirty; nowiki)
!! options
!! input
http://example.com<nowiki>junk</nowiki>
!! result
<p><a rel="nofollow" class="external free" href="http://example.com">http://example.com</a>junk
</p>
!!end

!!test
Fuzz testing: URL adjacent extension (no space, dirty; pre)
!! options
!! input
http://example.com<pre>junk</pre>
!! result
<a rel="nofollow" class="external free" href="http://example.com">http://example.com</a><pre>junk</pre>

!!end

!!test
Fuzz testing: image with bogus manual thumbnail
!!input
[[Image:foobar.jpg|thumbnail= ]]
!!result
<div class="thumb tright"><div class="thumbinner" style="width:182px;">Error creating thumbnail:   <div class="thumbcaption"></div></div></div>

!!end

!! test
Fuzz testing: encoded newline in generated HTML replacements (bug 6577)
!! input
<pre dir="&#10;"></pre>
!! result
<pre dir="&#10;"></pre>

!! end

!! test
Parsing optional HTML elements (Bug 6171)
!! options
!! input
<table>
  <tr>
    <td> Some tabular data</td>
    <td> More tabular data ...
    <td> And yet som tabular data</td>
  </tr>
</table>
!! result
<table>
  <tr>
    <td> Some tabular data</td>
    <td> More tabular data ...
    </td><td> And yet som tabular data</td>
  </tr>
</table>

!! end

!! test
Correct handling of <td>, <tr> (Bug 6171)
!! options
!! input
<table>
  <tr>
    <td> Some tabular data</td>
    <td> More tabular data ...</td>
    <td> And yet som tabular data</td>
  </tr>
</table>
!! result
<table>
  <tr>
    <td> Some tabular data</td>
    <td> More tabular data ...</td>
    <td> And yet som tabular data</td>
  </tr>
</table>

!! end


!! test
Parsing crashing regression (fr:JavaScript)
!! input
</body></x>
!! result
<p>&lt;/body&gt;&lt;/x&gt;
</p>
!! end

!! test
Inline wiki vs wiki block nesting
!! input
'''Bold paragraph

New wiki paragraph
!! result
<p><b>Bold paragraph</b>
</p><p>New wiki paragraph
</p>
!! end

!! test
Inline HTML vs wiki block nesting
!! options
disabled
!! input
<b>Bold paragraph

New wiki paragraph
!! result
<p><b>Bold paragraph</b>
</p><p>New wiki paragraph
</p>
!! end

# Original result was this:
# <p><b>bold</b><b>bold<i>bolditalics</i></b>
# </p>
# 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
<p>'<i>bold'</i><b>bold<i>bolditalics</i></b>
</p>
!! end


!! article
Xyzzyx
!! text
Article for special page transclusion test
!! endarticle

!! test
Special page transclusion
!! options
!! input
{{Special:Prefixindex/Xyzzyx}}
!! result
<table id="mw-prefixindex-list-table"><tr><td><a href="/wiki/Xyzzyx" title="Xyzzyx">Xyzzyx</a></td></tr></table>

!! end

!! test
Special page transclusion twice (bug 5021)
!! options
!! input
{{Special:Prefixindex/Xyzzyx}}
{{Special:Prefixindex/Xyzzyx}}
!! result
<table id="mw-prefixindex-list-table"><tr><td><a href="/wiki/Xyzzyx" title="Xyzzyx">Xyzzyx</a></td></tr></table>
<table id="mw-prefixindex-list-table"><tr><td><a href="/wiki/Xyzzyx" title="Xyzzyx">Xyzzyx</a></td></tr></table>

!! end

!! test
Transclusion of default MediaWiki message
!! input
{{MediaWiki:Mainpage}}
!!result
<p>Main Page
</p>
!! end

!! test
Transclusion of nonexistent MediaWiki message
!! input
{{MediaWiki:Mainpagexxx}}
!!result
<p><a href="/index.php?title=MediaWiki:Mainpagexxx&amp;action=edit&amp;redlink=1" class="new" title="MediaWiki:Mainpagexxx (page does not exist)">MediaWiki:Mainpagexxx</a>
</p>
!! end

!! test
Transclusion of MediaWiki message with underscore
!! input
{{MediaWiki:history_short}}
!! result
<p>History
</p>
!! end

!! test
Transclusion of MediaWiki message with space
!! input
{{MediaWiki:history short}}
!! result
<p>History
</p>
!! end

!! test
Invalid header with following text
!! input
= x = y
!! result
<p>= x = y
</p>
!! 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 <nowiki> heading (section 1)
!! options
section=1
!! input
==a==
==bogus== <nowiki>not a legal section</nowiki>
==b==
!! result
==a==
==bogus== <nowiki>not a legal section</nowiki>
!! end

!! test
Section extraction test with bogus <nowiki> heading (section 2)
!! options
section=2
!! input
==a==
==bogus== <nowiki>not a legal section</nowiki>
==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
<h2>unmarked</h2>
unmarked
==1==
one
==2==
two
!! result
==1==
one
!! end

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


# Formerly testing for bug 3342
!! test
Section extraction, heading surrounded by <noinclude>
!! options
section=1
!! input
<noinclude>==unmarked==</noinclude>
==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, <pre> around bogus header (bug 10309)
!! options
noxml section=2
!! input
== Section One ==
<pre>
=======
</pre>

== Section Two ==
stuff
!! result
== Section Two ==
stuff
!! end

!! test
Section replacement, <pre> around bogus header (bug 10309)
!! options
noxml replace=2,"xxx"
!! input
== Section One ==
<pre>
=======
</pre>

== Section Two ==
stuff
!! result
== Section One ==
<pre>
=======
</pre>

xxx
!! end



!! test
Handling of &#x0A; in URLs
!! input
**irc://&#x0A;a
!! result
<ul><li><ul><li><a rel="nofollow" class="external free" href="irc://%0Aa">irc://%0Aa</a>
</li></ul>
</li></ul>

!!end

!! test
5 quotes, code coverage +1 line (php)
!! options
php
!! input
'''''
!! result
!! end
# The PHP parser strips the empty tags out for giggles; parsoid doesn't.
!! test
5 quotes, code coverage +1 line (parsoid)
!! options
parsoid
!! input
'''''
!! result
<p><i><b></b></i></p>
!! end

!! test
Special:Search page linking.
!! input
{{Special:search}}
!! result
<p><a href="/wiki/Special:Search" title="Special:Search">Special:Search</a>
</p>
!! end

!! test
Say the magic word
!! input
* {{PAGENAME}}
* {{BASEPAGENAME}}
* {{SUBPAGENAME}}
* {{SUBPAGENAMEE}}
* {{ROOTPAGENAME}}
* {{ROOTPAGENAMEE}}
* {{BASEPAGENAME}}
* {{BASEPAGENAMEE}}
* {{TALKPAGENAME}}
* {{TALKPAGENAMEE}}
* {{SUBJECTPAGENAME}}
* {{SUBJECTPAGENAMEE}}
* {{NAMESPACEE}}
* {{NAMESPACE}}
* {{TALKSPACE}}
* {{TALKSPACEE}}
* {{SUBJECTSPACE}}
* {{SUBJECTSPACEE}}
* {{Dynamic|{{NUMBEROFUSERS}}|{{NUMBEROFPAGES}}|{{CURRENTVERSION}}|{{CONTENTLANGUAGE}}|{{DIRECTIONMARK}}|{{CURRENTTIMESTAMP}}|{{NUMBEROFARTICLES}}}}
!! result
<ul><li> Parser test
</li><li> Parser test
</li><li> Parser test
</li><li> Parser_test
</li><li> Parser test
</li><li> Parser_test
</li><li> Parser test
</li><li> Parser_test
</li><li> Talk:Parser test
</li><li> Talk:Parser_test
</li><li> Parser test
</li><li> Parser_test
</li><li> 
</li><li> 
</li><li> Talk
</li><li> Talk
</li><li> 
</li><li> 
</li><li> <a href="/index.php?title=Template:Dynamic&amp;action=edit&amp;redlink=1" class="new" title="Template:Dynamic (page does not exist)">Template:Dynamic</a>
</li></ul>

!! end
### Note: Above tests excludes the "{{NUMBEROFADMINS}}" magic word because it generates a MySQL error when included.

!! test
Gallery
!! input
<gallery>
image1.png |
image2.gif|||||

image3|
image4    |300px| centre
 image5.svg| http://///////
[[x|xx]]]]
* image6
</gallery>
!! result
<ul class="gallery">
		<li class="gallerybox" style="width: 155px"><div style="width: 155px">
			<div style="height: 150px;">Image1.png</div>
			<div class="gallerytext">
			</div>
		</div></li>
		<li class="gallerybox" style="width: 155px"><div style="width: 155px">
			<div style="height: 150px;">Image2.gif</div>
			<div class="gallerytext">
<p>||||
</p>
			</div>
		</div></li>
		<li class="gallerybox" style="width: 155px"><div style="width: 155px">
			<div style="height: 150px;">Image3</div>
			<div class="gallerytext">
			</div>
		</div></li>
		<li class="gallerybox" style="width: 155px"><div style="width: 155px">
			<div style="height: 150px;">Image4</div>
			<div class="gallerytext">
<p>300px| centre
</p>
			</div>
		</div></li>
		<li class="gallerybox" style="width: 155px"><div style="width: 155px">
			<div style="height: 150px;">Image5.svg</div>
			<div class="gallerytext">
<p><a rel="nofollow" class="external free" href="http://///////">http://///////</a>
</p>
			</div>
		</div></li>
		<li class="gallerybox" style="width: 155px"><div style="width: 155px">
			<div style="height: 150px;">* image6</div>
			<div class="gallerytext">
			</div>
		</div></li>
</ul>

!! end

!! test
Gallery (with options)
!! input
<gallery widths='70px' heights='40px' perrow='2' caption='Foo [[Main Page]]' >
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.
</gallery>
!! result
<ul class="gallery" style="max-width: 226px;_width: 226px;">
	<li class='gallerycaption'>Foo <a href="/wiki/Main_Page" title="Main Page">Main Page</a></li>
		<li class="gallerybox" style="width: 105px"><div style="width: 105px">
			<div style="height: 70px;">Nonexistant.jpg</div>
			<div class="gallerytext">
<p>caption
</p>
			</div>
		</div></li>
		<li class="gallerybox" style="width: 105px"><div style="width: 105px">
			<div style="height: 70px;">Nonexistant.jpg</div>
			<div class="gallerytext">
			</div>
		</div></li>
		<li class="gallerybox" style="width: 105px"><div style="width: 105px">
			<div class="thumb" style="width: 100px;"><div style="margin:31px auto;"><a href="/wiki/File:Foobar.jpg" class="image"><img alt="" src="http://example.com/images/thumb/3/3a/Foobar.jpg/70px-Foobar.jpg" width="70" height="8" /></a></div></div>
			<div class="gallerytext">
<p>some <b>caption</b> <a href="/wiki/Main_Page" title="Main Page">Main Page</a>
</p>
			</div>
		</div></li>
		<li class="gallerybox" style="width: 105px"><div style="width: 105px">
			<div class="thumb" style="width: 100px;"><div style="margin:31px auto;"><a href="/wiki/File:Foobar.jpg" class="image"><img alt="Foobar.jpg" src="http://example.com/images/thumb/3/3a/Foobar.jpg/70px-Foobar.jpg" width="70" height="8" /></a></div></div>
			<div class="gallerytext">
			</div>
		</div></li>
		<li class="gallerybox" style="width: 105px"><div style="width: 105px">
			<div class="thumb" style="width: 100px;"><div style="margin:31px auto;"><a href="/wiki/File:Foobar.jpg" class="image"><img alt="This is a foo-bar." src="http://example.com/images/thumb/3/3a/Foobar.jpg/70px-Foobar.jpg" width="70" height="8" /></a></div></div>
			<div class="gallerytext">
<p>Blabla|blabla.
</p>
			</div>
		</div></li>
</ul>

!! end

!! test
Gallery with wikitext inside caption
!! input
<gallery>
File:foobar.jpg|[[File:foobar.jpg|20px|desc|alt=inneralt]]|alt=galleryalt
File:foobar.jpg|{{Test|unamedParam|alt=param}}|alt=galleryalt
</gallery>
!! result
<ul class="gallery">
		<li class="gallerybox" style="width: 155px"><div style="width: 155px">
			<div class="thumb" style="width: 150px;"><div style="margin:68px auto;"><a href="/wiki/File:Foobar.jpg" class="image"><img alt="galleryalt" src="http://example.com/images/thumb/3/3a/Foobar.jpg/120px-Foobar.jpg" width="120" height="14" /></a></div></div>
			<div class="gallerytext">
<p><a href="/wiki/File:Foobar.jpg" class="image" title="desc"><img alt="inneralt" src="http://example.com/images/thumb/3/3a/Foobar.jpg/20px-Foobar.jpg" width="20" height="2" srcset="http://example.com/images/thumb/3/3a/Foobar.jpg/30px-Foobar.jpg 1.5x, http://example.com/images/thumb/3/3a/Foobar.jpg/40px-Foobar.jpg 2x" /></a>
</p>
			</div>
		</div></li>
		<li class="gallerybox" style="width: 155px"><div style="width: 155px">
			<div class="thumb" style="width: 150px;"><div style="margin:68px auto;"><a href="/wiki/File:Foobar.jpg" class="image"><img alt="galleryalt" src="http://example.com/images/thumb/3/3a/Foobar.jpg/120px-Foobar.jpg" width="120" height="14" /></a></div></div>
			<div class="gallerytext">
<p>This is a test template
</p>
			</div>
		</div></li>
</ul>

!! end

!! test
gallery (with showfilename option)
!! input
<gallery showfilename>
File:Nonexistant.jpg|caption
File:Nonexistant.jpg
image:foobar.jpg|some '''caption''' [[Main Page]]
File:Foobar.jpg
</gallery>
!! result
<ul class="gallery">
		<li class="gallerybox" style="width: 155px"><div style="width: 155px">
			<div style="height: 150px;">Nonexistant.jpg</div>
			<div class="gallerytext">
<p><a href="/wiki/File:Nonexistant.jpg" title="File:Nonexistant.jpg">Nonexistant.jpg</a><br />
caption
</p>
			</div>
		</div></li>
		<li class="gallerybox" style="width: 155px"><div style="width: 155px">
			<div style="height: 150px;">Nonexistant.jpg</div>
			<div class="gallerytext">
<p><a href="/wiki/File:Nonexistant.jpg" title="File:Nonexistant.jpg">Nonexistant.jpg</a><br />
</p>
			</div>
		</div></li>
		<li class="gallerybox" style="width: 155px"><div style="width: 155px">
			<div class="thumb" style="width: 150px;"><div style="margin:68px auto;"><a href="/wiki/File:Foobar.jpg" class="image"><img alt="" src="http://example.com/images/thumb/3/3a/Foobar.jpg/120px-Foobar.jpg" width="120" height="14" /></a></div></div>
			<div class="gallerytext">
<p><a href="/wiki/File:Foobar.jpg" title="File:Foobar.jpg">Foobar.jpg</a><br />
some <b>caption</b> <a href="/wiki/Main_Page" title="Main Page">Main Page</a>
</p>
			</div>
		</div></li>
		<li class="gallerybox" style="width: 155px"><div style="width: 155px">
			<div class="thumb" style="width: 150px;"><div style="margin:68px auto;"><a href="/wiki/File:Foobar.jpg" class="image"><img alt="Foobar.jpg" src="http://example.com/images/thumb/3/3a/Foobar.jpg/120px-Foobar.jpg" width="120" height="14" /></a></div></div>
			<div class="gallerytext">
<p><a href="/wiki/File:Foobar.jpg" title="File:Foobar.jpg">Foobar.jpg</a><br />
</p>
			</div>
		</div></li>
</ul>

!! end

!! test
Gallery (with namespace-less filenames)
!! input
<gallery>
File:Nonexistant.jpg
Nonexistant.jpg
image:foobar.jpg
foobar.jpg
</gallery>
!! result
<ul class="gallery">
		<li class="gallerybox" style="width: 155px"><div style="width: 155px">
			<div style="height: 150px;">Nonexistant.jpg</div>
			<div class="gallerytext">
			</div>
		</div></li>
		<li class="gallerybox" style="width: 155px"><div style="width: 155px">
			<div style="height: 150px;">Nonexistant.jpg</div>
			<div class="gallerytext">
			</div>
		</div></li>
		<li class="gallerybox" style="width: 155px"><div style="width: 155px">
			<div class="thumb" style="width: 150px;"><div style="margin:68px auto;"><a href="/wiki/File:Foobar.jpg" class="image"><img alt="Foobar.jpg" src="http://example.com/images/thumb/3/3a/Foobar.jpg/120px-Foobar.jpg" width="120" height="14" /></a></div></div>
			<div class="gallerytext">
			</div>
		</div></li>
		<li class="gallerybox" style="width: 155px"><div style="width: 155px">
			<div class="thumb" style="width: 150px;"><div style="margin:68px auto;"><a href="/wiki/File:Foobar.jpg" class="image"><img alt="Foobar.jpg" src="http://example.com/images/thumb/3/3a/Foobar.jpg/120px-Foobar.jpg" width="120" height="14" /></a></div></div>
			<div class="gallerytext">
			</div>
		</div></li>
</ul>

!! end

!! test
HTML Hex character encoding (spells the word "JavaScript")
!! input
&#x4A;&#x061;&#x0076;&#x00061;&#x000053;&#x0000063;&#114;&#x0000069;&#00000112;&#x0000000074;
!! result
<p>&#x4a;&#x61;&#x76;&#x61;&#x53;&#x63;&#114;&#x69;&#112;&#x74;
</p>
!! end

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

!! test
HTML Hex character encoding mixed case
!! input
&#xEE;&#Xee;
!! result
<p>&#xee;&#xee;
</p>
!! end

!! test
__FORCETOC__ override
!! input
__NEWSECTIONLINK__
__FORCETOC__
!! result
<p><br />
</p>
!! end

!! test
ISBN code coverage
!! input
ISBN  978-0-1234-56&#x20;789
!! result
<p><a href="/wiki/Special:BookSources/9780123456" class="internal mw-magiclink-isbn">ISBN 978-0-1234-56</a>&#x20;789
</p>
!! end

!! test
ISBN followed by 5 spaces
!! input
ISBN    
!! result
<p>ISBN    
</p>
!! end

!! test
Double ISBN
!! input
ISBN ISBN 1234567890
!! result
<p>ISBN <a href="/wiki/Special:BookSources/1234567890" class="internal mw-magiclink-isbn">ISBN 1234567890</a>
</p>
!! end

!! test
Bug 22905: <abbr> followed by ISBN followed by </a>
!! input
<abbr>(fr)</abbr> ISBN 2753300917 [http://www.example.com example.com]
!! result
<p><abbr>(fr)</abbr> <a href="/wiki/Special:BookSources/2753300917" class="internal mw-magiclink-isbn">ISBN 2753300917</a> <a rel="nofollow" class="external text" href="http://www.example.com">example.com</a>
</p>
!! end

!! test
Double RFC
!! input
RFC RFC 1234
!! result
<p>RFC <a class="external mw-magiclink-rfc" rel="nofollow" href="//tools.ietf.org/html/rfc1234">RFC 1234</a>
</p>
!! end

!! test
Double RFC with a wiki link
!! input
RFC [[RFC 1234]]
!! result
<p>RFC <a href="/index.php?title=RFC_1234&amp;action=edit&amp;redlink=1" class="new" title="RFC 1234 (page does not exist)">RFC 1234</a>
</p>
!! end

!! test
RFC code coverage
!! input
RFC   983&#x20;987
!! result
<p><a class="external mw-magiclink-rfc" rel="nofollow" href="//tools.ietf.org/html/rfc983">RFC 983</a>&#x20;987
</p>
!! end

!! test
Centre-aligned image
!! input
[[Image:foobar.jpg|centre]]
!! result
<div class="center"><div class="floatnone"><a href="/wiki/File:Foobar.jpg" class="image"><img alt="Foobar.jpg" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" /></a></div></div>

!!end

!! test
None-aligned image
!! input
[[Image:foobar.jpg|none]]
!! result
<div class="floatnone"><a href="/wiki/File:Foobar.jpg" class="image"><img alt="Foobar.jpg" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" /></a></div>

!!end

!! test
Width + Height sized image (using px) (height is ignored)
!! input
[[Image:foobar.jpg|640x480px]]
!! result
<p><a href="/wiki/File:Foobar.jpg" class="image"><img alt="Foobar.jpg" src="http://example.com/images/thumb/3/3a/Foobar.jpg/640px-Foobar.jpg" width="640" height="73" srcset="http://example.com/images/thumb/3/3a/Foobar.jpg/960px-Foobar.jpg 1.5x, http://example.com/images/thumb/3/3a/Foobar.jpg/1280px-Foobar.jpg 2x" /></a>
</p>
!!end

!! test
Width-sized image (using px, no following whitespace)
!! input
[[Image:foobar.jpg|640px]]
!! result
<p><a href="/wiki/File:Foobar.jpg" class="image"><img alt="Foobar.jpg" src="http://example.com/images/thumb/3/3a/Foobar.jpg/640px-Foobar.jpg" width="640" height="73" srcset="http://example.com/images/thumb/3/3a/Foobar.jpg/960px-Foobar.jpg 1.5x, http://example.com/images/thumb/3/3a/Foobar.jpg/1280px-Foobar.jpg 2x" /></a>
</p>
!!end

!! test
Width-sized image (using px, with following whitespace - test regression from r39467)
!! input
[[Image:foobar.jpg|640px ]]
!! result
<p><a href="/wiki/File:Foobar.jpg" class="image"><img alt="Foobar.jpg" src="http://example.com/images/thumb/3/3a/Foobar.jpg/640px-Foobar.jpg" width="640" height="73" srcset="http://example.com/images/thumb/3/3a/Foobar.jpg/960px-Foobar.jpg 1.5x, http://example.com/images/thumb/3/3a/Foobar.jpg/1280px-Foobar.jpg 2x" /></a>
</p>
!!end

!! test
Width-sized image (using px, with preceding whitespace - test regression from r39467)
!! input
[[Image:foobar.jpg| 640px]]
!! result
<p><a href="/wiki/File:Foobar.jpg" class="image"><img alt="Foobar.jpg" src="http://example.com/images/thumb/3/3a/Foobar.jpg/640px-Foobar.jpg" width="640" height="73" srcset="http://example.com/images/thumb/3/3a/Foobar.jpg/960px-Foobar.jpg 1.5x, http://example.com/images/thumb/3/3a/Foobar.jpg/1280px-Foobar.jpg 2x" /></a>
</p>
!!end

!! test
Another italics / bold test
!! input
 ''' ''x'
!! result
<pre>'<i> </i>x'
</pre>
!!end

# Note the results may be incorrect, as parserTest output included this:
# XML error: Mismatched tag at byte 6120:
# ...<dd> </dt></dl> </dd...
!! test
dt/dd/dl test
!! options
disabled
!! input
:;;;::
!! result
<dl><dd><dl><dt><dl><dt><dl><dt><dl><dd><dl><dd>
</dd></dl>
</dd></dl>
</dt></dl>
</dt></dl>
</dt></dl>
</dd></dl>

!!end


# Images with the "|" character in external URLs in comment tags; Eats half the comment, leaves unmatched "</a>" tag.
!! test
Images with the "|" character in the comment
!! input
[[image:Foobar.jpg|thumb|An [http://test/?param1=|left|&param2=|x external] URL]]
!! result
<div class="thumb tright"><div class="thumbinner" style="width:182px;"><a href="/wiki/File:Foobar.jpg" class="image"><img alt="" src="http://example.com/images/thumb/3/3a/Foobar.jpg/180px-Foobar.jpg" width="180" height="20" class="thumbimage" srcset="http://example.com/images/thumb/3/3a/Foobar.jpg/270px-Foobar.jpg 1.5x, http://example.com/images/thumb/3/3a/Foobar.jpg/360px-Foobar.jpg 2x" /></a>  <div class="thumbcaption"><div class="magnify"><a href="/wiki/File:Foobar.jpg" class="internal" title="Enlarge"><img src="/skins/common/images/magnify-clip.png" width="15" height="11" alt="" /></a></div>An <a rel="nofollow" class="external text" href="http://test/?param1=%7Cleft%7C&amp;param2=%7Cx">external</a> URL</div></div></div>

!!end

!! test
[Before] HTML without raw HTML enabled ($wgRawHtml==false)
!! input
<html><script>alert(1);</script></html>
!! result
<p>&lt;html&gt;&lt;script&gt;alert(1);&lt;/script&gt;&lt;/html&gt;
</p>
!! end

!! test
HTML with raw HTML ($wgRawHtml==true)
!! options
wgRawHtml=1
!! input
<html><script>alert(1);</script></html>
!! result
<p><script>alert(1);</script>
</p>
!! end

!! test
Parents of subpages, one level up
!! options
subpage title=[[Subpage test/L1/L2/L3]]
!! input
[[../|L2]]
!! result
<p><a href="/index.php?title=Subpage_test/L1/L2&amp;action=edit&amp;redlink=1" class="new" title="Subpage test/L1/L2 (page does not exist)">L2</a>
</p>
!! end


!! test
Parents of subpages, one level up, not named
!! options
subpage title=[[Subpage test/L1/L2/L3]]
!! input
[[../]]
!! result
<p><a href="/index.php?title=Subpage_test/L1/L2&amp;action=edit&amp;redlink=1" class="new" title="Subpage test/L1/L2 (page does not exist)">Subpage test/L1/L2</a>
</p>
!! end



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

[[../../|L1]]l
!! result
<p><a href="/index.php?title=Subpage_test/L1&amp;action=edit&amp;redlink=1" class="new" title="Subpage test/L1 (page does not exist)">L1</a>2
</p><p><a href="/index.php?title=Subpage_test/L1&amp;action=edit&amp;redlink=1" class="new" title="Subpage test/L1 (page does not exist)">L1l</a>
</p>
!! end

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

!! test
Parents of subpages, two levels up, with lots of extra trailing slashes.
!! options
subpage title=[[Subpage test/L1/L2/L3]]
!! input
[[../../////]]
!! result
<p><a href="/index.php?title=Subpage_test/L1////&amp;action=edit&amp;redlink=1" class="new" title="Subpage test/L1//// (page does not exist)">///</a>
</p>
!! end

!! article
Subpage test/L1/L2/L3Sibling
!! text
Sibling article
!! endarticle

!! test
Transclusion of a sibling page (one level up)
!! options
subpage title=[[Subpage test/L1/L2/L3]]
!! input
{{../L3Sibling}}
!! result
<p>Sibling article
</p>
!! end

!! test
Transclusion of a child page
!! options
subpage title=[[Subpage test/L1/L2]]
!! input
{{/L3Sibling}}
!! result
<p>Sibling article
</p>
!! end

!! test
Non-transclusion because of too many up levels
!! options
subpage title=[[Subpage test/L1/L2/L3]]
!! input
{{../../../../More than parent}}
!! result
<p>{{../../../../More than parent}}
</p>
!! end

!! test
Definition list code coverage
!! input
; title   : def
; title : def
;title: def
!! result
<dl><dt> title  &#160;</dt><dd> def
</dd><dt> title&#160;</dt><dd> def
</dd><dt>title</dt><dd> def
</dd></dl>

!! end

!! test
Don't fall for the self-closing div
!! input
<div>hello world</div/>
!! result
<div>hello world</div>

!! end

!! test
MSGNW magic word
!! input
{{MSGNW:msg}}
!! result
<p>&#91;&#91;:Template:Msg&#93;&#93;
</p>
!! end

!! test
RAW magic word
!! input
{{RAW:QUERTY}}
!! result
<p><a href="/index.php?title=Template:QUERTY&amp;action=edit&amp;redlink=1" class="new" title="Template:QUERTY (page does not exist)">Template:QUERTY</a>
</p>
!! 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
<p>&gt;&lt;&gt;
</p>
!! end

!! test
Template caching
!! input
{{Test}}
{{Test}}
!! result
<p>This is a test template
This is a test template
</p>
!! end


!! article
MediaWiki:Fake
!! text
==header==
!! endarticle

!! test
Inclusion of !userCanEdit() content
!! input
{{MediaWiki:Fake}}
!! result
<h2><span class="mw-headline" id="header">header</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=MediaWiki:Fake&amp;action=edit&amp;section=T-1" title="MediaWiki:Fake">edit</a><span class="mw-editsection-bracket">]</span></span></h2>

!! end


!! test
Out-of-order TOC heading levels
!! input
==2==
======6======
===3===
=1=
=====5=====
==2==
!! result
<div id="toc" class="toc"><div id="toctitle"><h2>Contents</h2></div>
<ul>
<li class="toclevel-1 tocsection-1"><a href="#2"><span class="tocnumber">1</span> <span class="toctext">2</span></a>
<ul>
<li class="toclevel-2 tocsection-2"><a href="#6"><span class="tocnumber">1.1</span> <span class="toctext">6</span></a></li>
<li class="toclevel-2 tocsection-3"><a href="#3"><span class="tocnumber">1.2</span> <span class="toctext">3</span></a></li>
</ul>
</li>
<li class="toclevel-1 tocsection-4"><a href="#1"><span class="tocnumber">2</span> <span class="toctext">1</span></a>
<ul>
<li class="toclevel-2 tocsection-5"><a href="#5"><span class="tocnumber">2.1</span> <span class="toctext">5</span></a></li>
<li class="toclevel-2 tocsection-6"><a href="#2_2"><span class="tocnumber">2.2</span> <span class="toctext">2</span></a></li>
</ul>
</li>
</ul>
</div>
<h2><span class="mw-headline" id="2">2</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=1" title="Edit section: 2">edit</a><span class="mw-editsection-bracket">]</span></span></h2>
<h6><span class="mw-headline" id="6">6</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=2" title="Edit section: 6">edit</a><span class="mw-editsection-bracket">]</span></span></h6>
<h3><span class="mw-headline" id="3">3</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=3" title="Edit section: 3">edit</a><span class="mw-editsection-bracket">]</span></span></h3>
<h1><span class="mw-headline" id="1">1</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=4" title="Edit section: 1">edit</a><span class="mw-editsection-bracket">]</span></span></h1>
<h5><span class="mw-headline" id="5">5</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=5" title="Edit section: 5">edit</a><span class="mw-editsection-bracket">]</span></span></h5>
<h2><span class="mw-headline" id="2_2">2</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=6" title="Edit section: 2">edit</a><span class="mw-editsection-bracket">]</span></span></h2>

!! end


!! test
ISBN with a dummy number
!! input
ISBN ---
!! result
<p>ISBN ---
</p>
!! end


!! test
ISBN with space-delimited number
!! input
ISBN 92 9017 032 8
!! result
<p><a href="/wiki/Special:BookSources/9290170328" class="internal mw-magiclink-isbn">ISBN 92 9017 032 8</a>
</p>
!! end


!! test
ISBN with multiple spaces, no number
!! input
ISBN  foo
!! result
<p>ISBN  foo
</p>
!! end


!! test
ISBN length
!! input
ISBN 123456789

ISBN 1234567890

ISBN 12345678901
!! result
<p>ISBN 123456789
</p><p><a href="/wiki/Special:BookSources/1234567890" class="internal mw-magiclink-isbn">ISBN 1234567890</a>
</p><p>ISBN 12345678901
</p>
!! end


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

ISBN 1 234 56789 0 - 2006
!! result
<p><a href="/wiki/Special:BookSources/1234567890" class="internal mw-magiclink-isbn">ISBN 1-234-56789-0</a> - 2006
</p><p><a href="/wiki/Special:BookSources/1234567890" class="internal mw-magiclink-isbn">ISBN 1 234 56789 0</a> - 2006
</p>
!! end


!! test
anchorencode
!! input
{{anchorencode:foo bar©#%n}}
!! result
<p>foo_bar.C2.A9.23.25n
</p>
!! end

!! test
anchorencode trims spaces
!! input
{{anchorencode: __pretty__please__}}
!! result
<p>pretty_please
</p>
!! end

!! test
anchorencode deals with links
!! input
{{anchorencode: [[hello|world]] [[hi]]}}
!! result
<p>world_hi
</p>
!! end

!! test
anchorencode deals with templates
!! input
{{anchorencode: {{Foo}} }}
!! result
<p>FOO
</p>
!! end

!! test
anchorencode encodes like the TOC generator: (bug 18431)
!! input
=== _ +:.3A%3A&&amp;]] ===
{{anchorencode: _ +:.3A%3A&&amp;]] }}
__NOEDITSECTION__
!! result
<h3><span class="mw-headline" id=".2B:.3A.253A.26.26.5D.5D">_ +:.3A%3A&amp;&amp;]]</span></h3>
<p>.2B:.3A.253A.26.26.5D.5D
</p>
!! end

# Expected output in the following test is not necessarily expected (there
# should probably be <p> tags inside the <blockquote> in the output) -- it's
# only testing for well-formedness.
!! test
Bug 6200: blockquotes and paragraph formatting
!! input
<blockquote>
foo
</blockquote>

bar

 baz
!! result
<blockquote>
foo
</blockquote>
<p>bar
</p>
<pre>baz
</pre>
!! end

!! test
Bug 8293: Use of center tag ruins paragraph formatting
!! input
<center>
foo
</center>

bar

 baz
!! result
<center>
<p>foo
</p>
</center>
<p>bar
</p>
<pre>baz
</pre>
!! end

!!test
Parsing of overlapping (improperly nested) inline html tags (PHP parser)
!!options
php
!!input
<span><s>x</span></s>
!!result
<p><span><s>x&lt;/span&gt;</s></span>
</p>
!!end

!!test
Parsing of overlapping (improperly nested) inline html tags (Parsoid)
!!options
parsoid
!!input
<span><s>x</span></s>
!!result
<p><span><s>x</s></span><s></s>
</p>
!!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
<p>Both <strong class="selflink">Dunav</strong> and <strong class="selflink">Дунав</strong> are names for this river.
</p>
!!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
<p><a href="/wiki/%D0%94%D1%83%D0%BD%D0%B0" title="Дуна">Дуна</a> is not a self-link while <strong class="selflink">Duna</strong> and <strong class="selflink">Dуна</strong> are still self-links.
</p>
!! end

!! test
Link to pages in language variants
!! options
language=sr
!! input
Main Page can be written as [[Маин Паге]]
!! result
<p>Main Page can be written as <a href="/wiki/Main_Page" title="Main Page">Маин Паге</a>
</p>
!!end


!! test
Multiple links to pages in language variants
!! options
language=sr
!! input
[[Main Page]] can be written as [[Маин Паге]] same as [[Маин Паге]].
!! result
<p><a href="/wiki/Main_Page" title="Main Page">Main Page</a> can be written as <a href="/wiki/Main_Page" title="Main Page">Маин Паге</a> same as <a href="/wiki/Main_Page" title="Main Page">Маин Паге</a>.
</p>
!!end


!! test
Simple template in language variants
!! options
language=sr
!! input
{{тест}}
!! result
<p>This is a test template
</p>
!! end


!! test
Template with explicit namespace in language variants
!! options
language=sr
!! input
{{Template:тест}}
!! result
<p>This is a test template
</p>
!! end


!! test
Basic test for template parameter in language variants
!! options
language=sr
!! input
{{парамтест|param=foo}}
!! result
<p>This is a test template with parameter foo
</p>
!! end


!! test
Simple category in language variants
!! options
language=sr cat
!! input
[[Category:МедиаWики Усер'с Гуиде]]
!! result
<a href="/wiki/%D0%9A%D0%B0%D1%82%D0%B5%D0%B3%D0%BE%D1%80%D0%B8%D1%98%D0%B0:MediaWiki_User%27s_Guide" title="Категорија:MediaWiki User's Guide">MediaWiki User's Guide</a>
!! 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
<a href="/wiki/Category:%E5%88%86%E7%B1%BB" title="Category:分类">分类</a>
!! end


!! test
Stripping -{}- tags (language variants)
!! options
language=sr
!! input
Latin proverb: -{Ne nuntium necare}-
!! result
<p>Latin proverb: Ne nuntium necare
</p>
!! end


!! test
Prevent conversion with -{}- tags (language variants)
!! options
language=sr variant=sr-ec
!! input
Latinski: -{Ne nuntium necare}-
!! result
<p>Латински: Ne nuntium necare
</p>
!! end


!! test
Prevent conversion of text with -{}- tags (language variants)
!! options
language=sr variant=sr-ec
!! input
Latinski: -{Ne nuntium necare}-
!! result
<p>Латински: Ne nuntium necare
</p>
!! end


!! test
Prevent conversion of links with -{}- tags (language variants)
!! options
language=sr variant=sr-ec
!! input
-{[[Main Page]]}-
!! result
<p><a href="/wiki/Main_Page" title="Main Page">Main Page</a>
</p>
!! end


!! test
-{}- tags within headlines (within html for parserConvert())
!! options
language=sr variant=sr-ec
!! input
== -{Naslov}- ==
!! result
<h2><span class="mw-headline" id="-.7BNaslov.7D-">Naslov</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=1" title="Уредите одељак „Naslov“">уреди</a><span class="mw-editsection-bracket">]</span></span></h2>

!! end


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


!! test
Conversion around HTML tags
!! options
language=sr variant=sr-ec
!! input
-{H|span=>sr-ec:script;title=>sr-ec:src;}-
<span title="La-{sr-el:L;sr-ec:C;}-tin">ski</span>
!! result
<p>
<span title="ЛаCтин">ски</span>
</p>
!! 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
<p>Taiwan is not China.
But Taiwan is Taiwan,
(This should be stripped!)
and China is China.
</p>
!! 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
<p>(This should be stripped!)
Taiwan is Taiwan.
</p>
!! 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
<p>Should be stripped!
</p>
!! 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
<p>Should be stripped!
</p>
!! 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}-<span title="exclamation">!</span>
!! result
China
<p>
Should be stripped<span title="Exclamation">!</span>
</p>
!! 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
<p>This should be stripped!
This won't take interferes with the title rule.
</p>
!! end

!! test
Partly disable title conversion if variant == main language code
!! options
language=zh variant=zh title=[[ZH]] showtitle
!! input
-{T|zh-cn:CN;zh-tw:TW}-
!! result
ZH
<p>
</p>
!! end

!! test
Partly disable title conversion if variant == main language code, more
!! options
language=zh variant=zh title=[[ZH]] showtitle
!! input
-{T|TW}-
!! result
ZH
<p>
</p>
!! 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
<p>Raw: zh:China;zh-tw:Taiwan
</p>
!! 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
<p>Nested: Hello Hong Kong!
</p>
!! 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
<p><a rel="nofollow" class="external free" href="http://www.google.com">http://www.google.com</a>
<a rel="nofollow" class="external free" href="gopher://www.google.com">gopher://www.google.com</a>
<a rel="nofollow" class="external free" href="http://www.google.com">http://www.google.com</a>
<a rel="nofollow" class="external free" href="gopher://www.google.com">gopher://www.google.com</a>
<a rel="nofollow" class="external text" href="https://www.google.com">irc://www.google.com</a>
<a rel="nofollow" class="external text" href="ftp://www.google.com">www.гоогле.цом/фтп://дир</a>
<a rel="nofollow" class="external text" href="//www.google.com">www.гоогле.цом</a>
</p>
!! end

!! test
Do not convert roman numbers to language variants
!! options
language=sr variant=sr-ec
!! input
Fridrih IV je car.
!! result
<p>Фридрих IV је цар.
</p>
!! end

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

!! test
Don't convert raw rule "-{R|=&gt;}-" to "=>"
!! options
language=sr
!! input
-{R|=&gt;}-
!! result
<p>=&gt;
</p>
!!end

!!article
Template:Bullet
!!text
* Bar
!!endarticle

!! test
Bug 529: Uncovered bullet
!! input
* Foo {{bullet}}
!! result
<ul><li> Foo 
</li><li> Bar
</li></ul>

!! 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
<ul><li><ul><li><ul><li><ul><li><ul><li><ul><li><ul><li> Foo 
</li></ul>
</li></ul>
</li></ul>
</li></ul>
</li></ul>
</li></ul>
</li><li> Bar
</li></ul>

!! end

!! test
Bug 529: Uncovered table already at line-start
!! input
x

{{table}}
y
!! result
<p>x
</p>
<table>
<tr>
<td> 1 </td>
<td> 2
</td></tr>
<tr>
<td> 3 </td>
<td> 4
</td></tr></table>
<p>y
</p>
!! end

!! test
Bug 529: Uncovered bullet in parser function result
!! input
* Foo {{lc:{{bullet}} }}
!! result
<ul><li> Foo 
</li><li> bar
</li></ul>

!! end

!! test
Bug 5678: Double-parsed template argument
!! input
{{lc:{{{1}}}|hello}}
!! result
<p>{{{1}}}
</p>
!! end

!! test
Bug 5678: Double-parsed template invocation
!! input
{{lc:{{paramtest {{!}} param = hello }} }}
!! result
<p>{{paramtest | param = hello }}
</p>
!! 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
<p>Ěščř
Ěščř
ěščř
ěščř
ěščř
ěščř
ĚŠČŘ
ĚŠČŘ
</p>
!! end

!! test
Morwen/13: Unclosed link followed by heading
!! input
[[link
==heading==
!! result
<p>[[link
</p>
<h2><span class="mw-headline" id="heading">heading</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=1" title="Edit section: heading">edit</a><span class="mw-editsection-bracket">]</span></span></h2>

!! end

!! test
HHP2.1: Heuristics for headings in preprocessor parenthetical structures
!! input
{{foo|
=heading=
!! result
<p>{{foo|
</p>
<h1><span class="mw-headline" id="heading">heading</span></h1>

!! end

!! test
HHP2.2: Heuristics for headings in preprocessor parenthetical structures
!! input
{{foo|
==heading==
!! result
<p>{{foo|
</p>
<h2><span class="mw-headline" id="heading">heading</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=1" title="Edit section: heading">edit</a><span class="mw-editsection-bracket">]</span></span></h2>

!! end

!! test
Tildes in comments
!! options
pst
!! input
<!-- ~~~~ -->
!! result
<!-- ~~~~ -->
!! end

!! test
Paragraphs inside divs (no extra line breaks)
!! input
<div>Line one

Line two</div>
!! result
<div>Line one
Line two</div>

!! end

!! test
Paragraphs inside divs (extra line break on open)
!! input
<div>
Line one

Line two</div>
!! result
<div>
<p>Line one
</p>
Line two</div>

!! end

!! test
Paragraphs inside divs (extra line break on close)
!! input
<div>Line one

Line two
</div>
!! result
<div>Line one
<p>Line two
</p>
</div>

!! end

!! test
Paragraphs inside divs (extra line break on open and close)
!! input
<div>
Line one

Line two
</div>
!! result
<div>
<p>Line one
</p><p>Line two
</p>
</div>

!! end

!! test
Nesting tags, paragraphs on lines which begin with <div>
!! options
disabled
!! input
<div></div><strong>A
B</strong>
!! result
<div></div>
<p><strong>A
B</strong>
</p>
!! end

# Bug 6200: <blockquote> should behave like <div> with respect to line breaks
!! test
Bug 6200: paragraphs inside blockquotes (no extra line breaks)
!! options
disabled
!! input
<blockquote>Line one

Line two</blockquote>
!! result
<blockquote>Line one
Line two</blockquote>

!! end

!! test
Bug 6200: paragraphs inside blockquotes (extra line break on open)
!! options
disabled
!! input
<blockquote>
Line one

Line two</blockquote>
!! result
<blockquote>
<p>Line one
</p>
Line two</blockquote>

!! end

!! test
Bug 6200: paragraphs inside blockquotes (extra line break on close)
!! options
disabled
!! input
<blockquote>Line one

Line two
</blockquote>
!! result
<blockquote>Line one
<p>Line two
</p>
</blockquote>

!! end

!! test
Bug 6200: paragraphs inside blockquotes (extra line break on open and close)
!! options
disabled
!! input
<blockquote>
Line one

Line two
</blockquote>
!! result
<blockquote>
<p>Line one
</p><p>Line two
</p>
</blockquote>

!! end

!! test
Paragraphs inside blockquotes/divs (no extra line breaks)
!! input
<blockquote><div>Line one

Line two</div></blockquote>
!! result
<blockquote><div>Line one
Line two</div></blockquote>

!! end

!! test
Paragraphs inside blockquotes/divs (extra line break on open)
!! input
<blockquote><div>
Line one

Line two</div></blockquote>
!! result
<blockquote><div>
<p>Line one
</p>
Line two</div></blockquote>

!! end

!! test
Paragraphs inside blockquotes/divs (extra line break on close)
!! input
<blockquote><div>Line one

Line two
</div></blockquote>
!! result
<blockquote><div>Line one
<p>Line two
</p>
</div></blockquote>

!! end

!! test
Paragraphs inside blockquotes/divs (extra line break on open and close)
!! input
<blockquote><div>
Line one

Line two
</div></blockquote>
!! result
<blockquote><div>
<p>Line one
</p><p>Line two
</p>
</div></blockquote>

!! end

!! test
Interwiki links trounced by replaceExternalLinks after early LinkHolderArray expansion
!! options
wgLinkHolderBatchSize=0
!! input
[[meatball:1]]
[[meatball:2]]
[[meatball:3]]
!! result
<p><a href="http://www.usemod.com/cgi-bin/mb.pl?1" class="extiw" title="meatball:1">meatball:1</a>
<a href="http://www.usemod.com/cgi-bin/mb.pl?2" class="extiw" title="meatball:2">meatball:2</a>
<a href="http://www.usemod.com/cgi-bin/mb.pl?3" class="extiw" title="meatball:3">meatball:3</a>
</p>
!! end

!! test
Free external link invading image caption
!! input
[[Image:Foobar.jpg|thumb|http://x|hello]]
!! result
<div class="thumb tright"><div class="thumbinner" style="width:182px;"><a href="/wiki/File:Foobar.jpg" class="image"><img alt="" src="http://example.com/images/thumb/3/3a/Foobar.jpg/180px-Foobar.jpg" width="180" height="20" class="thumbimage" srcset="http://example.com/images/thumb/3/3a/Foobar.jpg/270px-Foobar.jpg 1.5x, http://example.com/images/thumb/3/3a/Foobar.jpg/360px-Foobar.jpg 2x" /></a>  <div class="thumbcaption"><div class="magnify"><a href="/wiki/File:Foobar.jpg" class="internal" title="Enlarge"><img src="/skins/common/images/magnify-clip.png" width="15" height="11" alt="" /></a></div>hello</div></div></div>

!! end

!! test
Bug 15196: localised external link numbers
!! options
language=fa
!! input
[http://en.wikipedia.org/]
!! result
<p><a rel="nofollow" class="external autonumber" href="http://en.wikipedia.org/">[۱]</a>
</p>
!! end

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

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

!!test
formatdate parser function
!!input
{{#formatdate:2009-03-24}}
!! result
<p><span class="mw-formatted-date" title="2009-03-24">2009-03-24</span>
</p>
!! end

!!test
formatdate parser function, with default format
!!input
{{#formatdate:2009-03-24|mdy}}
!! result
<p><span class="mw-formatted-date" title="2009-03-24">March 24, 2009</span>
</p>
!! end

!! test
Spacing of numbers in formatted dates
!! input
{{#formatdate:January 15}}
!! result
<p><span class="mw-formatted-date" title="01-15">January 15</span>
</p>
!! 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
<p><span class="mw-formatted-date" title="2009-03-24">24 March 2009</span>
</p>
!! end

#
#
#

#
# Edit comments
#

!! test
Edit comment with link
!! options
comment
!! input
I like the [[Main Page]] a lot
!! result
I like the <a href="/wiki/Main_Page" title="Main Page">Main Page</a> 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 <a href="/wiki/Main_Page" title="Main Page">best pages</a> 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 <a href="/wiki/Main_Page" title="Main Page">best pages</a> 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
<a href="/wiki/Main_Page#External_links" title="Main Page">→</a>‎<span dir="auto"><span class="autocomment">External links: </span> removed bogus entries</span>
!!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 <a href="/wiki/Main_Page#External_links" title="Main Page">→</a>‎<span dir="auto"><span class="autocomment">External links: </span> removed bogus entries</span>
!!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
<a href="#External_links">→</a>‎<span dir="auto"><span class="autocomment">External links: </span> removed bogus entries</span>
!!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 <a href="/wiki/Subpage_test/subpage" title="Subpage test/subpage">/subpage</a> 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 <a href="/wiki/Subpage_test/subpage" title="Subpage test/subpage">neat little page</a> 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 <a href="/index.php?title=/subpage&amp;action=edit&amp;redlink=1" class="new" title="/subpage (page does not exist)">/subpage</a> here...
!!end

!! test
Edit comment with bare anchor link (local, as on diff)
!! options
comment
local
title=[[Main Page]]
!!input
[[#section]]
!! result
<a href="#section">#section</a>
!! end

!! test
Edit comment with bare anchor link (non-local, as on history)
!! options
comment
title=[[Main Page]]
!!input
[[#section]]
!! result
<a href="/wiki/Main_Page#section" title="Main Page">#section</a>
!! end

!! test
Anchor starting with underscore
!!input
[[#_ref|One]]
!! result
<p><a href="#_ref">One</a>
</p>
!! end

!! test
Id starting with underscore
!!input
<div id="_ref"></div>
!! result
<div id="_ref"></div>

!! end

!! test
Space normalisation on autocomment (bug 22784)
!! options
comment
title=[[Main Page]]
!!input
/* __hello__world__ */
!! result
<a href="/wiki/Main_Page#hello_world" title="Main Page">→</a>‎<span dir="auto"><span class="autocomment">__hello__world__</span></span>
!! end

!! test
percent-encoding and + signs in comments (Bug 26410)
!! options
comment
!!input
[[ABC%33D% ++]] [[ABC%33D% ++|+%20]]
!! result
<a href="/index.php?title=ABC3D%25_%2B%2B&amp;action=edit&amp;redlink=1" class="new" title="ABC3D% ++ (page does not exist)">ABC3D% ++</a> <a href="/index.php?title=ABC3D%25_%2B%2B&amp;action=edit&amp;redlink=1" class="new" title="ABC3D% ++ (page does not exist)">+%20</a>
!! 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
<p>Foo bar
</p><p>Bar foo
</p>
!! 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
<p>this is not the the title
</p>
!! 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
<p>this is not the the title
</p>
!! 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
<p>this is not the the title
</p>
!! 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
<p>this is not the the title
</p>
!! 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
<p>this is not the the title
<a href="/index.php?title=Template:DISPLAYTITLE:screen&amp;action=edit&amp;redlink=1" class="new" title="Template:DISPLAYTITLE:screen (page does not exist)">Template:DISPLAYTITLE:screen</a>
</p>
!! 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
<p>this is not the the title
</p>
!! end

!! test
Verify that displaytitle handles inline CSS styles (bug 26547) - rejected value
!! options
showtitle
title=[[Screen]]
!! config
wgAllowDisplayTitle=true
wgRestrictDisplayTitle=true
!! input
this is not the the title
{{DISPLAYTITLE:<span style="display: none;">s</span>creen}}
!! result
<span style="/* attempt to bypass $wgRestrictDisplayTitle */">s</span>creen
<p>this is not the the title
</p>
!! end

!! test
Verify that displaytitle handles inline CSS styles (bug 26547) - accepted value
!! options
showtitle
title=[[Screen]]
!! config
wgAllowDisplayTitle=true
wgRestrictDisplayTitle=true
!! input
this is not the the title
{{DISPLAYTITLE:<span style="color: red;">s</span>creen}}
!! result
<span style="color: red;">s</span>creen
<p>this is not the the title
</p>
!! end

!! test
preload: check <noinclude> and <includeonly>
!! options
preload
!! input
Hello <noinclude>cruel</noinclude><includeonly>kind</includeonly> world.
!! result
Hello kind world.
!! end

!! test
preload: check <onlyinclude>
!! options
preload
!! input
Goodbye <onlyinclude>Hello world</onlyinclude>
!! result
Hello world
!! end

!! test
preload: can pass tags through if we want to
!! options
preload
!! input
<includeonly><</includeonly>includeonly>Hello world<includeonly><</includeonly>/includeonly>
!! result
<includeonly>Hello world</includeonly>
!! end

!! test
preload: check that it doesn't try to do tricks
!! options
preload
!! input
* <!-- Hello --> ''{{world}}'' {{<includeonly>subst:</includeonly>How are you}}{{ {{{|safesubst:}}} #if:1|2|3}}
!! result
* <!-- Hello --> ''{{world}}'' {{subst:How are you}}{{ {{{|safesubst:}}} #if:1|2|3}}
!! end

!! test
Play a bit with r67090 and bug 3158
!! options
disabled
!! input
<div style="width:50% !important">&nbsp;</div>
<div style="width:50%&nbsp;!important">&nbsp;</div>
<div style="width:50%&#160;!important">&nbsp;</div>
<div style="border : solid;">&nbsp;</div>
!! result
<div style="width:50% !important">&nbsp;</div>
<div style="width:50% !important">&nbsp;</div>
<div style="width:50% !important">&nbsp;</div>
<div style="border&#160;: solid;">&nbsp;</div>

!! end

!! test
HTML5 data attributes
!! input
<span data-foo="bar">Baz</span>
<p data-abc-def_hij="">Quuz</p>
!! result
<p><span data-foo="bar">Baz</span>
</p>
<p data-abc-def_hij="">Quuz</p>

!! 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
<p><a href="/index.php?title=User:%2B%25&amp;action=edit&amp;redlink=1" class="new" title="User:+% (page does not exist)">User:+%</a> <a href="/index.php?title=Page%2Btitle%25&amp;action=edit&amp;redlink=1" class="new" title="Page+title% (page does not exist)">Page+title%</a>
<a href="/index.php?title=%25%2B&amp;action=edit&amp;redlink=1" class="new" title="%+ (page does not exist)">%+</a> <a href="/index.php?title=%25%2B&amp;action=edit&amp;redlink=1" class="new" title="%+ (page does not exist)">%20</a> <a href="/index.php?title=%25%2B&amp;action=edit&amp;redlink=1" class="new" title="%+ (page does not exist)">%+ </a> <a href="/index.php?title=%25%2Br&amp;action=edit&amp;redlink=1" class="new" title="%+r (page does not exist)">%+r</a>
<a href="/index.php?title=%25&amp;action=edit&amp;redlink=1" class="new" title="% (page does not exist)">%</a> <a href="/index.php?title=%2B&amp;action=edit&amp;redlink=1" class="new" title="+ (page does not exist)">+</a> <a href="/index.php?title=Special:Upload&amp;wpDestFile=%25%2Babc9" class="new" title="File:%+abc9">bar</a>
<a href="/index.php?title=3E&amp;action=edit&amp;redlink=1" class="new" title="3E (page does not exist)">3E</a> <a href="/index.php?title=3E%2B&amp;action=edit&amp;redlink=1" class="new" title="3E+ (page does not exist)">3E+</a>
</p>
!! end

!! test
Special characters in embedded file links (bug 27679)
!! input
[[File:Contains & ampersand.jpg]]
[[File:Does not exist.jpg|Title with & ampersand]]
!! result
<p><a href="/index.php?title=Special:Upload&amp;wpDestFile=Contains_%26_ampersand.jpg" class="new" title="File:Contains &amp; ampersand.jpg">File:Contains &amp; ampersand.jpg</a>
<a href="/index.php?title=Special:Upload&amp;wpDestFile=Does_not_exist.jpg" class="new" title="File:Does not exist.jpg">Title with &amp; ampersand</a>
</p>
!! end


!! test
Confirm that 'apos' named character reference doesn't make it to output (not legal in HTML 4)
!! input
Text&apos;s been normalized?
!! result
<p>Text&#39;s been normalized?
</p>
!! end

!! test
Bug 19052 U+3000 IDEOGRAPHIC SPACE should terminate free external links
!! input
http://www.example.org/　<-- U+3000 (vim: ^Vu3000)
!! result
<p><a rel="nofollow" class="external free" href="http://www.example.org/">http://www.example.org/</a>　&lt;-- U+3000 (vim: ^Vu3000)
</p>
!! end

!! test
Bug 19052 U+3000 IDEOGRAPHIC SPACE should terminate bracketed external links
!! input
[http://www.example.org/　ideograms]
!! result
<p><a rel="nofollow" class="external text" href="http://www.example.org/">ideograms</a>
</p>
!! 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
<p><img src="http://www.example.org/pic.png" alt="pic.png" />　&lt;-- U+3000 (vim: ^Vu3000)
</p>
!! 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
<p><span class="error">Template loop detected: <a href="/wiki/Template:Identical" title="Template:Identical">Template:Identical</a></span>
<span class="error">Template loop detected: <a href="/wiki/Template:Identical" title="Template:Identical">Template:Identical</a></span>
</p>
!! end

!! test
Bug31490 Turkish: ucfirst 'blah'
!! options
language=tr
!! input
{{ucfirst:blah}}
!! result
<p>Blah
</p>
!! end

!! test
Bug31490 Turkish: ucfirst 'ix'
!! options
language=tr
!! input
{{ucfirst:ix}}
!! result
<p>İx
</p>
!! end

!! test
Bug31490 Turkish: lcfirst 'BLAH'
!! options
language=tr
!! input
{{lcfirst:BLAH}}
!! result
<p>bLAH
</p>
!! end

!! test
Bug31490 Turkish: ucfırst (with a dotless i)
!! options
language=tr
!! input
{{ucfırst:blah}}
!! result
<p><a href="/index.php?title=%C5%9Eablon:Ucf%C4%B1rst:blah&amp;action=edit&amp;redlink=1" class="new" title="Şablon:Ucfırst:blah (sayfa mevcut değil)">Şablon:Ucfırst:blah</a>
</p>
!! end

!! test
Bug31490 ucfırst (with a dotless i) with English language
!! options
language=en
!! input
{{ucfırst:blah}}
!! result
<p><a href="/index.php?title=Template:Ucf%C4%B1rst:blah&amp;action=edit&amp;redlink=1" class="new" title="Template:Ucfırst:blah (page does not exist)">Template:Ucfırst:blah</a>
</p>
!! end

!! test
Bug 26375: TOC with italics
!! options
title=[[Main Page]]
!! input
__TOC__
== ''Lost'' episodes ==
!! result
<div id="toc" class="toc"><div id="toctitle"><h2>Contents</h2></div>
<ul>
<li class="toclevel-1 tocsection-1"><a href="#Lost_episodes"><span class="tocnumber">1</span> <span class="toctext"><i>Lost</i> episodes</span></a></li>
</ul>
</div>
<h2><span class="mw-headline" id="Lost_episodes"><i>Lost</i> episodes</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Main_Page&amp;action=edit&amp;section=1" title="Edit section: Lost episodes">edit</a><span class="mw-editsection-bracket">]</span></span></h2>

!! end

!! test
Bug 26375: TOC with bold
!! options
title=[[Main Page]]
!! input
__TOC__
== '''should be bold''' then normal text ==
!! result
<div id="toc" class="toc"><div id="toctitle"><h2>Contents</h2></div>
<ul>
<li class="toclevel-1 tocsection-1"><a href="#should_be_bold_then_normal_text"><span class="tocnumber">1</span> <span class="toctext"><b>should be bold</b> then normal text</span></a></li>
</ul>
</div>
<h2><span class="mw-headline" id="should_be_bold_then_normal_text"><b>should be bold</b> then normal text</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Main_Page&amp;action=edit&amp;section=1" title="Edit section: should be bold then normal text">edit</a><span class="mw-editsection-bracket">]</span></span></h2>

!! 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
<div id="toc" class="toc"><div id="toctitle"><h2>Contents</h2></div>
<ul>
<li class="toclevel-1 tocsection-1"><a href="#Image"><span class="tocnumber">1</span> <span class="toctext">Image</span></a></li>
</ul>
</div>
<h2><span class="mw-headline" id="Image">Image <a href="/wiki/File:Foobar.jpg" class="image"><img alt="Foobar.jpg" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" /></a></span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Main_Page&amp;action=edit&amp;section=1" title="Edit section: Image">edit</a><span class="mw-editsection-bracket">]</span></span></h2>

!! end

!! test
Bug 33845 (2): Headings become bold in TOC when they contain a blockquote
!! options
title=[[Main Page]]
!! input
__TOC__
== <blockquote>Quote</blockquote> ==
!! result
<div id="toc" class="toc"><div id="toctitle"><h2>Contents</h2></div>
<ul>
<li class="toclevel-1 tocsection-1"><a href="#Quote"><span class="tocnumber">1</span> <span class="toctext">Quote</span></a></li>
</ul>
</div>
<h2><span class="mw-headline" id="Quote"><blockquote>Quote</blockquote></span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Main_Page&amp;action=edit&amp;section=1" title="Edit section: Quote">edit</a><span class="mw-editsection-bracket">]</span></span></h2>

!! end

!! test
Unclosed tags in TOC
!! options
title=[[Main Page]]
!! input
__TOC__
== Proof: 2 < 3 ==
<small>Hanc marginis exiguitas non caperet.</small>
QED
!! result
<div id="toc" class="toc"><div id="toctitle"><h2>Contents</h2></div>
<ul>
<li class="toclevel-1 tocsection-1"><a href="#Proof:_2_.3C_3"><span class="tocnumber">1</span> <span class="toctext">Proof: 2 &lt; 3</span></a></li>
</ul>
</div>
<h2><span class="mw-headline" id="Proof:_2_.3C_3">Proof: 2 &lt; 3</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Main_Page&amp;action=edit&amp;section=1" title="Edit section: Proof: 2 &lt; 3">edit</a><span class="mw-editsection-bracket">]</span></span></h2>
<p><small>Hanc marginis exiguitas non caperet.</small>
QED
</p>
!! end

!! test
Multiple tags in TOC
!! input
__TOC__
== <i>Foo</i> <b>Bar</b> ==

== <i>Foo</i> <blockquote>Bar</blockquote> ==
!! result
<div id="toc" class="toc"><div id="toctitle"><h2>Contents</h2></div>
<ul>
<li class="toclevel-1 tocsection-1"><a href="#Foo_Bar"><span class="tocnumber">1</span> <span class="toctext"><i>Foo</i> <b>Bar</b></span></a></li>
<li class="toclevel-1 tocsection-2"><a href="#Foo_Bar_2"><span class="tocnumber">2</span> <span class="toctext"><i>Foo</i> Bar</span></a></li>
</ul>
</div>
<h2><span class="mw-headline" id="Foo_Bar"><i>Foo</i> <b>Bar</b></span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=1" title="Edit section: Foo Bar">edit</a><span class="mw-editsection-bracket">]</span></span></h2>
<h2><span class="mw-headline" id="Foo_Bar_2"><i>Foo</i> <blockquote>Bar</blockquote></span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=2" title="Edit section: Foo Bar">edit</a><span class="mw-editsection-bracket">]</span></span></h2>

!! end

!! test
Tags with parameters in TOC
!! input
__TOC__
== <sup class="in-h2">Hello</sup> ==

== <sup class="a > b">Evilbye</sup> ==
!! result
<div id="toc" class="toc"><div id="toctitle"><h2>Contents</h2></div>
<ul>
<li class="toclevel-1 tocsection-1"><a href="#Hello"><span class="tocnumber">1</span> <span class="toctext"><sup>Hello</sup></span></a></li>
<li class="toclevel-1 tocsection-2"><a href="#b.22.3EEvilbye"><span class="tocnumber">2</span> <span class="toctext"><sup> b"&gt;Evilbye</sup></span></a></li>
</ul>
</div>
<h2><span class="mw-headline" id="Hello"><sup class="in-h2">Hello</sup></span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=1" title="Edit section: Hello">edit</a><span class="mw-editsection-bracket">]</span></span></h2>
<h2><span class="mw-headline" id="b.22.3EEvilbye"><sup> b"&gt;Evilbye</sup></span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=2" title="Edit section: b&quot;>Evilbye">edit</a><span class="mw-editsection-bracket">]</span></span></h2>

!! end

!! test
span tags with directionality in TOC
!! input
__TOC__
== <span dir="ltr">C++</span> ==

== <span dir="rtl">זבנג!</span> ==

== <span style="font-style: italic">The attributes on these span tags must be deleted from the TOC</span> ==

== <span style="font-style: italic" dir="ltr">All attributes on these span tags must be deleted from the TOC</span> ==

== <span dir="ltr" style="font-style: italic">Attributes after dir on these span tags must be deleted from the TOC</span> ==
!! result
<div id="toc" class="toc"><div id="toctitle"><h2>Contents</h2></div>
<ul>
<li class="toclevel-1 tocsection-1"><a href="#C.2B.2B"><span class="tocnumber">1</span> <span class="toctext"><span dir="ltr">C++</span></span></a></li>
<li class="toclevel-1 tocsection-2"><a href="#.D7.96.D7.91.D7.A0.D7.92.21"><span class="tocnumber">2</span> <span class="toctext"><span dir="rtl">זבנג!</span></span></a></li>
<li class="toclevel-1 tocsection-3"><a href="#The_attributes_on_these_span_tags_must_be_deleted_from_the_TOC"><span class="tocnumber">3</span> <span class="toctext"><span>The attributes on these span tags must be deleted from the TOC</span></span></a></li>
<li class="toclevel-1 tocsection-4"><a href="#All_attributes_on_these_span_tags_must_be_deleted_from_the_TOC"><span class="tocnumber">4</span> <span class="toctext"><span>All attributes on these span tags must be deleted from the TOC</span></span></a></li>
<li class="toclevel-1 tocsection-5"><a href="#Attributes_after_dir_on_these_span_tags_must_be_deleted_from_the_TOC"><span class="tocnumber">5</span> <span class="toctext"><span dir="ltr">Attributes after dir on these span tags must be deleted from the TOC</span></span></a></li>
</ul>
</div>
<h2><span class="mw-headline" id="C.2B.2B"><span dir="ltr">C++</span></span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=1" title="Edit section: C++">edit</a><span class="mw-editsection-bracket">]</span></span></h2>
<h2><span class="mw-headline" id=".D7.96.D7.91.D7.A0.D7.92.21"><span dir="rtl">זבנג!</span></span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=2" title="Edit section: זבנג!">edit</a><span class="mw-editsection-bracket">]</span></span></h2>
<h2><span class="mw-headline" id="The_attributes_on_these_span_tags_must_be_deleted_from_the_TOC"><span style="font-style: italic">The attributes on these span tags must be deleted from the TOC</span></span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=3" title="Edit section: The attributes on these span tags must be deleted from the TOC">edit</a><span class="mw-editsection-bracket">]</span></span></h2>
<h2><span class="mw-headline" id="All_attributes_on_these_span_tags_must_be_deleted_from_the_TOC"><span style="font-style: italic" dir="ltr">All attributes on these span tags must be deleted from the TOC</span></span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=4" title="Edit section: All attributes on these span tags must be deleted from the TOC">edit</a><span class="mw-editsection-bracket">]</span></span></h2>
<h2><span class="mw-headline" id="Attributes_after_dir_on_these_span_tags_must_be_deleted_from_the_TOC"><span dir="ltr" style="font-style: italic">Attributes after dir on these span tags must be deleted from the TOC</span></span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=5" title="Edit section: Attributes after dir on these span tags must be deleted from the TOC">edit</a><span class="mw-editsection-bracket">]</span></span></h2>

!! end

!! article
MediaWiki:Bug32057
!! text
== {{int:headline_sample}} ==
!! endarticle

!! test
Bug 32057: Title needed when expanding <h> nodes.
!! options
title=[[Main Page]]
!! input
{{int:Bug32057}}
!! result
<h2><span class="mw-headline" id="Headline_text">Headline text</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Main_Page&amp;action=edit&amp;section=1" title="Edit section: Headline text">edit</a><span class="mw-editsection-bracket">]</span></span></h2>

!! end

!! test
Strip marker in urlencode
!! input
{{urlencode:x<nowiki/>y}}
{{urlencode:x<nowiki/>y|wiki}}
{{urlencode:x<nowiki/>y|path}}
!! result
<p>xy
xy
xy
</p>
!! end

!! test
Strip marker in lc
!! input
{{lc:x<nowiki/>y}}
!! result
<p>xy
</p>
!! end

!! test
Strip marker in uc
!! input
{{uc:x<nowiki/>y}}
!! result
<p>XY
</p>
!! end

!! test
Strip marker in formatNum
!! input
{{formatnum:1<nowiki/>2}}
{{formatnum:1<nowiki/>2|R}}
!! result
<p>12
12
</p>
!! end

!! test
Check noCommafy in formatNum
!! options
language=be-tarask
!! input
{{formatnum:123456.78}}
{{formatnum:123456.78|NOSEP}}
!! result
<p>123 456,78
123456.78
</p>
!! end

!! test
Strip marker in grammar
!! options
language=fi
!! input
{{grammar:elative|foo<nowiki/>bar}}
!! result
<p>foobarista
</p>
!! end

!! test
Strip marker in padleft
!! input
{{padleft:|2|x<nowiki/>y}}
!! result
<p>xy
</p>
!! end

!! test
Strip marker in padright
!! input
{{padright:|2|x<nowiki/>y}}
!! result
<p>xy
</p>
!! end

!! test
Strip marker in anchorencode
!! input
{{anchorencode:x<nowiki/>y}}
!! result
<p>xy
</p>
!! end

!! test
nowiki inside link inside heading (bug 18295)
!! input
==[[foo|x<nowiki>y</nowiki>z]]==
!! result
<h2><span class="mw-headline" id="xyz"><a href="/index.php?title=Foo&amp;action=edit&amp;redlink=1" class="new" title="Foo (page does not exist)">xyz</a></span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=1" title="Edit section: xyz">edit</a><span class="mw-editsection-bracket">]</span></span></h2>

!! end

!! test
new support for bdi element (bug 31817)
!! input
<p dir="rtl" lang="he">ולדימיר לנין (ברוסית: <bdi lang="ru">Владимир Ленин</bdi>, 24 באפריל 1870–22 בינואר 1924) הוא מנהיג פוליטי קומוניסטי רוסי.</p>
!! result
<p dir="rtl" lang="he">ולדימיר לנין (ברוסית: <bdi lang="ru">Владимир Ленин</bdi>, 24 באפריל 1870–22 בינואר 1924) הוא מנהיג פוליטי קומוניסטי רוסי.</p>

!!end

!! test
Ignore pipe between table row attributes
!! input
{|
| quux
|- id=foo | style='color: red'
| bar
|}
!! result
<table>
<tr>
<td> quux
</td></tr>
<tr id="foo" style="color: red">
<td> bar
</td></tr></table>

!! end

!!test
Gallery override link with WikiLink (bug 34852)
!! input
<gallery>
File:foobar.jpg|caption|alt=galleryalt|link=InterWikiLink
</gallery>
!! result
<ul class="gallery">
		<li class="gallerybox" style="width: 155px"><div style="width: 155px">
			<div class="thumb" style="width: 150px;"><div style="margin:68px auto;"><a href="/wiki/InterWikiLink"><img alt="galleryalt" src="http://example.com/images/thumb/3/3a/Foobar.jpg/120px-Foobar.jpg" width="120" height="14" /></a></div></div>
			<div class="gallerytext">
<p>caption
</p>
			</div>
		</div></li>
</ul>

!! end

!!test
Gallery override link with absolute external link (bug 34852)
!! input
<gallery>
File:foobar.jpg|caption|alt=galleryalt|link=http://www.example.org
</gallery>
!! result
<ul class="gallery">
		<li class="gallerybox" style="width: 155px"><div style="width: 155px">
			<div class="thumb" style="width: 150px;"><div style="margin:68px auto;"><a href="http://www.example.org"><img alt="galleryalt" src="http://example.com/images/thumb/3/3a/Foobar.jpg/120px-Foobar.jpg" width="120" height="14" /></a></div></div>
			<div class="gallerytext">
<p>caption
</p>
			</div>
		</div></li>
</ul>

!! end

!!test
Gallery override link with malicious javascript (bug 34852)
!! input
<gallery>
File:foobar.jpg|caption|alt=galleryalt|link=" onclick="alert('malicious javascript code!');
</gallery>
!! result
<ul class="gallery">
		<li class="gallerybox" style="width: 155px"><div style="width: 155px">
			<div class="thumb" style="width: 150px;"><div style="margin:68px auto;"><a href="/wiki/%22_onclick%3D%22alert(%27malicious_javascript_code!%27);"><img alt="galleryalt" src="http://example.com/images/thumb/3/3a/Foobar.jpg/120px-Foobar.jpg" width="120" height="14" /></a></div></div>
			<div class="gallerytext">
<p>caption
</p>
			</div>
		</div></li>
</ul>

!! end

!!test
Gallery with invalid title as link (bug 43964)
!! input
<gallery>
File:foobar.jpg|link=<
</gallery>
!! result
<ul class="gallery">
		<li class="gallerybox" style="width: 155px"><div style="width: 155px">
			<div class="thumb" style="width: 150px;"><div style="margin:68px auto;"><a href="/wiki/File:Foobar.jpg" class="image"><img alt="Foobar.jpg" src="http://example.com/images/thumb/3/3a/Foobar.jpg/120px-Foobar.jpg" width="120" height="14" /></a></div></div>
			<div class="gallerytext">
			</div>
		</div></li>
</ul>

!! end

!!test
Language parser function
!! input
{{#language:ar}}
!! result
<p>العربية
</p>
!! end

!!test
Padleft and padright as substr
!! input
{{padleft:|3|abcde}}
{{padright:|3|abcde}}
!! result
<p>abc
abc
</p>
!! end

!!test
Special parser function
!! input
{{#special:RandomPage}}
{{#special:BaDtItLe}}
{{#special:Foobar}}
!! result
<p>Special:Random
Special:Badtitle
Special:Foobar
</p>
!! end

!!test
Bug 34939 - Case insensitive link parsing ([HttP://])
!! input
[HttP://MediaWiki.Org/]
!! result
<p><a rel="nofollow" class="external autonumber" href="HttP://MediaWiki.Org/">[1]</a>
</p>
!! end

!!test
Bug 34939 - Case insensitive link parsing ([HttP:// title])
!! input
[HttP://MediaWiki.Org/ MediaWiki]
!! result
<p><a rel="nofollow" class="external text" href="HttP://MediaWiki.Org/">MediaWiki</a>
</p>
!! end

!!test
Bug 34939 - Case insensitive link parsing (HttP://)
!! input
HttP://MediaWiki.Org/
!! result
<p><a rel="nofollow" class="external free" href="HttP://MediaWiki.Org/">HttP://MediaWiki.Org/</a>
</p>
!! end


###
### Parsoids-specific tests
### Parsoid-PHP parser incompatibilities
###
!!test
1. SOL-sensitive wikitext tokens as template-args
!!options
parsoid=wt2html,wt2wt
!!input
{{echo|*a}}
{{echo|#a}}
{{echo|:a}}
!!result
<span about="#mwt1" typeof="mw:Transclusion">
</span><ul about="#mwt1"><li>a</li></ul>
<span about="#mwt2" typeof="mw:Transclusion">
</span><ol about="#mwt2"><li>a</li></ol>
<span about="#mwt3" typeof="mw:Transclusion">
</span><dl about="#mwt3"><dd>a</dd></dl>
!!end

#### ----------------------------------------------------------------
#### Parsoid-only testing of Parsoid's impl of <ref> and <references>
#### tags. Parsoid's output for these tags differs from that of the
#### PHP parser.
#### ----------------------------------------------------------------

!!test
Ref: 1. ref-location should be replaced with an index span
!!options
parsoid
!!input
A <ref>foo</ref>
B <ref name="x">foo</ref>
C <ref name="y" />
!!result
<p>A <span about="#mwt1" class="reference" data-mw='{"name":"ref","body":{"html":"foo"},"attrs":{}}' id="cite_ref-1-0" rel="dc:references" typeof="mw:Extension/ref"><a href="#cite_note-1">[1]</a></span>
B <span about="#mwt2" class="reference" data-mw='{"name":"ref","body":{"html":"foo"},"attrs":{"name":"x"}}' id="cite_ref-x-2-0" rel="dc:references" typeof="mw:Extension/ref"><a href="#cite_note-x-2">[2]</a></span>
C <span about="#mwt3" class="reference" data-mw='{"name":"ref","attrs":{"name":"y"}}' id="cite_ref-y-3-0" rel="dc:references" typeof="mw:Extension/ref"><a href="#cite_note-y-3">[3]</a></span></p>
!!end

!!test
Ref: 2. ref-tags with identical names should all get the same index
!!options
parsoid
!!input
A <ref name="x">foo</ref>
B <ref name="x" />
!!result
<p>A <span about="#mwt1" class="reference" data-mw='{"name":"ref","body":{"html":"foo"},"attrs":{"name":"x"}}' id="cite_ref-x-1-0" rel="dc:references" typeof="mw:Extension/ref"><a href="#cite_note-x-1">[1]</a></span>
B <span about="#mwt2" class="reference" data-mw='{"name":"ref","attrs":{"name":"x"}}' id="cite_ref-x-1-1" rel="dc:references" typeof="mw:Extension/ref"><a href="#cite_note-x-1">[1]</a></span></p>
!!end

!!test
Ref: 3. spaces in ref-names should be ignored
!!options
parsoid
!!input
A <ref name="x">foo</ref>
B <ref name=" x " />
C <ref name= x  />
!!result
<p>A <span about="#mwt1" class="reference" data-mw='{"name":"ref","body":{"html":"foo"},"attrs":{"name":"x"}}' id="cite_ref-x-1-0" rel="dc:references" typeof="mw:Extension/ref"><a href="#cite_note-x-1">[1]</a></span>
B <span about="#mwt2" class="reference" data-mw='{"name":"ref","attrs":{"name":"x"}}' id="cite_ref-x-1-1" rel="dc:references" typeof="mw:Extension/ref"><a href="#cite_note-x-1">[1]</a></span>
C <span about="#mwt3" class="reference" data-mw='{"name":"ref","attrs":{"name":"x"}}' id="cite_ref-x-1-2" rel="dc:references" typeof="mw:Extension/ref"><a href="#cite_note-x-1">[1]</a></span></p>
!!end

!!test
Ref: 4. 'constructor' should be accepted as a valid ref-name
(NOTE: constructor is a predefined property in JS and constructor as a ref-name can clash with it if not handled properly)
!!options
parsoid
!!input
A <ref name="constructor">foo</ref>
!!result
<p>A <span about="#mwt1" class="reference" data-mw='{"name":"ref","body":{"html":"foo"},"attrs":{"name":"constructor"}}' id="cite_ref-constructor-1-0" rel="dc:references" typeof="mw:Extension/ref"><a href="#cite_note-constructor-1">[1]</a></span></p>
!!end

!!test
Ref: 5. body should accept generic wikitext
!!options
parsoid
!!input
A <ref>
 This is a '''[[bolded link]]''' and this is a {{echo|transclusion}}
</ref>

<references />
!!result
<p>A <span about="#mwt1" class="reference" data-mw='{"name":"ref","body":{"html":"This is a <b data-parsoid=\"{&amp;quot;dsr&amp;quot;:[19,40,3,3]}\"><a rel=\"mw:WikiLink\" href=\"./Bolded_link\" data-parsoid=\"{&amp;quot;a&amp;quot;:{&amp;quot;href&amp;quot;:&amp;quot;./Bolded_link&amp;quot;},&amp;quot;sa&amp;quot;:{&amp;quot;href&amp;quot;:&amp;quot;bolded link&amp;quot;},&amp;quot;stx&amp;quot;:&amp;quot;simple&amp;quot;,&amp;quot;dsr&amp;quot;:[22,37,2,2]}\">bolded link</a></b> and this is a <span about=\"#mwt3\" typeof=\"mw:Transclusion\" data-mw=\"{&amp;quot;target&amp;quot;:{&amp;quot;wt&amp;quot;:&amp;quot;echo&amp;quot;,&amp;quot;href&amp;quot;:&amp;quot;./Template:Echo&amp;quot;},&amp;quot;params&amp;quot;:{&amp;quot;1&amp;quot;:{&amp;quot;wt&amp;quot;:&amp;quot;transclusion&amp;quot;}}}\" data-parsoid=\"{&amp;quot;src&amp;quot;:&amp;quot;{{echo|transclusion}}&amp;quot;,&amp;quot;dsr&amp;quot;:[55,76,null,null]}\">transclusion</span>\n"},"attrs":{}}' id="cite_ref-1-0" rel="dc:references" typeof="mw:Extension/ref"><a href="#cite_note-1">[1]</a></span></p>

<ol about="#mwt2" class="references" data-mw='{"name":"references","attrs":{}}' typeof="mw:Extension/references">
<li about="#cite_note-1" id="cite_note-1"><span rel="mw:referencedBy"><a href="#cite_ref-1-0">↑</a></span> This is a <b><a rel="mw:WikiLink" href="./Bolded_link">bolded link</a></b> and this is a <span about="#mwt3" typeof="mw:Transclusion" data-mw='{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"transclusion"}}}'>transclusion</span>
</li></ol>
!!end

!!test
Ref: 6. indent-pres should not be output in ref-body
!!options
parsoid
!!input
A <ref>
 foo
 bar
 baz
</ref>

<references />
!!result
<p>A <span about="#mwt1" class="reference" data-mw='{"name":"ref","body":{"html":"foo\n bar\n baz\n"},"attrs":{}}' id="cite_ref-1-0" rel="dc:references" typeof="mw:Extension/ref"><a href="#cite_note-1">[1]</a></span></p>

<ol about="#mwt2" class="references" data-mw='{"name":"references","attrs":{}}' typeof="mw:Extension/references">
<li about="#cite_note-1" id="cite_note-1"><span rel="mw:referencedBy"><a href="#cite_ref-1-0">↑</a></span> foo
 bar
 baz
</li></ol>
!!end

!!test
Ref: 6. No p-wrapping in ref-body
!!options
parsoid
!!input
A <ref>
foo

bar


baz



booz
</ref>

<references />
!!result
<p>A <span about="#mwt1" class="reference" data-mw='{"name":"ref","body":{"html":"foo\n\nbar\n\n\nbaz\n\n\n\nbooz\n"},"attrs":{}}' id="cite_ref-1-0" rel="dc:references" typeof="mw:Extension/ref"><a href="#cite_note-1">[1]</a></span></p>

<ol about="#mwt2" class="references" data-mw='{"name":"references","attrs":{}}' typeof="mw:Extension/references">
<li about="#cite_note-1" id="cite_note-1"><span rel="mw:referencedBy"><a href="#cite_ref-1-0">↑</a></span> foo

bar


baz



booz
</li></ol>
!!end

!!test
Ref: 8. transclusion wikitext has lower precedence
!!options
parsoid
!!input
A <ref> foo {{echo|</ref> B C}}

<references />
!!result
<p>A <span about="#mwt1" class="reference" data-mw='{"name":"ref","body":{"html":"foo <span typeof=\"mw:Nowiki\" data-parsoid=\"{&amp;quot;src&amp;quot;:&amp;quot;{{&amp;quot;,&amp;quot;dsr&amp;quot;:[12,14,2,null]}\">{{</span>echo|"},"attrs":{}}' id="cite_ref-1-0" rel="dc:references" typeof="mw:Extension/ref"><a href="#cite_note-1">[1]</a></span> B C<span typeof="mw:Nowiki">}}</span></p>

<ol about="#mwt2" class="references" data-mw='{"name":"references","attrs":{}}' typeof="mw:Extension/references">
<li about="#cite_note-1" id="cite_note-1"><span rel="mw:referencedBy"><a href="#cite_ref-1-0">↑</a></span> foo <span typeof="mw:Nowiki">{{</span>echo|</li></ol>
!!end

!!test
Ref: 9. unclosed comments should not leak out of ref-body
!!options
parsoid
!!input
A <ref> foo <!--</ref> B C

<references />
!!result
<p>A <span about="#mwt1" class="reference" data-mw='{"name":"ref","body":{"html":"foo <!---->"},"attrs":{}}' id="cite_ref-1-0" rel="dc:references" typeof="mw:Extension/ref"><a href="#cite_note-1">[1]</a></span> B C</p>

<ol about="#mwt2" class="references" data-mw='{"name":"references","attrs":{}}' typeof="mw:Extension/references">
<li about="#cite_note-1" id="cite_note-1"><span rel="mw:referencedBy"><a href="#cite_ref-1-0">↑</a></span> foo <!----></li></ol>
!!end

!!test
Ref: 10. Unclosed HTML tags should not leak out of ref-body
!!options
parsoid
!!input
A <ref> <b> foo </ref> B C

<references />
!!result
<p>A <span about="#mwt1" class="reference" data-mw='{"name":"ref","body":{"html":"<b data-parsoid=\"{&amp;quot;stx&amp;quot;:&amp;quot;html&amp;quot;,&amp;quot;autoInsertedEnd&amp;quot;:true,&amp;quot;dsr&amp;quot;:[8,16,3,0]}\"> foo </b>"},"attrs":{}}' id="cite_ref-1-0" rel="dc:references" typeof="mw:Extension/ref"><a href="#cite_note-1">[1]</a></span> B C</p>

<ol about="#mwt2" class="references" data-mw='{"name":"references","attrs":{}}' typeof="mw:Extension/references">
<li about="#cite_note-1" id="cite_note-1"><span rel="mw:referencedBy"><a href="#cite_ref-1-0">↑</a></span> <b> foo </b></li></ol>
!!end

!!test
Ref: 11. ref-tags acts like an inline element wrt P-wrapping
!!options
parsoid
!!input
A <ref>foo</ref> B
C <ref>bar</ref> D
!!result
<p>A <span about="#mwt1" class="reference" data-mw='{"name":"ref","body":{"html":"foo"},"attrs":{}}' id="cite_ref-1-0" rel="dc:references" typeof="mw:Extension/ref"><a href="#cite_note-1">[1]</a></span> B
C <span about="#mwt2" class="reference" data-mw='{"name":"ref","body":{"html":"bar"},"attrs":{}}' id="cite_ref-2-0" rel="dc:references" typeof="mw:Extension/ref"><a href="#cite_note-2">[2]</a></span> D</p>
!!end

!!test
Ref: 12. ref-tags act as trailing newline migration barrier
!!options
parsoid
!!input
<!--the newline at the end of this line moves out of the p-tag-->a

b<!--the newline at the end of this line stays inside the p-tag--> <ref />
<ref />

c
!!result
<p><!--the newline at the end of this line moves out of the p-tag-->a</p>


<p>b<!--the newline at the end of this line stays inside the p-tag--> <span about="#mwt1" class="reference" data-mw='{"name":"ref","attrs":{}}' id="cite_ref-1-0" rel="dc:references" typeof="mw:Extension/ref"><a href="#cite_note-1">[1]</a></span>
<span about="#mwt2" class="reference" data-mw='{"name":"ref","attrs":{}}' id="cite_ref-2-0" rel="dc:references" typeof="mw:Extension/ref"><a href="#cite_note-2">[2]</a></span></p>


<p>c</p>
!!end

!!test
Ref: 13. ref-tags are not SOL-transparent and block indent-pres
!!options
parsoid
!!input
<ref>foo</ref> A
<ref>bar
</ref> B
!!result
<p><span about="#mwt1" class="reference" data-mw='{"name":"ref","body":{"html":"foo"},"attrs":{}}' id="cite_ref-1-0" rel="dc:references" typeof="mw:Extension/ref"><a href="#cite_note-1">[1]</a></span> A
<span about="#mwt2" class="reference" data-mw='{"name":"ref","body":{"html":"bar\n"},"attrs":{}}' id="cite_ref-2-0" rel="dc:references" typeof="mw:Extension/ref"><a href="#cite_note-2">[2]</a></span> B</p>
!!end

!!test
Ref: 14. A nested ref-tag should be emitted as plain text
!!options
parsoid
!!input
<ref>foo <ref>bar</ref> baz</ref>

<references />
!!result
<span about="#mwt1" class="reference" data-mw="{&quot;name&quot;:&quot;ref&quot;,&quot;body&quot;:{&quot;html&quot;:&quot;foo &amp;lt;ref&amp;gt;bar&amp;lt;/ref&amp;gt; baz&quot;},&quot;attrs&quot;:{}}" id="cite_ref-1-0" rel="dc:references" typeof="mw:Extension/ref"><a href="#cite_note-1">[1]</a></span>

<ol class="references" typeof="mw:Extension/references" about="#mwt2" data-mw="{&quot;name&quot;:&quot;references&quot;,&quot;attrs&quot;:{}}">
<li about="#cite_note-1" id="cite_note-1" data-parsoid="{}"><span rel="mw:referencedBy"><a href="#cite_ref-1-0">↑</a></span> foo &lt;ref&gt;bar&lt;/ref&gt; baz</li></ol>
!!end

!!test
Ref: 15. ref-tags with identical names should get identical indexes
!!options
parsoid
!!input
A1 <ref name="a">foo</ref> A2 <ref name="a" />
B1 <ref name="b" /> B2 <ref name="b">bar</ref>

<references />
!!result
<p>A1 <span about="#mwt3" class="reference" data-mw='{"name":"ref","body":{"html":"foo"},"attrs":{"name":"a"}}' id="cite_ref-a-1-0" rel="dc:references" typeof="mw:Extension/ref"><a href="#cite_note-a-1">[1]</a></span> A2 <span about="#mwt4" class="reference" data-mw='{"name":"ref","attrs":{"name":"a"}}' id="cite_ref-a-1-1" rel="dc:references" typeof="mw:Extension/ref"><a href="#cite_note-a-1">[1]</a></span>
B1 <span about="#mwt7" class="reference" data-mw='{"name":"ref","attrs":{"name":"b"}}' id="cite_ref-b-2-0" rel="dc:references" typeof="mw:Extension/ref"><a href="#cite_note-b-2">[2]</a></span> B2 <span about="#mwt8" class="reference" data-mw='{"name":"ref","body":{"html":"bar"},"attrs":{"name":"b"}}' id="cite_ref-b-2-1" rel="dc:references" typeof="mw:Extension/ref"><a href="#cite_note-b-2">[2]</a></span></p>

<ol about="#mwt10" class="references" data-mw='{"name":"references","attrs":{}}' typeof="mw:Extension/references"><li about="#cite_note-a-1" id="cite_note-a-1"><span rel="mw:referencedBy">↑ <a href="#cite_ref-a-1-0">1.0</a> <a href="#cite_ref-a-1-1">1.1</a></span> foo</li><li about="#cite_note-b-2" id="cite_note-b-2"><span rel="mw:referencedBy">↑ <a href="#cite_ref-b-2-0">2.0</a> <a href="#cite_ref-b-2-1">2.1</a></span> bar</li></ol>
!!end

!!test
References: 1. references tag without any refs should be handled properly
!!options
parsoid
!!input
<references />
!!result
<ol about="#mwt2" class="references" data-mw='{"name":"references","attrs":{}}' typeof="mw:Extension/references"></ol>
!!end

!!test
References: 2. references tag with group only outputs references from that group
!!options
parsoid
!!input
A <ref group="a">foo</ref>
B <ref group="b">bar</ref>

<references group='a' />
!!result
<p>A <span about="#mwt2" class="reference" data-mw='{"name":"ref","body":{"html":"foo"},"attrs":{"group":"a"}}' id="cite_ref-1-0" rel="dc:references" typeof="mw:Extension/ref"><a href="#cite_note-1">[a 1]</a></span>
B <span about="#mwt4" class="reference" data-mw='{"name":"ref","body":{"html":"bar"},"attrs":{"group":"b"}}' id="cite_ref-1-0" rel="dc:references" typeof="mw:Extension/ref"><a href="#cite_note-1">[b 1]</a></span></p>

<ol about="#mwt6" class="references" data-mw='{"name":"references","attrs":{"group":"a"}}' typeof="mw:Extension/references"><li about="#cite_note-1" id="cite_note-1"><span rel="mw:referencedBy"><a href="#cite_ref-1-0">↑</a></span> foo</li></ol>
!!end

!!test
References: 3. ref list should be cleared after processing references
!!options
parsoid
!!input
A <ref>foo</ref>

<references />

B <ref>bar</ref>

<references />
!!result
<p>A <span about="#mwt2" class="reference" data-mw='{"name":"ref","body":{"html":"foo"},"attrs":{}}' id="cite_ref-1-0" rel="dc:references" typeof="mw:Extension/ref"><a href="#cite_note-1">[1]</a></span></p>

<ol about="#mwt4" class="references" data-mw='{"name":"references","attrs":{}}' typeof="mw:Extension/references"><li about="#cite_note-1" id="cite_note-1"><span rel="mw:referencedBy"><a href="#cite_ref-1-0">↑</a></span> foo</li></ol>

<p>B <span about="#mwt6" class="reference" data-mw='{"name":"ref","body":{"html":"bar"},"attrs":{}}' id="cite_ref-1-0" rel="dc:references" typeof="mw:Extension/ref"><a href="#cite_note-1">[1]</a></span></p>

<ol about="#mwt8" class="references" data-mw='{"name":"references","attrs":{}}' typeof="mw:Extension/references"><li about="#cite_note-1" id="cite_note-1"><span rel="mw:referencedBy"><a href="#cite_ref-1-0">↑</a></span> bar</li></ol>
!!end

!!test
References: 4. only referenced group should be cleared after processing references
!!options
parsoid
!!input
A <ref group="a">afoo</ref>
B <ref>bfoo</ref>

<references group="a"/>

C <ref>cfoo</ref>

<references />
!!result
<p>A <span about="#mwt2" class="reference" data-mw='{"name":"ref","body":{"html":"afoo"},"attrs":{"group":"a"}}' id="cite_ref-1-0" rel="dc:references" typeof="mw:Extension/ref"><a href="#cite_note-1">[a 1]</a></span>
B <span about="#mwt4" class="reference" data-mw='{"name":"ref","body":{"html":"bfoo"},"attrs":{}}' id="cite_ref-1-0" rel="dc:references" typeof="mw:Extension/ref" data-parsoid='{"src":"<ref>bfoo</ref>","dsr":[30,45,5,6]}'><a href="#cite_note-1">[1]</a></span></p>

<ol about="#mwt6" class="references" data-mw='{"name":"references","attrs":{"group":"a"}}' typeof="mw:Extension/references"><li about="#cite_note-1" id="cite_note-1"><span rel="mw:referencedBy"><a href="#cite_ref-1-0">↑</a></span> afoo</li></ol>

<p>C <span about="#mwt8" class="reference" data-mw='{"name":"ref","body":{"html":"cfoo"},"attrs":{}}' id="cite_ref-2-0" rel="dc:references" typeof="mw:Extension/ref"><a href="#cite_note-2">[2]</a></span></p>

<ol about="#mwt10" class="references" data-mw='{"name":"references","attrs":{}}' typeof="mw:Extension/references"><li about="#cite_note-1" id="cite_note-1"><span rel="mw:referencedBy"><a href="#cite_ref-1-0">↑</a></span> bfoo</li><li about="#cite_note-2" id="cite_note-2"><span rel="mw:referencedBy"><a href="#cite_ref-2-0">↑</a></span> cfoo</li></ol>
!!end

!!test
References: 5. ref tags in references should be processed while ignoring all other content
!!options
parsoid
!!input
A <ref name="a" />
B <ref name="b">bar</ref>

<references>
<ref name="a">foo</ref>
This should just get lost.
</references>
!!result
<p>A <span about="#mwt2" class="reference" data-mw='{"name":"ref","attrs":{"name":"a"}}' id="cite_ref-a-1-0" rel="dc:references" typeof="mw:Extension/ref"><a href="#cite_note-a-1">[1]</a></span>
B <span about="#mwt4" class="reference" data-mw='{"name":"ref","body":{"html":"bar"},"attrs":{"name":"b"}}' id="cite_ref-b-2-0" rel="dc:references" typeof="mw:Extension/ref"><a href="#cite_note-b-2">[2]</a></span></p>

<ol about="#mwt7" class="references" data-mw='{"name":"references","body":{"extsrc":"<ref name=\"a\">foo</ref>\nThis should just get lost."},"attrs":{}}' typeof="mw:Extension/references"><li about="#cite_note-a-1" id="cite_note-a-1"><span rel="mw:referencedBy"><a href="#cite_ref-a-1-0">↑</a></span> foo</li><li about="#cite_note-b-2" id="cite_note-b-2"><span rel="mw:referencedBy"><a href="#cite_ref-b-2-0">↑</a></span> bar</li></ol>
!!end

!!test
References: 6. <references /> from a transclusion
!!options
parsoid
!!input
{{echo|<references />}}
!!result
<ol class="references" about="#mwt2" typeof="mw:Transclusion" data-mw='{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"<references />"}},"i":0}'></ol>
!!end

#### ----------------------------------------------------------------
#### The following section of tests are primarily to test
#### wikitext escaping capabilities of Parsoid.  Given that
#### escaping can be done any number of ways, the wikitext (input)
#### is always adjusted to reflect how Parsoid adds nowiki
#### escape tags.
####
#### We are marking several tests as parsoid-only since the
#### HTML in the result section is different from what the
#### PHP parser generates for it.
#### ----------------------------------------------------------------


#### --------------- Headings ---------------
#### 0. Unnested
#### 1. Nested inside html <h1>=foo=</h1>
#### 2. Outside heading nest on a single line <h1>foo</h1>*bar
#### 3. Nested inside html with wikitext split by html tags
#### 4. No escape needed
#### 5. Empty headings <h1></h1>
#### 6. Heading chars in SOL context
#### ----------------------------------------
!! test
Headings: 0. Unnested
!! options
parsoid
!! input
<nowiki>=foo=</nowiki>

<nowiki> =foo= </nowiki>
<!--cmt-->
<nowiki>=foo=</nowiki>

=foo''a''<nowiki>=</nowiki>
!! result
<p><span typeof="mw:Nowiki">=foo=</span></p>

<p><span typeof="mw:Nowiki"> =foo= </span>
<!--cmt-->
<span typeof="mw:Nowiki">=foo=</span></p>

<p>=foo<i>a</i><span typeof="mw:Nowiki">=</span></p>
!!end

!! test
Headings: 1. Nested inside html
!! options
parsoid
!! input
=<nowiki>=foo=</nowiki>=

==<nowiki>=foo=</nowiki>==

===<nowiki>=foo=</nowiki>===

====<nowiki>=foo=</nowiki>====

=====<nowiki>=foo=</nowiki>=====

======<nowiki>=foo=</nowiki>======
!! result
<h1><span typeof="mw:Nowiki">=foo=</span></h1>
<h2><span typeof="mw:Nowiki">=foo=</span></h2>
<h3><span typeof="mw:Nowiki">=foo=</span></h3>
<h4><span typeof="mw:Nowiki">=foo=</span></h4>
<h5><span typeof="mw:Nowiki">=foo=</span></h5>
<h6><span typeof="mw:Nowiki">=foo=</span></h6>
!!end

!! test
Headings: 2. Outside heading nest on a single line <h1>foo</h1>*bar
!! options
parsoid
!! input
=foo=
<nowiki>*</nowiki>bar

=foo=
=bar

=foo=
<nowiki>=bar=</nowiki>
!! result
<h1>foo</h1>*bar
<h1>foo</h1>=bar
<h1>foo</h1>=bar=
!!end

!! test
Headings: 3. Nested inside html with wikitext split by html tags
!! options
parsoid
!! input
=='''bold'''<nowiki>foo=</nowiki>=
!! result
<h1>=<b>bold</b><span typeof="mw:Nowiki">foo=</span></h1>
!!end

!! test
Headings: 4a. No escaping needed (testing just h1 and h2)
!! options
parsoid
!! input
==foo=

=foo==

= =foo= =

==foo= bar=

===foo==

==foo===

=''=''foo==

=<nowiki>=</nowiki>=
!! result
<h1>=foo</h1>
<h1>foo=</h1>
<h1> =foo= </h1>
<h1>=foo= bar</h1>
<h2>=foo</h2>
<h2>foo=</h2>
<h1><i>=</i>foo=</h1>
<h1><span typeof="mw:Nowiki">=</span></h1>
!!end

!! test
Headings: 4b. No escaping needed (inside p-tags)
!! options
parsoid
!! input
===
=foo= x
=foo= <s></s>
!! result
<p>===
=foo= x
=foo= <s></s>
</p>
!!end

!! test
Headings: 5. Empty headings
!! options
parsoid
!! input
=<nowiki/>=

==<nowiki/>==

===<nowiki/>===

====<nowiki/>====

=====<nowiki/>=====

======<nowiki/>======
!! result
<h1></h1>
<h2></h2>
<h3></h3>
<h4></h4>
<h5></h5>
<h6></h6>
!!end

!! test
Headings: 6a. Heading chars in SOL context (with trailing spaces)
!! options
parsoid
!! input
<nowiki>=a=</nowiki>

<nowiki>=a=</nowiki> 

<nowiki>=a=</nowiki>	

<nowiki>=a=</nowiki> 	
!! result
<p>=a=</p>
<p>=a= </p>
<p>=a=	</p>
<p>=a= 	</p>
!!end

!! test
Headings: 6b. Heading chars in SOL context (with trailing newlines)
!! options
parsoid
!! input
<nowiki>=a=
b</nowiki>

<nowiki>=a= 
b</nowiki>

<nowiki>=a=	
b</nowiki>

<nowiki>=a=	 
b</nowiki>
!! result
<p>=a=
b</p>
<p>=a= 
b</p>
<p>=a=	
b</p>
<p>=a=	 
b</p>
</p>
!!end

!! test
Headings: 6c. Heading chars in SOL context (leading newline break)
!! options
parsoid
!! input
a
<nowiki>=b=</nowiki>
!! result
<p>a
=b=</p>
!!end

!! test
Headings: 6d. Heading chars in SOL context (with interspersed comments)
!! options
parsoid
!! input
<!--c0--><nowiki>=a=</nowiki>
<!--c1-->
<nowiki>=a=</nowiki> <!--c2-->	 <!--c3-->
!! result
<p><!--c0-->=a=</p>
<p><!--c1-->=a= <!--c2-->	 <!--c3--></p>
!!end

!! test
Headings: 6d. Heading chars in SOL context (No escaping needed)
!! options
parsoid=html2wt
!! input
=a=<div>b</div>
!! result
=a=<div>b</div>
!!end

#### --------------- Lists ---------------
#### 0. Outside nests (*foo, etc.)
#### 1. Nested inside html <ul><li>*foo</li></ul>
#### 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
<nowiki>*</nowiki>foo

<nowiki>#</nowiki>foo
!! result
<p>*foo
</p><p>#foo
</p>
!!end

!! test
Lists: 1. Nested inside html
!! input
*<nowiki>*foo</nowiki>

*<nowiki>#foo</nowiki>

*<nowiki>:foo</nowiki>

*<nowiki>;foo</nowiki>

#<nowiki>*foo</nowiki>

#<nowiki>#foo</nowiki>

#<nowiki>:foo</nowiki>

#<nowiki>;foo</nowiki>
!! result
<ul><li>*foo
</li></ul>
<ul><li>#foo
</li></ul>
<ul><li>:foo
</li></ul>
<ul><li>;foo
</li></ul>
<ol><li>*foo
</li></ol>
<ol><li>#foo
</li></ol>
<ol><li>:foo
</li></ol>
<ol><li>;foo
</li></ol>

!!end

!! test
Lists: 2. Inside definition lists
!! input
;<nowiki>;foo</nowiki>

;<nowiki>:foo</nowiki>

;<nowiki>:foo</nowiki>
:bar

:<nowiki>:foo</nowiki>
!! result
<dl><dt>;foo
</dt></dl>
<dl><dt>:foo
</dt></dl>
<dl><dt>:foo
</dt><dd>bar
</dd></dl>
<dl><dd>:foo
</dd></dl>

!!end

!! test
Lists: 3. Only bullets at start of text should be escaped
!! input
*<nowiki>*foo*bar</nowiki>

*<nowiki>*foo</nowiki>''it''*bar
!! result
<ul><li>*foo*bar
</li></ul>
<ul><li>*foo<i>it</i>*bar
</li></ul>

!!end

!! test
Lists: 4. No escapes needed
!! options
parsoid
!! input
*foo*bar

*''foo''*bar

*[[Foo]]: bar
!! result
<ul><li>foo*bar
</li></ul>
<ul><li><i>foo</i>*bar
</li></ul>
<ul><li><a rel="mw:WikiLink" href="Foo">Foo</a>: bar
</li></ul>
!!end

!! test
Lists: 5. No unnecessary escapes
!! input
* bar <span><nowiki>[[foo]]</nowiki></span>

*=bar <span><nowiki>[[foo]]</nowiki></span>

*[[bar <span><nowiki>[[foo]]</nowiki></span>

*]]bar <span><nowiki>[[foo]]</nowiki></span>

*=bar <span>foo]]</span>=

* <s></s>: a
!! result
<ul><li> bar <span>[[foo]]</span>
</li></ul>
<ul><li>=bar <span>[[foo]]</span>
</li></ul>
<ul><li>[[bar <span>[[foo]]</span>
</li></ul>
<ul><li>]]bar <span>[[foo]]</span>
</li></ul>
<ul><li>=bar <span>foo]]</span>=
</li></ul>
<ul><li> <s></s>: a
</li></ul>

!!end

!! test
Lists: 6. Escape bullets in SOL position
!! options
parsoid
!! input
<!--cmt--><nowiki>*foo</nowiki>
!! result
<p><!--cmt--><span typeof="mw:Nowiki">*foo</span></p>
!!end

!! test
Lists: 7. Escape bullets in a multi-line context
!! input
a
<nowiki>*</nowiki>b
!! result
<p>a
*b
</p>
!!end

#### --------------- HRs ---------------
#### 1. Single line
#### -----------------------------------

!! test
HRs: 1. Single line
!! options
parsoid
!! input
----<nowiki>----</nowiki>
----=foo=
----*foo
!! result
<hr><span typeof="mw:Nowiki">----</span>
<hr>=foo=
<hr>*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 (<td>foo|bar</td>)
#### 2b. Nested in td (<td>foo||bar</td>)
#### 2c. Nested in td -- no escaping needed(<td>foo!!bar</td>)
####
#### 3a. Nested in th (<th>foo!bar</th>)
#### 3b. Nested in th (<th>foo!!bar</th>)
#### 3c. Nested in th -- no escaping needed(<th>foo||bar</th>)
####
#### 4a. Escape -
#### 4b. Escape +
#### 4c. No escaping needed
#### --------------------------------------

!! test
Tables: 1a. Simple example
!! input
<nowiki>{|
|}</nowiki>
!! result
<p>{|
|}
</p>
!! end

!! test
Tables: 1b. No escaping needed
!! input
!foo
!! result
<p>!foo
</p>
!! end

!! test
Tables: 1c. No escaping needed
!! input
|foo
!! result
<p>|foo
</p>
!! end

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

!! test
Tables: 2a. Nested in td
!! options
parsoid
!! input
{|
|<nowiki>foo|bar</nowiki>
|}
!! result
<table><tbody><tr>
<td><span typeof="mw:Nowiki">foo|bar</span></td></tr></tbody></table>
!! end

!! test
Tables: 2b. Nested in td
!! options
parsoid
!! input
{|
|<nowiki>foo||bar</nowiki>
|''it''<nowiki>foo||bar</nowiki>
|}
!! result
<table><tbody><tr>
<td><span typeof="mw:Nowiki">foo||bar</span></td>
<td><i>it</i><span typeof="mw:Nowiki">foo||bar</span></td></tr></tbody></table>
!! end

!! test
Tables: 2c. Nested in td -- no escaping needed
!! options
parsoid
!! input
{|
|foo!!bar
|}
!! result
<table><tbody><tr><td>foo!!bar
</td></tr></tbody></table>

!! end

!! test
Tables: 3a. Nested in th
!! options
parsoid
!! input
{|
!foo!bar
|}
!! result
<table><tbody><tr><th>foo!bar
</th></tr></tbody></table>

!! end

!! test
Tables: 3b. Nested in th
!! options
parsoid
!! input
{|
!<nowiki>foo!!bar</nowiki>
|}
!! result
<table>
<tbody><tr><th><span typeof="mw:Nowiki">foo!!bar</span></th></tr>
</tbody></table>
!! end

!! test
Tables: 3c. Nested in th -- no escaping needed
!! options
parsoid
!! input
{|
!<nowiki>foo||bar</nowiki>
|}
!! result
<table><tbody><tr>
<th><span typeof="mw:Nowiki">foo||bar</span></th></tr></tbody></table>
!! end

!! test
Tables: 4a. Escape -
!! options
parsoid
!! input
{|
|-
!-bar
|-
|<nowiki>-bar</nowiki>
|}
!! result
<table><tbody>
<tr><th>-bar</th></tr>
<tr>
<td><span typeof="mw:Nowiki">-bar</span></td></tr></tbody></table>
!! end

!! test
Tables: 4b. Escape +
!! options
parsoid
!! input
{|
|-
!+bar
|-
|<nowiki>+bar</nowiki>
|}
!! result
<table><tbody>
<tr><th>+bar</th></tr>
<tr>
<td><span typeof="mw:Nowiki">+bar</span></td></tr></tbody></table>
!! end

!! test
Tables: 4c. No escaping needed
!! options
parsoid
!! input
{|
|-
|foo-bar
|foo+bar
|-
|''foo''-bar
|''foo''+bar
|}
!! result
<table><tbody>
<tr><td>foo-bar</td><td>foo+bar</td></tr>
<tr><td><i>foo</i>-bar</td><td><i>foo</i>+bar</td></tr>
</tbody></table>
!! end

### SSS FIXME: Disabled right now because accurate html2wt
### on this snippet requires data-parsoid flags that we've
### stripped out of these tests.  We should scheme how we
### we want to handle these kind of tests that require
### data-parsoid flags for accurate html2wt serialization

!! test
Tables: 4d. No escaping needed
!! options
disabled
!! input
{|
||+1
||-2
|}
!! result
<table>
<tr>
<td>+1
</td>
<td>-2
</td></tr></table>

!! 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
parsoid
!! input
[[Foo|Foo<nowiki>''boo''</nowiki>]]
!! result
<a rel="mw:WikiLink" href="Foo">Foo''boo''</a>
!! end

!! test
Links 2. WikiLinks: Escapes needed
!! options
parsoid
!! input
[[Foo|<nowiki>[Foobar]</nowiki>]]
[[Foo|<nowiki>Foobar]</nowiki>]]
[[Foo|x [Foobar] x]]
[[Foo|<nowiki>x [http://google.com g] x</nowiki>]]
[[Foo|<nowiki>[[Bar]]</nowiki>]]
[[Foo|<nowiki>x [[Bar]] x</nowiki>]]
[[Foo|<nowiki>|Bar</nowiki>]]
[[Foo|<nowiki>]]bar</nowiki>]]
[[Foo|<nowiki>[[bar</nowiki>]]
[[Foo|<nowiki>x ]] y [[ z</nowiki>]]
!! result
<a href="Foo" rel="mw:WikiLink">[Foobar]</a>
<a href="Foo" rel="mw:WikiLink">Foobar]</a>
<a href="Foo" rel="mw:WikiLink">x [Foobar] x</a>
<a href="Foo" rel="mw:WikiLink">x [http://google.com g] x</a>
<a href="Foo" rel="mw:WikiLink">[[Bar]]</a>
<a href="Foo" rel="mw:WikiLink">x [[Bar]] x</a>
<a href="Foo" rel="mw:WikiLink">|Bar</a>
<a href="Foo" rel="mw:WikiLink">]]bar</a>
<a href="Foo" rel="mw:WikiLink">[[bar</a>
<a href="Foo" rel="mw:WikiLink">x ]] y [[ z</a>
!! end

!! test
Links 3. WikiLinks: No escapes needed
!! options
parsoid
!! input
[[Foo|[Foobar]]
[[Foo|foo|bar]]
!! result
<a href="Foo" rel="mw:WikiLink">[Foobar</a>
<a href="Foo" rel="mw:WikiLink">foo|bar</a>
!! end

!! test
Links 4. ExtLinks: Escapes needed
!! options
parsoid
!! input
[http://google.com <nowiki>[google]</nowiki>]
[http://google.com <nowiki>google]</nowiki>]
!! result
<a href="http://google.com" rel="mw:ExtLink">[google]</a>
<a href="http://google.com" rel="mw:ExtLink">google]</a>
!! end

!! test
Links 5. ExtLinks: No escapes needed
!! options
parsoid
!! input
[http://google.com [google]
!! result
<a href="http://google.com" rel="mw:ExtLink">[google</a>
!! end

#### --------------- Quotes ---------------
#### 1. Quotes inside <b> and <i>
#### 2. Link fragments separated by <i> and <b> tags
#### 3. Link fragments inside <i> and <b>
#### --------------------------------------
!! test
1. Quotes inside <b> and <i>
!! input
''<nowiki>'foo'</nowiki>''
''<nowiki>''foo''</nowiki>''
''<nowiki>'''foo'''</nowiki>''
''foo''<nowiki>'s</nowiki>
'''<nowiki>'foo'</nowiki>'''
'''<nowiki>''foo''</nowiki>'''
'''<nowiki>'''foo'''</nowiki>'''
'''<nowiki>foo'</nowiki>''<nowiki>bar'</nowiki>''baz'''
'''foo'''<nowiki>'s</nowiki>
!! result
<p><i>'foo'</i>
<i>''foo''</i>
<i>'''foo'''</i>
<i>foo</i>'s
<b>'foo'</b>
<b>''foo''</b>
<b>'''foo'''</b>
<b>foo'<i>bar'</i>baz</b>
<b>foo</b>'s
</p>
!! end

!! test
2. Link fragments separated by <i> and <b> tags
!! input
[[''foo''<nowiki>hello]]</nowiki>

[['''foo'''<nowiki>hello]]</nowiki>
!! result
<p>[[<i>foo</i>hello]]
</p><p>[[<b>foo</b>hello]]
</p>
!! end

!! test
2. Link fragments inside <i> and <b>
(FIXME: Escaping one or both of [[ and ]] is also acceptable --
 this is one of the shortcomings of this format)
!! input
''[[foo''<nowiki>]]</nowiki>

'''[[foo'''<nowiki>]]</nowiki>
!! result
<p><i>[[foo</i>]]
</p><p><b>[[foo</b>]]
</p>
!! end

#### ----------- Paragraphs ---------------
#### 1. No unnecessary escapes
#### --------------------------------------

!! test
1. No unnecessary escapes
!! input
bar <span><nowiki>[[foo]]</nowiki></span>

=bar <span><nowiki>[[foo]]</nowiki></span>

[[bar <span><nowiki>[[foo]]</nowiki></span>

]]bar <span><nowiki>[[foo]]</nowiki></span>

=bar <span>foo]]</span><nowiki>=</nowiki>
!! result
<p>bar <span>[[foo]]</span>
</p><p>=bar <span>[[foo]]</span>
</p><p>[[bar <span>[[foo]]</span>
</p><p>]]bar <span>[[foo]]</span>
</p><p>=bar <span>foo]]</span>=
</p>
!!end

#### ----------------------- PRE --------------------------
#### 1. Leading whitespace in SOL context should be escaped
#### ------------------------------------------------------
!! test
1. Leading whitespace in SOL context should be escaped
!! options
parsoid
!! input
<nowiki> </nowiki>a

<nowiki> </nowiki> a

<nowiki>	</nowiki>a(tab)

<nowiki> </nowiki>	a
<!--cmt-->
<nowiki> </nowiki> a

a
<nowiki> </nowiki>b

a
<nowiki>	</nowiki>b

a
<nowiki>	</nowiki> b
!! result
<p> a</p>
<p>  a</p>
<p>	a(tab)</p>
<p> 	a</p>
<p><!--cmt-->  a</p>
<p>a
 b</p>
<p>a
	b</p>
<p>a
	 b</p>
!! end

#### --------------- HTML tags ---------------
#### 1. a tags
#### 2. other tags
#### 3. multi-line html tag
#### -----------------------------------------
!! test
1. a tags
!! options
parsoid
!! input
<a href="http://google.com">google</a>
!! result
&lt;a href=&quot;http://google.com&quot;&gt;google&lt;/a&gt;
!! end

!! test
2. other tags
!! input
<nowiki><div>foo</div>
<div style="color:red">foo</div></nowiki>
!! result
<p>&lt;div&gt;foo&lt;/div&gt;
&lt;div style=&quot;color:red&quot;&gt;foo&lt;/div&gt;
</p>
!! end

!! test
3. multi-line html tag
!! input
<nowiki><div
>foo</div
></nowiki>
!! result
<p>&lt;div
&gt;foo&lt;/div
&gt;
</p>
!! end

!! test
4. extension tags
!! input
<nowiki><ref>foo</ref></nowiki>
!! result
<p>&lt;ref&gt;foo&lt;/ref&gt;
</p>
!! end

#### --------------- Others ---------------
!! test
Escaping nowikis
!! input
&lt;nowiki&gt;foo&lt;/nowiki&gt;
!! result
<p>&lt;nowiki&gt;foo&lt;/nowiki&gt;
</p>
!! end
!! test

Tag-like HTML structures are passed through as text
!! input
<x y>

<x.y>

<x-y>

1>2

x<y

a>b

1<d e>f
!! result
<p>&lt;x y&gt;
</p><p>&lt;x.y&gt;
</p><p>&lt;x-y&gt;
</p><p>1&gt;2
</p><p>x&lt;y
</p><p>a&gt;b
</p><p>1&lt;d e&gt;f
</p>
!! 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
parsoid
!! input
<s.ome> text
!! result
<p>&lt;s.ome&gt; text
</p>
!! end

!! test
HTML tag with necessary entities in attributes
!! input
<span title="&amp;amp;">foo</span>
!! result
<p><span title="&amp;amp;">foo</span>
</p>
!! end

!! test
HTML tag with 'unnecessary' entity encoding in attributes
!! input
<span title="&amp;">foo</span>
!! result
<p><span title="&amp;">foo</span>
</p>
!! end

!! test
HTML tag with broken attribute value quoting
!! input
<span title="Hello world>Foo</span>
!! result
<p><span>Foo</span>
</p>
!! end

!! test
Parsoid-only: HTML tag with broken attribute value quoting
!! options
parsoid
!! input
<span title="Hello world>Foo</span>
!! result
<p><span title="Hello world">Foo</span>
</p>
!! end

!! test
Table with broken attribute value quoting
!! input
{|
| title="Hello world|Foo
|}
!! result
<table>
<tr>
<td>Foo
</td></tr></table>

!! end

!! test
Table with broken attribute value quoting on consecutive lines
!! input
{|
| title="Hello world|Foo
| style="color:red|Bar
|}
!! result
<table>
<tr>
<td>Foo
</td>
<td>Bar
</td></tr></table>

!! 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
<table><tbody>
<tr>
<td title="Hello world">Foo
</td><td style="color: red">Bar
</td></tr></tbody></table>

!! end

!! test
Parsoid-only: Don't wrap broken template tags in <nowiki> on wt2wt (Bug 42353)
!! options
parsoid
!! input
{{}}
!! result
{{}}
!! end

!! test
Parsoid-only: Don't wrap broken template tags in <nowiki> on wt2wt (Bug 42353)
!! options
parsoid
!! input
}}{{
!! result
}}{{
!! end

!!test
Accept empty td cell attribute
!!input
{|
| align="center" | foo ||  |
|}
!!result
<table>
<tr>
<td align="center"> foo </td>
<td>
</td></tr></table>

!!end

!!test
Non-empty attributes in th-cells
!!input
{|
! Foo !! style="color: red" | Bar
|}
!!result
<table>
<tr>
<th> Foo </th>
<th style="color: red"> Bar
</th></tr></table>

!!end

!!test
Accept empty attributes in th-cells
!!input
{|
!| foo !!| bar
|}
!!result
<table>
<tr>
<th> foo </th>
<th> bar
</th></tr></table>

!!end

!!test
Empty table rows go away
!!input
{|
| Hello
| there
|- class="foo"
|-
|}
!! result
<table>
<tr>
<td> Hello
</td>
<td> there
</td></tr>

</table>

!! end

###
### Parsoid-centric tests for testing RTing of inter-element separators
### Edge cases not tested by existing parser tests and specific to
### Parsoid-specific serialization strategies.
###

!!test
RT-ed inter-element separators should be valid separators
!!input
{|
|- [[foo]]
|}
!!result
<table>

</table>

!!end

!!test
Trailing newlines in a deep dom-subtree that ends a wikitext line should be migrated out
(Parsoid-only since PHP parser relies on Tidy for correct output)
!!options
parsoid
!!input
{|
|<small>foo
bar
|}

{|
|<small>foo<small>
|}
!!result
!!end

!!test
Empty TD followed by TD with tpl-generated attribute
!!input
{|
|-
|
|{{echo|style='color:red'}}|foo
|}
!!result
<table>

<tr>
<td>
</td>
<td>foo
</td></tr></table>

!!end

!!test
Indented table with an empty td
!!input
 {|
 |-
 |
 |foo
 |}
!!result
<table>

<tr>
<td>
</td>
<td>foo
</td></tr></table>

!!end

!!test
Empty TR followed by a template-generated TR
(Parsoid-specific since PHP parser doesn't handle this mixed tbl-wikitext)
!!options
parsoid=wt2html,wt2wt
!!input
{|
|-
{{echo|<tr><td>foo</td></tr>}}
|}
!!result
<table>
<tbody>
<tr></tr>
<tr typeof="mw:Transclusion">
<td>foo</td></tr></tbody></table>
!!end

## PHP and parsoid output differ for this, and since this is primarily
## for testing Parsoid's serializer, marking this Parsoid only
!!test
Empty TR followed by mixed-ws-comment line should RT correctly
!!options
parsoid
!!input
{|
|-
 <!--c-->
|-
<!--c--> <!--d-->
|}
!!result
<table>
<tbody>
<tr>
<td> <!--c--></td></tr>
<tr>
<td><!--c--> <!--d--></td></tr>
</tbody></table>

!!end

!!test
Multi-line image caption generated by templates with/without trailing newlines
!!options
parsoid
!!input
[[File:foo.jpg|thumb|300px|foo\n{{echo|A}}\n{{echo|B}}\n{{echo|C}}]]
[[File:foo.jpg|thumb|300px|foo\n{{echo|A}}\n{{echo|B}}\n{{echo|C}}\n\n]]
!!result
<div class="thumb tright"><div class="thumbinner" style="width:182px;"><a href="/index.php?title=Special:Upload&amp;wpDestFile=Foo.jpg" class="new" title="File:Foo.jpg">File:Foo.jpg</a>  <div class="thumbcaption">foo\nA\nB\nC</div></div></div>
<div class="thumb tright"><div class="thumbinner" style="width:182px;"><a href="/index.php?title=Special:Upload&amp;wpDestFile=Foo.jpg" class="new" title="File:Foo.jpg">File:Foo.jpg</a>  <div class="thumbcaption">foo\nA\nB\nC\n\n</div></div></div>

!!end

## PHP emits broken html for this, and since this is primarily
## a Parsoid serializer test, marking this Parsoid only
!!test
Improperly nested inline or quotes tags with whitespace in between
!!options
parsoid
!!input
<span> <s>x</span> </s>
''' ''x''' ''
!!result
<p><span> <s>x</s></span><s> </s>
<b> <i>x</i></b><i> </i>
</p>
!!end

# -----------------------------------------------------------------
# The following section of tests are primarily to spec requirements
# around serialization of new/edited content.
#
# All these tests are marked Parsoid html2wt and html2html only
# ----------------------------------------------------------------

!! test
Image: Modifying size of an image
!! options
parsoid=html2wt
!! input
[[Image:Wiki.png|230x230px]]
!! result
<p data-parsoid='{"dsr":[0,24,0,0]}'><span typeof="mw:Image" data-parsoid='{"optList":[{"ck":"width","ak":"100px"}],"cacheKey":"[[Image:Wiki.png|100px]]","img":{"h":115,"w":100,"wdset":true},"dsr":[0,24,null,null]}'><a href="./File:Wiki.png" data-parsoid='{"a":{"href":"./File:Wiki.png"}}'><img resource="./File:Wiki.png" src="//upload.wikimedia.org/wikipedia/en/thumb/b/bc/Wiki.png/100px-Wiki.png" height="230" width="200" data-parsoid='{"a":{"resource":"./File:Wiki.png"},"sa":{"resource":"Image:Wiki.png"}}'></a></span></p>
!!end

!! test
Image: New block level image should have \n before and after
!! options
parsoid=html2wt
!! input
123
[[File:Wiki.png|right|thumb|150x150px]]
456
!! result
<p>123</p><figure typeof="mw:Image/Thumb" class="mw-halign-right"><a href="./File:Wiki.png"><img src="http://192.168.142.128/mw/images/thumb/b/bc/Wiki.png/131px-Wiki.png" width="131" height="150" resource="./File:Wiki.png"></a></figure><p>456</p>
!!end

!! test
Lists: Add space after bullets
!! options
parsoid=html2wt
!! input

* foo
* bar
* <span> baz</span>
!! result
<ul>
<li>foo</li>
<li> bar</li>
<li><span> baz</span></li>
</ul>
!! end

!! test
Parsoid: Serialize positional parameters with = in them as named parameter
!! options
parsoid=html2wt
!! input
{{echo|1 = f=oo}}
!! result
<p about="#mwt1" typeof="mw:Transclusion"
data-mw='{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"f=oo"}},"i":0}'
>foo</p>
!! end

# -----------------------------------------------------------------
# End of section for Parsoid-only html2wt tests for serialization
# of new content
# -----------------------------------------------------------------

TODO:
more images
more tables
character entities
and much more
Try for 100% code coverage
