# 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)
#	title=[[XXX]]	run test using article title XXX
#	disabled	do not run test
#
# For testing purposes, temporary articles can created:
# !!article / NAMESPACE:TITLE / !!text / ARTICLE TEXT / !!endarticle
# where '/' denotes a newline.

# This is the standard article assumed to exist.
!! article
Main Page
!! text
blah blah
!! endarticle

###
### Basic tests
###
!! test
Blank input
!! input
!! result
!! end


!! test
Simple paragraph
!! input
This is a simple paragraph.
!! result
<p>This is a simple paragraph.
</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
!! 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></ul>

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

###
### Comments
###
!! test
Comment test 1
!! input
<!-- comment 1 --> asdf
<!-- comment 2 -->
!! result
<pre>asdf
</pre>

!! end

!! test
Comment test 2
!! input
asdf
<!-- comment 1 -->
jkl
!! result
<p>asdf
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

###
### 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

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

!! end

!! test
Simple definition
!! 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 href="http://example.com/" class='external free' title="http://example.com/" rel="nofollow">http://example.com/</a>&nbsp;</dt><dd> definition
</dd></dl>

!! end

!! test
Definition list with bracketed URL link
!! input
;[http://www.google.com/ Google]:Number one search engine
!! result
<dl><dt><a href="http://www.google.com/" class='external text' title="http://www.google.com/" rel="nofollow">Google</a></dt><dd>Number one search engine
</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" class="new" title="Help:FAQ">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 wikilink containing colon
!! input
;  news:alt.wikipedia.rox: This isn't even a real newsgroup!
!! result
<dl><dt>  <a href="news:alt.wikipedia.rox" class='external free' title="news:alt.wikipedia.rox" rel="nofollow">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 href="news:alt.wikipedia.rox" class='external free' title="news:alt.wikipedia.rox" rel="nofollow">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 href="http://www.wikipedia2.org/" class='external text' title="http://www.wikipedia2.org/" rel="nofollow">Wikipedia&nbsp;: The Next Generation</a></dt><dd> OK, I made that up
</dd></dl>

!! end


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

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

!! test
External links: specified text
!! input
Specified text: [http://example.com link]
!! result
<p>Specified text: <a href="http://example.com" class='external text' title="http://example.com" rel="nofollow">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 href="http://example.com" class='external text' title="http://example.com" rel="nofollow">link</a>s
</p>
!! end

!! test
External links: dollar sign in URL
!! input
http://example.com/1$2345
!! result
<p><a href="http://example.com/1$2345" class='external free' title="http://example.com/1$2345" rel="nofollow">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 href="http://example.com/1$2345" class='external autonumber' title="http://example.com/1$2345" rel="nofollow">[1]</a>
</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
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 href="ftp://example.com/test.jpg" class='external free' title="ftp://example.com/test.jpg" rel="nofollow">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 href="http://example.com/thing" class='external free' title="http://example.com/thing" rel="nofollow">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 href="http://example.com/1,2,3" class='external free' title="http://example.com/1,2,3" rel="nofollow">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 href="http://example.com/thing?url=http://example.com" class='external text' title="http://example.com/thing?url=http://example.com" rel="nofollow">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 href="ftp://example.com?url=http://example.com" class='external text' title="ftp://example.com?url=http://example.com" rel="nofollow">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 href="http://example.com" class='external free' title="http://example.com" rel="nofollow">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 href="http://example.com" class='external text' title="http://example.com" rel="nofollow"><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 href="http://x&amp;y" class='external free' title="http://x&amp;y" rel="nofollow">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 href="http://x&amp;y" class='external free' title="http://x&amp;y" rel="nofollow">http://x&amp;y</a>
</p>
!! end

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

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

!! test
External links: www.jpeg.org (bug 554)
!! input
http://www.jpeg.org
!!result
<p><a href="http://www.jpeg.org" class='external free' title="http://www.jpeg.org" rel="nofollow">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 href="http://www.unausa.org/newindex.asp?place=http://www.unausa.org/programs/mun.asp" class='external autonumber' title="http://www.unausa.org/newindex.asp?place=http://www.unausa.org/programs/mun.asp" rel="nofollow">[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 href="http://www.example.com/foo" class='external text' title="http://www.example.com/foo" rel="nofollow">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 href="http://www.example.com/foo?=http://www.example.com/bar" class='external free' title="http://www.example.com/foo?=http://www.example.com/bar" rel="nofollow">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 href="http://www.example.com/" class='external free' title="http://www.example.com/" rel="nofollow">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 href="http://www.example.com/" class='external free' title="http://www.example.com/" rel="nofollow">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 href="http://www.example.com/" class='external text' title="http://www.example.com/" rel="nofollow">&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 href="http://www.example.com/" class='external text' title="http://www.example.com/" rel="nofollow"><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 href="http://www.example.com/" class='external free' title="http://www.example.com/" rel="nofollow">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 href="http://www.example.com/" class='external text' title="http://www.example.com/" rel="nofollow">"hello" stuff</a>
</p>
!!end

!! test
External links: invalid character
!! input
[http://www.example.com  test]
!! result
<p>[<a href="http://www.example.com" class='external free' title="http://www.example.com" rel="nofollow">http://www.example.com</a>  test]
</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
Bug 2702: Mismatched <i> and <a> tags are invalid
!! input
''[http://example.com text'']
!! result
<p><i><a href="http://example.com" class='external text' title="http://example.com" rel="nofollow">text</a></i>
</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
!! 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.
!! 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).<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>
!! 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 minimun required by the spec, see:
# http://www.w3.org/TR/xhtml-modularization/dtd_module_defs.html#a_module_Basic_Tables
!! test
A table with no data.
!! input
{||}
!! result
!! end

# A table with nothing but a caption is invalid XHTML, we might want to render
# this as <p>caption</p>
!! test
A table with nothing but a caption
!! input 
{|
|+ caption
|}
!! result
<table>
<caption> caption
</caption>
<tr>
<td>
</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
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> &times; </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
Table rowspan
!! input
{| align=right border=1
| Cell 1, row 1 
|rowspan=2| Cell 2, row 1 (and 2) 
| Cell 3, row 1 
|- 
| Cell 1, row 2 
| Cell 3, row 2 
|}
!! result
<table align="right" 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> &alpha;
</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


###
### 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
Broken link
!! input
[[Zigzagzogzagzig]]
!! result
<p><a href="/index.php?title=Zigzagzogzagzig&amp;action=edit" class="new" title="Zigzagzogzagzig">Zigzagzogzagzig</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
!! 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
</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" class="new" title="Talk:Parser testing">Talk:Parser testing</a>, <a href="/index.php?title=Meta:Disclaimers&amp;action=edit" class="new" title="Meta:Disclaimers">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" class="new" title="Meta:Disclaimers">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" class="new" title="7% Solution">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" class="new" title="7% Solution">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
Plain link to URL
!! input
[[http://www.example.org]]
!! result
<p>[<a href="http://www.example.org" class='external autonumber' title="http://www.example.org" rel="nofollow">[1]</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.org&amp;action=edit" class="new" title="Http://www.example.org">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.org|an example URL]]
!! result
<p>Piped link to URL: [<a href="http://www.example.org|an" class='external text' title="http://www.example.org|an" rel="nofollow">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>Bu&#103;462</strong> <strong>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

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

##
## XHTML tidiness
###

!! test
<br> to <br />
!! input
1<br>2<br />3
!! result
<p>1<br />2<br />3
</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 clear=left>
<br clear=right>
<br clear=all>
!! result
<p><br style="clear:left;" />
<br style="clear:right;" />
<br style="clear:both;" />
</p>
!!end

!! test 
Horizontal ruler (should it add that extra space?)
!! input 
<hr>
<hr >
foo <hr
> bar
!! result 
<hr />
<hr />
foo <hr /> bar
!! 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
!! 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
</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

###
### Magic variables
###
!! test
Magic variables
!! input
{{SITENAME}}
!! result
<p>MediaWiki
</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" class="new" title="RFC 123">RFC 123</a>
</p>
!! end

!! test
Magic links: RFC (bug 479)
!! input
RFC 822
!! result
<p><a href='http://www.ietf.org/rfc/rfc822.txt' class='external' title="http://www.ietf.org/rfc/rfc822.txt">RFC 822</a>
</p>
!! end

!! test
Magic links: ISBN (bug 1937)
!! input
ISBN 0-306-40615-2
!! result
<p><a href="/index.php?title=Special:Booksources&amp;isbn=0306406152" class="internal">ISBN 0-306-40615-2</a>
</p>
!! end

!! test
Magic links: PMID incorrectly converts space to underscore
!! input
PMID 1234
!! result
<p><a href='http://www.ncbi.nlm.nih.gov/entrez/query.fcgi?cmd=Retrieve&amp;db=pubmed&amp;dopt=Abstract&amp;list_uids=1234' class='external' title="http://www.ncbi.nlm.nih.gov/entrez/query.fcgi?cmd=Retrieve&amp;db=pubmed&amp;dopt=Abstract&amp;list_uids=1234">PMID 1234</a>
</p>
!! end

###
### Templates
####

!! test
Nonexistant template
!! input
{{thistemplatedoesnotexist}}
!! result
<p><a href="/index.php?title=Template:Thistemplatedoesnotexist&amp;action=edit" class="new" title="Template:Thistemplatedoesnotexist">Template:Thistemplatedoesnotexist</a>
</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

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


!!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}}]]
!! result
<p><a href="/wiki/Main_Page" title="Main Page">Main Page</a>
</p>
!! end


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

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

!! test
Template infinite loop
!! input
{{loop1}}
!! result
<p>{{loop1}}<!-- WARNING: template loop detected -->
</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


!! article
Template:MSGNW test
!! text
''None'' of '''this''' should be 
* interepreted
 but rather passed unmodified
{{test}}
!! endarticle

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

!! test
int keyword
!! input
{{int:newmessages|lots of money}}
!! result
<p>You have lots of money.
</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: nonexistant template
!! options
PST
!! input
{{thistemplatedoesnotexist}}
!! result
{{thistemplatedoesnotexist}}
!! end


!! test
pre-save transform: subst magic variables
!! options
PST
!! input
{{subst:SITENAME}}
!! result
MediaWiki
!! end

# This is bug 89, which I fixed. -- wtm
!! test
pre-save transform: subst: templates with parameters
!! options
pst
!! input
{{subst:paramtest|param="something else"}}
!! result
This is a test template with parameter "something else"
!! end


!! article
Template:nowikitest
!! text
<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


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


###
### 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

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

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

!! end

!! test
Image with caption
!! input
[[Image:foobar.jpg|right|Caption text]]
!! result
<div class="floatright"><span><a href="/wiki/Image:Foobar.jpg" class="image" title="Caption text"><img src="/images/3/3a/Foobar.jpg" alt="Caption text" width="1941" height="220" longdesc="/wiki/Image:Foobar.jpg" /></a></span></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 style="width:1943px;"><a href="/wiki/Image:Foobar.jpg" class="internal" title="This is a test image Main Page"><img src="/images/3/3a/Foobar.jpg" alt="This is a test image Main Page" width="1941" height="220" longdesc="/wiki/Image:Foobar.jpg" /></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
Link to image page
!! input
[[:Image:test]]
!! result
<p><a href="/wiki/Image:Test" title="Image:Test">Image:test</a>
</p>
!! end

!! test
Frameless image caption with a free URL
!! input
[[Image:foobar.jpg|http://example.com]]
!! result
<p><a href="/wiki/Image:Foobar.jpg" class="image" title="http://example.com"><img src="/images/3/3a/Foobar.jpg" alt="http://example.com" width="1941" height="220" longdesc="/wiki/Image:Foobar.jpg" /></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 style="width:182px;"><a href="/wiki/Image:Foobar.jpg" class="internal" title="http://example.com"><img src="/images/thumb/3/3a/Foobar.jpg/180px-Foobar.jpg" alt="http://example.com" width="180" height="20" longdesc="/wiki/Image:Foobar.jpg" /></a>  <div class="thumbcaption" ><div class="magnify" style="float:right"><a href="/wiki/Image:Foobar.jpg" class="internal" title="Enlarge"><img src="/skins/common/images/magnify-clip.png" width="15" height="11" alt="Enlarge" /></a></div><a href="http://example.com" class='external free' title="http://example.com" rel="nofollow">http://example.com</a></div></div></div>

!! end

!! test
BUG 1887: A ISBN with a thumbnail
!! input
[[Image:foobar.jpg|thumb|ISBN 12354]]
!! result
<div class="thumb tright"><div style="width:182px;"><a href="/wiki/Image:Foobar.jpg" class="internal" title="ISBN 12354"><img src="/images/3/3a/Foobar.jpg" alt="ISBN 12354" longdesc="/wiki/Image:Foobar.jpg" height="180" width="180"></a>  <div class="thumbcaption"><div class="magnify" style="float:right;"><a href="/wiki/Image:Foobar.jpg" class="internal" title="Enlarge"><img src="/skins/common/images/magnify-clip.png" width="15" height="11" alt="Enlarge"></a></div><a href="index.php?title=Special:Booksources&amp;isbn=12354" class="internal">ISBN 12354</a></div></div></div>
!! end

!! test
BUG 1887: A <math> with a thumbnail
!! input
[[Image:foobar.jpg|thumb|<math>2+2</math>]]
!! result
<div class="thumb tright"><div style="width:182px;"><a href="/wiki/Image:Foobar.jpg" class="internal" title="2+2"><img src="/images/3/3a/Foobar.jpg" alt="2+2" longdesc="/wiki/Image:Foobar.jpg" height="180" width="180"></a>  <div class="thumbcaption"><div class="magnify" style="float:right;"><a href="/wiki/Image:Foobar.jpg" class="internal" title="Enlarge"><img src="/skins/common/images/magnify-clip.png" width="15" height="11" alt="Enlarge"></a></div>&lt;math&gt;2+2&lt;math&gt;</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/Image:Foobar.jpg" class="image" title="text with a link in it"><img src="/images/3/3a/Foobar.jpg" alt="text with a link in it" width="1941" height="220" longdesc="/wiki/Image:Foobar.jpg" /></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/Image:Foobar.jpg" class="image" title="text with a linkfoo in it"><img src="/images/3/3a/Foobar.jpg" alt="text with a linkfoo in it" width="1941" height="220" longdesc="/wiki/Image:Foobar.jpg" /></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/Image:Foobar.jpg" class="image" title="text with a MeatBall:Link in it"><img src="/images/3/3a/Foobar.jpg" alt="text with a MeatBall:Link in it" width="1941" height="220" longdesc="/wiki/Image:Foobar.jpg" /></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/Image:Foobar.jpg" class="image" title="text with a link in it"><img src="/images/3/3a/Foobar.jpg" alt="text with a link in it" width="1941" height="220" longdesc="/wiki/Image:Foobar.jpg" /></a>
</p>
!! end

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

!! test
BUG 499: Alt text should have &#1234;, not &amp;1234;
!! input
[[Image:foobar.jpg|&#9792;]]
!! result
<p><a href="/wiki/Image:Foobar.jpg" class="image" title="&#9792;"><img src="/images/3/3a/Foobar.jpg" alt="&#9792;" width="1941" height="220" longdesc="/wiki/Image:Foobar.jpg" /></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 style="width:182px;"><a href="/wiki/Image:Foobar.jpg" class="internal" title="This is a caption with another Image:Icon.png inside it!"><img src="/images/thumb/3/3a/Foobar.jpg/180px-Foobar.jpg" alt="This is a caption with another Image:Icon.png inside it!" width="180" height="20" longdesc="/wiki/Image:Foobar.jpg" /></a>  <div class="thumbcaption" ><div class="magnify" style="float:right"><a href="/wiki/Image:Foobar.jpg" class="internal" title="Enlarge"><img src="/skins/common/images/magnify-clip.png" width="15" height="11" alt="Enlarge" /></a></div>This is a caption with another <a href="/index.php?title=Special:Upload&amp;wpDestFile=Icon.png" class="new" title="Image:Icon.png">Image:Icon.png</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/Image:Foobar.jpg" class="image" title="This *is some text"><img src="/images/3/3a/Foobar.jpg" alt="This *is some text" width="1941" height="220" longdesc="/wiki/Image:Foobar.jpg" /></a>
</p>
!!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 style="width:202px;"><a href="/wiki/Image:Foobar.jpg" class="internal" title="This caption has irc and Secure ext links in it."><img src="/images/thumb/3/3a/Foobar.jpg/200px-Foobar.jpg" alt="This caption has irc and Secure ext links in it." width="200" height="23" longdesc="/wiki/Image:Foobar.jpg" /></a>  <div class="thumbcaption" ><div class="magnify" style="float:right"><a href="/wiki/Image:Foobar.jpg" class="internal" title="Enlarge"><img src="/skins/common/images/magnify-clip.png" width="15" height="11" alt="Enlarge" /></a></div>This caption has <a href="irc://example.net" class='external text' title="irc://example.net" rel="nofollow">irc</a> and <a href="https://example.com" class='external text' title="https://example.com" rel="nofollow">Secure</a> ext links in it.</div></div></div>

!! end


###
### 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

!! test
Disabled subpages
!! input
[[/subpage]]
!! result
<p><a href="/index.php?title=/subpage&amp;action=edit" class="new" title="/subpage">/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" class="new" title="Page/Subpage">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

###
### Inter-language links
###
!! test
Inter-language links
!! options
ill
!! input
[[es:Alimento]]
[[fr:Nourriture]]
[[zh:&#39135;&#21697;]]
!! result
es:Alimento fr:Nourriture zh:食品
!! end

###
### Sections
###
!! test
Basic section headings
!! options
title=[[Parser test script]]
!! input
== Headline 1 ==
Some text

==Headline 2==
More
===Smaller headline===
Blah blah
!! result
<div class="editsection" style="float:right;margin-left:5px;">[<a href="/index.php?title=Parser_test_script&amp;action=edit&amp;section=1" title="Parser test script">edit</a>]</div><a name="Headline_1"></a><h2> Headline 1 </h2>
<p>Some text
</p>
<div class="editsection" style="float:right;margin-left:5px;">[<a href="/index.php?title=Parser_test_script&amp;action=edit&amp;section=2" title="Parser test script">edit</a>]</div><a name="Headline_2"></a><h2>Headline 2</h2>
<p>More
</p>
<div class="editsection" style="float:right;margin-left:5px;">[<a href="/index.php?title=Parser_test_script&amp;action=edit&amp;section=3" title="Parser test script">edit</a>]</div><a name="Smaller_headline"></a><h3>Smaller headline</h3>
<p>Blah blah
</p>
!! end

!! test
Section headings with TOC
!! options
title=[[Parser test script]]
!! input
== Headline 1 ==
=== Subheadline 1 ===
===== Skipping a level =====
====== Skipping a level ======

== Headline 2 ==
Some text
===Another headline===
!! result
<table id='toc' class='toc'><tr><td><div id='toctitle'><h2>Contents</h2></div>
<ul>
<li class='toclevel-1'><a href="#Headline_1"><span class="tocnumber">1</span> <span class="toctext">Headline 1</span></a>
<ul>
<li class='toclevel-2'><a href="#Subheadline_1"><span class="tocnumber">1.1</span> <span class="toctext">Subheadline 1</span></a>
<ul>
<li class='toclevel-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'><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'><a href="#Headline_2"><span class="tocnumber">2</span> <span class="toctext">Headline 2</span></a>
<ul>
<li class='toclevel-2'><a href="#Another_headline"><span class="tocnumber">2.1</span> <span class="toctext">Another headline</span></a></li>
</ul>
</li>
</ul>
</td></tr></table>
<script type="text/javascript"> if (window.showTocToggle) { var tocShowText = "show"; var tocHideText = "hide"; showTocToggle(); } </script>
<div class="editsection" style="float:right;margin-left:5px;">[<a href="/index.php?title=Parser_test_script&amp;action=edit&amp;section=1" title="Parser test script">edit</a>]</div><a name="Headline_1"></a><h2> Headline 1 </h2>
<div class="editsection" style="float:right;margin-left:5px;">[<a href="/index.php?title=Parser_test_script&amp;action=edit&amp;section=2" title="Parser test script">edit</a>]</div><a name="Subheadline_1"></a><h3> Subheadline 1 </h3>
<div class="editsection" style="float:right;margin-left:5px;">[<a href="/index.php?title=Parser_test_script&amp;action=edit&amp;section=3" title="Parser test script">edit</a>]</div><a name="Skipping_a_level"></a><h5> Skipping a level </h5>
<div class="editsection" style="float:right;margin-left:5px;">[<a href="/index.php?title=Parser_test_script&amp;action=edit&amp;section=4" title="Parser test script">edit</a>]</div><a name="Skipping_a_level_2"></a><h6> Skipping a level </h6>
<div class="editsection" style="float:right;margin-left:5px;">[<a href="/index.php?title=Parser_test_script&amp;action=edit&amp;section=5" title="Parser test script">edit</a>]</div><a name="Headline_2"></a><h2> Headline 2 </h2>
<p>Some text
</p>
<div class="editsection" style="float:right;margin-left:5px;">[<a href="/index.php?title=Parser_test_script&amp;action=edit&amp;section=6" title="Parser test script">edit</a>]</div><a name="Another_headline"></a><h3>Another headline</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
<table id='toc' class='toc'><tr><td><div id='toctitle'><h2>Contents</h2></div>
<ul>
<li class='toclevel-1'><a href="#Level_1_Heading"><span class="tocnumber">1</span> <span class="toctext">Level 1 Heading</span></a>
<ul>
<li class='toclevel-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'><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'><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'><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'><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'><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'><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'><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'><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>
</td></tr></table>
<p><script type="text/javascript"> if (window.showTocToggle) { var tocShowText = "show"; var tocHideText = "hide"; showTocToggle(); } </script>
</p>
<div class="editsection" style="float:right;margin-left:5px;">[<a href="/index.php?title=Parser_test&amp;action=edit&amp;section=1" title="Parser test">edit</a>]</div><a name="Level_1_Heading"></a><h1> Level 1 Heading</h1>
<div class="editsection" style="float:right;margin-left:5px;">[<a href="/index.php?title=Parser_test&amp;action=edit&amp;section=2" title="Parser test">edit</a>]</div><a name="Level_2_Heading"></a><h2> Level 2 Heading</h2>
<div class="editsection" style="float:right;margin-left:5px;">[<a href="/index.php?title=Parser_test&amp;action=edit&amp;section=3" title="Parser test">edit</a>]</div><a name="Level_3_Heading"></a><h3> Level 3 Heading</h3>
<div class="editsection" style="float:right;margin-left:5px;">[<a href="/index.php?title=Parser_test&amp;action=edit&amp;section=4" title="Parser test">edit</a>]</div><a name="Level_4_Heading"></a><h4> Level 4 Heading</h4>
<div class="editsection" style="float:right;margin-left:5px;">[<a href="/index.php?title=Parser_test&amp;action=edit&amp;section=5" title="Parser test">edit</a>]</div><a name="Level_5_Heading"></a><h5> Level 5 Heading</h5>
<div class="editsection" style="float:right;margin-left:5px;">[<a href="/index.php?title=Parser_test&amp;action=edit&amp;section=6" title="Parser test">edit</a>]</div><a name="Level_6_Heading"></a><h6> Level 6 Heading</h6>
<div class="editsection" style="float:right;margin-left:5px;">[<a href="/index.php?title=Parser_test&amp;action=edit&amp;section=7" title="Parser test">edit</a>]</div><a name=".3D_Level_7_Heading.3D"></a><h6>= Level 7 Heading=</h6>
<div class="editsection" style="float:right;margin-left:5px;">[<a href="/index.php?title=Parser_test&amp;action=edit&amp;section=8" title="Parser test">edit</a>]</div><a name=".3D.3D_Level_8_Heading.3D.3D"></a><h6>== Level 8 Heading==</h6>
<div class="editsection" style="float:right;margin-left:5px;">[<a href="/index.php?title=Parser_test&amp;action=edit&amp;section=9" title="Parser test">edit</a>]</div><a name=".3D.3D.3D_Level_9_Heading.3D.3D.3D"></a><h6>=== Level 9 Heading===</h6>
<div class="editsection" style="float:right;margin-left:5px;">[<a href="/index.php?title=Parser_test&amp;action=edit&amp;section=10" title="Parser test">edit</a>]</div><a name=".3D.3D.3D.3D_Level_10_Heading.3D.3D.3D.3D"></a><h6>==== Level 10 Heading====</h6>

!! end

!! test
Resolving duplicate section names
!! options
title=[[Parser test script]]
!! input
== Foo bar ==
== Foo bar ==
!! result
<div class="editsection" style="float:right;margin-left:5px;">[<a href="/index.php?title=Parser_test_script&amp;action=edit&amp;section=1" title="Parser test script">edit</a>]</div><a name="Foo_bar"></a><h2> Foo bar </h2>
<div class="editsection" style="float:right;margin-left:5px;">[<a href="/index.php?title=Parser_test_script&amp;action=edit&amp;section=2" title="Parser test script">edit</a>]</div><a name="Foo_bar_2"></a><h2> Foo bar </h2>

!! end

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

!! test
Template with sections, __NOTOC__
!! options
title=[[Parser test script]]
!! input
__NOTOC__
==Section 0==
{{sections}}
==Section 4==
!! result
<div class="editsection" style="float:right;margin-left:5px;">[<a href="/index.php?title=Parser_test_script&amp;action=edit&amp;section=1" title="Parser test script">edit</a>]</div><a name="Section_0"></a><h2>Section 0</h2>
<div class="editsection" style="float:right;margin-left:5px;">[<a href="/index.php?title=Template:Sections&amp;action=edit&amp;section=1" title="Template:Sections">edit</a>]</div><a name="Section_1"></a><h3>Section 1</h3>
<div class="editsection" style="float:right;margin-left:5px;">[<a href="/index.php?title=Template:Sections&amp;action=edit&amp;section=2" title="Template:Sections">edit</a>]</div><a name="Section_2"></a><h2>Section 2</h2>
<div class="editsection" style="float:right;margin-left:5px;">[<a href="/index.php?title=Parser_test_script&amp;action=edit&amp;section=2" title="Parser test script">edit</a>]</div><a name="Section_4"></a><h2>Section 4</h2>

!! end

!! test
__NOEDITSECTION__ keyword
!! input
__NOEDITSECTION__
==Section 1==
==Section 2==
!! result
<a name="Section_1"></a><h2>Section 1</h2>
<a name="Section_2"></a><h2>Section 2</h2>

!! end

!! test
Link inside a section heading
!! options
title=[[Parser test script]]
!! input
==Section with a [[Main Page|link]] in it==
!! result
<div class="editsection" style="float:right;margin-left:5px;">[<a href="/index.php?title=Parser_test_script&amp;action=edit&amp;section=1" title="Parser test script">edit</a>]</div><a name="Section_with_a_link_in_it"></a><h2>Section with a <a href="/wiki/Main_Page" title="Main Page">link</a> in it</h2>

!! end


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

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

!! test
Bug 1186 news: in the middle of text
!! input
http://en.wikinews.org/wiki/Wikinews:Workplace
!! result
<p><a href="http://en.wikinews.org/wiki/Wikinews:Workplace" class='external free' title="http://en.wikinews.org/wiki/Wikinews:Workplace" rel="nofollow">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


!! 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 align="center" align="right">HTML rocks</div>
!! result
<div align="right">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 ALIGN="center">HTML ROCKS</DIV>
!! result
<div align="center">HTML ROCKS</div>

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


###
### Media links
###

!! test
Media link
!! input
[[Media:Foobar.jpg]]
!! result
<p><a href="/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="/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
!! input
[[Media:Foobar.jpg|Safe Link<div style=display:none>" onmouseover="alert(document.cookie)" onfoo="</div>]]
!! result
<p><a href="/images/3/3a/Foobar.jpg" class='internal' title="Foobar.jpg">Safe Link<div style="display:none">" onmouseover="alert(document.cookie) onfoo="</div></a>
</p>
!! 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
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

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


###
### 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></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>Magic div</div>

!! end

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

!! end


!! test
Math section safety when disabled
!! input
<math><script>alert(document.cookies);</script></math>
!! result
<p>&lt;math&gt;&lt;script&gt;alert(document.cookies);&lt;/script&gt;&lt;/math&gt;
</p>
!! 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> status
</th></tr></table>

!! 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>evil</div>

!! end

!! test
MSIE CSS safety test: hex code
!! input
<div style="background-image:u\72l(javascript:alert('boo'))">evil</div>
!! result
<div>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('boo'))">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('boo4'))">evil4</div>

!! end


TODO:
more images
more tables
math
character entities
and much more
