!! Version 2 # MediaWiki Parser test cases # Some taken from https://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 modes: # # (default) generate HTML output # pst apply pre-save transform # msg apply message transform # comment run through Linker::formatComment() instead of main parser # # Options for adding metadata to the output: # # cat add category links # (ignored by Parsoid, since it emits s) # ill add inter-language links # (ignored by Parsoid, since it emits s) # property=XXX add the value of the page property with the given name. # This can also be a comma-separated list. # extension=XXX add the JSON-encoded value of the given extension data. # This can also be a comma-separated list. # showtitle make the first line the title # showindicators make the first lines the page status indicators # # Parser parameters: # # subpage enable subpages (disabled by default) # 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) # notoc disable table of contents # thumbsize=NNN set the default thumb size to NNNpx for this test # wrap include the normal wrapper
(since 1.30) # local format section links in edit comment text as local links # # Configuration globals: # # wgEnableUploads, wgAllowExternalImages, wgMaxTocLevel, # wgLinkHolderBatchSize, wgRawHtml, wgInterwikiMagic, # wgEnableMagicLinks # # Test execution options: # # disabled do not run test # parsoid parsoid-specific options (not run by PHP parser unless # the test includes an html/php section) # php php-only test (not run by the parsoid parser unless # the test includes an html/parsoid section) # # 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 Foo !!text FOO !!endarticle !!article Foo''s bar''s !!text Article titles can contain single quotes! !!endarticle !!article Template:Foo !!text FOO !!endarticle !! article Template:redirect to foo !! text #REDIRECT [[Template:Foo]] !! endarticle !! article Template:Blank !! text !! endarticle !! article Template:pipe !! text | !! endarticle !! article Template:= !! 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:1x !! text {{{1}}} !! endarticle # For is; localize Template namespace !! article Snið:1x !! text {{{1}}} !! endarticle !! article Template:3x_on_newline !! text {{{1}}} {{{1}}} {{{1}}} !! endarticle # For Serbian; localize Template namespace !! article Шаблон:1x !! text {{{1}}} !! endarticle !! article Template:1x_with_span !! text {{{1}}} !! endarticle !! article Template:1x_with_div !! text
{{{1}}}
!! endarticle !! article Template:1x with depth !! text {{1x|{{{1}}}}} !! endarticle !! article Template:blank_param !! text {{{1}}} {{{}}} !! endarticle !! article Template:table_attribs !! text |style="color:red;"|Foo !! endarticle !! article Template:table_attribs_2 !! text |data-sort-value="" style="color:red;"|Foo |Bar||Baz !! endarticle !! article Template:table_attribs_3 !! text |style{{=}}"background:#f9f9f9;"|Foo !! endarticle !! article Template:table_attribs_4 !! text | style="background-color:#DC241f;" width="10px" | !! endarticle !! article Template:table_attribs_5 !! text |style="color:red;"||Bar !! endarticle !! article Template:table_attribs_6 !! text style="background: red;" | !! endarticle !! article Template:table_attribs_7 !! text |style{{=}}"background:#f9f9f9;"|Foofoo !! endarticle !! article Template:table_header_cells !! text {{table_attribs}}!!style='color:red;'|''Bar''||style='color:brown;'|''Foo'' and Baz !! endarticle !! article Template:table_cells !! text {{table_attribs}}||style='color:red;'|''Bar''||style='color:brown;'|''Foo'' and Baz !! endarticle !! article Template:table_cell_content !! text {{{attr|}}}{{{cmt|}}}| foo !! endarticle !! article Template:table_cell_content_with_leading_spc !! text | foo !! endarticle !! article Template:PartialTable !! text {| |- !! endarticle ## See T48811 for details !! article Template:mixed_attr_content_template !! text style="color:red;" title="T48811" |- |foo !! endarticle ## This template has a category in fosterable position. See T249740 for details !! article Template:mixed_attr_content_template_2 !! text style="color:red;" title="T249740" |- [[Category:Fostered Content]] |foo !! endarticle !! article Template:definition_list !! text one ::two !! endarticle !! article A?b !! text Weirdo titles! !! endarticle !!article Template:Bullet !!text *Bar !!endarticle !!article Template:OpenTable !!text {| !!endarticle !!article Template:EmptyLITest !!text *a * * *b !!endarticle !!article Template:EmptyTRTest !!text {| |- |- |foo |- |- |bar |} !!endarticle !!article Template:EmptyTRWithHTMLAttrTest !!text
foo
bar
!!endarticle !! article Template:With: Colon !! text Template with colon !! endarticle !! article Template:Template with pagename !! text This is {{PAGENAME}}. !! endarticle ### ### Basic tests ### !! test Blank input !! wikitext !! html !! end !! test Simple paragraph !! wikitext This is a simple paragraph. !! html

This is a simple paragraph.

!! end !! test Paragraphs with extra newline spacing !! wikitext a b (+2 nls) c (+3 nls) d (+4 nls) e (+5 nls) !! html

a

b (+2 nls)


c (+3 nls)


d (+4 nls)



e (+5 nls)

!! end !! test Paragraphs with newline spacing with comment lines in between !! wikitext ---- a b ---- a b ---- a b ---- a b ---- a b ---- a b ---- a b ---- !! html

a b


a b


a b


a

b


a

b


a


b


a


b


!! end !! test Paragraphs with newline spacing with non-empty white-space lines in between !! wikitext ---- a b ---- a b ---- !! html

a

b


a


b


!! end !! test Paragraphs with newline spacing with non-empty mixed comment and white-space lines in between !! wikitext ---- a b ---- a b ---- a b ---- a b ---- !! html

a b


a b


a

b


a


b


!! end !! test Extra newlines: More paragraphs with indented comment !! wikitext a b !! html

a


b

!!end !! test Extra newlines followed by heading !! wikitext a =b= [[a]] =b= !! html

a


b[edit]

a


b[edit]

!! end !! test Extra newlines between heading and content are swallowed (Parsoid does not) !! wikitext =b= [[a]] !! html/php

b[edit]

a

!! html/parsoid

b


a

!! end !! test Extra new lines before and after lists are preserved !! wikitext a *b c !! html/php

a



c

!! html/parsoid

a



c

!! end # Parsoid regression test !!test Multiple newlines after tables are converted to p-br-p tags !!options parsoid=wt2html,wt2wt !!wikitext {| |x |} =b= !!html/php
x



b[edit]

!!html/parsoid
x



b

!!end !! test Heading with line break in nowiki !! options parsoid=wt2html !! config wgFragmentMode=[ 'html5', 'legacy' ] !! wikitext ==A B C== !! html/php

A B C[edit]

!! html/parsoid

A B C

!! end !! test Heading with nonbreaking space in prefix/suffix (T235684) !! options parsoid=wt2html,html2html !! config wgFragmentMode=[ 'html5', 'legacy' ] !! wikitext ==   A   B   == !! html/php

  A   B  [edit]

!! html/parsoid

  A   B  

!! end !! test Parsing an URL !! wikitext http://fr.wikipedia.org/wiki/🍺 !! html

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

!! end !! test Simple list !! wikitext *Item 1 *Item 2 !! html !! end !! test Italics and bold !! wikitext *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 !! html !! end # this example taken from the [[simple:Moon]] article (T49326) !! test Italics and possessives (1) !! wikitext obtained by ''[[Lunar Prospector]]'''s gamma-ray spectrometer !! html

obtained by Lunar Prospector's gamma-ray spectrometer

!! end # this example taken from [[en:Flaming Pie]] (T51926) !! test Italics and possessives (2) !! wikitext '''''Flaming Pie''''' is ... released in 1997. In ''Flaming Pie'''s liner notes !! html

Flaming Pie is ... released in 1997. In Flaming Pie's liner notes

!! end # this example taken from [[en:Dictionary]] (T51926) !! test Italics and possessives (3) !! wikitext The first monolingual dictionary written in a Romance language was ''Sebastián Covarrubias''' ''Tesoro de la lengua castellana o española'', published in 1611 in Madrid. In 1612 the first edition of the ''Vocabolario dell'[[Accademia della Crusca]]'', for Italian, was published. In 1690 in Rotterdam was published, posthumously, the ''Dictionnaire Universel''. !! html

The first monolingual dictionary written in a Romance language was Sebastián Covarrubias' Tesoro de la lengua castellana o española, published in 1611 in Madrid. In 1612 the first edition of the Vocabolario dell'Accademia della Crusca, for Italian, was published. In 1690 in Rotterdam was published, posthumously, the Dictionnaire Universel.

!! end ### ### 2-quote opening sequence tests ### !! test Italics and bold: 2-quote opening sequence: (2,2) !! wikitext ''foo'' !! html

foo

!! end !! test Italics and bold: 2-quote opening sequence: (2,3) !! wikitext ''foo''' !! html/*

foo'

!! end !! test Italics and bold: 2-quote opening sequence: (2,4) !! options parsoid=wt2html !! wikitext ''foo'''' !! html/*

foo''

!! end # same html as previous, but wikitext adjusted to match parsoid html2wt !! test Italics and bold: 2-quote opening sequence: (2,4) w/ nowiki !! wikitext ''foo'''' !! html

foo''

!! end !! test Italics and bold: 2-quote opening sequence: (2,5) !! options parsoid=wt2html !! wikitext ''foo''''' !! html

foo

!! end # same html as previous, but wikitext adjusted to match parsoid html2wt !! test Italics and bold: 2-quote opening sequence: (2,5-3) !! options parsoid=html2wt !! html/parsoid

foo

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

'foo

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

foo

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

foo'

!! end # The PHP parser strips the empty tags out for giggles; parsoid doesn't. !! test Italics and bold: 3-quote opening sequence: (3,5) !! options parsoid=wt2html !! wikitext '''foo''''' !! html

foo

!! end # same html as previous, but wikitext adjusted to match parsoid html2wt !! test Italics and bold: 3-quote opening sequence: (3,5-2) !! options parsoid=html2wt !! html/parsoid

foo

!! wikitext '''foo''' !! end ### ### 4-quote opening sequence tests ### !! test Italics and bold: 4-quote opening sequence: (4,2) !! options parsoid=wt2html !! wikitext ''''foo'' !! html/*

''foo

!!end # same html as previous, but wikitext adjusted to match parsoid html2wt !! test Italics and bold: 4-quote opening sequence: (4,2) w/ nowiki !! wikitext ''''foo'' !! html

''foo

!! end !! test Italics and bold: 4-quote opening sequence: (4,3) !! wikitext ''''foo''' !! html/*

'foo

!!end !! test Italics and bold: 4-quote opening sequence: (4,4) !! options parsoid=wt2html !! wikitext ''''foo'''' !! html/*

'foo'

!!end # same html as previous, but wikitext adjusted to match parsoid html2wt !! test Italics and bold: 4-quote opening sequence: (4,4) w/ nowiki !! wikitext ''''foo'''' !! html

'foo'

!! end # The PHP parser strips the empty tags out for giggles; parsoid doesn't. !! test Italics and bold: 4-quote opening sequence: (4,5) !! options parsoid=wt2html !! wikitext ''''foo''''' !! html

'foo

!!end # same html as previous, but wikitext adjusted to match parsoid html2wt !! test Italics and bold: 4-quote opening sequence: (4,5-2) !! options parsoid=html2wt !! html/parsoid

'foo

!! wikitext ''''foo''' !! end ### ### 5-quote opening sequence tests ### !! test Italics and bold: 5-quote opening sequence: (5,2) !! options parsoid=wt2html !! wikitext '''''foo'' !! html/*

foo

!! end # same html as previous, but wikitext adjusted to match parsoid html2wt !! test Italics and bold: 5-quote opening sequence: (5,2+3) !! wikitext '''''foo''''' !! html/*

foo

!! end !! test Italics and bold: 5-quote opening sequence: (5,3) !! options parsoid=wt2html !! wikitext '''''foo''' !! html/*

foo

!! end # same html as previous, but wikitext adjusted to match parsoid html2wt !! test Italics and bold: 5-quote opening sequence: (5,3+2) !! wikitext '''''foo''''' !! html

foo

!! end !! test Italics and bold: 5-quote opening sequence: (5,4) !! options parsoid=wt2html !! wikitext '''''foo'''' !! html/*

foo'

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

foo

!! end !! test Italics and bold: 5-quote opening sequence: (5,6) !! wikitext '''''foo'''''' !! html/*

foo'

!! end ### ### multiple quote sequences in a line ### !! test Italics and bold: multiple quote sequences: (2,4,2) !! options parsoid=wt2html !! wikitext ''foo''''bar'' !! html/php

foo'bar

!! html/parsoid

foo'bar

!! end # same html as previous, but wikitext adjusted to match parsoid html2wt !! test Italics and bold: multiple quote sequences: (2,4,2+3) w/ nowiki !! wikitext ''foo''''bar''''' !! html

foo'bar

!! end !! test Italics and bold: multiple quote sequences: (2,4,3) !! options parsoid=wt2html !! wikitext ''foo''''bar''' !! html/*

foo'bar

!! end # same html as previous, but wikitext adjusted to match parsoid html2wt !! test Italics and bold: multiple quote sequences: (2,4,3+2) w/ nowiki !! wikitext ''foo''''bar''''' !! html

foo'bar

!! end !! test Italics and bold: multiple quote sequences: (2,4,4) !! options parsoid=wt2html !! wikitext ''foo''''bar'''' !! html/*

foo'bar'

!! end # same html as previous, but wikitext adjusted to match parsoid html2wt !! test Italics and bold: multiple quote sequences: (2,4,4+2) w/ nowiki !! wikitext ''foo''''bar'''''' !! html

foo'bar'

!! end !! test Italics and bold: multiple quote sequences: (3,4,2) !! options parsoid=wt2html !! wikitext '''foo''''bar'' !! html

foo'bar

!! end # same html as previous, but wikitext adjusted to match parsoid html2wt !! test Italics and bold: multiple quote sequences: (3,4,2-2) !! options parsoid=html2wt !! html/parsoid

foo'bar

!! wikitext '''foo''''bar !! end !! test Italics and bold: multiple quote sequences: (3,4,3) !! options parsoid=wt2html !! wikitext '''foo''''bar''' !! html

foo'bar

!! end # same html as previous, but wikitext adjusted to match parsoid html2wt !! test Italics and bold: multiple quote sequences: (3,4,3-3) !! options parsoid=html2wt !! html/parsoid

foo'bar

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

this is about foo's family

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

this is about foo's family

!! end !! test Italics and bold: other quote tests: (3,2,3,2) !! options parsoid=wt2html !! wikitext '''this is about ''foo'''s family'' !! html/*

this is about foos family

!!end # same html as previous, but wikitext adjusted to match parsoid html2wt !! test Italics and bold: other quote tests: (3,2,3+2+2,2) !! wikitext '''this is about ''foo'''''''s family'' !! html

this is about foos family

!! end !! test Italics and bold: other quote tests: (3,2,3,3) !! wikitext '''this is about ''foo'''s family''' !! html/*

'this is about foos family

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

this is about foo's family

!!end !! test Italicized possessive !! wikitext The ''[[Main Page]]'''s talk page. !! html/php

The Main Page's talk page.

!! html/parsoid

The Main Page's talk page.

!! end !! test Quote balancing context should be restricted to td/th cells on the same wikitext line !! options parsoid=wt2html,wt2wt !! wikitext {| !''a!!''b |''a||''b |} !! html
a b a b
!! end !! test Bold conversion test !! wikitext a b'''c ''d e'''f'' g h'''i ''j !! options parsoid=wt2html !! html

a b'c d ef g hi j

!! end ### ### Non-html5 tags ### ## The attribute on the font tag is so Parsoid won't normalize it away !! test Non-html5 tags should be accepted !! wikitext
''foo''
''foo'' ''foo'' ''foo'' ''foo'' !! html
foo

foo foo foo foo

!! end !! test is valid wikitext (T54468) !! wikitext !! html

!! end # is HTML4, is HTML4/5. !! test or for strikethrough !! wikitext strike s !! html

strike

s

!! end ## a not permitted ## i,b,br omitted !! test Text-level semantic html elements in wikitext !! wikitext text text text text text text text text text text text text text text text text 明日(Ashita あした) text text text !! html

text text text text text text text text text text text text text text text text 明日(Ashita あした) text text text

!! end # test cases taken from # https://www.w3.org/TR/html5/text-level-semantics.html#the-ruby-element !! test Ruby markup (W3C-style) !! wikitext ;Mono-ruby for individual base characters :ほん ;Group ruby :今日きょう ;Jukugo ruby :きょう ;Inline ruby :(とうきょう) ;Double-sided ruby :jiùjīnshānSan Francisco HeartCœur ShamrockTrèfle StarÉtoile !! html
Mono-ruby for individual base characters
ほん
Group ruby
今日きょう
Jukugo ruby
きょう
Inline ruby
(とうきょう)
Double-sided ruby
jiùjīnshānSan Francisco

HeartCœur ShamrockTrèfle StarÉtoile

!! end # The next two test different paths in the sanitizer. !! test Non-word characters don't terminate tag names (T19663, T42670, T54022) !! wikitext a doesn't terminate doesn't terminate doesn't terminate doesn't terminate !! html

<blockquote|>a

<b→> doesn't terminate </b→>

<bä> doesn't terminate </bä>

<boo> doesn't terminate </boo>

<s.foo> doesn't terminate </s.foo>

<sub-ID#1>

!! end ### ### See tests/parser/ParserTestParserHook.php for the extension) ### This checks that HTML5 tags (with non-word characters in the tag ### name) make it safely through the parser -- the Sanitizer will ### munge them later, as it should. ### !! test Non-word characters are valid in extension tags (T19663) !! wikitext tåg !! html/php
'tåg'
array (
)
!! html/parsoid

!! end

!! test
Isolated close tags should be treated as literal text (T54760)
!! options
parsoid=wt2html
!! wikitext


s
!! html

<s.foo>s

!! end !! test Self-closed tag hooks !! wikitext


!! html/php


!! html/parsoid


!! end ### ### Special characters ### !! test Bare pipe character (T54363) !! wikitext | !! html

|

!! end !! test Bare pipe character from a template (T54363) !! wikitext {{pipe}} !! html

|

!! end !! test Implicit newline insertion/sol when expanding templates (T241150/T14974/T2529) !! wikitext {{1x|#foo}}{{1x|#foo}} !! html/php
  1. foo
  2. foo
!! html/parsoid
  1. foo
  2. foo
!! end ### ### test cases ### !! test unordered list !! wikitext * This is not an unordered list item. !! html/php

* This is not an unordered list item.

!! html/parsoid

* This is not an unordered list item.

!! end !! test spacing !! wikitext Lorem ipsum dolor sed abit. sed nullum. :and a colon !! html/php

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

!! html/parsoid

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

!! end !! test Don't parse (T149622) !! wikitext !! html/php

<span class="error">

!! html/parsoid

<span class="error">

!! end !! test nowiki 3 !! wikitext :There is not nowiki. :There is nowiki. #There is not nowiki. #There is nowiki. *There is not nowiki. *There is nowiki. !! html/php
There is not nowiki.
There is nowiki.
  1. There is not nowiki.
  2. There is nowiki.
  • There is not nowiki.
  • There is nowiki.
!! html/parsoid
There is not nowiki.
There is nowiki.
  1. There is not nowiki.
  2. There is nowiki.
  • There is not nowiki.
  • There is nowiki.
!! end !! test Entities inside !! wikitext < !! html/php

<

!! html/parsoid

<

!! end !! test Entities inside template parameters !! wikitext {{1x|–}} !! html/php

!! html/parsoid

!! end !! test Properly escape nowiki when combined with other wiki markup !! options parsoid=html2wt !! html/parsoid

* </nowiki> tag

!! wikitext * </nowiki> tag !! end !! test T93824: Put escaped HTML tags inside nowiki !! options parsoid=html2wt !! html/parsoid

<h2>foo</h2>

!! wikitext

foo

!! end !! test T71950: 1. Put nowiki as close to cause as possible, even with non-quote escapable chars !! options parsoid=html2wt !! html/parsoid

This text: L'Foo This text: L''Foo This text: L'''Foo''

!! wikitext This text: L'[[Foo]] This text: L''[[Foo]] This text: L'''[[Foo]]'' !! end !! test T71950: 2. Put nowiki as close to cause as possible, after ' :' !! options parsoid=html2wt !! html/parsoid

This text : L''Foo

!! wikitext This text : L''[[Foo]] !! end # This test and the next one are html2wt only as they test that incorrect wikitext # passed in template arguments gets escaped or wrapped in nowikis where required. !! test T71482: Use {{!}} instead of nowiki for single pipe in template argument !! options parsoid=html2wt !! html/parsoid

!! wikitext {{1x|foo{{!}}bar}} {{1x|foo|bar |[[}} !! end !! test T53961: Output correct nowikis in template arguments !! options parsoid=html2wt !! html/parsoid

!! wikitext {{1x|a [ b}} {{1x|a }} b}} {{1x|a [[ b}} {{1x|a | {{ ]]}} {{1x|a }}} !! end !! test Cases where "!!" needs nowiki protection !! options parsoid=html2wt !! html/parsoid
this needs protection !! here
this does not need protection !! here
!! wikitext {| !this needs protection !! here |} {| !this does not need protection !! here |} !! end !! test Nowiki with newlines in list !! wikitext :test 123 !! html/php
test 123
!! html/parsoid
test 123
!! end ## The output here may change with the outcome of T255007 !! test Nowiki and french spacing !! wikitext test : 123 !! html/php

test : 123

!! html/parsoid

test : 123

!! end !! test T255007: French spacing in raw text elements !! options wgRawHtml=1 !! wikitext !! html/php

!! html/parsoid

!! end !! test French spacing and spans !! wikitext [[Test]] : 123 « Test »123 !! html/php

Test : 123 « Test »123

!! html/parsoid

Test : 123 « Test »123

!! end ### ### Comments ### !! test Comments and Indent-Pre !! wikitext asdf asdf asdf xyz asdf xyz !! html
asdf
asdf
asdf

xyz

asdf
xyz
!! end !! test Comment test 2a !! wikitext asdf jkl !! html

asdf jkl

!! end !! test Comment test 2b !! wikitext asdf jkl !! html

asdf

jkl

!! end !! test Comment test 3 !! wikitext asdf jkl !! html

asdf jkl

!! end !! test Comment test 4 !! wikitext asdfjkl !! html

asdfjkl

!! end !! test Comment spacing !! wikitext a b c !! html

a

 b 

c

!! end !! test Comment whitespace !! wikitext !! html !! end !! test Comment semantics and delimiters !! wikitext !! html/php !! html/parsoid !! end !! test Comment semantics and delimiters, redux !! wikitext !! html/php !! html/parsoid !! end !! test Comment semantics and delimiters: directors cut !! wikitext --> !! html/php

-->

!! html/parsoid

-->

!! end !! test Comment semantics: nesting !! wikitext --> !! html/php

-->

!! html/parsoid

-->

!! end # Parsoid closes the unclosed comment, even if it means a slight # round-trip diff. !! test Comment semantics: unclosed comment at end !! options parsoid=wt2html,html2html !! wikitext !! end !! test Comment semantics: normalize comments to play nice with XML and browsers !! wikitext think this is closed --> This would normally be text --> As would this --> But this is not a comment. !! html/php

But this is not a comment.

!! html/parsoid

But this is not a comment.

!! end !! test Comment semantics: round-trip even text which contains encoded --> !! wikitext !! html/parsoid !! end !! test Comment in template title !! wikitext {{foo}} !! html

FOO

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

a

b

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

a

b

!! end !! test post-expand include size being exceeded !! options maxincludesize=30 !! wikitext {{3x_on_newline|1234567890}} !! html

Template:3x on newline

!! end !! test max template depth being reached !! options maxtemplatedepth=1 !! wikitext {{1x with depth|too deep!}} !! html

Template recursion depth limit exceeded (1)

!! end !! test multiple templates that are redirects !! wikitext {{redirect to foo}} {{redirect to foo}} !! html

FOO FOO

!! end !! test Multiple comments should still parse as SOL-transparent !! options parsoid=wt2html,wt2wt !! wikitext *a *b !! html/php
  • a
  • b
!! html/parsoid
  • a
  • b
!! end ## Make sure ">" gets escaped in comments to avoid XSS !! test IE conditional comments !! wikitext !! html/parsoid !! end ## Regession test for Parsoid !! test Comment with valid json !! wikitext hi ho !! html/php

hi ho

!! html/parsoid

hi ho

!! end ### ### paragraph wrapping tests ### !! test No block tags !! wikitext a b !! html

a

b

!! end !! test Block tag on one line (
) !! wikitext a
foo
b !! html

a

foo

b

!! end !! test No p-wrappable content !! options parsoid=wt2html,html2html !! wikitext
x
x
x
!! html
x
x

x
!! end # T177612: Parsoid-only test !! test Transclusion meta tags shouldn't trip Parsoid's useless p-wrapper stripping code !! wikitext {{1x|
x
}} x !! html/parsoid
x

x

!! end !! test Block tag on one line (
) !! wikitext a
foo
b !! html

a

foo

b

!! end !! test Block tag on both lines (
) !! wikitext a
foo
b
foo
!! html

a

foo

b

foo
!! end !! test Block tag on both lines (
) !! wikitext a
foo
b
foo
!! html

a

foo

b

foo

!! end !! test Multiple lines without block tags !! wikitext
foo
a b c d e x
foo
z !! html/php
foo

a

b c d e

x

foo

z

!! html/parsoid
foo

a

b c d e

x

foo

z

!! end !! test Empty lines between lines with block tags !! wikitext
a b
a
b
b
d
e
!! html/php


a

b

a

b

b

d


e
!! html/parsoid


a

b

a

b

b

d


e
!! end !! test Unclosed HTML p-tags should be handled properly !! wikitext

foo

a b !! html/php

foo

a

b

!! html/parsoid

foo

a

b

!! end ## SSS FIXME: I can come up with other scenarios where this doesn't work because ## of eager output of buffered tokens in the p-wrapper. But, I'm going to ignore ## them for now. !! test 1. P-wrapping should leave sol-transparent tags outside p-tags where possible !! options parsoid=wt2html !! wikitext a [[Category:A1]] [[Category:A2]] [[Category:A3]] [[Category:A4]] !! html/parsoid

a

!! end !! test 2. P-wrapping should leave sol-transparent tags outside p-tags where possible !! options parsoid=wt2html !! wikitext [[Category:A1]]a !! html/parsoid

a

!! end !! test No paragraph necessary for SOL transparent template !! wikitext
foo
[[Category:Foo]]
foo
{{1x|[[Category:Foo]]}} !! html/php
foo
foo
!! html/parsoid
foo
foo
!! end !! test Avoid expanding multiline sol transparent template ranges unnecessarily !! wikitext hi {{1x|
}} [[Category:Ho]] !! html/php

hi



!! html/parsoid

hi



!! end !! test Paragraph wrapping following unclosed table !! options parsoid=wt2html,html2html !! wikitext {| |- {| | x |} a b c !! html/php
x

a

b

c

!! html/parsoid
x

a

b

c

!! end !! test Paragraph wrapping suppressed in html p !! options parsoid=wt2html,html2html !! wikitext

hi

!! html/php

hi

!! html/parsoid

hi

!! end !! test Dangling table row doesn't prevent p-wrapping !! options parsoid=wt2html,html2html !! wikitext {| | hi |- |} ho !! html/parsoid
hi

ho

!! end !! test P-wrapping non-breaking spaces !! wikitext   !! html/php

 

!! html/parsoid

 

!! end !! test Paragraph wrapping suppressed in table captions !! wikitext {| |+hi |ho |} {| |hi |+ho |} it's off to work we go !! html/php
hi
ho
hi
ho

it's off to work we go

!! html/parsoid
hi
ho
hi
ho

it's off to work we go

!! end ### ### Preformatted text ### !! test Preformatted text !! wikitext This is some Preformatted text With ''italic'' And '''bold''' And a [[Main Page|link]] !! html
This is some
Preformatted text
With italic
And bold
And a link
!! end !! test Tabs don't trigger preformatted text !! wikitext This is not preformatted text. This is preformatted text. So is this. !! html/php

This is not preformatted text.

This is preformatted text.
	So is this.
!! html/parsoid

This is not preformatted text.

This is preformatted text.
	So is this.
!! end ## FIXME: This test is less useful now that the leading space is normalized away !! test Space before tab needs nowiki pre protection !! options parsoid=html2wt !! html/parsoid

a

!! wikitext a !! end !! test Ident preformatting with inline content !! wikitext a ''b'' !! html
a
b
!! end !! test
 with  inside (compatibility with 1.6 and earlier)
!! wikitext




!! html
<b>
<cite>
<em>
!! end !! test Regression with preformatted in
!! wikitext
Blah
!! html
Blah
!! end !! test T54763: Preformatted in
!! wikitext
Blah {| | indented cell (no pre-wrapping!) |}
!! html

Blah

indented cell (no pre-wrapping!)

!! end !! test T53086: Double newlines in blockquotes should be turned into paragraphs !! wikitext
Foo Bar
!! html

Foo

Bar

!! end !! test T17491: / in blockquote !! wikitext
Foo bar baz quux
!! html

Foo bar baz quux

!! end !! test T17491: / in blockquote (2) !! wikitext
Foo bar baz quux
!! html

Foo bar baz quux

!! end !! test
 with attributes (T5202)
!! wikitext
Bluescreen of WikiDeath
!! html
Bluescreen of WikiDeath
!! end !! test
 with width attribute (T5202)
!! wikitext
Narrow screen goodies
!! html
Narrow screen goodies
!! end !! test
 with forbidden attribute (T5202)
!! wikitext
Narrow screen goodies
!! html
Narrow screen goodies
!! end !! test Entities inside
!! wikitext
<
!! html
<
!! end !! test
 with forbidden attribute values (T5202)
!! wikitext
Narrow screen goodies
!! html
Narrow screen goodies
!! end !! test inside
 (T15238)
!! wikitext


Foo
!! html
<nowiki>

<nowiki>Foo</nowiki>
!! end !! test inside of #tag:pre !! wikitext {{#tag:pre|Foo →bar}} !! html/php
Foo →bar
!! html/parsoid
Foo bar
!! end ## Don't expect this to rt, Parsoid drops the unmatched closing pre tags that ## aren't enclosed in nowikis. !! test and
 preference (first one wins)
!! options
parsoid=wt2html
!! wikitext


!! html/php
<nowiki>

</nowiki>

<pre> <nowiki> </pre>

!! html/parsoid
<nowiki>

</nowiki>

<pre> <nowiki> </pre>

!! end !! test
inside nowiki !! wikitext
!! html

</pre>

!! end !! test Empty pre; pre inside other HTML tags (T56946) !! wikitext a
foo

!! html/php

a

foo

!! html/parsoid

a

foo

!! end

!! test
HTML pre followed by indent-pre
!! wikitext
foo
bar !! html
foo
bar
!! end !! test Block tag pre !! wikitext

foo

!! html/php

foo

!! html/parsoid

foo

!! end !!test Templates: Indent-Pre: 1a. Templates that break a line should suppress
!! wikitext
 {{1x|}}
!! html
!! end

!!test
Templates: Indent-Pre: 1b. Templates that break a line should suppress 
!! wikitext
 {{1x|
foo}}
!! html

foo

!!end !! test Templates: Indent-Pre: 1c: Wrapping should be based on expanded content !! wikitext {{1x|a b}} !! html
a

b

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

b c

d

e

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


a


b

a

b

a

b
!!end ## Hmm, should Parsoid rt this? !! test Pres with newline attributes !! options parsoid=wt2html,html2html !! wikitext
hi
!! html/php
hi
!! html/parsoid
hi
!! end !! test Things that look like
 tags aren't treated as such
!! wikitext
Barack Obama  of the United States

!! html

Barack Obama <President> of the United States <President></President>

!! end ## Remex doesn't account for fostered content. ## The difference between Parsoid and the PHP parser can be attributed to core ## commit 674e8388cba and 710618f89af in Parsoid's repo. Parsoid doesn't ## tokenize unmatched extension tags that shadow html tags as strings to ease ## an escaping mechanism. See the comment in `maybeExtensionTag`. !! test Handle broken pre-like tags (T66025) !! options parsoid=wt2html !! wikitext {{1x|
x
}}
!! html/php
x
<pre
!! html/parsoid
x
!! end ## Similar to the above, but shows the difference between extension and html tags !! test Less than in attribute position !! wikitext
123
123
!! html/php
123

<div

123
!! html/parsoid
123

<div

123
!! end !! test Parsoid: handle pre with space after attribute !! options parsoid=wt2html !! wikitext
{{1x|foo}}
!! html/php
{{1x|foo}}
!! html/parsoid
{{1x|foo}}
!! end !! test Self-closed pre !! wikitext
!! html/php

!! html/parsoid

!! end

# Regression test to prevent problematic simplifications of parser tests
!! test
Don't paragraph-wrap empty newlines between HTML list items
!! options
parsoid=wt2html
!! wikitext
  1. foo
  2. foo
!! html/php
  1. foo
  2. foo
!! html/parsoid
  1. foo
  2. foo
!! end #-------------------------------------------------------------------- # Transclusion parameter whitespace stripping tests # Behavior is different for positional and named parameters #-------------------------------------------------------------------- !! test Templates: Strip leading and trailing whitespace from named-param values !! wikitext {{1x|1= a }} {{1x|1= {{1x|b}} }} {{1x| 1 = c }} {{1x| 1 = * d }} !! html

a

b

c

  • d
!! end !! test Templates: Don't strip whitespace from positional-param values !! wikitext {{1x|a }} {{1x|{{1x|b}} }} {{1x| c }} {{1x| {{1x|d}} }} {{1x| e}} {{1x| *f}} {{1x| }}g !! html

a

b

c 


d


e


  • f


g
!! end !! test Templates: Don't recognize targets split by newlines !! options parsoid=wt2html !! wikitext {{ech o|foo}} !! html/php

{{ech o|foo}}

!! html/parsoid

{{ech o|foo}}

!! end !! test Templates: Recognize targets when newlines and comments don't split the target !! options parsoid=wt2html !! wikitext {{ 1x |foo}} !! html/php

foo

!! html/parsoid

foo

!! end ## wt2html only, since the bare {{ will get escaped when serializing !! test Templates: Target with an extension tag !! options parsoid=wt2html !! wikitext {{{{1x|1x}}hi|ho}} !! html/php

{{1xhi|ho}}

!! html/parsoid

{{1xhi|ho}}

!! end !! test Templates: Handle empty comment-and-ws-only lines correctly !! wikitext {{1x|foo bar}} !! html/php

foo bar

!! html/parsoid

foo bar

!! end !! test Templates: Handle comments in the target !! wikitext {{1x |foo}} {{1x |foo}} {{1x |foo}} {{1x|foo}} {{1x|foo}} !! html/php

foo

foo

foo

foo

foo

!! html/parsoid

foo

foo

foo

foo

foo

!! end !! test Templates: Handle comments in parameter names (T69657) !! wikitext {{1x|1 =foo}} {{1x| 1 = foo}} {{1x|1=foo}} {{1x|1=foo}} !! html/php

foo

foo

foo

foo

!! html/parsoid

foo

foo

foo

foo

!! end !! test Templates: Other wikitext in parameter names (T69657) !! wikitext {{1x|''1''=foo}} !! html/php

{{{1}}}

!! html/parsoid

{{{1}}}

!! end !! test Templates: With colons !! wikitext {{With: Colon}} !! html/php

Template with colon

!! html/parsoid

Template with colon

!! end #-------------------------------------------------------------------- # Transclusion parameter escaping tests #-------------------------------------------------------------------- !! test Templates: Parsoid parameter escaping test 1 !! wikitext {{1x|[foo]|{{1x|[bar]}}}} !! html/php

[foo]

!! html/parsoid

[foo]

!! end !! test Parsoid: Pipes in external links in template parameter !! wikitext {{1x|[{{1x|http://example.com}} link]}} !! html/php

link

!! html/parsoid

link

!! end !! test Parsoid: pipe in transclusion parameter !! wikitext {{1x|http://foo.com/a|b}} !! html/php

http://foo.com/a%7Cb

!! html/parsoid

http://foo.com/a%7Cb

!! end !! test Parsoid: Pipe in external link target and content in template parameter !! options parsoid=html2wt,wt2wt !! wikitext {{1x|[http://foo.com/a|b a|b]}} !! html/php

a|b

!! html/parsoid

a|b

!! end !! test Parsoid: Pipe in template with nested template in external link target in template parameter (seriously) !! wikitext {{1x|[{{fullurl:{{FULLPAGENAME}}|action=edit}} bar]}} !! html/php

bar

!! html/parsoid

bar

!! end !! test Templates: Don't escape already nowiki-escaped text in template parameters !! options parsoid=html2wt,wt2wt !! wikitext {{1x|foo|bar}} {{1x|<div>}} {{1x|}} !! html/php

foo|bar <div>

!! html/parsoid

foo|bar <div>

!! end ## T54824 !! test Templates: '=' char in nested transclusions should not trigger nowiki escapes or conversion to named param !! options parsoid=html2wt,wt2wt !! wikitext {{1x|{{1x|1=bar}}}} !! html/php

bar

!! html/parsoid

bar

!! end ## T58733 !! test Templates parameters with special tokenizing behavior dont get modified because of arg escaping !! wikitext {{1x|a : b}} !! html/php

a : b

!! html/parsoid

a : b

!! end ## T73412 !! test Templates: Preserve blank parameter names !! wikitext {{1x|=foo}} !! html/php

{{{1}}}

!! html/parsoid

{{{1}}}

!! end !! test Templates: Preserve blank parameter names in other positions !! wikitext {{blank_param|bar|=foo}} !! html/php

bar foo

!! html/parsoid

bar foo

!! end ### ### Parsoid-centric tests for testing RT edge cases for pre ### !!test 1a. Indent-Pre and Comments !! wikitext a c !! html
a

c

!!end !!test 1b. Indent-Pre and Comments !! wikitext a c !! html
a

c

!!end !!test 1c. Indent-Pre and Comments !! wikitext a a !! html
 a
 a
!!end !!test 1d. Indent-Pre and Comments (Pre-handler currently cannot distinguish between comment/ws order and normalizes them to [comment,ws] order) !! wikitext a b !! html
a
b
!!end !!test 2a. Indent-Pre and tables !! wikitext {| |- !h1!!h2 |foo||bar |} !! html
h1 h2 foo bar
!!end !!test 2b. Indent-Pre and tables !! wikitext {| |- |foo |} !! html
foo
!!end !!test 2c. Indent-Pre and tables (T44252) !! wikitext {| |+foo ! |bar |} !! html
foo
bar
!!end !!test 2d. Indent-Pre and tables !! wikitext a {| |b |} !! html/php
a
b
!! html/parsoid
a
b
!!end !!test 2e. Indent-Pre and table-line syntax !! wikitext a | b | c !! html/php
a
| b
| c
!!end !!test 2f. Indent-pre started by table-line syntax !! wikitext a | b | c !! html/php

a

| b
| c
!! html/parsoid

a

| b
| c
!!end !! test 2g. Indented table markup mixed with indented pre content (proposed in T8200) !! wikitext
Text that should be rendered preformatted
!! html
Text that should be rendered preformatted
!! end !! test 2h. Indent pre in tables !! options parsoid=wt2html,html2html !! wikitext {| ! foo ! bar |- | baz {{!}} bam |} !! html/php
foo
bar
baz
bam
!! html/parsoid
foo
bar
baz
bam
!! end !! test 3a. Indent-Pre and block tags (single-line html) !! wikitext a

foo

b
foo
c
foo
foo !! html/php

a

foo

b

foo

c

foo

 foo 
!! html/parsoid

a

foo

b

foo

c

foo

 foo 
!! end !! test 3b. Indent-Pre and block tags (multi-line html) !! wikitext a foo b
foo
!! html/parsoid
a foo

b

foo
!! html/php
a foo

b

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

foo

foo
foo
foo
foo
foo
  • foo
!! html/php

foo

foo
foo

foo

foo
foo
  • foo
!! html/parsoid

foo

foo
foo

foo

foo
foo
  • foo
!! end !! test 4. Indent-Pre and extension tags !! options parsoid=wt2html,html2html !! wikitext a !! html/php

a

NULL
array (
)
!! html/parsoid

a


!! end

!! test
5. Indent-Pre and html pre
!! wikitext
 
hi
!! html/php
hi
!! html/parsoid
hi
!! end !! test Serializing indent pre at sol !! html/parsoid
hi
!! html/php
hi
!! wikitext hi !! end !!test Render paragraphs when indent-pre is suppressed in blocklevels !! wikitext
foo bar
!! html

foo

bar

!!end !!test 4. Multiple spaces at start-of-line !! wikitext

foo

foo {| |foo |} !! html

foo

   foo
foo
!!end ## NOTE: the leading white-space chars on empty line are significant !! test 5a. White-space in indent-pre !! wikitext a
b !! html
a
b
!! end ## NOTE: the leading white-space chars on empty line are significant !! test 5b. White-space in indent-pre !! wikitext a b c !! html
a

b


c
!! end !! test 5c. White-space in indent-pre !! wikitext ''a'' ''b'' ''c'' !! html
a
 b
  c
!! end !! test 6. Pre-blocks should extend across lines with leading WS even when there is no wrappable content !! wikitext a b c d !! html
a

b
c

d

!! end !! test 7a. Indent-pre and category links !! options parsoid=wt2html,wt2wt !! wikitext [[Category:foo]] {{1x| [[Category:foo]]}} !! html/php !! html/parsoid !! end ## We used to, but no longer wt2wt this test since the default serializer ## will normalize all categories to serialize on their own line. ## This wikitext usage is going to be fairly uncommon in production and ## selser will take care of preserving formatting in those scenarios. !! test 7b. Indent-pre and category links !! options parsoid=wt2html !! wikitext [[Category:foo]] a [[Category:foo]] {{1x|b}} !! html/parsoid
 a
  b
!! end !! test Indent-Pre: Newlines in comments shouldn't affect sol state !! wikitext a b !! html/php

a b

!! html/parsoid

a b

!! end !! test Indent pre with leading colon !! wikitext :foo !! html/php
:foo
!! html/parsoid
:foo
!! end ## DO NOT DELETE trailing whitespace in the wikitext below! !! test Indent-Pre regression test: Trailing whitespace after sol-transparent content !! wikitext [[Category:Foo]] [[Category:Bar]] !! html/php !! html/parsoid !! end !! test Preserving leading whitespace in indent-pre suppressing contexts !! wikitext
  1. foo bar
!! html/php
  1. foo bar
!! html/parsoid
  1. foo bar
!! end ### ### HTML-pre (some to spec PHP parser behavior and some Parsoid-RT-centric) ### !!test HTML-pre: 1. embedded newlines !! wikitext
foo
foo

foo


foo
!! html/php
foo
foo

foo


foo
!! html/parsoid
foo
foo

foo


foo
!!end !! test HTML-pre: big spaces !! wikitext




haha




haha




!! html/php




haha




haha




!! html/parsoid




haha




haha




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

Paragraph text

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

this text should be left alone

!! end !! test Definition Lists: Hacky use to indent tables (with content following table) !! wikitext :{| |foo |bar |} this text should be part of the dl !! html/php
foo bar
this text should be part of the dl
!! html/parsoid
foo bar
this text should be part of the dl
!! end !! test Definition Lists: Hacky use to indent tables, with comments (T65979) !! wikitext ::{| |foo |bar |} this text should be left alone !! html/parsoid
foo bar

this text should be left alone

!! end !! test Definition Lists: Hacky use to indent tables, with comment before table !!options parsoid=wt2html !! wikitext ::{| |foo |} !! html/parsoid
foo
!! end # Note that the legacy parser closes the list completely for the # hacky-indent table and then reopens it; Parsoid emits the "expected" # output. Parsoid team regards this as a bug in the legacy parser. !! test Definition Lists: Hack use to indent tables, in a nested list context (T262943) !! wikitext This is a discussion thread. :Parent comment. ::Child comment ::{| |With a |Table! |} !! html/php

This is a discussion thread.

Parent comment.
Child comment
With a Table!
!! html/parsoid

This is a discussion thread.

Parent comment.
Child comment
With a Table!
!! end # The trailing whitespace in this test is to catch a regression in # Parsoid after T54473. !! test Definition Lists: Hacky use to indent tables (WS-insensitive) !! wikitext :{| |a |} !! html/php
a
!! html/parsoid
a
!! end # wt2wt / html2wt will normalize newlines - so disabled those test modes !! test Definition Lists: Hacky use to indent tables (nl-insensitive) !! options parsoid=wt2html,html2html !! wikitext :{| |a |} !! html/php
a
!! html/parsoid
a
!! end ## The PHP parser treats : items (dd) without a corresponding ; item (dt) ## as an empty dt item. It also ignores all but the last ";" when followed ## by ":" later on. So, ";" are not ignored in ";;;t3" but are ignored in ## ";;;t3 :d1". So, PHP parser behavior is a little inconsistent wrt multiple ## ";"s. ## ## Ex: ";;t2 ::d2" is transformed into: ## ##
##
t2
##
##
##
##
d2
##
##
##
## ## But, Parsoid treats "; :" as a tight atomic unit and excess ":" as plain text ## So, the same wikitext above (;;t2 ::d2) is transformed into: ## ##
##
##
##
t2
##
:d2
##
##
##
## ## All Parsoid only definition list tests have this difference. ## ## See also: https://phabricator.wikimedia.org/T8569 ## and https://lists.wikimedia.org/pipermail/wikitext-l/2011-November/000483.html !! test Table / list interaction: indented table with lists in table contents !! wikitext :{| |- |a *b |- |c *d |} !! html
a
  • b
c
  • d
!! end !!test Table / list interaction: lists nested in tables nested in indented lists !! wikitext :{| | :a :b | *c *d |} *e *f !! html
a
b
  • c
  • d
  • e
  • f
!!end !! test Definition Lists: Nesting: Multi-level (Parsoid only) !! wikitext ;t1:d1 ;;t2::d2 ;;;t3:::d3 !! html/parsoid
t1
d1
t2
:d2
t3
::d3
!! end !! test Definition Lists: Nesting: Test 2 !! wikitext ;t1 ::d2 !! html
t1
d2
!! end !! test Definition Lists: Nesting: Test 3 !! wikitext :;t1 ::::d2 !! html
t1
d2
!! end !! test Definition Lists: Nesting: Test 4 !! wikitext ::;t3 :::d3 !! html
t3
d3
!! 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
after the
containing the
    .) ## It also exposes a "misfeature" in tidy, which doesn't like ##
    tags with a single
    child; it converts the
    into ## a
    in that case. (Parsoid leaves the
    alone!) !! test Definition Lists: Mixed Lists: Test 1 !! wikitext :;*foo ::*bar :;baz !! html/php
    • foo
    • bar
    baz
    !! html/php
    • foo
    • bar
    baz
    !! html/parsoid
    • foo
    • bar
    baz
    !! end !! test Definition Lists: Mixed Lists: Test 2 !! wikitext *:d1 *:d2 !! html
    • d1
      d2
    !! end !! test Definition Lists: Mixed Lists: Test 3 !! wikitext *:::d1 *:::d2 !! html
    • d1
      d2
    !! end !! test Definition Lists: Mixed Lists: Test 4 !! options parsoid=wt2html,html2html !! wikitext *;d1 :d2 *;d3 :d4 !! html
    • d1
      d2
      d3
      d4
    !! end !! test Definition Lists: Mixed Lists: Test 5 !! wikitext *:d1 *::d2 !! html
    • d1
      d2
    !! end !! test Definition Lists: Mixed Lists: Test 6 !! wikitext #*:d1 #*:::d3 !! html
      • d1
        d3
    !! end !! test Definition Lists: Mixed Lists: Test 7 !! wikitext :*d1 :*d2 !! html
    • d1
    • d2
    !! end !! test Definition Lists: Mixed Lists: Test 8 !! wikitext :*d1 ::*d2 !! html
    • d1
    • d2
    !! end !! test Definition Lists: Mixed Lists: Test 9 !! options parsoid=wt2html,html2html !! wikitext *;foo :bar !! html
    • foo
      bar
    !! end !! test Definition Lists: Mixed Lists: Test 10 !! options parsoid=wt2html,html2html !! wikitext *#;foo :bar !! html
      1. foo
        bar
    !! end # The Parsoid team disagrees with the PHP parser's seemingly-random # rules regarding dd/dt on the next few tests. Parsoid is more # consistent, and recognizes the shared nesting and keeps the # still-open tags around until the nesting is complete. # This is a regression test for T175099 !! test Definition Lists: Mixed Lists: Test 11 !! wikitext ;a :*b !! html/php
    a
    • b
    !! html/parsoid
    a
    • b
    !! end # FIXME: Maybe get rid of this test? !! test Definition Lists: Mixed Lists: Test 12 !! options parsoid=wt2html,html2html !! wikitext *#*#;*;;foo :bar *#*#;boo :baz !! html/php
          1. foo
            • bar
        boo
        baz
    !! html/parsoid
            • foo
              bar
            boo
            baz
    !! end !! test Definition Lists: Mixed Lists: Test 13 !! options parsoid=wt2html,html2html !! wikitext *#*#;*;;foo : bar *#*#;boo : baz !! html
          1. foo
            • bar
        boo
        baz
    !! end # FIXME: Maybe get rid of this test? # From an old description in the Parsoid codebase: # * The test is wrong, there are two colons where there should be :; # * The PHP parser is wrong to close the
    after the
    containing the
      . !! test Definition Lists: Weird Ones: Test 1 !! options parsoid=wt2html,html2html !! wikitext *#;*::;;foo :bar (who uses this?) !! html/php
        1. foo
          • bar (who uses this?)
      !! html/parsoid
          • foo
            bar (who uses this?)
      !! end !! test Definition Lists: colons occurring in tags !! wikitext ;a:b ;'''a:b''' ;a:b ;a:b ;
      a:b
      ;
      a :b
      ;{{1x|a:b}} ;{{1x|''a:b''}} ;;;''a:b'' !! html/php
      a
      b
      a:b
      a:b
      a:b
      a:b
      a
      b
      a
      b
      a:b
      a:b
      !! html/parsoid
      a
      b
      a:b
      a:b
      a:b
      a:b
      a
      b
      a:b
      a:b
      a:b
      !! end # Parsoid's output differs here again because it shares # nesting between the two lists unlike the PHP parser. # Unsure which is more desirable. !! test Definition Lists: colons and tables 1 !! wikitext :{| |x |} :{| |y |} !! html/php
      x
      y
      !! html/parsoid
      x
      y
      !! end # FIXME: Does this need a html/php section? !! test Definition Lists: template interaction !! wikitext ::{{definition_list}} :one ::{{definition_list}} :::two :::three ::four !! html/parsoid
      one
      two
      one
      one
      two
      two
      three
      four
      !! end ### ### External links ### !! test External links: non-bracketed !! wikitext Non-bracketed: http://example.com !! html

      Non-bracketed: http://example.com

      !! end # parsoid doesn't explicitly mark autonumbered links, see T55505 !! test External links: numbered !! wikitext Numbered: [http://example.com] Numbered: [http://example.net] Numbered: [http://example.com] !! html/php

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

      !! html/parsoid

      Numbered: Numbered: Numbered:

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

      Specified text: link

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

      Linktrails should not work for external links: links

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

      http://example.com/1$2345

      !! end # parsoid doesn't explicitly mark autonumbered links, see T55505 !! test External links: dollar sign in URL (autonumber) !! wikitext [http://example.com/1$2345] !! html/php

      [1]

      !! html/parsoid

      !!end !! test External links: open square bracket forbidden in URL (T6377) !! options parsoid=wt2html,wt2wt,html2html !! wikitext http://example.com/1[2345 !! html/php

      http://example.com/1[2345

      !! html/parsoid

      http://example.com/1[2345

      !! end !! test External links: open square bracket forbidden in URL (named) (T6377) !! options parsoid=wt2html,html2html !! wikitext [http://example.com/1[2345] !! html/php

      [2345

      !! html/parsoid

      [2345

      !!end # parsoid adds a space before the link name !! test External links: open square bracket forbidden in URL (named) (T6377) Parsoid variant. !! wikitext [http://example.com/1 [2345] !! html

      [2345

      !!end !! test External links: nowiki in URL link text (T8230) !! wikitext [http://example.com/ ''example site''] !! html

      ''example site''

      !! end !! test External links: newline forbidden in text (T8230 regression check) !! wikitext [http://example.com/ first second] !! html

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

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

      | link

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

      Test

      !! end # parsoid doesn't explicitly mark autonumbered links, see T55505 !! test External links: protocol-relative URL in brackets without text !! wikitext [//example.com] !! html/php

      [1]

      !! html/parsoid

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

      //example.com/Foo

      !!end !! test External links: protocol-relative URL in the middle of a word is left alone (T32269) !! wikitext foo//example.com/Foo !! html

      foo//example.com/Foo

      !! end ## html2wt and html2html will fail because we will prefer the :en: interwiki prefix over wikipedia: !! test External links: with no contents !! options parsoid=wt2html,wt2wt !! wikitext [http://en.wikipedia.org/wiki/Foo] [[wikipedia:Foo|Bar]] [[wikipedia:Foo|Bar]] !! html/php

      [1]

      Bar

      Bar

      !! html/parsoid

      Bar

      Bar

      !! end !! test External links: Free with trailing punctuation !! wikitext http://example.com, http://example.com; http://example.com\ http://example.com. http://example.com: http://example.com! http://example.com? http://example.com) http://example.com/url_with_(brackets) (http://example.com/url_without_brackets) http://example.com/url_with_entity& http://example.com/url_with_entity& http://example.com/url_with_entity& http://example.com/url_with_entity  http://example.com/url_with_entity  http://example.com/url_with_entity  http://example.com/url_with_entity< http://example.com/url_with_entity< http://example.com/url_with_entity< !! html/php

      http://example.com, http://example.com; http://example.com\ http://example.com. http://example.com: http://example.com! http://example.com? http://example.com) http://example.com/url_with_(brackets) (http://example.com/url_without_brackets) http://example.com/url_with_entity& http://example.com/url_with_entity& http://example.com/url_with_entity& http://example.com/url_with_entity  http://example.com/url_with_entity  http://example.com/url_with_entity  http://example.com/url_with_entity< http://example.com/url_with_entity< http://example.com/url_with_entity<

      !! html/parsoid

      http://example.com, http://example.com; http://example.com\ http://example.com. http://example.com: http://example.com! http://example.com? http://example.com) http://example.com/url_with_(brackets) (http://example.com/url_without_brackets) http://example.com/url_with_entity& http://example.com/url_with_entity& http://example.com/url_with_entity& http://example.com/url_with_entity  http://example.com/url_with_entity  http://example.com/url_with_entity  http://example.com/url_with_entity< http://example.com/url_with_entity< http://example.com/url_with_entity<

      !! end !! test External links: tricky Parsoid html2html case !! options parsoid=wt2html,wt2wt,html2html !! wikitext http://example.com/url_with_entity&amp; !! html/php

      http://example.com/url_with_entity&amp;

      !! html/parsoid

      http://example.com/url_with_entity&amp;

      !! end !! test External links: html2html with trailing dot (T263203) !! wikitext test [http://example.com/test. http://example.com/test.] test test http://example.com/test. test !! html/parsoid

      test http://example.com/test. test

      test http://example.com/test. test

      !! html/php

      test http://example.com/test. test

      test http://example.com/test. test

      !! end !! test External links: Free with trailing quotes (T113666) !! wikitext '''News:''' Stuff here news:'a'b''c''d e !! html/php

      News: Stuff here

      news:'a'bcd e

      !! html/parsoid

      News: Stuff here

      news:'a'bcd e

      !! end !! test External links: with entity !! wikitext [http:// www.librarieswithoutborders.org Libraries without borders] !! html/php

      Libraries without borders

      !! html/parsoid

      Libraries without borders

      !! end !! test External links: Lone protocols are never linked (T105697) !! wikitext http:// http://; (http://) bitcoin: bitcoin:; (bitcoin:) !! html

      http:// http://; (http://) bitcoin: bitcoin:; (bitcoin:)

      !! end !! test External links: No preceding word characters allowed (T67278) !! wikitext NOPEhttp://example.com N0http://example.com ok:http://example.com ok-http://example.com !! html

      NOPEhttp://example.com N0http://example.com ok:http://example.com ok-http://example.com

      !! end !! test External links: nofollow domain exception !! wikitext A [https://no-nofollow.org/foobar link], and another [https://example.org link]. !! html

      A link, and another link.

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

      External image: Ncwikicol.png

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

      External image from https: Ncwikicol.png

      !! end !! test External image (when not allowed) !! options wgAllowExternalImages=0 !! wikitext External image: http://meta.wikimedia.org/upload/f/f1/Ncwikicol.png !! html

      External image: http://meta.wikimedia.org/upload/f/f1/Ncwikicol.png

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

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

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

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

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

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

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

      Old bug with URL in query: link

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

      And again with mixed protocols: link

      !!end # Since Parsoid is starting to emit canonical wikitext for links, # [http://example.com http://example.com] will not RT back to that # form anymore. !! test External links: URL in text !! options parsoid=wt2html !! wikitext URL in text: [http://example.com http://example.com] !! html/php

      URL in text: http://example.com

      !! html/parsoid

      URL in text: http://example.com

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

      ja-style clickable images: Ncwikicol.png

      !! html/parsoid

      ja-style clickable images: Ncwikicol.png

      !! end !! test External links: raw ampersand !! wikitext Old & use: http://x&y !! html

      Old & use: http://x&y

      !! end !! test External links: encoded ampersand !! wikitext Old & use: http://x&y !! html/php

      Old & use: http://x&y

      !! html/parsoid

      Old & use: http://x&y

      !! end !! test External links: encoded equals (T8102) !! wikitext http://example.com/?foo=bar !! html/php

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

      !! html/parsoid

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

      !! end ## ## Note that parsoid doesn't explicit mark autonumbered links, nor ## does it number them. As discussed in T55505, we can identify ## autonumbered links via CSS. ## !! test External links: [raw ampersand] !! wikitext Old & use: [http://x&y] !! html/php

      Old & use: [1]

      !! html/parsoid

      Old & use:

      !! end # note that parsoid html is identical to [raw ampersand] case; so html2wt # mode will return the [raw ampersand] wikitext !! test External links: [encoded ampersand] !! options parsoid=wt2html,wt2wt,html2html !! wikitext Old & use: [http://x&y] !! html/php

      Old & use: [1]

      !! html/parsoid

      Old & use:

      !! end !! test External links: [raw equals] !! wikitext [http://example.com/?foo=bar] !! html/php

      [1]

      !! html/parsoid

      !! end # note that parsoid html is identical to [raw equals] case; so html2wt # mode will return the [raw equals] wikitext !! test External links: [encoded equals] (T8102) !! options parsoid=wt2html,wt2wt,html2html !! wikitext [http://example.com/?foo=bar] !! html/php

      [1]

      !! html/parsoid

      !! end # xxx parsoid strips the IDN character, so the round-trip tests will # obviously fail and are disabled. --cscott !! test External links: [IDN ignored character reference in hostname; strip it right off] !! options parsoid=wt2html,wt2wt,html2html !! wikitext [http://e‌xample.com/] !! html/php

      [1]

      !! html/parsoid

      !! 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. # xxx parsoid strips the IDN character, so the round-trip tests will # obviously fail and are disabled. --cscott !! test External links: IDN ignored character reference in hostname; strip it right off !! options parsoid=wt2html,html2html !! wikitext http://e‌xample.com/ !! html/php

      http://example.com/

      !! html/parsoid

      http://example.com/

      !! end !! test External links: www.jpeg.org (T2554) !! wikitext http://www.jpeg.org !! html

      http://www.jpeg.org

      !! end # parsoid doesn't explicitly mark autonumbered links, see T55505 !! test External links: URL within URL (T2002) !! wikitext [http://www.unausa.org/newindex.asp?place=http://www.unausa.org/programs/mun.asp] !! html/php

      [1]

      !! html/parsoid

      !! end !! test T2361: URL inside bracketed URL !! wikitext [http://www.example.com/foo http://www.example.com/bar] !! html

      http://www.example.com/bar

      !! end !! test T2361: URL within URL, not bracketed !! wikitext http://www.example.com/foo?=http://www.example.com/bar !! html

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

      !! end !! test T2289: ">"-token in URL-tail !! wikitext http://www.example.com/ !! html

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

      !!end !! test T2289: literal ">"-token in URL-tail !! wikitext http://www.example.com/html !! html/php

      http://www.example.com/html

      !! html/parsoid

      http://www.example.com/html

      !! end !! test T2289: ">"-token in bracketed URL !! wikitext [http://www.example.com/ stuff] !! html

      <hello> stuff

      !!end !! test T2289: literal ">"-token in bracketed URL !! wikitext [http://www.example.com/html stuff] !! html

      html stuff

      !!end !! test T2289: literal double quote at end of URL !! wikitext http://www.example.com/"hello" !! html

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

      !!end !! test T2289: literal double quote in bracketed URL !! wikitext [http://www.example.com/"hello" stuff] !! html

      "hello" stuff

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

      test

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

      a b c a b

      !! end # Note edge case difference between PHP and Parsoid here. !! test External links: wiki links within external link (T5695) !! options parsoid=wt2html !! wikitext [http://example.com [[wikilink]] embedded in ext link] [http://example.com test [[wikilink]] embedded in ext link] !! html/php

      wikilink embedded in ext link

      test wikilink embedded in ext link

      !! html/parsoid

      wikilink embedded in ext link

      test wikilink embedded in ext link

      !! end !! test T2787: Links with one slash after the url protocol are invalid !! wikitext http:/example.com [http:/example.com title] !! html

      http:/example.com

      [http:/example.com title]

      !! end !! test Bracketed external links with template-generated invalid target !! wikitext [{{1x|http:/example.com}} title] !! html

      [http:/example.com title]

      !! end # wt2html only because Parsoid would want to add s coming from html !! test Broken wikilinks (but not external links) prevent templates from closing !! options parsoid=wt2html !! wikitext [http://example.com x {{1x|[http://example.com x}} [[Foo {{1x|[[Foo}} !! html/php

      [http://example.com x

      [http://example.com x

      [[Foo

      {{1x|[[Foo}}

      !! html/parsoid

      [http://example.com x

      [http://example.com x

      [[Foo

      {{1x|[[Foo}}

      !! end !! test Wikilinks with embedded newlines are not broken !! wikitext {{1x|[[ Foo B C]]}} !! html/php

      [[ Foo B C]]

      !! html/parsoid

      [[ Foo B C]]

      !! end !! test Broken templates !! options parsoid=wt2html !! wikitext {{1x|[[Foo|}}]] [[Foo|{{1x|]]}} !! html/php

      {{1x|}}

      [[Foo|]]

      !! html/parsoid

      {{1x|}}

      [[Foo|]]

      !! end !! article Template:pipe page !! text Main|Page !! endarticle ## FIXME: Parsoid doesn't support this and may never. See T226523 !! test Template returning pipe used in wikilink target !! wikitext [[{{pipe page}}]] !! html/php

      Page

      !! html/parsoid

      [[Main|Page]]

      !! end # Italic/link nesting is changed in this test, but the rendered result is the # same. Currently the Parsoid result is actually an improvement over # the legacy parser output. !! test T4702: Mismatched , and tags are invalid !! wikitext ''[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'''''] !! html/php

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

      !! html/parsoid

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

      !! end !! test T6781: %26 in URL !! wikitext http://www.example.com/?title=AT%26T !! html/php

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

      !! html/parsoid

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

      !! end # According to https://www.w3.org/TR/2011/WD-html5-20110525/Overview.html#parsing-urls a plain # % is actually legal in HTML5. Any change in output would need testing though. !! test T6781, T7267: %25 in URL !! wikitext http://www.example.com/?title=100%25_Bran !! html/php

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

      !! html/parsoid

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

      !! end !! test T6781, T7267: %28, %29 in URL !! wikitext http://www.example.com/?title=Ben-Hur_%281959_film%29 !! html/php

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

      !! html/parsoid

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

      !! end !! test T6781: %26 in autonumber URL !! wikitext [http://www.example.com/?title=AT%26T] !! html/php

      [1]

      !! html/parsoid

      !! end !! test T6781, T7267: %26 in autonumber URL !! wikitext [http://www.example.com/?title=100%25_Bran] !! html/php

      [1]

      !! html/parsoid

      !! end !! test T6781, T7267: %28, %29 in autonumber URL !! wikitext [http://www.example.com/?title=Ben-Hur_%281959_film%29] !! html/php

      [1]

      !! html/parsoid

      !! end !! test T6781: %26 in bracketed URL !! wikitext [http://www.example.com/?title=AT%26T link] !! html/php

      link

      !! html/parsoid

      link

      !! end !! test T6781, T7267: %25 in bracketed URL !! wikitext [http://www.example.com/?title=100%25_Bran link] !! html

      link

      !! end !! test T6781, T7267: %28, %29 in bracketed URL !! wikitext [http://www.example.com/?title=Ben-Hur_%281959_film%29 link] !! html/php

      link

      !! html/parsoid

      link

      !! end !! test External link containing a period in the anchor. (T65947) !! wikitext [//foo.org/bar#baz. bang] [//foo.org/bar. bang] !! html/php

      bang

      bang

      !! html/parsoid

      bang

      bang

      !! end !! test External link containing a single quote. (T65947) !! wikitext [//foo.org/bar'baz] [//foo.org/bar'baz bang] !! html/php

      [1]

      bang

      !! html/parsoid

      bang

      !! end !! test External link containing double-single-quotes in text '' (T6598 check) !! wikitext Some [http://example.com/ pretty ''italics'' and stuff]! !! html

      Some pretty italics and stuff!

      !! end # Note different rendering by Parsoid here compared to the legacy parser. !! test External link containing double-single-quotes in text embedded in italics (T6598 check) !! wikitext ''Some [http://example.com/ pretty ''italics'' and stuff]!'' !! html/php

      Some pretty italics and stuff!

      !! html/parsoid

      Some pretty italics and stuff!

      !! end # Don't add the html/php section since the output is broken and there isn't any reason to spec it !! test External link containing double-single-quotes with no space separating the url from text in italics !! wikitext [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]].] !! html/php

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

      !! html/parsoid

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

      !! end !! test External link with comments in link text !! wikitext [http://www.google.com Google ] !! html/php

      Google

      !! html/parsoid

      Google

      !! end !! test External link to bare IPv4 address !! wikitext [http://192.168.0.1 Link] !! html/php

      Link

      !! html/parsoid

      Link

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

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

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

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

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

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

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

      !! html/parsoid

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

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

      !! end !! test IPv6 urls, autolink format (T23261) !! wikitext http://[2404:130:0:1000::187:2]/index.php Examples from RFC 2373, section 2.2: *http://[1080::8:800:200C:417A]/unicast *http://[FF01::101]/multicast *http://[::1]/loopback *http://[::]/unspecified *http://[::13.1.68.3]/ipv4compat *http://[::FFFF:129.144.52.38]/ipv4compat Examples from RFC 2732, section 2: *http://[FEDC:BA98:7654:3210:FEDC:BA98:7654:3210]:80/index.html *http://[1080:0:0:0:8:800:200C:417A]/index.html *http://[3ffe:2a00:100:7031::1] *http://[1080::8:800:200C:417A]/foo *http://[::192.9.5.5]/ipng *http://[::FFFF:129.144.52.38]:80/index.html *http://[2010:836B:4179::836B:4179] !! html/php

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

      Examples from RFC 2373, section 2.2:

      Examples from RFC 2732, section 2:

      !! html/parsoid

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

      Examples from RFC 2373, section 2.2:

      Examples from RFC 2732, section 2:

      !! end # It might make sense to change this behavior; see # See https://phabricator.wikimedia.org/T238022#5665580 !! test Unicode text around autolinks !! wikitext größhttps://foo.org größ https://foo.org 아들 고건 사진https://foo.org 💩https://foo.org !! html/php

      größhttps://foo.org

      größ https://foo.org

      아들 고건 사진https://foo.org

      💩https://foo.org

      !! html/parsoid

      größhttps://foo.org

      größ https://foo.org

      아들 고건 사진https://foo.org

      💩https://foo.org

      !! end !! test IPv6 urls, bracketed format (T23261) !! wikitext [http://[2404:130:0:1000::187:2]/index.php test] Examples from RFC 2373, section 2.2: *[http://[1080::8:800:200C:417A] unicast] *[http://[FF01::101] multicast] *[http://[::1]/ loopback] *[http://[::] unspecified] *[http://[::13.1.68.3] ipv4compat] *[http://[::FFFF:129.144.52.38] ipv4compat] Examples from RFC 2732, section 2: *[http://[FEDC:BA98:7654:3210:FEDC:BA98:7654:3210]:80/index.html 1] *[http://[1080:0:0:0:8:800:200C:417A]/index.html 2] *[http://[3ffe:2a00:100:7031::1] 3] *[http://[1080::8:800:200C:417A]/foo 4] *[http://[::192.9.5.5]/ipng 5] *[http://[::FFFF:129.144.52.38]:80/index.html 6] *[http://[2010:836B:4179::836B:4179] 7] !! html/php

      test

      Examples from RFC 2373, section 2.2:

      Examples from RFC 2732, section 2:

      !! html/parsoid

      test

      Examples from RFC 2373, section 2.2:

      Examples from RFC 2732, section 2:

      !! end !! test Non-extlinks in brackets !! wikitext [foo] [foo bar] [foo ''bar''] [fool's] errand [fool's errand] [{{1x|foo}}] [{{1x|foo}} bar] [{{1x|foo}} ''bar''] [{{1x|foo}}l's] errand [{{1x|foo}}l's errand] [url={{1x|foo}}] [url=http://example.com] [http:// bare protocols don't count] !! html/php

      [foo] [foo bar] [foo bar] [fool's] errand [fool's errand] [foo] [foo bar] [foo bar] [fool's] errand [fool's errand] [url=foo] [url=http://example.com] [http:// bare protocols don't count]

      !! html/parsoid

      [foo] [foo bar] [foo bar] [fool's] errand [fool's errand] [foo] [foo bar] [foo bar] [fool's] errand [fool's errand] [url=foo] [url=http://example.com] [http:// bare protocols don't count]

      !! end !! test Percent encoding in external links !! wikitext [https://github.com/search?l=&q=ResourceLoader+%40wikimedia Search] !! html/php

      Search

      !! html/parsoid

      Search

      !! end !! test Use url link syntax for links where the content is equal the link target !! wikitext http://example.com !! html/php

      http://example.com

      !! html/parsoid

      http://example.com

      !! end !! test Parenthesis in external links, especially URL links !! wikitext http://example.com) http://example.com/test) http://example.com/(test) http://example.com/((test) (http://example.com/(test)) (http://example.com/(test))))) http://example.com/a)b [http://example.com) foo] !! html/php

      http://example.com)

      http://example.com/test)

      http://example.com/(test)

      http://example.com/((test)

      (http://example.com/(test))

      (http://example.com/(test)))))

      http://example.com/a)b

      foo

      !! html/parsoid

      http://example.com)

      http://example.com/test)

      http://example.com/(test)

      http://example.com/((test)

      (http://example.com/(test))

      (http://example.com/(test)))))

      http://example.com/a)b

      foo

      !! end !! test Parenthesis in external links, w/ transclusion or comment !! wikitext (http://example.com/{{1x|hi}}) (http://example.com) !! html/php

      (http://example.com/hi)

      (http://example.com)

      !! html/parsoid

      (http://example.com/hi)

      (http://example.com)

      !! end !! test Serialize tags with invalid link targets as plain text !! options parsoid={ "modes": ["html2wt"], "suppressErrors": true } !! html/parsoid text *text [[foo]] *a [[foo]] !! wikitext text *text [[foo]] *a [[foo]] !! end !! test mw:ExtLink -vs- mw:WikiLink (T94723) !! options parsoid=html2wt !! html/parsoid Bar Bar Bar Bar

      European Robin European Robin

      !! wikitext [[Foo|Bar]] [[Foo|Bar]] [[:en:Foo|Bar]] [[:en:Foo|Bar]] [[:en:European_Robin|European Robin]] [[:en:European_Robin|European Robin]] !! end !! test mw:ExtLink linking to a interwiki URL can be round-tripped losslessly (T94723) !! options parsoid=wt2wt !! wikitext [http://en.wikipedia.org/wiki/European_Robin European Robin] !! html/parsoid THIS SECTION IS NOT USED (but Parsoid won't run the test without it) !! end ### ### Quotes ### !! test Quotes !! wikitext Normal text. '''Bold text.''' Normal text. ''Italic text.'' Normal text. '''''Bold italic text.''''' Normal text. !! html

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

      Normal text. Bold italic text. Normal text.

      !! end !! test Quotes wrapping HTML table !! wikitext '''
      hi
      ''' !! html/php
      hi
      !! html/parsoid
      hi
      !! end # Parsoid inserts an empty bold tag pair at the end of the line. # The wikitext contains just the first half of the bold # quote pair. !! test Unclosed and unmatched quotes !! wikitext '''''Bold italic text '''with bold deactivated''' in between.''''' '''''Bold italic text ''with italic deactivated'' in between.''''' '''Bold text.. ..spanning two paragraphs (should not work).''' '''Bold tag left open ''Italic tag left open Normal text. '''This year''''s election ''should'' beat '''last year''''s. ''Tom'''s car is bigger than ''Susan'''s. Plain ''italic'''s plain !! html/php

      Bold italic text with bold deactivated in between.

      Bold italic text with italic deactivated in between.

      Bold text..

      ..spanning two paragraphs (should not work).

      Bold tag left open

      Italic tag left open

      Normal text.

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

      Toms car is bigger than Susans.

      Plain italic's plain

      !! html/parsoid

      Bold italic text with bold deactivated in between.

      Bold italic text with italic deactivated in between.

      Bold text..

      ..spanning two paragraphs (should not work).

      Bold tag left open

      Italic tag left open

      Normal text.

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

      Toms car is bigger than Susans.

      Plain italic's plain

      !! end ### ### Tables ### ### some content taken from http://meta.wikimedia.org/wiki/MediaWiki_User%27s_Guide:_Using_tables ### # This should not produce
      as
      # is the bare minimum required by the spec, see: # https://www.w3.org/TR/xhtml-modularization/dtd_module_defs.html#a_module_Basic_Tables # Parsoid team replies: empty table tags are legal in HTML5 !! test A table with no data. !! options parsoid=wt2html !! wikitext {||} !! html/php !! html/parsoid
      !! end !! test A table with no data (take 2) !! wikitext {| |} !! html/php
      !! html/parsoid
      !! end !! test A table with no data generated by a markup !! wikitext
      !! html/php
      !! html/parsoid
      !! end # PHP has one more row in the output than Parsoid does: T208619 !! test Parsoid: Don't paragraph-wrap fosterable content even if table syntax is unbalanced !! options parsoid=wt2html !! wikitext {| |} !! html/php
      !! html/parsoid
      !! end !! test A table with stray table end tags on start tag line (wt2html) !! options parsoid=wt2html !! wikitext {|style="color: red;"|} {|style="color: red;" |} |foo |} {|style="color: red;"|} id="foo" |foo |} {|style="color: red;" |} id="foo" |foo |} !! html/php
      foo
      foo
      foo
      !! html/parsoid
      foo
      foo
      foo
      !! end # A table with nothing but a caption is invalid XHTML, we might want to render # this as

      caption

      # Parsoid team replies: table with only a caption is legal in HTML5 !! test A table with nothing but a caption !! wikitext {| |+caption |} !! html/php
      caption
      !! html/parsoid
      caption
      !! end !! test A table with caption with default-spaced attributes and a table row !! wikitext {| |+ style="color: red;" |caption1 |- |foo |} !! html
      caption1
      foo
      !! end !! test A table with captions with non-default spaced attributes and a table row !! wikitext {| |+style="color: red;"|caption2 |+ style="color: red;"|caption3 |- |foo |} !! html
      caption2 caption3
      foo
      !! end !! test Table td-cell syntax variations !! wikitext {| |foo bar foo|baz |foo bar foo||baz |style='color:red;'|baz |style='color:red;'||baz |} !! html
      baz foo bar foo baz baz style='color:red;' baz
      !! end !! test Simple table !! wikitext {| |1||2 |- |3||4 |} !! html
      1 2
      3 4
      !! end !! test Simple table but with multiple dashes for row wikitext !! wikitext {| |foo |----- |bar |} !! html
      foo
      bar
      !! end !! test Multiplication table !! wikitext {| border="1" cellpadding="2" |+Multiplication table |- !×!!1!!2!!3 |- !1 |1||2||3 |- !2 |2||4||6 |- !3 |3||6||9 |- !4 |4||8||12 |- !5 |5||10||15 |} !! html
      Multiplication table
      × 1 2 3
      1 1 2 3
      2 2 4 6
      3 3 6 9
      4 4 8 12
      5 5 10 15
      !! end !! test Accept "||" in table headings !! wikitext {| !h1||h2 |} !! html
      h1 h2
      !! end !! test Accept "!!" in table data !! wikitext {| |Foo!!|| |} !! html
      Foo!!
      !! html/parsoid
      Foo!!
      !! end !! test Accept "||" in indented table headings !! wikitext :{| !h1||h2 |} !! html
      h1 h2
      !! end !! test Accept "!!" in templates !! wikitext {| !a {{1x|b!!c}} |} !! html/php
      a b c
      !! html/parsoid
      a bc
      !! end !! test Accept "!!" in table headings after newline !! wikitext {| !a b!!c |} !! html/php
      a

      b!!c

      !! html/parsoid
      a

      b!!c

      !! end !! test Accept "!!" in table data of mixed wikitext / html syntax !! wikitext {| !a b!!c |} !! html/php
      a
      b!!c
      !! html/parsoid
      a
      b!!c
      !! end !! test Accept empty attributes in td/th cells (td/th cells starting with leading ||) !! wikitext {| !|h1 ||a |} !! html
      h1 a
      !! end !!test Accept "| !" at start of line in tables (ignore !-attribute) !! wikitext {| |- |!style="color:red"|bar |} !! html
      bar
      !!end !!test Allow +/- in 2nd and later cells in a row, in 1st cell when td-attrs are present, or in 1st cell when there is a space between "|" and +/- !! wikitext {| |- |style='color:red;'|+1 |style='color:blue;'|-1 |- |1||2||3 |1||+2||-3 |- | +1 | -1 |} !! html
      +1 -1
      1 2 3 1 +2 -3
      +1 -1
      !!end # Differences between Parsoid and PHP re: trailing whitespace in a # table cell. !! test Table rowspan !! wikitext {| 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 |} !! html/php
      Cell 1, row 1 Cell 2, row 1 (and 2) Cell 3, row 1
      Cell 1, row 2 Cell 3, row 2
      !! html/parsoid
      Cell 1, row 1 Cell 2, row 1 (and 2) Cell 3, row 1
      Cell 1, row 2 Cell 3, row 2
      !! end !! test Nested table !! wikitext {| border=1 | α | {| bgcolor=#ABCDEF border=2 |nested |- |table |} |the original table again |} !! html
      α
      nested
      table
      the original table again
      !! end !! test Invalid attributes in table cell (T3830) !! wikitext {| |Cell:|broken |} !! html
      broken
      !! end !! test Table cell attributes: Pipes protected by nowikis should be treated as a plain character !! wikitext {| |title="foo" |bar |title="foo|" |bar |title="foo|" bar |} !! html/php
      bar bar title="foo|" bar
      !! html/parsoid
      bar bar title="foo|" bar
      !! end !! test Table cell attributes: Pipes protected by nested nowikis should be treated as a plain character !! wikitext {| |{{ACB|PG}} |} !! html/php
      {{ACB|PG}}
      !! html/parsoid
      {{ACB|PG}}
      !! end # See: http://lists.wikimedia.org/mailman/htdig/wikitech-l/2006-April/022293.html # N.B. The "|}" to close the table is missing from the input, so parsoid's # *2wt modes will fail. !! test Table security: embedded pipes !! options parsoid=wt2html,html2html !! wikitext {| | |[ftp://|x||]" onmouseover="alert(document.cookie)">test !! html/php
      [ftp://%7Cx ]" onmouseover="alert(document.cookie)">test
      !! html/parsoid
      [ftp://%7Cx]" onmouseover="alert(document.cookie)">test
      !! end !! test Element attributes with double ! should not be broken up by !! wikitext {| !hi
      ha
      ho |} !! html/php
      hi
      ha
      ho
      !! html/parsoid
      hi
      ha
      ho
      !! end !! test ! and || in element attributes should not be parsed as / !! wikitext {| |
      hi
      |} !! html/php
      hi
      !! html/parsoid
      hi
      !! end # FIXME: The output seems broken. Filed as T110268. !! test ! and || in td attributes should not be parsed as / !! options parsoid=wt2html !! wikitext {| |style="color: red !important;" data-contrived="put this here ||"|foo |} !! html/php
      style="color: red !important;" data-contrived="put this here foo
      !! html/parsoid
      style="color: red !important;" data-contrived="put this herefoo
      !! end !! test Break on | in element attribute in template !! options parsoid=wt2html,html2html !! wikitext {{1x|1=
      ha
      }} !! html/php

      ho">ha

      !! html/parsoid

      ho">ha

      !! end !! test Break on | in element attribute name in template !! wikitext {{1x|
      ha
      }} !! html/parsoid

      <div cla

      !! end !! test Don't break on | in extension attribute in template !! wikitext {{1x|ha}} !! html/parsoid

      [1]

      1. ha
      !! end ## We don't support roundtripping of these attributes in Parsoid. ## Selective serialization takes care of preventing dirty diffs. ## But, on edits, we dirty-diff the invalid attribute text. !! test Invalid text in table attributes should be discarded !! options parsoid=wt2html !! wikitext {| boo style='border:1px solid black' | boo style='color:blue' |1 |boo style='color:blue'|2 |} !! html/php
      1 2
      !! html/parsoid
      1 2
      !! end !! test Invalid text in table attributes should be preserved by selective serializer !! options parsoid={ "modes": ["selser"], "changes": [ ["td:first-child", "text", "abc"], ["td + td", "text", "xyz"] ] } !! wikitext {| boo style='border:1px solid black' | boo style='color:blue' | 1 |boo style='color:blue'| 2 |} !! wikitext/edited {| boo style='border:1px solid black' | boo style='color:blue' | abc |boo style='color:blue'| xyz |} !! end !! test 1. Template-generated table cell attributes and cell content !! wikitext {| |{{table_attribs}} | {{table_attribs}} || {{table_attribs_5}} | {{table_attribs}} |align=center {{table_attribs}} | align=center {{table_attribs}} |} !! html
      Foo Foo style="color:red;" Bar Foo Foo Foo
      !! end !! test 2. Template-generated table cell attributes and cell content !! wikitext {| |{{table_attribs_2}} |} !! html/php
      Foo Bar Baz
      !! html/parsoid
      Foo BarBaz
      !! end !! test 3. Template-generated table cell attributes and cell content !! wikitext {| !align=center {{table_header_cells}} |- |align=center {{table_cells}} |} !! html/php
      Foo Bar Foo and Baz
      Foo Bar Foo and Baz
      !! html/parsoid
      FooBarFoo and Baz
      FooBarFoo and Baz
      !! end !! test 4. Template-generated table cell attributes and cell content inside a templated table !! wikitext {{tbl-start}} !align=center {{table_header_cells}} |- |align=center {{table_cells}} {{tbl-end}} !! html/php
      Foo Bar Foo and Baz
      Foo Bar Foo and Baz
      !! html/parsoid
      FooBarFoo and Baz
      FooBarFoo and Baz
      !! end ## Edge case fix to prevent future regressions !! test T107652: s in templates that also generate table cell attributes should be rendered properly !! wikitext {| |{{table_attribs_7}} |} !! html/parsoid
      Foo[1]
      1. foo
      !! end !! test Table with row followed by newlines and table heading !! options parsoid=wt2html,html2html !! wikitext {| |- !foo |} !! html/*
      foo
      !! end !! test Table with empty line following the start tag !! options parsoid=wt2html,html2html !! wikitext {| |- |foo |} !! html/*
      foo
      !! end !! test Table attributes with empty value !! options parsoid=wt2html,html2html !! wikitext {| | style=|hello |} !! html/php
      hello
      !! html/parsoid
      hello
      !! end !! test Wikitext table with a lot of comments !! wikitext {| |foo |- | |} !! html
      foo
      !! end !! test Wikitext table comments represented in parsoid dom !! wikitext {| |- |x |} !! html/php
      x
      !! html/parsoid
      x
      !! end !! test Wikitext table with double-line table cell !! wikitext {| |a b |} !! html
      a

      b

      !! end !! test Table cell with a single comment !! wikitext {| | |a |} !! html
      a
      !! end !! test Table-cell after a comment-only-empty-line !! wikitext {| |a |b |} !! html
      a b
      !! html/parsoid
      a b
      !! end !! test Build table with {{!}} !! wikitext {{{!}} class="wikitable" !header !second header {{!}}- style="color:red;" {{!}}data{{!}}{{!}} style="color:red;" {{!}}second data {{!}}} !! html
      header second header
      data second data
      !! end !! test Build table with pipe as data !! wikitext {| class="wikitable" !header !second header |- style="color:red;" |data|| style="color:red;" |second data |- | style="color:red;" |data with | || style="color:red;" | second data with | |- ||data with | |||second data with | |} !! html
      header second header
      data second data
      data with | second data with |
      data with | second data with |
      !! end !! test Build table with wikilink !! wikitext {| class="wikitable" !header||second header |- style="color:red;" |data [[Main Page|linktext]]||second data [[Main Page|linktext]] |- |data||second data [[Main Page|link|text with pipe]] |} !! html
      header second header
      data linktext second data linktext
      data second data link|text with pipe
      !! 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 !! wikitext {| |- foo |} !! html/parsoid
      foo
      !! end ## Remex doesn't account for fostered content. !! test Fostered content in tables: Plain text !! options parsoid=wt2html !! wikitext {| |- a |} !! html/php a
      !! html/parsoid

      a

      !! end # selser tests are needed below as a regression test for T233815 # they also demonstrate DSR errors in fostered content (T254412) !! test Fostered content in tables: Lists !! options parsoid={ "modes": ["wt2html","selser"], "suppressErrors": true } !! wikitext {| |- *a *b |} !! html/php
      • a
      • b
      !! html/parsoid
      • a
      • b
      !! end !! test Template generated table cell with attributes !! wikitext {| |- {{table_attribs_4}} ||a||b |} !! html/php
      a b
      !! html/parsoid
      ab
      !! end !! test Templated table cell with untemplated attributes: Common use cases !! wikitext {| |- !class="test"{{table_cell_content}} /* th & td combine */ |- |class="test"{{table_cell_content}} /* td & td combine */ | |class="test"{{table_cell_content|attr=style='color:red;'}} | |class="test"{{table_cell_content|cmt=}} |} !! html/php
      foo /* th & td combine */
      foo /* td & td combine */ foo foo
      !! html/parsoid
      foo /* th & td combine */
      foo /* td & td combine */ foo foo
      !! end !! test Templated table cell with untemplated attributes: Regression tests !! wikitext {| |class="foo" {{1x|1={{!}}bar}} |} !! html/php
      class="foo" bar
      !! html/parsoid
      class="foo" bar
      !! end !! test Templated table cell with untemplated attributes: Unsupported Scenarios !! options parsoid=wt2html !! wikitext {| |- |class="foo"{{1x|1= {{!}}bar}} |- |class="foo"{{1x|1= {{!}}bar}} |- |class="foo"{{1x|1={{!}}title="fail"{{!}}bar}} |} !! html/php
      bar
      bar
      title="fail"|bar
      !! html/parsoid This test fails each of the three table cell scenarios for different reasons. For now, we are deliberately not support these use cases in Parsoid unless required or we find a simpler solution that covers everything uniformly. !! end !! test Parsoid: Round-trip tables directly followed by content (T53219) !! options parsoid=wt2html,wt2wt !! wikitext {| |foo |} bar {| |baz |}quux !! html/php
      foo

      bar

      baz

      quux

      !! html/parsoid
      foo

      bar

      baz

      quux

      !! end !! test Parsoid: Default to a newline after tables in new content (T53219) !! options parsoid=html2wt !! html/parsoid
      foo
      bar
      baz
      quux !! wikitext {| |foo |} bar {| |baz |} '''quux''' !! end !! test Parsoid: Row-syntax table headings followed by comment & table cells !! options parsoid=wt2html,wt2wt !! wikitext {| !foo||bar ||baz||quux |} !! html/php
      foo bar baz quux
      !! html/parsoid
      foobar baz quux
      !! end !!test Parsoid: Recover better from broken table attributes !!options parsoid=wt2html !!wikitext {| class="foo | class="bar" | foo |} !!html/php

      foo

      !!html/parsoid

      foo

      !!end # Note: PHP parser omits empty rows !! test Tables: Digest broken attributes on table and tr tag !! options parsoid=wt2html !! wikitext {| || |} ++ |- || || ++ -- |- > [ |} !! html/php
      !! html/parsoid
      !! end !! test Table with missing opening tag !! options parsoid=wt2html,wt2wt !! wikitext
      foo
      !! html
      foo
      !! end # T137406: Whitespace in the HTML !! test 1. Generate correct wikitext for tables with thead/tbody/tfoot !! options parsoid=html2wt !! html/parsoid
      Test
      Month Savings
      January $100
      February $80
      Sum $180
      !! wikitext {| |+Test !Month !Savings |- |January |$100 |- |February |$80 |- |Sum |$180 |} !! html/php
      Test
      Month Savings
      January $100
      February $80
      Sum $180
      !! end # T137406: No whitespace in the HTML !! test 2. Generate correct wikitext for tables with thead/tbody/tfoot !! options parsoid=html2wt !! html/parsoid
      heading
      foo
      !! wikitext {| !heading |- |foo |} !! end !! test Wikitext tables can be nested inside HTML tables !! options parsoid=html2wt !! html/parsoid
      foo
      !! wikitext
      {| |foo |}
      !! html/php
      foo
      !! end ### ### Internal links ### !! test Plain link, capitalized !! wikitext [[Main Page]] !! html

      Main Page

      !! end !! test Plain link, uncapitalized !! wikitext [[main Page]] !! html

      main Page

      !! end !! test Piped link !! wikitext [[Main Page|The Main Page]] !! html

      The Main Page

      !! end !! test Piped link with comment in link text !! wikitext [[Main Page|The Main Page]] !! html

      The Main Page

      !! end !! test Piped link with multiple pipe characters in link text !! wikitext [[Main Page||The|Main|Page|]] !! html/php

      |The|Main|Page|

      !! html/parsoid

      |The|Main|Page|

      !! end !! test Piped link with no link text !! wikitext [[Thomas Bek (bishop of St David's)|]] !! html/php

      [[Thomas Bek (bishop of St David's)|]]

      !! html/parsoid

      [[Thomas Bek (bishop of St David's)|]]

      !! end !! test Piped link with empty link text !! wikitext [[Main Page|]] - empty nowiki [[Main Page| ]] - empty non breaking space !! html/php

      - empty nowiki   - empty non breaking space

      !! html/parsoid

      - empty nowiki   - empty non breaking space

      !! end ## Separate from the above because Parsoid normalizes the empty link away !! test Piped link with empty link text - 2 !! options parsoid=wt2html !! wikitext [[Main Page| ]] - empty space !! html/php

      - empty space

      !! html/parsoid

      - empty space

      !! end !! test Broken link !! wikitext [[Zigzagzogzagzig]] !! html

      Zigzagzogzagzig

      !! end # The PHP parser strips the hash fragment for non-existent pages, but # Parsoid does not. (T227693) !! test Broken link with fragment !! wikitext [[Zigzagzogzagzig#zug]] !! html/php

      Zigzagzogzagzig#zug

      !! html/parsoid

      Zigzagzogzagzig#zug

      !! end !! test Special page link with fragment !! wikitext [[Special:Version#anchor]] !! html

      Special:Version#anchor

      !! end # Parsoid does not strip fragment from red links: T227693 !! test Nonexistent special page link with fragment !! wikitext [[Special:ThisNameWillHopefullyNeverBeUsed#anchor]] !! html/php

      Special:ThisNameWillHopefullyNeverBeUsed#anchor

      !! html/parsoid

      Special:ThisNameWillHopefullyNeverBeUsed#anchor

      !! end !! test Link with prefix !! wikitext xxx[[main Page]], xxx[[Main Page]], Xxx[[main Page]] XXX[[main Page]], XXX[[Main Page]] !! html

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

      !! end !! test Link with suffix !! wikitext [[Main Page]]xxx, [[Main Page]]XXX, [[Main Page]]!!! !! html

      Main Pagexxx, Main PageXXX, Main Page!!!

      !! end !! article prefixed article !! text Some text !! endarticle !! test T45661: Piped links with identical prefixes !! wikitext [[prefixed article|prefixed articles with spaces]] [[prefixed article|prefixed articlesaoeu]] [[Main Page|Main Page test]] !! html

      prefixed articles with spaces

      prefixed articlesaoeu

      Main Page test

      !! end !! test Link with HTML entity in suffix / tail !! wikitext [[Main Page]]", [[Main Page]]a !! html/php

      Main Page", Main Pagea

      !! html/parsoid

      Main Page", Main Pagea

      !! end !! test Link with 3 brackets !! wikitext [[[Main Page]]] Foo [[[Main Page]]] !! html

      [[[Main Page]]] Foo [[[Main Page]]]

      !! end !! test Link with 4 brackets !! wikitext [[[[Main Page]]]] !! html

      [[Main Page]]

      !! end !! test Piped link with 3 brackets !! wikitext [[[main page|the main page]]] !! html

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

      !! end !! test Piped link with extlink-like text !! wikitext [[Main Page|[bar]]] [[Main Page|This is a [bar]]] [[Main Page|[bar]] !! html/php

      [bar] This is a [bar] [bar

      !! html/parsoid

      [bar] This is a [bar] [bar

      !! end !! test Link with multiple pipes !! wikitext [[Main Page|The|Main|Page]] !! html

      The|Main|Page

      !! end !! test Anchor containing a #. (T65430) !! config wgFragmentMode=[ 'html5', 'legacy' ] !! wikitext [[Main Page#And#Link]] !! html/php

      Main Page#And#Link

      !! html/parsoid

      Main Page#And#Link

      !! end !! test Link to namespaces !! wikitext [[Talk:Parser testing]], [[Meta:Disclaimers]] !! html

      Talk:Parser testing, Meta:Disclaimers

      !! end !! test Link with space in namespace !! wikitext [[User talk:Foo bar]] !! html

      User talk:Foo bar

      !! end !! article MemoryAlpha:AlphaTest !! text This is an article in the MemoryAlpha namespace (which shadows the memoryalpha interwiki link). !! endarticle !! test Namespace takes precedence over interwiki link (T53680) !! wikitext [[MemoryAlpha:AlphaTest]] !! html

      MemoryAlpha:AlphaTest

      !! end # The previous test doesn't work correctly in html2*, due to not recognizing the # link as an internal one. This one checks for the correct behavior. !! test Link to namespace preferred over interwiki with correct rel attribute !! options parsoid=html2wt,html2html !! html/parsoid

      MemoryAlpha:AlphaTest

      !! wikitext [[MemoryAlpha:AlphaTest]] !! end !! test Piped link to namespace !! wikitext [[Meta:Disclaimers|The disclaimers]] !! html

      The disclaimers

      !! end !! test Link containing } !! wikitext [[Usually caused by a typo (oops}]] !! html

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

      !! end !! article 7% Solution !! text Just a test of an article title containing a percent. !! endarticle !! test Link containing % (not as a hex sequence) !! wikitext [[7% Solution]] [[7% Solution|7%25 Solution]] !! html/php

      7% Solution 7%25 Solution

      !! html/parsoid

      7% Solution 7%25 Solution

      !! end # note that the parsoid HTML is identical to the previous test output, # so the previous test ensures that the html2wt mode will generate the # "not as a hex sequence" wikitext. !! test Link containing % as a single hex sequence interpreted to char !! options parsoid=wt2wt,wt2html,html2html !! wikitext [[7%25 Solution]] [[7%25 Solution|7%25 Solution]] !! html/php

      7% Solution 7%25 Solution

      !! html/parsoid

      7% Solution 7%25 Solution

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

      [[7%2525 Solution]]

      !!end ## Example for such a section: == < == !! test Link containing "#<" and "#>" % as a hex sequences- these are valid section anchors !! options title=[[Main Page]] !! config wgFragmentMode=[ 'html5', 'legacy' ] !! wikitext [[%23%3c]][[%23%3e]] !! html/php

      #<#>

      !! html/parsoid

      #<#>

      !! end ## Example for such a section: == < == !! test Link containing "#<" and "#>" % as a hex sequences- these are valid section anchors (legacy) !! config wgFragmentMode=[ 'legacy' ] !! wikitext [[%23%3c]][[%23%3e]] !! html/php

      #<#>

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

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

      !! end !! test Link containing an equals sign !! wikitext [[Special:BookSources/isbn=4-00-026157-6]] !! html/php

      Special:BookSources/isbn=4-00-026157-6

      !! html/parsoid

      Special:BookSources/isbn=4-00-026157-6

      !! end !! article Foo & bar !! text Just a test of an article title containing an ampersand !! endarticle !! test Link containing an ampersand !! wikitext [[Foo & bar]] [[Foo & bar]] [[Foo &amp; bar]] !! html/php

      Foo & bar

      Foo & bar

      [[Foo &amp; bar]]

      !! html/parsoid

      Foo & bar

      Foo & bar

      [[Foo &amp; bar]]

      !! 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 !! wikitext [[Foo~bar]] !! html/php

      Foo~bar

      !! html/parsoid

      Foo~bar

      !! end !! test Link containing double-single-quotes '' (T6598) !! wikitext [[Lista d''e paise d''o munno]] !! html/php

      Lista d''e paise d''o munno

      !! html/parsoid

      Lista d''e paise d''o munno

      !! end !! test Link containing double quotes and spaces !! wikitext [[Cool "Gator"]] !! html/php

      Cool "Gator"

      !! html/parsoid

      Cool "Gator"

      !! end !! test Redirect containing double quotes and spaces !! wikitext #REDIRECT [[Cool "Gator"]] !! html/parsoid !! end !! test Link containing double-single-quotes '' in text (T6598 check) !! wikitext Some [[Link|pretty ''italics'' and stuff]]! !! html/php

      Some pretty italics and stuff!

      !! html/parsoid

      Some pretty italics and stuff!

      !! end !! test Link containing double-single-quotes '' in text embedded in italics (T6598 check) !! wikitext ''Some [[Link|pretty ''italics'' and stuff]]!'' !! html

      Some pretty italics and stuff!

      !! end ## FIXME: Title part of filename is interpreted in php !! test Link with double quotes in title part (literal) and alternate part (interpreted) !! config wgParserEnableLegacyMediaDOM=false !! wikitext [[File:Denys_Savchenko_''Pentecoste''.jpg]] [[''Pentecoste'']] [[''Pentecoste''|Pentecoste]] [[''Pentecoste''|''Pentecoste'']] !! html/php

      File:Denys Savchenko Pentecoste.jpg

      ''Pentecoste''

      Pentecoste

      Pentecoste

      !! html/parsoid

      File:Denys Savchenko ''Pentecoste''.jpg

      ''Pentecoste''

      Pentecoste

      Pentecoste

      !! end !! test Plain link to URL !! wikitext [[http://www.example.com]] !! html/php

      [[1]]

      !! html/parsoid

      []

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

      [Link text]

      !! end !! test Plain link to URL containing special characters, with link text (see T213950). !! wikitext [[http://www.example.com/?q=%7Babc%7D Link text]] !! html

      [Link text]

      !! end !! test Plain link to protocol-relative URL !! wikitext [[//www.example.com]] !! html/php

      [[1]]

      !! html/parsoid

      []

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

      [Link text]

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

      A?b

      Baz

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

      Piped link to URL: an example URL #

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

      Piped link to URL: [example URL]

      !! html/parsoid

      Piped link to URL: [example URL]

      !! end !! test Nested wikilink syntax in wikilink syntax that parses as wikilink in extlink !! options parsoid=wt2html !! wikitext [[http://example.com|[[Example]]]] !! html/php

      [Example]

      !! html/parsoid

      [Example]

      !! end !! test Plain link in template argument !! options parsoid=wt2html !! wikitext {{1x|[http://www.example.com |123]}} {{1x|[[http://www.example.com |123]]}} {{1x|[[http://www.example.com |123]}} {{1x|[http://www.example.com |123]]}} !! html/php

      [http://www.example.com

      [|123]

      {{1x|[|123}}

      [http://www.example.com

      !! html/parsoid

      [http://www.example.com

      [|123]

      {{1x|[|123}}

      [http://www.example.com

      !! end !! test T2002: [[page|http://url/]] should link to page, not http://url/ !! wikitext [[Main Page|http://url/]] !! html/php

      http://url/

      !! html/parsoid

      http://url/

      !! end # Parsoid does not mark self-links, by design. !! test T2337: Escaped self-links should be bold !! options title=[[Bug462]] !! wikitext [[Bug462]] [[Bug462]] !! html/php

      Bug462 Bug462

      !! html/parsoid

      Bug462 Bug462

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

      Main Page#section

      !! end !! article 00 !! text This is 00. !! endarticle !!test Self-link to numeric title !!options title=[[0]] !! wikitext [[0]] !! html/php

      0

      !! html/parsoid

      0

      !!end !!test Link to numeric-equivalent title !!options title=[[0]] !! wikitext [[00]] !! html

      00

      !!end !! test inside a link !! wikitext [[Main Page]] [[Main Page|the main page [it's not very good]]] !! html/php

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

      !! html/parsoid

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

      !! end ## Parsoid doesn't get this right and even fails wt2html because, when doing the ## normalization for comparison, the html serialization / re-parse doesn't ## roundtrip. This is T49963 !! test
       inside a link
      !! wikitext
      [[Main
       Page
      ]] [[Main Page|the main page
      [it's not very good]
      ]] !! html/php

      [[Main

       Page

      ]] the main page

      [it's not very good]
      !! html/parsoid

      [[Main

       Page

      ]] the main page

      [it's not very good]

      !! end !! test Non-breaking spaces in title !! wikitext [[  Main   Page  ]] !! html

        Main   Page  

      !!end # Add new article for the test below so that it doesn't red-link !! article Foo bar baz !! text boo !! endarticle !! test Multiple spaces in titles should normalize to a single underscore !! options parsoid=wt2html,wt2wt !! wikitext [[Foo bar baz|x]] [[Foo bar baz|x]] [[Foo bar baz|x]] !! html/php

      x x x

      !! html/parsoid

      x x x

      !! end !! test Internal link with ca linktrail, surrounded by bold apostrophes (T29473 primary issue) !! options language=ca !! wikitext '''[[Main Page]]''' !! html

      Main Page

      !! end !! test Internal link with ca linktrail, surrounded by italic apostrophes (T29473 primary issue) !! options language=ca !! wikitext ''[[Main Page]]'' !! html

      Main Page

      !! end !! test Internal link with en linktrail: no apostrophes (T29473) !! options language=en !! wikitext [[Something]]'nice !! html

      Something'nice

      !! end !! test Internal link with ca linktrail with apostrophes (T29473) !! options language=ca !! wikitext [[Something]]'nice !! html

      Something'nice

      !! end !! test Internal link with kaa linktrail with apostrophes (T29473) !! options language=kaa !! wikitext [[Something]]'nice !! html

      Something'nice

      !! end !! test Link with multiple ":" in a subpage-supporting namespace (T65636) !! wikitext [[User:Foo/Test/63636:Bar|Test]] !! html/php

      Test

      !! html/parsoid

      Test

      !! end ## Mainly a check for Parsoid !! test Handle title parsing for subpages !! options title=[[/123123]] subpage !! wikitext 123 !! html/php

      123

      !! html/parsoid

      123

      !! end !! article User:Test/123 !! text test 123 !! endarticle !! test Link to a subpage from a namespace other than main !! options title=[[User:Test]] subpage !! wikitext [[/123]] !! html/php

      /123

      !! html/parsoid

      /123

      !! end !! test Ensure that transclusion titles are not url-decoded !! options subpage title=[[Test]] parsoid=wt2html !! wikitext {{Bar%C3%A9}} {{/Bar%C3%A9}} !! html/php

      {{Bar%C3%A9}} {{/Bar%C3%A9}}

      !! html/parsoid

      {{Bar%C3%A9}} {{/Bar%C3%A9}}

      !! end !! test Purely hash wikilink !! options title=[[User:Test/123]] subpage !! wikitext [[#a|b]] !! html/php

      b

      !! html/parsoid

      b

      !! end !! test Serialization of purely hash wikilink !! options title=[[User:Test/123]] subpage parsoid=html2wt !! html/parsoid

      [[

      !! wikitext [[#a|[[]] !! html/php

      [[

      !! end !! test 1. Interaction of linktrail and template encapsulation !! wikitext {{1x|[[Foo]]}}l {{1x|[[Foo]]l}} {{1x|[[Foo]]l}}s {{1x|[[Foo]]ls}} [[{{1x|Foo}}]]l !! html/php

      Fool

      Fool

      Fools

      Fools

      Fool

      !! html/parsoid

      Fool

      Fool

      Fools

      Fools

      Fool

      !! end !! test 2. Interaction of linktrail and template encapsulation !! wikitext {{1x|Some [[Fool]]}}s !! html/php

      Some Fools

      !! html/parsoid

      Some Fools

      !! end !! test 3. Interaction of linktrail and template encapsulation !! wikitext {{1x|Some [[Fool]]s are '''bold and foolish'''}} !! html/php

      Some Fools are bold and foolish

      !! html/parsoid

      Some Fools are bold and foolish

      !! end !! article Söfnuður !! text Test. !! endarticle !! test Internal link with is link prefix !! options language=is !! wikitext Aðrir mótmælenda[[söfnuður|söfnuðir]] og {{1x|mótmælenda[[söfnuður|söfnuðir]]}} mótmæ{{1x|lenda[[söfnuður|söfnuðir]]}} !! html/php

      Aðrir mótmælendasöfnuðir og mótmælendasöfnuðir mótmælendasöfnuðir

      !! html/parsoid

      Aðrir mótmælendasöfnuðir og mótmælendasöfnuðir mótmælendasöfnuðir

      !! end !! article Mótmælendatrú !! text Test. !! endarticle !! test Internal link with is link trail and link prefix !! options language=is !! wikitext [[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 !! html

      xxxar mótmælendatrúar mótmælendasöfnuður mótmælendasöfnuðir mótmælendasöfnuðirxxx

      !! end !! test Parsoid link trail escaping !! options parsoid=html2wt,html2html !! html/parsoid

      apples

      !! wikitext [[apple]]s !! end !! test Parsoid link prefix escaping !! options language=is parsoid=html2wt,html2html !! html/parsoid

      Aðrir mótmælendasöfnuður

      !! wikitext Aðrir mótmælenda[[söfnuður]] !! end !! test Parsoid link bracket escaping !! options parsoid=html2wt,html2html !! html/parsoid

      Test

      [Test]

      [[Test]]

      [[[Test]]]

      [[[[Test]]]]

      [[[[[Test]]]]]

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

      bar

      bar

      foo

      foo

      !! end !! test Parsoid: Scoped parsing should handle mixed transclusions and plain text !! wikitext [[Foo|{{1x|a}} b {{1x|c}}]] !! html/parsoid

      a b c

      !! end !! test Link with angle bracket after anchor !! config wgFragmentMode=[ 'html5', 'legacy' ] !! wikitext [[Foo#]] !! html/php

      Foo#<bar>

      !! html/parsoid

      Foo#<bar>

      !! end !! test Link with angle bracket after anchor (legacy) !! config wgFragmentMode=[ 'legacy' ] !! wikitext [[Foo#]] !! html/php

      Foo#<bar>

      !! end !! test Wikilink in wikilink !! wikitext [[Hi|[[Ho]]]] !! html/php

      [[Hi|Ho]]

      !! html/parsoid

      [[Hi|Ho]]

      !! end ### ### Interwiki links (see maintenance/interwiki.sql) ### !! test Inline interwiki link !! options parsoid=wt2html,wt2wt,html2html !! wikitext [[MeatBall:SoftSecurity]] !! html/php

      MeatBall:SoftSecurity

      !! html/parsoid

      MeatBall:SoftSecurity

      !! end !! test Inline interwiki link with empty title (T4372) !! options parsoid=wt2html,wt2wt,html2html !! wikitext [[MeatBall:]] !! html/php

      MeatBall:

      !! html/parsoid

      MeatBall:

      !! end ## html2wt and html2html will fail because we will prefer the :en: interwiki prefix over wikipedia: !! test Interwiki link encoding conversion (T3636) !! options parsoid=wt2html,wt2wt !! wikitext *[[Wikipedia:ro:Olteniţa]] *[[Wikipedia:ro:Olteniţa]] !! html/php !! html/parsoid !! end !! test Interwiki link with fragment (T4130) !! wikitext [[MeatBall:SoftSecurity#foo]] !! html

      MeatBall:SoftSecurity#foo

      !! end ## The interwiki case here continued to be legacy escaped because of the ## default setting of $wgExternalInterwikiFragmentMode !! test Link scenarios with escaped fragments !! options title=[[Main Page]] !! config wgFragmentMode=[ 'html5', 'legacy' ] !! wikitext [[#Is this great?]] [[Foo#Is this great?]] [[meatball:Foo#Is this great?]] !! html/php

      #Is this great? Foo#Is this great? meatball:Foo#Is this great?

      !! html/parsoid

      #Is this great? Foo#Is this great? meatball:Foo#Is this great?

      !! end !! test Link scenarios with escaped fragments (legacy) !! config wgFragmentMode=[ 'legacy' ] !! wikitext [[#Is this great?]] [[Foo#Is this great?]] [[meatball:Foo#Is this great?]] !! html/php

      #Is this great? Foo#Is this great? meatball:Foo#Is this great?

      !! end # Ideally the wikipedia: prefix here should be proto-relative too # [CSA]: this is kind of a bogus test, as the PHP parser test doesn't # define the 'en' prefix, and originally the test used 'wikipedia', # which isn't a localinterwiki prefix hence the links to the 'en:Foo' # article. !! test Different interwiki prefixes mapping to the same URL !! wikitext [[:en:Foo]] [[:en:Foo|Foo]] [[wikipedia:Foo]] [[:wikipedia:Foo|Foo]] [[wikipedia:en:Foo]] [[:wikipedia:en:Foo]] [[ wikiPEdia :Foo]] !! html/parsoid

      en:Foo

      Foo

      wikipedia:Foo

      Foo

      wikipedia:en:Foo

      wikipedia:en:Foo

      wikiPEdia :Foo

      !! end !! test Interwiki links that cannot be represented in wiki syntax !! wikitext [[meatball:ok]] [[meatball:ok#foo|ok with fragment]] [[meatball:ok_as_well?|ok ending with ? mark]] [http://de.wikipedia.org/wiki/Foo?action=history has query] [http://de.wikipedia.org/wiki/#foo is just fragment] !! html/php

      meatball:ok ok with fragment ok ending with ? mark has query is just fragment

      !! html/parsoid

      meatball:ok ok with fragment ok ending with ? mark has query is just fragment

      !! end !! test Interwiki links: trail !! wikitext [[wikipedia:Foo|Ba]]r !! html/php

      Bar

      !! html/parsoid

      Bar

      !! end !! test Local interwiki link !! options parsoid=wt2html,wt2wt,html2html !! wikitext [[local:Template:Foo]] !! html/php

      local:Template:Foo

      !! html/parsoid

      local:Template:Foo

      !! end # Parsoid does not mark self-links, by design. !! test Local interwiki link: self-link to current page !! options title=[[Main Page]] parsoid=wt2html,wt2wt,html2html !! wikitext [[local:Main Page]] !! html/php

      local:Main Page

      !! html/parsoid

      local:Main Page

      !! end !! test Local interwiki link: prefix only (T66167) !! options parsoid=wt2html,wt2wt,html2html !! wikitext [[local:]] !! html/php

      local:

      !! html/parsoid

      local:

      !! end !! test Local interwiki link: with additional interwiki prefix (T63357) !! options parsoid=wt2html,wt2wt,html2html !! wikitext [[local:meatball:Hello]] !! html/php

      local:meatball:Hello

      !! html/parsoid

      local:meatball:Hello

      !! end !! test Multiple local interwiki link prefixes !! wikitext [[local:local:local:local:mi:local:Foo]] !! options parsoid=wt2html,wt2wt,html2html !! html/php

      local:local:local:local:mi:local:Foo

      !! html/parsoid

      local:local:local:local:mi:local:Foo

      !! end !! test Interwiki link that could be a language link, if not for a local interwiki prefix (T292022) !! options parsoid=html2wt !! html/php

      local:es:Hello

      !! html/parsoid

      local:es:Hello

      !! wikitext [[:es:Hello|local:es:Hello]] !! end !! test Internal link with a namespace matching a local interwiki prefix (T228616) !! options parsoid=html2wt !! html/php

      Project:Hello

      !! html/parsoid

      Project:Hello

      !! wikitext [[Project:Hello]] !! end !! test Interwiki link with percent encoded target !! wikitext [[:es:Nueva Guip%C3%BAzcoa|Nueva Guipúzcoa]] !! html/php

      Nueva Guipúzcoa

      !! html/parsoid

      Nueva Guipúzcoa

      !! end ### ### Interlanguage links ### Language links (so that searching for '### language' matches..) ### !! test Interlanguage link !! wikitext Blah blah blah [[zh:Chinese]] !! html/php

      Blah blah blah

      !! html/parsoid

      Blah blah blah

      !! end ## parsoid html2wt will lose the space variations !! test Interlanguage link with spacing !! options parsoid=wt2html,wt2wt,html2html !! wikitext Blah blah blah [[ zh : Chinese ]] !! html/php

      Blah blah blah

      !! html/parsoid

      Blah blah blah

      !! end !! test Double interlanguage link !! wikitext Blah blah blah [[es:Spanish]] [[zh:Chinese]] !! html/php

      Blah blah blah

      !! html/parsoid

      Blah blah blah

      !! end ## parsoid html2wt will lose the space variations !! test Interlanguage link variations !! options parsoid=wt2html,wt2wt,html2html !! wikitext Blah blah blah [[ es :Spanish]] [[ ZH :Chinese]] [[es:Foo_bar]] !! html/php

      Blah blah blah

      !! html/parsoid

      Blah blah blah

      !! end !! test Escaping of interlanguage links (T129218, T156308) !! wikitext Blah blah blah [[:es:Spanish]] [[ : zh : Chinese ]] !! html/php

      Blah blah blah es:Spanish zh : Chinese

      !! html/parsoid

      Blah blah blah es:Spanish zh : Chinese

      !! end !! test Multiple colons escaping interlanguage links !! options parsoid=wt2html !! wikitext [[:es:Spanish]] [[::es:Spanish]] [[:::es:Spanish]] !! html/php

      es:Spanish [[::es:Spanish]] [[:::es:Spanish]]

      !! html/parsoid

      es:Spanish [[::es:Spanish]] [[:::es:Spanish]]

      !! end ## parsoid html2wt will normalize the space to _ !! test Space and question mark encoding in interlanguage links (T95473) !! options parsoid=wt2html,wt2wt,html2html !! wikitext Blah blah blah [[es:Foo bar?]] !! html/php

      Blah blah blah

      !! html/parsoid

      Blah blah blah

      !! end !! test Interlanguage link, with prefix links !! options language=ln !! wikitext Blah blah blah [[zh:Chinese]] !! html/php

      Blah blah blah

      !! html/parsoid

      Blah blah blah

      !! end !! test Double interlanguage link, with prefix links (T10897) !! options language=ln !! wikitext Blah blah blah [[es:Spanish]] [[zh:Chinese]] !! html/php

      Blah blah blah

      !! html/parsoid

      Blah blah blah

      !! end !! test "Extra" interlanguage links (T34189 / gerrit 111390) !! wikitext Blah blah blah [[mul:Article]] !! html/php

      Blah blah blah

      !! html/parsoid

      Blah blah blah

      !! end ## PHP parser tests script needs an update ## Parsoid html2wt will normalize output to [[:zh:Chinese]] !! test Language links render as inline links if $wgInterwikiMagic=false !! options wgInterwikiMagic=false parsoid=wt2html,wt2wt,html2html !! wikitext Blah blah blah [[zh:Chinese]] !! html/parsoid

      Blah blah blah zh:Chinese

      !! end ## PHP parser tests script needs an update ## Parsoid html2wt will normalize output to [[:zh:Chinese]] !! test Language links render as inline links in the Talk namespace !! options title=Talk:Foo parsoid=wt2html,wt2wt,html2html !! wikitext Blah blah blah [[zh:Chinese]] !! html/parsoid

      Blah blah blah zh:Chinese

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

      WW II

      !! end !! test Parsoid T55221: Wikilinks should be properly entity-escaped !! options parsoid={ "modes": ["html2wt"], "suppressErrors": true } !! html/parsoid

      He&nbsp;llo He&nbsp;llo

      He&nbsp;llo He&nbsp;llo

      !! wikitext He&nbsp;llo [[Foo|He&nbsp;llo]] He&nbsp;llo He&nbsp;llo !! html/php

      He&nbsp;llo He&nbsp;llo

      He&nbsp;llo He&nbsp;llo

      !! end # html2wt will fail because of title normalization without data-parsoid !! test Parsoid: handle constructor well !! options parsoid=wt2html,wt2wt !! wikitext [[constructor]] [[constructor:foo]] !! html/php

      constructor

      constructor:foo

      !! html/parsoid

      constructor

      constructor:foo

      !! end !! test Template parameter named "constructor" !! wikitext {{1x| constructor = |hi}} !! html/parsoid

      hi

      !! end !! article ko: !! text Test. !! endarticle # Note that `ko` isn't a known interlanguage prefix !! test Parsoid: recognize interlanguage links without a target page !! options ill !! wikitext [[es:]] [[ko:]] !! html/php es: !! html/parsoid

      ko:

      !! end # Note that `ko` isn't a known interwiki prefix !! test Parsoid: recognize interwiki links without a target page !! options parsoid=wt2html,wt2wt,html2html !! wikitext [[:es:]] [[:ko:]] !! html/php

      es:

      ko:

      !! html/parsoid

      es:

      ko:

      !! end !! test Handle interwiki links pointing to the current wiki as plain wiki links (T47209) !! wikitext [[mi:Foo]] !! html/php

      mi:Foo

      !! html/parsoid

      mi:Foo

      !! end !! test Interlanguage link with preceding local interwiki link (T70085) !! options parsoid=wt2html,wt2wt,html2html !! wikitext Blah blah blah [[local:es:Spanish]] !! html/php

      Blah blah blah local:es:Spanish

      !! html/parsoid

      Blah blah blah local:es:Spanish

      !! end !! test Looks like an interlanguage link, but is actually a local interwiki !! options parsoid=wt2html,wt2wt,html2html !! wikitext Blah blah blah [[mi:Template:Foo]] !! html/php

      Blah blah blah mi:Template:Foo

      !! html/parsoid

      Blah blah blah mi:Template:Foo

      !! end ### ### Redirects, Parsoid-only ### !! test 1. Simple redirect to page !! wikitext #REDIRECT [[Main Page]] !! html/parsoid !! end !! test 2. Other redirect variants !! wikitext #REDIRECT [[Main_Page]] !! html/parsoid !! end # Not a valid redirect in PHP (although perhaps it was, once upon a time) # This tests the Parsoid bail-out code. !! test 3. Other redirect variants !! options parsoid=wt2html !! wikitext #REDIRECT [[[[Bar]]]] !! html/parsoid
      1. REDIRECT [[[[Bar]]]]
      !! end !! test 4. Redirect to a templated destination !! wikitext #REDIRECT [[{{1x|Foo}}bar]] !! html/parsoid !! end !! test Empty redirect !! options parsoid=wt2html,wt2wt !! wikitext #REDIRECT [[]] !! html/parsoid
      1. REDIRECT [[]]
      !! end !! test Optional colon in #REDIRECT !! options # the colon is archaic syntax. we support it for wt2html, but we # don't care that it roundtrips back to the modern syntax. parsoid=wt2html,html2html !! wikitext #REDIRECT:[[Main Page]] !! html/parsoid !! end !! test Whitespace in #REDIRECT with optional colon !! options # the colon and gratuitous whitespace is archaic syntax. we support # it for wt2html, but we don't care that it roundtrips back to the # modern syntax (without extra whitespace) parsoid=wt2html,html2html !! wikitext #REDIRECT : [[Main Page]] !! html/parsoid !! end !! test Piped link in #REDIRECT !! options # content after piped link is ignored. we support this syntax, # but don't care that the piped link is lost when we roundtrip this. parsoid=wt2html !! wikitext #REDIRECT [[Main Page|bar]] !! html/parsoid !! end !! test Redirect to category (T104502) !! options parsoid=wt2html,wt2wt !! wikitext #REDIRECT [[Category:Foo]] !! html/parsoid !! end !! test Redirect to category with URL encoding (T104502) !! options parsoid=wt2html !! wikitext #REDIRECT [[Category%3AFoo]] !! html/parsoid !! end !! test Redirect to category page !! wikitext #REDIRECT [[:Category:Foo]] !! html/parsoid !! end !! test Redirect to image page (1) !! wikitext #REDIRECT [[File:Wiki.png]] !! html/parsoid !! end !! test Redirect to image page (2) !! wikitext #REDIRECT [[Image:Wiki.png]] !! html/parsoid !! end # html2wt disabled because wts serializes as "#REDIRECT [[:en:File:Wiki.png]]" # Next test confirms this. !! test Redirect to language (1) (T104918) !! options parsoid=wt2html,wt2wt,html2html !! wikitext #REDIRECT [[en:File:Wiki.png]] !! html/parsoid !! end !! test Redirect to language (2) (T104918) !! wikitext #REDIRECT [[:en:File:Wiki.png]] !! html/parsoid !! end !! test Redirect to interwiki (T104918) !! wikitext #REDIRECT [[meatball:File:Wiki.png]] !! html/parsoid !! end !! test Non-English #REDIRECT !! options language=is !! wikitext #TILVÍSUN [[Main Page]] !! html/parsoid !! end !! test Redirect syntax under text isn't considered a redirect !! wikitext some text #redirect [[Main Page]] !! html/parsoid

      some text

      1. redirect Main Page
      !! end !! test New redirect !! options parsoid=html2wt !! html/parsoid

      Foo

      !! wikitext #REDIRECT [[Foo]] Foo !! end !! test Redirect followed by block on the same line !! options parsoid=wt2html !! wikitext #REDIRECT [[Main Page]]==hi== !! html/parsoid

      hi

      !! end !! test Redirect followed by a newline !! wikitext #REDIRECT [[Main Page]] A newline !! html/parsoid

      A newline

      !! end !! test Redirect followed by multiple newlines !! wikitext #REDIRECT [[Main Page]] A newline !! html/parsoid


      A newline

      !! end !! test Drop duplicate redirects !! options parsoid=html2wt !! html/parsoid !! wikitext #REDIRECT [[Foo]] !! end ## ## XHTML tidiness ### !! test
      to
      !! wikitext 1
      2
      3 !! html

      1
      2
      3

      !! end !! test Broken br tag sanitization !! options parsoid=wt2html,html2html !! wikitext
      !! html/php


      !! html/parsoid


      !! end # TODO: Fix html2html mode (T53055)! !! test Parsoid: Broken br tag recognition !! options parsoid=wt2html !! wikitext

      !! html



      !! end !! test Incorrecly removing closing slashes from correctly formed XHTML !! wikitext
      !! html


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


      !! html




      !!end ## Parsoid's behavior w/ self-closing HTML tags is now a bug; ## see T134423. Legacy Parser now implements proper HTML5 semantics. !! test Handling html with a div self-closing tag !! wikitext
      !! html
      !! end !! test Elements with solidus in various attribute positions !! options parsoid=wt2html,html2html !! wikitext
      ha
      ha
      ha
      !! html/php
      ha
      ha
      ha
      !! html/parsoid
      ha
      ha
      ha
      !! end !! test Handling html with a br self-closing tag !! wikitext





      !! html/php







      !! html/parsoid







      !! end !! test Quoted attributes without spaces !! options parsoid=wt2html !! wikitext
      red
      !! html/php
      red
      !! html/parsoid
      red
      !! end !! test Horizontal ruler (should it add that extra space?) !! wikitext

      foo
      bar !! html/php

      foo


      bar

      !! html/parsoid

      foo


      bar

      !! end !! test Horizontal ruler -- 4+ dashes render hr !! wikitext ---- !! html
      !! end !! test Horizontal ruler -- eats additional dashes on the same line !! wikitext --------- !! html
      !! end !! test Horizontal ruler -- does not collapse dashes on consecutive lines !! wikitext ---- ---- !! html

      !! end !! test Horizontal ruler -- <4 dashes render as plain text !! wikitext --- !! html

      ---

      !! end !! test Horizontal ruler -- Supports content following dashes on same line !! wikitext ---- Foo !! html/php

      Foo

      !! html/parsoid

      Foo

      !! end ### ### Block-level elements ### !! test Common list !! wikitext *Common list *item 2 *item 3 !! html
      • Common list
      • item 2
      • item 3
      !! end !! test Numbered list !! wikitext #Numbered list #item 2 #item 3 !! html
      1. Numbered list
      2. item 2
      3. item 3
      !! end # the switch from level 3 to ordered should not introduce a newline between !! test Mixed list !! wikitext *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 !! html
      • Mixed list
        1. with numbers
        • and bullets
        1. and numbers
      • bullets again
        • bullet level 2
          • bullet level 3
            1. Number on level 4
        • bullet level 2
          1. Number on level 3
          2. Number on level 3
        1. number level 2
      • Level 1
          • Level 3
          • Level 3, but ordered
      !! end !! test 1. Nested mixed wikitext and html list !! wikitext *hi *
      • ho
      *hi **ho !! html/php
      • hi
        • ho
      • hi
        • ho
      !! html/parsoid
      • hi
        • ho
      • hi
        • ho
      !! end !! test 2. Nested mixed wikitext and html list (incompatible) !! wikitext ;hi :{{1x|
    • ho
    • }} !! html/php
      hi
    • ho
    • !! html/parsoid
      hi
    • ho
    • !! end !! test Nested lists 1 !! wikitext *foo **bar !! html
      • foo
        • bar
      !! end !! test Nested lists 2 !! wikitext **foo *bar !! html
        • foo
      • bar
      !! end !! test Nested lists 3 (first element empty) !! wikitext * **bar !! html
        • bar
      !! end !! test Nested lists 4 (first element empty) !! wikitext ** *bar !! html
      • bar
      !! end !! test Nested lists 5 (both elements empty) !! wikitext ** * !! html
      !! end !! test Nested lists 6 (both elements empty) !! wikitext * ** !! html
      !! end !! test Nested lists 7 (skip initial nesting levels) !! wikitext ***foo !! html
          • foo
      !! end !! test Nested lists 8 (multiple nesting transitions) !! wikitext *foo ***bar **baz *boo !! html
      • foo
          • bar
        • baz
      • boo
      !! end # XXX this test should be moved to citeParserTests, since it depends # on the Cite extension, which is "built in" to Parsoid. !! test Nested lists 9 (extension interaction) !! wikitext * !! html/php-DISABLED
      !! html/parsoid
        !! end !! test Nested lists 10 (list and span siblings: wt2wt regression) !! wikitext *a x **b y !! html/parsoid
        • a x
          • b y
        !! end !! test Nested lists 11 (T262409: trailing whitespace & selser) !! options parsoid={ "modes": ["wt2html","selser"], "changes": [ [ "ul > li > ul > li > ul > li", "after", "
      • b-new
      • " ] ] } !! wikitext **a ***b !! html/parsoid
          • a
            • b
        !! wikitext/edited **a ***b *** b-new !! end !! test 1. Lists and block-element interaction !! options parsoid=wt2html,selser !! wikitext *
        a *b
        ಕ !! html/php
        • a
        • b

        !! html/parsoid
        • a
        • b

        !! end !! test 2. Lists and block-element interaction !! options parsoid=wt2html,selser !! wikitext *{{1x|
        a *b }}
        ಕ !! html/php
        • a
        • b

        !! html/parsoid
        • a
        • b

        !! end !! test 1. Lists with start-of-line-transparent tokens before bullets: Comments !! wikitext *foo *bar *baz !! html
        • foo
        • bar
        • baz
        !! html/parsoid
        • foo
        • bar
        • baz
        !! end # Parsoid handles this case differently from the legacy parser, as a side # effect of handling SOL state in the tokenizer. !! test 2. Lists with start-of-line-transparent tokens before bullets: Template close !! wikitext *foo {{1x|bar }}*baz !! html/php
        • foo bar
        • baz
        !! html/parsoid
        • foo bar
        • baz
        !! end !! test List items are not parsed correctly following a
         block (T2785)
        !! wikitext
        *
        foo
        *
        bar
        *zar !! html/php
        • foo
        • bar
        • zar
        !! html/parsoid
        • foo
        • bar
        • zar
        !! end # FIXME: Might benefit from a html/parsoid since this has a template !! test List items from template !! wikitext {{inner list}} *item 2 *item 0 {{inner list}} *item 2 *item 0 *notSOL{{inner list}} *item 2 !! html
        • item 1
        • item 2
        • item 0
        • item 1
        • item 2
        • item 0
        • notSOL
        • item 1
        • item 2
        !! end !! test List interrupted by empty line or heading !! wikitext *foo **bar ==A heading== *Another list item !! html
        • foo
          • bar

        A heading[edit]

        • Another list item
        !!end !! test Multiple list tags generated by templates !! wikitext {{1x|
      • }}a {{1x|
      • }}b {{1x|
      • }}c !! html/php
      • a
      • b
      • c
      • !! html/parsoid
      • a
      • b
      • c
      • !! end !! test Multiple newlines in between HTML list items don't induce paragraph wrapping !! wikitext
        • hi
        • ho
        hi
        ho
        123
        !! html/php
        • hi
        • ho
        hi
        ho
        123
        !! end !!test Single-comment whitespace lines dont break lists, and neither do multi-comment whitespace lines !! wikitext *a *b *c *d !! html
        • a
        • b
        • c
        • d
        !!end !!test Replacing whitespace with tabs still doesn't break the list (gerrit 78327) !! wikitext *a *b *c *d !! html
        • a
        • b
        • c
        • d
        !!end ## FIXME: This test could possibly be renamed / simplified since this is ## no longer a hack and works as expected without any special handling. !!test Test the li-hack (a hack from Tidy days, but doesn't work as advertised with Remex) !!options parsoid=wt2html,wt2wt !! wikitext *foo *
      • li-hack **bar1 *{{1x|
      • templated li-hack}} **bar2 *
      • unsupported li-hack with preceding comments
        • not a li-hack
        !! html/php
        • foo
        • li-hack
          • bar1
        • templated li-hack
          • bar2
        • unsupported li-hack with preceding comments
        • not a li-hack
        !! html/parsoid
        • foo
        • li-hack
          • bar1
        • templated li-hack
          • bar2
        • unsupported li-hack with preceding comments
        • not a li-hack
        !! end !! test Parsoid: Make sure nested lists are serialized on their own line even if HTML contains no newlines !! wikitext #foo ##bar *foo **bar :foo ::bar !! html/php
        1. foo
          1. bar
        • foo
          • bar
        foo
        bar
        !! html/parsoid
        1. foo
          1. bar
        • foo
          • bar
        foo
        bar
        !! end !! test Parsoid: Test of whitespace serialization with Templated bullets !! options parsoid=wt2html !! wikitext * {{bullet}} !! html/parsoid
        • Bar
        !! 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 !! wikitext
        *a
        *b
        !! html/php
        • a
      • b
      • !! html/parsoid
        • a
        • b
        !! end ## We call this "wikitext block" because we're diverging a bit from the HTML5 ## parsing spec. Remex output is because it doesn't need to generate the ## implied end tag for the list item when encountering the closing

        but ## Parsoid's broader definition opts to. This can happen for a number of other ## tags but those aren't allowed literal tags in wikitext. There's also the ## opposite problem, where the wikitext blocks aren't a superset of the tags ## that generate implied ends in HTML5, but the missing ones again aren't ## allowed literal tags in wikitext. !! test Unbalanced closing wikitext block tags break a list !! wikitext

        *a

        *b

        !! html/php

        • a

        • b

        !! html/parsoid

        • a

        • b

        !! end !! test Unbalanced closing non-block tags don't break a list !! options parsoid=wt2html,html2html !! wikitext *a *b !! html/php

        • a
        • b
        !! html/parsoid

        • a
        • b
        !! end # Parsoid does some post-dom-building cleanup # which is why its output differs from Remex. !! test Unclosed formatting tags that straddle lists are closed and reopened !! options parsoid=wt2html,wt2wt,html2html !! wikitext # a #b !! html/php
        1. a
        2. b
        !! html/parsoid
        1. a
        2. b
        !! end # Output is ugly because of all the misnested tag fixups. !! test 1. List embedded in a formatting tag !! wikitext *foo !! html/php

        • foo

        !! html/parsoid

        • foo

        !! end # Output is ugly because of all the misnested tag fixups. !! test 2. List embedded in a formatting tag in a misnested way !! wikitext *a *b !! html/php

        • a
        • b
        !! html/parsoid

        • a
        • b
        !! end # Output is ugly because of all the misnested tag fixups. !! test 3. List embedded in a formatting tag in a misnested way !! wikitext ** 123 !! html/php

          • 123
        !! html/parsoid

          • 123
        !! end ### ### Magic Words ### # Note that the current date is hard-coded as # 1970-01-01T00:02:03Z (a Thursday) # when running parser tests. The timezone is also fixed to GMT, so # local date will be identical to current date. !! test Magic Word: {{CURRENTDAY}} !! wikitext {{CURRENTDAY}} !! html

        1

        !! end !! test Magic Word: {{CURRENTDAY2}} !! wikitext {{CURRENTDAY2}} !! html

        01

        !! end !! test Magic Word: {{CURRENTDAYNAME}} !! wikitext {{CURRENTDAYNAME}} !! html

        Thursday

        !! end !! test Magic Word: {{CURRENTDOW}} !! wikitext {{CURRENTDOW}} !! html

        4

        !! end !! test Magic Word: {{CURRENTMONTH}} !! wikitext {{CURRENTMONTH}} !! html

        01

        !! end !! test Magic Word: {{CURRENTMONTH1}} !! wikitext {{CURRENTMONTH1}} !! html

        1

        !! end !! test Magic Word: {{CURRENTMONTHABBREV}} !! wikitext {{CURRENTMONTHABBREV}} !! html

        Jan

        !! end !! test Magic Word: {{CURRENTMONTHNAME}} !! wikitext {{CURRENTMONTHNAME}} !! html

        January

        !! end !! test Magic Word: {{CURRENTMONTHNAMEGEN}} !! wikitext {{CURRENTMONTHNAMEGEN}} !! html

        January

        !! end !! test Magic Word: {{CURRENTTIME}} !! wikitext {{CURRENTTIME}} !! html

        00:02

        !! end !! test Magic Word: {{CURRENTHOUR}} !! wikitext {{CURRENTHOUR}} !! html

        00

        !! end !! test Magic Word: {{CURRENTWEEK}} (T6594) !! wikitext {{CURRENTWEEK}} !! html

        1

        !! end !! test Magic Word: {{CURRENTYEAR}} !! wikitext {{CURRENTYEAR}} !! html

        1970

        !! end !! test Magic Word: {{CURRENTTIMESTAMP}} !! wikitext {{CURRENTTIMESTAMP}} !! html

        19700101000203

        !! end !! test Magic Words LOCAL (UTC) !! wikitext *{{LOCALMONTH}} *{{LOCALMONTH1}} *{{LOCALMONTHNAME}} *{{LOCALMONTHNAMEGEN}} *{{LOCALMONTHABBREV}} *{{LOCALDAY}} *{{LOCALDAY2}} *{{LOCALDAYNAME}} *{{LOCALYEAR}} *{{LOCALTIME}} *{{LOCALHOUR}} *{{LOCALWEEK}} *{{LOCALDOW}} *{{LOCALTIMESTAMP}} !! html
        • 01
        • 1
        • January
        • January
        • Jan
        • 1
        • 01
        • Thursday
        • 1970
        • 00:02
        • 00
        • 1
        • 4
        • 19700101000203
        !! end !! test Magic Word: {{FULLPAGENAME}} !! options title=[[User:Ævar Arnfjörð Bjarmason]] parsoid={ "modes": ["wt2html","wt2wt"], "normalizePhp": true } !! wikitext {{FULLPAGENAME}} !! html/*

        User:Ævar Arnfjörð Bjarmason

        !! end !! test Magic Word: {{FULLPAGENAMEE}} !! options title=[[User:Ævar Arnfjörð Bjarmason]] parsoid={ "modes": ["wt2html","wt2wt"], "normalizePhp": true } !! wikitext {{FULLPAGENAMEE}} !! html/*

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

        !! end !! test Magic Word: {{TALKSPACE}} !! options title=[[User:Ævar Arnfjörð Bjarmason]] parsoid={ "modes": ["wt2html","wt2wt"], "normalizePhp": true } !! wikitext {{TALKSPACE}} !! html/*

        User talk

        !! end !! test Magic Word: {{TALKSPACE}}, same namespace !! options title=[[User talk:Ævar Arnfjörð Bjarmason]] parsoid={ "modes": ["wt2html","wt2wt"], "normalizePhp": true } !! wikitext {{TALKSPACE}} !! html/*

        User talk

        !! end !! test Magic Word: {{TALKSPACE}}, main namespace !! options title=[[Parser Test]] parsoid={ "modes": ["wt2html","wt2wt"], "normalizePhp": true } !! wikitext {{TALKSPACE}} !! html/*

        Talk

        !! end !! test Magic Word: {{TALKSPACEE}} !! options title=[[User:Ævar Arnfjörð Bjarmason]] parsoid={ "modes": ["wt2html","wt2wt"], "normalizePhp": true } !! wikitext {{TALKSPACEE}} !! html/*

        User_talk

        !! end !! test Magic Word: {{SUBJECTSPACE}} !! options title=[[User talk:Ævar Arnfjörð Bjarmason]] parsoid={ "modes": ["wt2html","wt2wt"], "normalizePhp": true } !! wikitext {{SUBJECTSPACE}} !! html/*

        User

        !! end !! test Magic Word: {{SUBJECTSPACE}}, same namespace !! options title=[[User:Ævar Arnfjörð Bjarmason]] parsoid={ "modes": ["wt2html","wt2wt"], "normalizePhp": true } !! wikitext {{SUBJECTSPACE}} !! html/*

        User

        !! end !! test Magic Word: {{SUBJECTSPACE}}, main namespace !! options title=[[Parser Test]] parsoid={ "modes": ["wt2html","wt2wt"], "normalizePhp": true } !! wikitext {{SUBJECTSPACE}} !! html/* !! end !! test Magic Word: {{SUBJECTSPACEE}} !! options title=[[User talk:Ævar Arnfjörð Bjarmason]] parsoid={ "modes": ["wt2html","wt2wt"], "normalizePhp": true } !! wikitext {{SUBJECTSPACEE}} !! html/*

        User

        !! end !! test Magic Word: {{NAMESPACE}} !! options title=[[User:Ævar Arnfjörð Bjarmason]] parsoid={ "modes": ["wt2html","wt2wt"], "normalizePhp": true } !! wikitext {{NAMESPACE}} !! html/*

        User

        !! end !! test Magic Word: {{NAMESPACEE}} !! options title=[[User:Ævar Arnfjörð Bjarmason]] parsoid={ "modes": ["wt2html","wt2wt"], "normalizePhp": true } !! wikitext {{NAMESPACEE}} !! html/*

        User

        !! end !! test Magic Word: {{NAMESPACENUMBER}} !! options title=[[User:Ævar Arnfjörð Bjarmason]] parsoid={ "modes": ["wt2html","wt2wt"], "normalizePhp": true } !! wikitext {{NAMESPACENUMBER}} !! html/*

        2

        !! end !! test Magic Word: {{SUBPAGENAME}} !! options title=[[Ævar Arnfjörð Bjarmason/sub ö]] subpage parsoid={ "modes": ["wt2html","wt2wt"], "normalizePhp": true } !! wikitext {{SUBPAGENAME}} !! html/*

        sub ö

        !! end !! test Magic Word: {{SUBPAGENAMEE}} !! options title=[[Ævar Arnfjörð Bjarmason/sub ö]] subpage parsoid={ "modes": ["wt2html","wt2wt"], "normalizePhp": true } !! wikitext {{SUBPAGENAMEE}} !! html/*

        sub_%C3%B6

        !! end !! test Magic Word: {{ROOTPAGENAME}} !! options title=[[Ævar Arnfjörð Bjarmason/sub/sub2]] subpage parsoid={ "modes": ["wt2html","wt2wt"], "normalizePhp": true } !! wikitext {{ROOTPAGENAME}} !! html/*

        Ævar Arnfjörð Bjarmason

        !! end !! test Magic Word: {{ROOTPAGENAMEE}} !! options title=[[Ævar Arnfjörð Bjarmason/sub/sub2]] subpage parsoid={ "modes": ["wt2html","wt2wt"], "normalizePhp": true } !! wikitext {{ROOTPAGENAMEE}} !! html/*

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

        !! end !! test Magic Word: {{BASEPAGENAME}} !! options title=[[Ævar Arnfjörð Bjarmason/sub]] subpage parsoid={ "modes": ["wt2html","wt2wt"], "normalizePhp": true } !! wikitext {{BASEPAGENAME}} !! html/*

        Ævar Arnfjörð Bjarmason

        !! end !! test Magic Word: {{BASEPAGENAMEE}} !! options title=[[Ævar Arnfjörð Bjarmason/sub]] subpage parsoid={ "modes": ["wt2html","wt2wt"], "normalizePhp": true } !! wikitext {{BASEPAGENAMEE}} !! html/*

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

        !! end !! test Magic Word: {{TALKPAGENAME}} !! options title=[[User:Ævar Arnfjörð Bjarmason]] parsoid={ "modes": ["wt2html","wt2wt"], "normalizePhp": true } !! wikitext {{TALKPAGENAME}} !! html/*

        User talk:Ævar Arnfjörð Bjarmason

        !! end !! test Magic Word: {{TALKPAGENAMEE}} !! options title=[[User:Ævar Arnfjörð Bjarmason]] parsoid={ "modes": ["wt2html","wt2wt"], "normalizePhp": true } !! wikitext {{TALKPAGENAMEE}} !! html/*

        User_talk:%C3%86var_Arnfj%C3%B6r%C3%B0_Bjarmason

        !! end !! test Magic Word: {{SUBJECTPAGENAME}} !! options title=[[User talk:Ævar Arnfjörð Bjarmason]] parsoid={ "modes": ["wt2html","wt2wt"], "normalizePhp": true } !! wikitext {{SUBJECTPAGENAME}} !! html/*

        User:Ævar Arnfjörð Bjarmason

        !! end !! test Magic Word: {{SUBJECTPAGENAMEE}} !! options title=[[User talk:Ævar Arnfjörð Bjarmason]] parsoid={ "modes": ["wt2html","wt2wt"], "normalizePhp": true } !! wikitext {{SUBJECTPAGENAMEE}} !! html/*

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

        !! end !! test Magic Word: {{NUMBEROFFILES}} !! options parsoid={ "modes": ["wt2html","wt2wt"], "normalizePhp": true } !! wikitext {{NUMBEROFFILES}} !! html/*

        7

        !! end !! test Magic Word: {{PAGENAME}} !! options title=[[User:Ævar Arnfjörð Bjarmason]] parsoid={ "modes": ["wt2html","wt2wt"], "normalizePhp": true } !! wikitext {{PAGENAME}} !! html/*

        Ævar Arnfjörð Bjarmason

        !! end !! test Magic Word: {{PAGENAME}} with metacharacters !! options title=[['foo & bar = baz']] parsoid={ "modes": ["wt2html","wt2wt"], "normalizePhp": true } !! wikitext ''{{PAGENAME}}'' !! html

        'foo & bar = baz'

        !! end !! test Magic Word: {{PAGENAME}} with metacharacters (T28781) !! options title=[[*RFC 1234 http://example.com/]] parsoid={ "modes": ["wt2html","wt2wt"], "normalizePhp": true } !! wikitext {{PAGENAME}} !! html

        *RFC 1234 http://example.com/

        !! end !! test Magic Word: {{PAGENAMEE}} !! options title=[[User:Ævar Arnfjörð Bjarmason]] parsoid={ "modes": ["wt2html","wt2wt"], "normalizePhp": true } !! wikitext {{PAGENAMEE}} !! html/*

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

        !! end !! test Magic Word: {{PAGENAMEE}} with metacharacters (T28781) !! options title=[[*RFC 1234 http://example.com/]] parsoid={ "modes": ["wt2html","wt2wt"], "normalizePhp": true } !! wikitext {{PAGENAMEE}} !! html

        *RFC_1234_http://example.com/

        !! end !! test Magic Word: {{REVISIONID}} on latest revision !! options lastsavedrevision parsoid={ "modes": ["wt2html","wt2wt"], "normalizePhp": true } showflags !! wikitext {{REVISIONID}} !! html/*

        1337

        flags=vary-revision-id !! end !! test Magic Word: {{REVISIONID}} on non-latest revision !! options parsoid={ "modes": ["wt2html","wt2wt"], "normalizePhp": true } showflags !! wikitext {{REVISIONID}} !! html/*

        1337

        flags=vary-revision-id !! end !! test Magic Word: {{REVISIONTIMESTAMP}} on latest revision !! options lastsavedrevision parsoid={ "modes": ["wt2html","wt2wt"], "normalizePhp": true } showflags !! wikitext {{REVISIONTIMESTAMP}} !! html/*

        19700101000203

        flags= !! end !! test Magic Word: {{REVISIONTIMESTAMP}} on non-existing page !! options parsoid={ "modes": ["wt2html","wt2wt"], "normalizePhp": true } showflags !! wikitext {{REVISIONTIMESTAMP}} !! html/*

        123

        flags=vary-revision-timestamp !! end !! test Magic Word: {{REVISIONUSER}} on latest revision !! options lastsavedrevision parsoid={ "modes": ["wt2html","wt2wt"], "normalizePhp": true } showflags !! wikitext {{REVISIONUSER}} !! html/*

        127.0.0.1

        flags=vary-user !! end !! test Parser Function: {{REVISIONID:{{PAGENAME}}}} on latest revision !! options lastsavedrevision parsoid={ "modes": ["wt2html","wt2wt"], "normalizePhp": true } showflags !! wikitext {{REVISIONID:{{PAGENAME}}}} !! html/*

        1337

        flags=vary-revision-id !! end !! test Parser Function: {{REVISIONID:{{PAGENAME}}}} on non-saved revision !! options parsoid={ "modes": ["wt2html","wt2wt"], "normalizePhp": true } showflags !! wikitext {{REVISIONID:{{PAGENAME}}}} !! html/* flags=vary-revision-id !! end !! test Parser Function: {{REVISIONTIMESTAMP:{{PAGENAME}}}} on latest revision !! options lastsavedrevision parsoid={ "modes": ["wt2html","wt2wt"], "normalizePhp": true } showflags !! wikitext {{REVISIONTIMESTAMP:{{PAGENAME}}}} !! html/*

        19700101000203

        flags=vary-revision-timestamp !! end !! test Parser Function: {{REVISIONDAY:{{PAGENAME}}}} on latest revision !! options lastsavedrevision parsoid={ "modes": ["wt2html","wt2wt"], "normalizePhp": true } showflags !! wikitext {{REVISIONDAY:{{PAGENAME}}}} !! html/*

        1

        flags=vary-revision-timestamp !! end !! test Parser Function: {{REVISIONMONTH:{{PAGENAME}}}} on latest revision !! options lastsavedrevision parsoid={ "modes": ["wt2html","wt2wt"], "normalizePhp": true } showflags !! wikitext {{REVISIONMONTH:{{PAGENAME}}}} !! html/*

        01

        flags=vary-revision-timestamp !! end !! test Parser Function: {{REVISIONYEAR:{{PAGENAME}}}} on latest revision !! options lastsavedrevision parsoid={ "modes": ["wt2html","wt2wt"], "normalizePhp": true } showflags !! wikitext {{REVISIONYEAR:{{PAGENAME}}}} !! html/*

        1970

        flags=vary-revision-timestamp !! end !! test Parser Function: {{PAGESIZE:{{PAGENAME}}}} on latest revision !! options lastsavedrevision parsoid={ "modes": ["wt2html","wt2wt"], "normalizePhp": true } showflags !! wikitext {{PAGESIZE:{{PAGENAME}}}} !! html/*

        25

        flags=vary-revision-sha1 !! end !! test Magic Word: {{SCRIPTPATH}} !! options parsoid={ "modes": ["wt2html","wt2wt"], "normalizePhp": true } !! wikitext {{SCRIPTPATH}} !! html/* !! end !! test Magic Word: {{STYLEPATH}} !! options parsoid={ "modes": ["wt2html","wt2wt"], "normalizePhp": true } !! wikitext {{STYLEPATH}} !! html/*

        /skins

        !! end !! test Magic Word: {{SERVER}} !! options parsoid={ "modes": ["wt2html","wt2wt"], "normalizePhp": true } !! wikitext {{SERVER}} !! html/*

        http://example.org

        !! end !! test Magic Word: {{SERVERNAME}} !! options parsoid={ "modes": ["wt2html","wt2wt"], "normalizePhp": true } !! wikitext {{SERVERNAME}} !! html/*

        example.org

        !! end !! test Magic Word: {{SITENAME}} !! options parsoid={ "modes": ["wt2html","wt2wt"], "normalizePhp": true } !! wikitext {{SITENAME}} !! html/*

        MediaWiki

        !! end !! test Magic Word: {{PAGELANGUAGE}} !! options language=fr parsoid={ "modes": ["wt2html","wt2wt"], "normalizePhp": true } !! wikitext {{PAGELANGUAGE}} !! html/*

        fr

        !! end !! test Magic Word: {{PAGELANGUAGE}} on a page with no explicitly set language !! options parsoid={ "modes": ["wt2html","wt2wt"], "normalizePhp": true } !! wikitext {{PAGELANGUAGE}} !! html/*

        en

        !! end !! test Case-sensitive magic words, when cased differently, should just be template transclusions !! wikitext {{CurrentMonth}} {{currentday}} {{cURreNTweEK}} {{currentHour}} !! html

        Template:CurrentMonth Template:Currentday Template:CURreNTweEK Template:CurrentHour

        !! end !! test Case-insensitive magic words should still work with weird casing. !! wikitext {{sErVeRNaMe}} {{LCFirst:AOEU}} {{ucFIRST:aoeu}} {{SERver}} !! html

        example.org aOEU Aoeu http://example.org

        !! end # From plwiki:PLOS_ONE !! test Parsoid: Page property magic word with magic word contents !! options showtitle !! config wgAllowDisplayTitle=true wgRestrictDisplayTitle=false !! wikitext {{DISPLAYTITLE:''{{PAGENAME}}''}} !! html/php Parser test !! html/parsoid !! end # NOTE: mw:ExpandedAttrs is not the best typeof here. mw:Transclusion is better. # But, this is a limitation of our representation and is documented in # TemplateHandler.js in processSpecialMagicWord !! test Parsoid: Template-generated DISPLAYTITLE !! wikitext {{{{1x|DISPLAYTITLE}}:Foo}} !! options showtitle !! config wgAllowDisplayTitle=true wgRestrictDisplayTitle=false !! html/php Foo !! html/parsoid !! end !! test Namespace 1 {{ns:1}} !! wikitext {{ns:1}} !! html

        Talk

        !! end !! test Namespace 1 {{ns:01}} !! wikitext {{ns:01}} !! html

        Talk

        !! end !! test Namespace 0 {{ns:0}} (T6783) !! wikitext {{ns:0}} !! html !! end !! test Namespace 0 {{ns:00}} (T6783) !! wikitext {{ns:00}} !! html !! end !! test Namespace -1 {{ns:-1}} !! wikitext {{ns:-1}} !! html

        Special

        !! end !! test Namespace User {{ns:User}} !! wikitext {{ns:User}} !! html

        User

        !! end !! test Namespace User talk {{ns:User_talk}} !! wikitext {{ns:User_talk}} !! html

        User talk

        !! end !! test Namespace User talk {{ns:uSeR tAlK}} !! wikitext {{ns:uSeR tAlK}} !! html

        User talk

        !! end !! test Namespace File {{ns:File}} !! wikitext {{ns:File}} !! html

        File

        !! end !! test Namespace File {{ns:Image}} !! wikitext {{ns:Image}} !! html

        File

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

        Benutzer

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

        Benutzer Diskussion

        !! end !! test Urlencode !! wikitext {{urlencode:hi world?!}} {{urlencode:hi world?!|WIKI}} {{urlencode:hi world?!|PATH}} {{urlencode:hi world?!|QUERY}} !! html/php

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

        !! end !! test Magic Word: prioritize type info over data-parsoid !! options parsoid=html2wt !! html/parsoid !! wikitext __FORCETOC__ !! end !! test Magic Word: serialize on separate line (parsoid) !! options parsoid=wt2wt,html2wt !! wikitext foo __NOTOC__ bar !! html/parsoid foobar !! end !! test Magic Word: case-insensitive (all-lowercase) !! wikitext foo __notoc__ bar !! html/php

        foo

        bar

        !! html/parsoid

        foo bar

        !! end # wt2wt,html2wt disabled because we always (unless selser) serialize # in a uniform case (all upper or all lower) !! test Magic Word: case-insensitive (mixed case) !! options parsoid=wt2html,html2html !! wikitext foo __NOtOC__ bar !! html/php

        foo

        bar

        !! html/parsoid

        foo bar

        !! end !! test Magic Word: rt non-english wikis !! options parsoid=wt2wt language=de !! wikitext __NOEDITSECTION__ !! html/parsoid !! end !!test __proto__ is treated as normal wikitext (T105997) !!wikitext __proto__ !!html

        __proto__

        !!end ### ### Magic links ### !! test Magic links: internal link to RFC (T2479) !! wikitext [[RFC 123]] !! html/php

        RFC 123

        !! html/parsoid

        RFC 123

        !! end !! test Magic links: RFC (T2479) !! wikitext RFC 822 !! html/php

        RFC 822

        !! html/parsoid

        RFC 822

        !! end !! test Magic links: RFC (T67278) !! wikitext This is RFC 822 but thisRFC 822 is not RFC 822linked. !! html/php

        This is RFC 822 but thisRFC 822 is not RFC 822linked.

        !! html/parsoid

        This is RFC 822 but thisRFC 822 is not RFC 822linked.

        !! end !! test Magic links: RFC (w/ non-newline whitespace, T30950/T31025) !! wikitext RFC       822 RFC 822 !! html/php

        RFC 822 RFC 822

        !! html/parsoid

        RFC       822 RFC 822

        !! end !! test Magic links: ISBN (T3937) !! wikitext ISBN 0-306-40615-2 !! html/php

        ISBN 0-306-40615-2

        !! html/parsoid

        ISBN 0-306-40615-2

        !! end !! test Magic links: ISBN (T67278) !! wikitext This is ISBN 978-0-316-09811-3 but thisISBN 978-0-316-09811-3 is not ISBN 978-0-316-09811-3linked. !! html/php

        This is ISBN 978-0-316-09811-3 but thisISBN 978-0-316-09811-3 is not ISBN 978-0-316-09811-3linked.

        !! html/parsoid

        This is ISBN 978-0-316-09811-3 but thisISBN 978-0-316-09811-3 is not ISBN 978-0-316-09811-3linked.

        !! end !! test Magic links: ISBN (w/ non-newline whitespace, T30950/T31025) !! wikitext ISBN       978 0 316 09811 3 ISBN 9780316098113 ISBN 978 0316098113 !! html/php

        ISBN 978 0 316 09811 3 ISBN 9780316098113 ISBN 978 0316098113

        !! html/parsoid

        ISBN       978 0 316 09811 3 ISBN 9780316098113 ISBN 978 0316098113

        !! end !! test Magic links: PMID incorrectly converts space to underscore !! wikitext PMID 1234 !! html/php

        PMID 1234

        !! html/parsoid

        PMID 1234

        !! end !! test Magic links: PMID (T67278) !! wikitext This is PMID 1234 but thisPMID 1234 is not PMID 1234linked. !! html/php

        This is PMID 1234 but thisPMID 1234 is not PMID 1234linked.

        !! html/parsoid

        This is PMID 1234 but thisPMID 1234 is not PMID 1234linked.

        !! end !! test Magic links: PMID (w/ non-newline whitespace, T30950/T31025) !! wikitext PMID       1234 PMID 1234 !! html/php

        PMID 1234 PMID 1234

        !! html/parsoid

        PMID       1234 PMID 1234

        !! end # nodes shouldn't be inserted during html2wt by Parsoid, # since these are ExtLinkText, not MagicLinkText !! test Magic links: use appropriate serialization for "almost" magic links. !! wikitext X[[Special:BookSources/0978739256|foo]] X[https://tools.ietf.org/html/rfc1234 foo] !! html/php

        Xfoo

        Xfoo

        !! html/parsoid

        Xfoo

        Xfoo

        !! end !! test Magic links: All disabled (T47942) !! options wgEnableMagicLinks={"ISBN":false, "PMID":false, "RFC":false} !! wikitext ISBN 0-306-40615-2 PMID 1234 RFC 4321 !! html/php

        ISBN 0-306-40615-2 PMID 1234 RFC 4321

        !! end ### ### Templates #### !! test Nonexistent template !! wikitext {{thistemplatedoesnotexist}} !! html

        Template:Thistemplatedoesnotexist

        !! end !! test Template with invalid target containing tags !! wikitext {{ab|{{1x|foo}}|{{1x|a}}={{1x|b}}|a = b}} !! html

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

        !! end !! test Template with invalid target containing unclosed tag !! options parsoid=wt2html !! wikitext {{a|{{1x|foo}}|{{1x|a}}={{1x|b}}|a = b}} !! html/php

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

        !! html/parsoid

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

        !! end !! test Template with invalid target containing wikilink !! wikitext {{[[Main Page]]}} !! html/php

        {{Main Page}}

        !! html/parsoid

        {{Main Page}}

        !! end # The html2html output of this test is currently failing # because the html2wt output is broken; see # https://phabricator.wikimedia.org/T220018#5123777 for a discussion. # Not (yet) including html2wt as a test mode because there are # a couple of different correct ways this could be 'ed. !! test Template with just whitespace in it, T70421 !! wikitext {{1x|{{ }}}} !! options parsoid=wt2html,html2html !! html/php

        {{ }}

        !! html/parsoid

        {{ }}

        !! end # This is currently the wikitext output of html2wt on the above test # case; note that it is broken! Adding a around the closing # brace changes how the open braces associate, breaking the outer # {{1x}} template invocation. *However* this "broken" wikitext # exposed a useful tokenizer bug (T221384) in how the broken_template # rule was being backtracked into, so it's a useful test case even # if/when the above test case gets its html2wt output fixed. !! test Template with just whitespace (bad template brace matching) !! options parsoid=wt2html !! wikitext {{1x|{{ }}}} !! html/php

        {{1x|{{ }}}}

        !! html/parsoid

        {{1x|{{ }}}}

        !! end !! article Template:test !! text This is a test template !! endarticle !! test Simple template !! wikitext {{test}} !! html

        This is a test template

        !! end !! test Template with explicit namespace !! wikitext {{Template:test}} !! html

        This is a test template

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

        This is a test template with parameter foo

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

        the main page

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

        (test)

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

        (test)

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

        (test)

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

        (test)

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

        templ

        !! end !! test Template redirect !! wikitext {{templateredirect}} !! html/php

        (test)

        !! html/parsoid !! end !! test Template with argument in separate line !! wikitext {{ templateasargtest | templ = simple }} !! html

        (test)

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

        This is a test template with parameter (test)

        !! end !! test Templates with templated name !! wikitext {{{{1x|1x}}|foo}} {{{{1x|inner list}} }} !! html

        foo

        • item 1
        !! html/parsoid

        foo

        • item 1
        !! end ## Regression test; the output here isn't really that interesting. ## wt2html only, since the bare {{ will get escaped when serializing ## needs investigation! !! test Templates with templated name and top level template args !! options parsoid=wt2html !! wikitext {{1{{2{{{3}}}|4=5}}}} !! html/php

        {{1{{2{{{3}}}|4=5}}}}

        !! html/parsoid

        {{1{{2{{{3}}}|4=5}}}}

        !! end ## wt2html only, since the bare {{ will get escaped when serializing !! test Templates with invalid templated targets !! options parsoid=wt2html !! wikitext {{1x {{1x|foo}} }} !! html/php

        {{1x foo }}

        !! html/parsoid

        {{1x foo }}

        !! end !! article Template:complextemplate !! text {{{1}}} {{paramtest| param ={{{param}}}}} !! endarticle !! test Template with complex arguments !! wikitext {{complextemplate| param ={{ templateasargtest | templ = simple }}|[[Template:complextemplate|link]]}} !! html

        link This is a test template with parameter (test)

        !! end !! test T2553: link with two variables in a piped link !! wikitext {| |[[{{{1}}}|{{{2}}}]] |} !! html/php
        [[{{{1}}}|{{{2}}}]]
        !! html/parsoid
        [[{{{1}}}|{{{2}}}]]
        !! end # See: T2553 !! test Abort table cell attribute parsing on wikilink !! wikitext {| |testing [[one|two]] |three||four |testing one two |three||four |testing="[[one|two]]" |three||four |} !! html/php
        testing two |three four three four testing="two" |three four
        !! html/parsoid
        testing two |threefour threefour testing="two" |threefour
        !! end !! test Don't abort table cell attribute parsing if wikilink is found in template arg !! wikitext {| |Test {{#tag:ref|One two "[[three]]" four}} |} !! html/parsoid
        Test One two "three" four
        !! end !! test Magic variable as template parameter !! wikitext {{paramtest|param={{SITENAME}}}} !! html

        This is a test template with parameter MediaWiki

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

        link

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

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

        !! end !! article Template:Linktest2 !! text Main Page !! endarticle !! test Template as link source !! wikitext [[{{linktest2}}]] [[{{linktest2}}|Main Page]] [[{{linktest2}}]]Page !! html

        Main Page

        Main Page

        Main PagePage

        !! end !! article Template:loop1 !! text {{loop2}} !! endarticle !! article Template:loop2 !! text {{loop1}} !! endarticle !! test Template infinite loop !! wikitext {{loop1}} !! html/php

        Template loop detected: Template:Loop1

        !! html/parsoid

        Template loop detected: Template:Loop1

        !! end !! test Template from main namespace !! wikitext {{:Main Page}} !! html

        blah blah

        !! end !! test Template from non-includable namespace !! options wgNonincludableNamespaces=10 !! wikitext {{1x|uh oh!}} !! html

        Template:1x

        !! end !! article Template:table !! text {| | 1 || 2 |- | 3 || 4 |} !! endarticle !! test T2529: Template with table, not included at beginning of line !! wikitext foo {{table}} !! html

        foo

        1 2
        3 4
        !! end !! test T2523: Template shouldn't eat newline (or add an extra one before table) !! wikitext foo {{table}} !! html

        foo

        1 2
        3 4
        !! end !! test T2041: Template parameters shown as broken links !! wikitext {{{parameter}}} !! html

        {{{parameter}}}

        !! end !! test Template with targets containing wikilinks !! options parsoid=wt2html !! wikitext {{[[foo]]}} {{[[{{1x|foo}}]]}} {{{{1x|[[foo}}]]}} !! html/php

        {{foo}}

        {{foo}}

        {{[[foo}}]]

        !! html/parsoid

        {{foo}}

        {{foo}}

        {{[[foo}}]]

        !! end !! article Template:'' !! text bar !! endarticle !! test Templates: Double quotes as template target !! wikitext foo {{''}} baz !! html/php

        foo bar baz

        !! html/parsoid

        foo bar baz

        !! end ## This test is about making sure Parsoid's data-mw is well formed in the ## face of multiple templates with intersecting and overlapping ranges. The ## wikitext itself is wretched. !! test Templates with intersecting and overlapping ranges !! wikitext {|{{1x|1=class="foo"

        ha

        }} {|{{1x|1=class="bar"

        ho

        }} {{1x|{{!}}hi}} |} !! html/php

        ha

        ho

        hi
        !! html/parsoid

        ha

        ho

        hi
        !! end !! article Template:MSGNW test !! text ''None'' of '''this''' should be * interpreted but rather passed unmodified {{test}} File:Foobar.jpg !! endarticle # hmm, fix this or just deprecate msgnw and document its behavior? !! test msgnw keyword !! wikitext {{msgnw:MSGNW test}} !! html/php

        ''None'' of '''this''' should be * interpreted but rather passed unmodified {{test}} <gallery> File:Foobar.jpg </gallery> <!-- comment -->

        !! end !! test int keyword !! wikitext {{int:youhavenewmessages|lots of money|not!}} !! html

        You have lots of money (not!).

        !! end !! test int keyword - non-existing message !! wikitext {{int:var}} !! html

        ⧼var⧽

        !! end !! article Template:Includes !! text Foozarbar !! endarticle !! test and being included !! wikitext {{Includes}} !! html

        Foobar

        !! end !! article Template:Includes2 !! text Foobar !! endarticle !! test being included !! wikitext {{Includes2}} !! html/php

        Foo

        !! html/parsoid

        Foo

        !! end !! article Template:Includes3 !! text Foobarzar !! endarticle !! test and being included !! wikitext {{Includes3}} !! html/php

        Foo

        !! html/parsoid

        Foo

        !! end # FIXME: Parsoid's markup for this is quite ugly. !! test and on a page !! wikitext Foozarbar !! html/php

        Foozar

        !! html/parsoid

        Foozar

        !! end !! test Un-closed !! wikitext !! html/php !! html/parsoid !! end !! test Empty !! wikitext Hello! !! html/php

        Hello!

        !! html/parsoid

        Hello!

        !! end !! test Nested s !! wikitext x y z !! html/php

        x y z

        !! html/parsoid

        x y z

        !! end !! test on a page !! wikitext Foobar !! html

        Foobar

        !! end !! test Un-closed !! wikitext !! html !! end !! test T236868: Un-closed caused bad SourceRange length !! wikitext {| |- | A |- |} !! html/parsoid
        !! end !!test Self-closed noinclude, includeonly, onlyinclude tags !! wikitext !! html


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

        Includeonly section[edit]

        Section T-1[edit]

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

        Section 1[edit]

        !! end !! test T8563: Section extraction for section suppressed by !! options section=1 !! wikitext ==Includeonly section== ==Section 1== !! html ==Section 1== !! end !! test Un-closed !! wikitext !! html/php !! html/parsoid !! end ## We used to, but no longer wt2wt this test since the default serializer ## will normalize the include directives to serialize on their own line. ## Selser will take care of preserving formatting in scenarios where they ## intermingled with other wikitext. ## This test also triggered T223411 during Parsoid-PHP porting. !! test Includes and comments at SOL !! options parsoid=wt2html,html2html !! wikitext ==hu== some *stuff *here some* stuff * here can have stuff===here=== !! html/php

        hu

        some

        • stuff
        • here


        some* stuff

        • here

        here

        !! html/parsoid

        hu

        some

        • stuff
        • here

        some* stuff

        • here

        here

        !! end # TODO: test with DOM fragment reuse! !! test Parsoid: DOM fragment reuse !! options parsoid=wt2wt,wt2html !! wikitext a{{1x|b
        c}}d a{{1x|b
        c}}d {{1x|a
        b}} !! html/php

        ab

        cd

        ab

        cd

        a

        b

        !! html/parsoid

        ab

        cd

        ab

        cd

        a

        b

        !! end !! test Parsoid: Merge double tds (T52603) !! wikitext {| |{{1x|{{!}} foo}} |} !! html/php
        foo
        !! html/parsoid
        foo
        !! end !! test Parsoid: Merge double tds in nested transclusion content (T52603) !! wikitext {{1x|
        }} {| |{{1x|{{!}} foo}} |} {{1x|
        }} !! html/php
        foo
        !! html/parsoid
        foo
        !! end ### ### and in attributes ### !!test 0. includeonly around the entire attribute !! wikitext id="v1"id="v2">bar !! html

        bar

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

        bar

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

        bar bar

        !!end !!test 3. includeonly in part of an attr value !! wikitext bar !! html

        bar

        !!end !!test 4. includeonly in table attributes !! wikitext {| |- |- |a |- |- |b |} !! html
        a
        !!end ### ### Preprocessor precedence tests ### See: https://www.mediawiki.org/wiki/Preprocessor_ABNF ### ##{{[[-{{{{{{[[Foo|bar}}]]}-}}}}}]] !! test Preprocessor precedence 1: link is rightmost opening !! options parsoid=wt2html !! wikitext {{[[Foo|bar}}]] But close-brace is not a valid character in a link title: {{[[Foo}}|bar]] However, we can still tell this was handled as a link in the preprocessor: {{1x|[[Foo}}|bar]]|bat}} !! html/php

        {{bar}}

        But close-brace is not a valid character in a link title: {{[[Foo}}|bar]]

        However, we can still tell this was handled as a link in the preprocessor: [[Foo}}|bar]]

        !! html/parsoid

        {{bar}}

        But close-brace is not a valid character in a link title: {{[[Foo}}|bar]]

        However, we can still tell this was handled as a link in the preprocessor: [[Foo}}|bar]]

        !! end !! test Preprocessor precedence 2: template is rightmost opening !! options language=zh !! wikitext -{{1x|foo}-}}- !! html/php

        -foo}--

        !! html/parsoid

        -foo}--

        !! end !! test Preprocessor precedence 3: language converter is rightmost opening !! options language=zh parsoid=wt2html !! wikitext {{1x|hi}} {{-{R|1x|hi}}}- [[-{R|raw]]}- !! html/php

        hi

        {{1x|hi}}

        [[raw]]

        !! html/parsoid

        hi

        {{

        [[

        !! end !! test Preprocessor precedence 4: left-most angle bracket !! options language=zh !! wikitext !! html/php !! html/parsoid !! end !! article Template:Precedence5 !! text {{{{{1}}}}} !! endarticle !! test Preprocessor precedence 5: tplarg takes precedence over template !! wikitext {{Precedence5|Bullet}} !! html/php
        • Bar
        !! html/parsoid
        • Bar
        !! end !! test Preprocessor precedence 6: broken link is rightmost opening !! options parsoid=wt2html !! wikitext {{1x|[[Foo}} {{1x|[[Foo|bar|bat=baz}} !! html/php

        {{1x|[[Foo}}

        {{1x|[[Foo|bar|bat=baz}}

        !! html/parsoid

        {{1x|[[Foo}}

        {{1x|[[Foo|bar|bat=baz}}

        !! end # This next test exposes a difference between PHP and Parsoid: # Given [[Foo|{{1x|Bar]]x}}y]]z: # 1) Both PHP and Parsoid ignore the `]]` inside the `1x` in the # "preprocessor" stage. The `{{1x` extends until the `x}}`, and the # outer `[[Foo` extends until the `y]]` # 2a) But then the PHP preprocessor emits `[[Foo|Bar]]xy]]z` as an # intermediate result (after template expansion), and link processing # happens on this intermediate result, which moves the wikilink # boundary leftward to `[[Foo|Bar]]` # 2b) Parsoid works in a single step, so it's going to keep the # wikilink as extending to the `y]]` # 3a) Then PHP does linktrail processing which slurps up the trailing # `xy` inside the link. # 3b) Parsoid will do linktrail processing to slurp up the trailing # `z` inside the link. # This is "correct" behavior. Parsoid's basic worldview is that the # `]]` inside the template shouldn't be allowed to leak out to affect # the surrounding wikilink. PHP may match Parsoid (in the future) # if you use {{#balance}} (T114445). !! test Preprocessor precedence 7: broken template is rightmost opening !! options parsoid=wt2html !! wikitext [[Foo|{{1x|Bar]] [[Foo|{{1x|Bar]]-x}}-y]]-z Careful: linktrails can move the end of the wikilink: [[Foo|{{1x|y']]a}}l]]l !! html/php

        {{1x|Bar

        Bar-x-y]]-z

        Careful: linktrails can move the end of the wikilink: y'al]]l

        !! html/parsoid

        [[Foo|{{1x|Bar]]

        Bar]]-x-y-z

        Careful: linktrails can move the end of the wikilink: y']]all

        !! end !! test Preprocessor precedence 8: broken language converter is rightmost opening !! options language=zh !! wikitext [[Foo-{R|raw]] !! html

        [[Foo-{R|raw]]

        !! end !! article Template:Preprocessor_precedence_9 !! text ;4: {{{{1}}}} ;5: {{{{{2}}}}} ;6: {{{{{{3}}}}}} ;7: {{{{{{{4}}}}}}} !! endarticle !! test Preprocessor precedence 9: groups of braces !! wikitext {{Preprocessor precedence 9|Four|Bullet|1|2}} !! html/php
        4
        {Four}
        5
        • Bar
        6
        Four
        7
        {Bullet}
        !! html/parsoid
        4
        {Four}
        5
        • Bar
        6
        Four
        7
        {Bullet}
        !! end !! article Template:Preprocessor_precedence_10 !! text ;1: -{R|raw}- ;2: -{{Bullet}}- ;3: -{{{1}}}- ;4: -{{{{2}}}}- ;5: -{{{{{3}}}}}- ;6: -{{{{{{4}}}}}}- ;7: -{{{{{{{5}}}}}}}- !! endarticle !! test Preprocessor precedence 10: groups of braces with leading dash !! options language=zh !! wikitext {{Preprocessor precedence 10|Three|raw2|Bullet|1|2}} !! html/php
        1
        raw
        2
        -
        • Bar-
        3
        -Three-
        4
        raw2
        5
        -
        • Bar-
        6
        -Three-
        7
        raw2
        !! html/parsoid
        1
        2
        -
        • Bar-
        3
        -Three-
        4
        5
        -
        • Bar-
        6
        -Three-
        7
        !! end !! test Preprocessor precedence 11: found during visual diff testing !! wikitext {{#tag:span|-{{#tag:span|-{{1x|x}}}}}} {{1x|-{{1x|-{{1x|x}}}}}} {{1x|-{{1x|x}}}} !! html/php

        --x

        --x

        -x

        !! html/parsoid

        --x

        --x

        -x

        !! end !! test Preprocessor precedence 12: broken language converter closed by brace. !! options parsoid=wt2html !! wikitext This form breaks the template, which is unfortunate: *{{1x|foo-{bar}bat}} But if the broken language converter markup is inside an extension tag, nothing bad happens: *foo-{bar}bat *{{1x|foo-{bar}bat}} *
        foo-{bar}bat
        *{{1x|
        foo-{bar}bat
        }} foo-{bar}bat {{1x|foo-{bar}bat}} !! html/php

        This form breaks the template, which is unfortunate:

        • {{1x|foo-{bar}bat}}

        But if the broken language converter markup is inside an extension tag, nothing bad happens:

        • foo-{bar}bat
        • foo-{bar}bat
        • foo-{bar}bat
        • foo-{bar}bat
        'foo-{bar}bat'
        array (
        )
        
        'foo-{bar}bat'
        array (
        )
        
        !! html/parsoid

        This form breaks the template, which is unfortunate:

        • {{1x|foo-{bar}bat}}

        But if the broken language converter markup is inside an extension tag, nothing bad happens:

        • foo-{bar}bat
        • foo-{bar}bat
        • foo-{bar}bat
        • foo-{bar}bat
         
        
        !! end
        
        !! test
        Preprocessor precedence 13: broken language converter in external link
        !! options
        parsoid=wt2html
        !! wikitext
        *[http://example.com/-{foo Example in URL]
        *[http://example.com Example in -{link} description]
        *{{1x|[http://example.com/-{foo Breaks template, however]}}
        !! html/php
        
        !! html/parsoid
        
        !! end
        
        !! test
        Preprocessor precedence 14: broken language converter in comment
        !! wikitext
        *...should be ok
        *...extra dashes
        *{{1x|foobat}}...should be ok
        !! html/php
        
        • ...should be ok
        • ...extra dashes
        • foobat...should be ok
        !! html/parsoid
        • ...should be ok
        • ...extra dashes
        • foobat...should be ok
        !! end !! test Preprocessor precedence 15: broken brace markup in headings !! config wgFragmentMode=[ 'html5', 'legacy' ] !! options parsoid=wt2html !! wikitext __NOTOC__ __NOEDITSECTION__ ===1 foo[bar 1=== 1 ===2 foo[[bar 2=== 2 ===3 foo{bar 3=== 3 ===4 foo{{bar 4=== 4 ===5 foo{{{bar 5=== 5 ===6 foo-{bar 6=== 6 !! html/php

        1 foo[bar 1

        1

        2 foo[[bar 2

        2

        3 foo{bar 3

        3

        4 foo{{bar 4

        4

        5 foo{{{bar 5

        5

        6 foo-{bar 6

        6

        !! html/parsoid

        1 foo[bar 1

        1

        2 foo[[bar 2

        2

        3 foo{bar 3

        3

        4 foo{{bar 4

        4

        5 foo{{{bar 5

        5

        6 foo-{bar 6

        6

        !! end !! test Preprocessor precedence 16: matching closing braces to opening braces !! options language=zh parsoid=wt2html !! wikitext -{{{1x|foo}}bar}- !! html/php

        foobar

        !! html/parsoid

        !! end !! test Preprocessor precedence 17: template w/o target shouldn't prevent closing !! options parsoid=wt2html !! wikitext {{1x|hi {{}}}} !! html/php

        hi {{}}

        !! html/parsoid

        hi {{}}

        !! end # Ensure we're using a language without variants for this test; even # if $wgUsePigLatinVariant is true. We've picked `de` arbitrarily. !! test Preprocessor precedence 18: another rightmost wins scenario !! options parsoid=wt2html language=de !! wikitext {{ -{{{{1|tplarg}}} }} }- !! html/php

        {{ -{tplarg }} }-

        !! html/parsoid

        {{ -{tplarg }} }-

        !! end !! test Preprocessor precedence 19: break syntax !! options parsoid=wt2html !! wikitext -{{ !! html/php

        -{{

        !! html/parsoid

        -{{

        !! end ## Regression test for Parsoid !! test Language converter over extlink !! wikitext {{1x | [-{oh no]}-] }} !! html/php
        [-{oh no]}-]
        
        !! html/parsoid
        [-{oh no]}-]
        !! end ### ### Token Stream Patcher tests ### ### These tests won't always pass wt2wt and other modes because ### on serialization, the table will be output on a new line. ### For now, we are prohibiting them, and using this to test selser. ### !!test 1. Table tag in SOL posn. should get reparsed correctly with valid TSR !!options parsoid=wt2html,wt2wt !!wikitext {{1x|}}{| width = '100%' |foo |} !!html/parsoid
        foo
        !!end ## We used to, but no longer wt2wt this test since the default serializer ## will normalize the include directives to serialize on their own line. ## Selser will take care of preserving formatting in scenarios where they ## intermingled with other wikitext. !!test 2. Table tag in SOL posn. should get reparsed correctly with valid TSR !!options parsoid=wt2html !!wikitext a{| {{{b}}} |c |} !!html/parsoid
        c
        !!end !! test Table wikitext syntax outside wiki-tables !! wikitext a |+ not a caption ! not a table heading |- not a table row | not a table cell | class="foo bar" | baz b |} |- c !! html

        a |+ not a caption ! not a table heading |- not a table row | not a table cell | class="foo bar" | baz b |} |- c

        !! end !! test Content after like wikitext should get fully processed !! wikitext x |- [[Foo]] and {{1x|bar}} y !! html/php

        x |- Foo and bar y

        !! html/parsoid

        x |- Foo and bar y

        !! end !! test P-wrapping should not break after s separated by newlines are converted back to pipes !! wikitext a |b |c d !! html/php

        a |b

        |c d

        !! html/parsoid

        a |b

        |c d

        !! 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 !! wikitext {{quote|foo}} !! html/php

        foo

        !! html/parsoid

        foo

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

        foo

        !! html/parsoid

        foo

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

        Foo

        !!end !!test Templates: 2. Inside a block tag !! wikitext
        {{1x|Foo}}
        {{1x|Foo}}
        !! html
        Foo

        Foo

        !!end !!test Templates: P-wrapping: 1a. Templates on consecutive lines !! wikitext {{1x|Foo}} {{1x|bar}} !! html

        Foo bar

        !!end !!test Templates: P-wrapping: 1b. Templates on consecutive lines !! wikitext Foo {{1x|bar}} {{1x|baz}} !! html

        Foo

        bar baz

        !!end !!test Templates: P-wrapping: 1c. Templates on consecutive lines !! wikitext {{1x|Foo}} {{1x|bar}}
        baz
        !! html

        Foo

        bar

        baz
        !! end !! test Templates: P-wrapping: 1d. Template preceded by comment-only line !! wikitext {{1x|Bar}} !! html/php

        Bar

        !! html/parsoid

        Bar

        !!end !! test Templates: Scopes should not be expanded unnecessarily !! options parsoid=wt2html,wt2wt !! wikitext {{1x|
        a
        }}b{{1x|
        c
        }} !! html/php
        a

        b

        c
        !! html/parsoid
        a

        b

        c
        !! end !!test Templates: Inline Text: 1. Multiple template uses !! wikitext {{1x|Foo}}bar{{1x|baz}} !! html

        Foobarbaz

        !!end !!test Templates: Inline Text: 2. Back-to-back template uses !! wikitext {{1x|Foo}}{{1x|bar}} !! html

        Foobar

        !!end !!test Templates: Block Tags: 1. Multiple template uses !! wikitext {{1x|
        Foo
        }}
        bar
        {{1x|
        baz
        }} !! html
        Foo
        bar
        baz
        !!end !!test Templates: Block Tags: 2. Back-to-back template uses !! wikitext {{1x|
        Foo
        }}{{1x|
        bar
        }} !! html
        Foo
        bar
        !!end ## Parsoid drops empty elements in templates. !! test Templates: Correctly encapsulate templates producing

        tag without a corresponding

        tag !! wikitext {{1x|a b

        }} !! html/php

        a

        b

        !! html/parsoid

        a

        b

        !! end !! test Drop stripped tag markers, unless they have encapsulation info !! wikitext {{1x|}} !! html/php !! html/parsoid !! end !!test Templates: Links: 1. Simple example !! wikitext {{1x|[[Foo|bar]]}} !! html

        bar

        !!end !!test Templates: Links: 2. Generation of link href !! wikitext [[{{1x|Foo}}|bar]] !! html

        bar

        !!end !!test Templates: Links: 3. Generation of part of a link href !! wikitext [[Fo{{1x|o}}|bar]] [[Foo{{1x|bar}}]] [[Foo{{1x|bar}}baz]] [[Foo{{1x|bar}}|bar]] [[:Foo{{1x|bar}}]] [[:Foo{{1x|bar}}|bar]] !! html

        bar

        Foobar

        Foobarbaz

        bar

        Foobar

        bar

        !!end !!test Templates: Links: 4. Multiple templates generating link href !! wikitext [[{{1x|F}}{{1x|o}}ob{{1x|ar}}]] !! html

        Foobar

        !!end !!test Templates: Links: 5. Generation of link text !! wikitext [[Foo|{{1x|bar}}]] !! html

        bar

        !!end !!test Templates: Links: 5. Nested templates (only outermost template should be marked) !! wikitext {{1x|[[{{1x|Foo}}|bar]]}} !! html

        bar

        !!end !! test File with template filename !! wikitext [[File:{{1x|Foobar.jpg}}]] !! html/parsoid

        !! end !!test Templates: HTML Tag: 1. Generation of HTML attr. key !! wikitext
        foo
        !! html
        foo
        !!end !!test Templates: HTML Tag: 2. Generation of HTML attr. value !! wikitext
        foo
        !! html
        foo
        !!end !!test Templates: HTML Tag: 3. Generation of HTML attr key and value !! wikitext
        foo
        !! html
        foo
        !!end !!test Templates: HTML Tag: 4. Generation of starting piece of HTML attr value !! wikitext
        foo
        !! html
        foo
        !!end !!test Templates: HTML Tag: 5. Generation of middle piece of HTML attr value !! wikitext
        foo
        !! html
        foo
        !!end !!test Templates: HTML Tag: 6. Generation of end piece of HTML attr value !! wikitext
        foo
        !! html
        foo
        !!end # SSS FIXME: While it is great we added support for all this, # do we want to make this part of the spec? Maybe we want to # deprecate this kind of usage in the future? !!test Templates: HTML Tag: 7. Generation of partial attribute key string !! wikitext
        foo
        !! html
        foo
        !!end !! test Templates: HTML Tag: 8. Template-generated attribute (k=v) !! wikitext
        bar
        !! html
        bar
        !!end !! test Templates: HTML Tag: 9. Multiple template-generated attributes !! wikitext
        bar
        !! html
        bar
        !!end !! test Templates: Support for templates generating attributes and content !! wikitext {| {{mixed_attr_content_template}} |- |bar |} !! html/php
        foo
        bar
        !! html/parsoid
        foo
        bar
        !!end !! test Templates: Support for templates generating table attributes and content (with fostered categories) !! wikitext {| {{mixed_attr_content_template_2}} |- |bar |} !! html/php
        foo
        bar
        !! html/parsoid
        foo
        bar
        !!end !! article Template:attribute_from_template !! text class="123" !! endarticle !! test Table cell with attribute before expanded attribute !! wikitext {| | align="center" {{attribute_from_template}} |456 |} !! html/parsoid
        456
        !! end !! test 1. Entities and nowikis inside templated attributes should be handled correctly !! wikitext
        foo
        !! html/php
        foo
        !! html/parsoid
        foo
        !! end !! test 2. Entities and nowikis inside templated attributes should be handled correctly !! wikitext {| |{{table_attribs_3}} |} !! html/php
        Foo
        !! html/parsoid
        Foo
        !! end !! test 3. Entities and nowikis inside templated attributes should be handled correctly inside templated tables !! wikitext {{tbl-start}} |{{table_attribs_3}} {{tbl-end}} !! html/php
        Foo
        !! html/parsoid
        Foo
        !! end # T107622 !! test 4. Entities and nowikis inside templated attributes should be handled correctly inside templated tables !! wikitext {| |{{table_attribs_6}} hi |} !! html/php
        hi
        !! html/parsoid
        hi
        !! end !! test Extension tag in templated tag attribute !! wikitext {{1x|1= {{{!}} class="123" {{!}} hi {{!}}} }} !! html/php
        hi
        !! html/parsoid
        hi
        !! end !!test Templates: HTML Tables: 1. Generating start of a HTML table !! wikitext {{1x|}}
        foo
        !! html
        foo
        !!end !!test Templates: HTML Tables: 2a. Generating middle of a HTML table !! wikitext {{1x|}}
        foo
        !! html
        foo
        !!end !!test Templates: HTML Tables: 2b. Generating middle of a HTML table !! wikitext {{1x|}}
        foo
        !! html
        foo
        !!end !!test Templates: HTML Tables: 3. Generating end of a HTML table !! wikitext {{1x|
        foo
        }} !! html
        foo
        !! end !!test Templates: HTML Tables: 4a. Generating a single tag of a HTML table !! wikitext {{1x|}}
        foo
        !! html
        foo
        !! end !!test Templates: HTML Tables: 4b. Generating a single tag of a HTML table !! wikitext {{1x|}}
        foo
        !! html
        foo
        !! end !!test Templates: HTML Tables: 4c. Generating a single tag of a HTML table !! wikitext {{1x|
        }}foo
        !! html
        foo
        !! end !!test Templates: HTML Tables: 4d. Generating a single tag of a HTML table !! wikitext }}
        foo{{1x|
        !! html
        foo
        !! end !!test Templates: HTML Tables: 4e. Generating a single tag of a HTML table !! wikitext {{1x|}}
        foo
        !! html
        foo
        !! end !!test Templates: HTML Tables: 4f. Generating a single tag of a HTML table !! wikitext {{1x|
        foo
        }} !! html
        foo
        !! end !!test Templates: HTML Tables: 5. Proper fostering of categories from inside !!options parsoid=wt2html,wt2wt !! wikitext [[Category:foo1]]
        foo
        [[Category:bar1]][[Category:bar2]]
        foo
        !! html/php
        foo
        foo
        !! html/parsoid
        foo
        foo
        !!end ## Remex doesn't account for fostered content. !! test Templates: Wiki Tables: 1a. Fostering of entire template content !! wikitext {| {{1x|a}} |} !! html/php a
        !! html/parsoid

        a

        !! end !!test Templates: Wiki Tables: 1b. Fostering of entire template content !! wikitext {| {{1x|
        }} foo {{1x|
        }} |} !! html/php

        foo

        !! html/parsoid

        foo

        !! end ## Remex doesn't account for fostered content. !! test Templates: Wiki Tables: 2. Fostering of partial template content !! wikitext {| {{1x|a
        b
        }} |} !! html/php a
        b
        !! html/parsoid

        a

        b
        !! end !!test Templates: Wiki Tables: 3. td-content via multiple templates !! wikitext {| {{1x|{{pipe}}a}}{{1x|b}} |} !! html
        ab
        !! end !!test Templates: Wiki Tables: 4. Templated tags, no content !! wikitext {{tbl-start}} {{tbl-end}} !! html/php
        !! html/parsoid
        !! end !!test Templates: Wiki Tables: 5. Templated tags, regular td-tags !! wikitext {{tbl-start}} |foo {{tbl-end}} !! html
        foo
        !! end !!test Templates: Wiki Tables: 6. Templated tags, templated td-tags !! wikitext {{tbl-start}} {{!}}foo {{tbl-end}} !! html
        foo
        !! end ## This test case is very specific to Parsoid's internals ## and is hence only tested for Parsoid's code. Parsoid uses ## a marker tag for tags and they are expanded ## much later. We are verifying that this tag usage ## doesn't prevent foster parenting. !! test Templates: Wiki Tables: 7. Fosterable s should get fostered !! wikitext {{PartialTable}}foo |} !! html/parsoid

        [1]

        1. foo
        !! end !!article Template:UnclosedTableEndsWithTR !!text {| |- !!endarticle !! test Templates: Wiki Tables: 8. Fosterable meta-tags should get fostered !! wikitext {{UnclosedTableEndsWithTR}} |foo |} {{UnclosedTableEndsWithTR}} |foo |} !! html/parsoid
        foo
        foo
        !! end !!test Templates: Lists: Multi-line list-items via templates !! wikitext *{{1x|a {{nonexistent| unused}}}} *{{1x|b {{nonexistent| unused}}}} !! html !!end !!test Templates: Ugly nesting: 1. Quotes opened/closed across templates (1x) !! wikitext {{1x|''a}}{{1x|b''c''d}}{{1x|''e}} !! html

        abcde

        !!end ## Legacy parser generates misnested html !! test Templates: Ugly nesting: 2. Quotes opened/closed across templates (1x_with_span) !! wikitext {{1x_with_span|''a}}{{1x_with_span|b''c''d}}{{1x_with_span|''e}} !! html/parsoid

        abcde

        !! end ## Legacy parser generates misnested html; Parsoid html2wt mode adds newlines between {{1x}}s !! test Templates: Ugly nesting: 3. Quotes opened/closed across templates (1x_with_div) !! options parsoid=wt2html,wt2wt !! wikitext {{1x_with_div|''a}}{{1x_with_div|b''c''d}}{{1x_with_div|''e}} !! html/php
        a
        bcd
        e
        !! html/parsoid
        a
        bcd
        e
        !! end !! test Templates: Ugly nesting: 4. Divs opened/closed across templates !! wikitext a
        b{{1x|c
        d}}e !! html

        a

        bc

        de

        !! end !! test Templates: Ugly templates: 3. newline-only template parameter !! wikitext foo {{1x| }} !! html

        foo

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


        !! end # T66017 -- ugly wikitext with fostered content generates two template ranges that # have a true overlap (T1-start - T2-start - T1-end - T2-end). !! test Templates: Ugly templates: 5. Template encapsulation test: Non-trivial overlap of template ranges is properly handled !! wikitext {{1x|}} {{1x|
        foo}} {{1x|
        }} !! html/parsoid
        foo
        !! end # T66017 -- ugly wikitext with fostered content generates two template ranges # that are "identical" and generate nesting cycles in the algorithm !! test Templates: Ugly templates: 6. Template encapsulation test: Cyclical nesting of template ranges is properly handled !! wikitext {{1x|
        }} {{1x|
        }} {{1x|
        }} !! html/parsoid
        !! end !! test Templates: Parameters substituted at the top-level !! wikitext {{{foo|''who'' {{1x|me}}? '''never!'''}}} {{{foo|bar|baz}}} !! html/php

        who me? never!

        bar

        !! html/parsoid

        who me? never!

        bar

        !! end !! test Templates: Param with empty arg in the final position !! wikitext {{{hi|}}} !! html/parsoid !! end !! test Compound transclusion with template and top level templatearg !! wikitext {{1x|}} {{{top|}}}
        123
        !! html/php
        123
        !! html/parsoid
        123
        !! end !!test Parser Functions: 1. Simple example !! wikitext {{uc:foo}} !! html

        FOO

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

        FOO

        !!end ## Note that the templates inside the references are not wrapped !! test Template nested in extension tag in template !! options title=[[Main Page]] language=zh !! wikitext {{1x|hi[[ho|{{1x|hi}}]]}} {{1x|hi[http://test.com?q={{1x|ho}}]}} {{1x|hi-{ho|{{1x|hi}}}-}} !! html/parsoid

        hi[1] hi[2] hi[3]

        1. hi
        !! end ### ### Pre-save transform tests ### !! test pre-save transform: subst: !! options pst !! wikitext {{subst:test}} !! html/php This is a test template !! end !! test pre-save transform: normal template !! options pst !! wikitext {{test}} !! html/php {{test}} !! end !! test pre-save transform: nonexistent template !! options pst !! wikitext {{thistemplatedoesnotexist}} !! html/php {{thistemplatedoesnotexist}} !! end !! test pre-save transform: subst magic variables !! options pst !! wikitext {{subst:SITENAME}} !! html/php MediaWiki !! end # This is T2089, which I fixed. -- wtm !! test pre-save transform: subst: templates with parameters !! options pst !! wikitext {{subst:paramtest|param="something else"}} !! html/php This is a test template with parameter "something else" !! end !! article Template:nowikitest !! text '''not wiki''' !! endarticle !! test pre-save transform: nowiki in subst (T3188) !! options pst !! wikitext {{subst:nowikitest}} !! html/php '''not wiki''' !! end !! article Template:commenttest !! text This template has in it. !! endarticle !! test pre-save transform: comment in subst (T3936) !! options pst !! wikitext {{subst:commenttest}} !! html/php This template has in it. !! end !! test pre-save transform: unclosed tag !! options pst !! wikitext '''not wiki''' !! html/php '''not wiki''' !! end !! test pre-save transform: mixed tag case !! options pst !! wikitext '''not wiki''' !! html/php '''not wiki''' !! end !! test pre-save transform: unclosed comment in !! options pst !! wikitext wikinowiki !! html/php !!end !! test pre-save transform: comment containing extension !! options pst !! wikitext !! html/php !!end !! test pre-save transform: comment containing nowiki !! options pst !! wikitext !! html/php !!end !! test pre-save transform: in subst (T5298) !! options pst !! wikitext {{subst:Includes}} !! html/php Foobar !! end !! test pre-save transform: in subst (T5298) !! options pst !! wikitext {{subst:Includes2}} !! html/php Foo !! end !! article Template:SubstTest !!text {{subst:Includes}} !! endarticle !! article Template:SafeSubstTest !! text {{safesubst:Includes}} !! endarticle !! article Template:SafeSubstSelfTest !! text {{safesubst:SafeSubstSelfTest}} !! endarticle !! test T24297: safesubst: works during PST !! options pst !! wikitext {{subst:SafeSubstTest}}{{safesubst:SubstTest}} !! html/php FoobarFoobar !! end !! test T24297: safesubst: works during normal parse !! wikitext {{SafeSubstTest}} !! html

        Foobar

        !! end !! test subst: does not work during normal parse !! wikitext {{SubstTest}} !! html

        {{subst:Includes}}

        !! end !! test safesubst self: does not work during normal parse - T276476 !! options pst title=[[Template:SafeSubstSelfTest]] !! wikitext {{SafeSubstSelfTest}} !! html/php {{SafeSubstSelfTest}} !! end !! test pre-save transform: context links ("pipe trick") !! options pst !! wikitext [[Article (context)|]] [[Bar:Article|]] [[:Bar:Article|]] [[Bar:Article (context)|]] [[:Bar:Article (context)|]] [[|Article]] [[|Article (context)]] [[Bar:X (Y) Z|]] [[:Bar:X (Y) Z|]] !! html/php [[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 !! wikitext [[interwiki:Article|]] [[:interwiki:Article|]] [[interwiki:Bar:Article|]] [[:interwiki:Bar:Article|]] !! html/php [[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)]] !! wikitext [[|Article]] !! html/php [[Article (context)|Article]] !! end !! test pre-save transform: context links ("pipe trick") with single, double-width and Arabic comma in title !! options pst title=[[Someplace, Somewhere]] !! wikitext [[|Otherplace]] [[Otherplace, Elsewhere|]] [[Otherplace, Elsewhere, Anywhere|]] [[Otherplace,Elsewhere|]] [[Otherplace، Elsewhere|]] !! html/php [[Otherplace, Somewhere|Otherplace]] [[Otherplace, Elsewhere|Otherplace]] [[Otherplace, Elsewhere, Anywhere|Otherplace]] [[Otherplace,Elsewhere|Otherplace]] [[Otherplace، Elsewhere|Otherplace]] !! end !! test pre-save transform: context links ("pipe trick") with parens and comma !! options pst title=[[Someplace (IGNORED), Somewhere]] !! wikitext [[|Otherplace]] [[Otherplace (place), Elsewhere|]] !! html/php [[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)]] !! wikitext [[|Yes, you.]] [[Me, Myself, and I (1937 song)|]] !! html/php [[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]] !! wikitext [[|Article]] !! html/php [[Ns:Article|Article]] !! end !! test pre-save transform: context links ("pipe trick") with namespace and parens !! options pst title=[[Ns:Somearticle (context)]] !! wikitext [[|Article]] !! html/php [[Ns:Article (context)|Article]] !! end !! test pre-save transform: context links ("pipe trick") with namespace and comma !! options pst title=[[Ns:Somearticle, Context, Whatever]] !! wikitext [[|Article]] !! html/php [[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)]] !! wikitext [[|Article]] !! html/php [[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]] !! wikitext [[|Article]] !! html/php [[Ns:Article, Context|Article]] !! end !! test pre-save transform: context links ("pipe trick") with full-width parens and no space (Japanese and Chinese style, T32149) !! options pst !! wikitext [[Article(context)|]] [[Bar:Article(context)|]] [[:Bar:Article(context)|]] [[|Article(context)]] [[Bar:X(Y)Z|]] [[:Bar:X(Y)Z|]] !! html/php [[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, T32149) !! options pst !! wikitext [[Article (context)|]] [[Bar:Article (context)|]] [[:Bar:Article (context)|]] [[|Article (context)]] [[Bar:X (Y) Z|]] [[:Bar:X (Y) Z|]] !! html/php [[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, T32149) !! options pst !! wikitext [[Article(context)|]] [[Bar:Article(context)|]] [[:Bar:Article(context)|]] [[|Article(context)]] [[Bar:X(Y)Z|]] [[:Bar:X(Y)Z|]] !! html/php [[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 (T23660) !! options pst !! wikitext [[Article (context), context|]] [[Article (context),context|]] [[Bar:Article (context), context|]] [[Bar:Article (context),context|]] [[:Bar:Article (context), context|]] [[:Bar:Article (context),context|]] !! html/php [[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 Parsoid: backwards pipe trick !! wikitext [[|'''bar''']] !! html/php

        [[|bar]]

        !! html/parsoid

        [[|bar]]

        !! end !! test pre-save transform: trim trailing empty lines !! options pst !! wikitext Empty lines are trimmed !! html/php Empty lines are trimmed !! end !! test pre-save transform: Signature expansion !! options pst !! wikitext * ~~~ * ~~~~ * ~~~~~ * ~~~ * ~~~ * ~~~ !! html/php * [[Special:Contributions/127.0.0.1|127.0.0.1]] * [[Special:Contributions/127.0.0.1|127.0.0.1]] 00:02, 1 January 1970 (UTC) * 00:02, 1 January 1970 (UTC) * [[Special:Contributions/127.0.0.1|127.0.0.1]] * [[Special:Contributions/127.0.0.1|127.0.0.1]] * [[Special:Contributions/127.0.0.1|127.0.0.1]] !! end !! test ParserOutput flags from signature expansion (T84843) !! options pst showflags !! wikitext ~~~~ !! html/php [[Special:Contributions/127.0.0.1|127.0.0.1]] 00:02, 1 January 1970 (UTC) flags=user-signature !! end !! test pre-save transform: Signature expansion in nowiki tags (T2093) !! options pst disabled !! wikitext Shall not expand: ~~~~ ~~~~ ~~~~ ~~~~ {{subst:Foo}} shall be converted to FOO As well as inside noinclude/onlyinclude {{subst:Foo}} {{subst:Foo}} But not inside includeonly {{subst:Foo}} !! html/php Shall not expand: ~~~~ ~~~~ ~~~~ ~~~~ FOO shall be converted to FOO As well as inside noinclude/onlyinclude FOO FOO But not inside includeonly {{subst:Foo}} !! end !! test Parsoid: Recognize nowiki with trailing space in tags !! options parsoid=wt2html !! wikitext
        [[foo]] ab cd ef !! html/php

        <div>[[foo]]

        a<nowiki / >b

        cd

        e<nowiki/ >f

        !! html/parsoid

        <div>[[foo]]

        a<nowiki / >b

        cd

        e<nowiki/ >f

        !! end !! test Parsoid: Recognize nowiki with odd capitalization !! options parsoid=wt2html !! wikitext
        [[foo]] !! html/php

        <div>[[foo]]

        !! html/parsoid

        <div>[[foo]]

        !! end !! test Parsoid: Escape nowiki with trailing space in tags !! options parsoid=html2wt !! html/parsoid

        <nowiki > foo </nowiki >

        a<nowiki />b

        c<nowiki/ >d

        !! wikitext <nowiki > foo </nowiki > a<nowiki />b c<nowiki/ >d !! end !! test Parsoid: Escape weird noWikI capitalizations !! options parsoid=html2wt !! html/parsoid

        <noWikI > foo </NoWikI >

        !! wikitext <noWikI > foo </NoWikI > !! end ### ### Message transform tests ### !! test message transform: magic variables !! options msg !! wikitext {{SITENAME}} !! html MediaWiki !! end !! test message transform: should not transform wiki markup !! options msg !! wikitext ''test'' !! html ''test'' !! end !! test message transform: in transcluded template (T6926) !! options msg !! wikitext {{Includes}} !! html Foobar !! end !! test message transform: in transcluded template (T6926) !! options msg !! wikitext {{Includes2}} !! html Foo !! end !! test {{#special:}} page name, known !! options msg !! wikitext {{#special:Recentchanges}} !! html Special:RecentChanges !! end !! test {{#special:}} page name with subpage, known !! options msg !! wikitext {{#special:Recentchanges/param}} !! html Special:RecentChanges/param !! end !! test {{#special:}} page name, unknown !! options msg !! wikitext {{#special:foobar nonexistent}} !! html Special:Foobar nonexistent !! end !! test {{#speciale:}} page name, known !! options msg !! wikitext {{#speciale:Recentchanges}} !! html Special:RecentChanges !! end !! test {{#speciale:}} page name with subpage, known !! options msg !! wikitext {{#speciale:Recentchanges/param}} !! html Special:RecentChanges/param !! end !! test {{#speciale:}} page name, unknown !! options msg !! wikitext {{#speciale:foobar nonexistent}} !! html Special:Foobar_nonexistent !! end ### ### Subpages ### !! article Subpage test/subpage !! text foo !! endarticle !! test Subpage link !! options subpage title=[[Subpage test]] !! wikitext [[/subpage]] !! html

        /subpage

        !! end !! test Subpage noslash link !! options subpage title=[[Subpage test]] !! wikitext [[/subpage/]] !! html

        subpage

        !! end !! article Subpage test/1/2/subpage !! text blah !! endarticle !! test Relative subpage noslash link !! options parsoid=wt2wt,wt2html,html2html subpage title=[[Subpage test/1/2/3/4]] !! wikitext [[../../subpage/]] [[../../subpage]] !! html/php

        subpage

        Subpage test/1/2/subpage

        !! html/parsoid

        subpage

        Subpage test/1/2/subpage

        !! end !! test Parsoid: dot-slash prefixed wikilinks !! wikitext [[./foo]] [[././bar]] [[././baz/]] !! html/php

        [[./foo]]

        [[././bar]]

        [[././baz/]]

        !! html/parsoid

        [[./foo]]

        [[././bar]]

        [[././baz/]]

        !! end !! test Render invalid page names as plain text (T53090) !! wikitext [[./../foo|bar]] [[foo�|bar]] [[foo/.|bar]] [[foo/..|bar]] [[foo~~~bar]] [[foo>bar]] [[foo[bar]] [[.]] [[..]] [[foo././bar]] [[foo[http://example.com]xyz]] [[{{1x|./../foo}}|bar]] [[{{1x|foo/.}}|bar]] [[{{1x|foo/..}}|bar]] [[{{1x|foo~~~~bar}}]] [[{{1x|foo>bar}}]] [[{{1x|foo././bar}}]] [[{{1x|foo{bar}}]] [[{{1x|foo}bar}}]] [[{{1x|foo[bar}}]] [[{{1x|foo]bar}}]] [[{{1x|foo[[./../foo|bar]] [[foo�|bar]] [[foo/.|bar]] [[foo/..|bar]] [[foo~~~bar]] [[foo>bar]] [[foo[bar]] [[.]] [[..]] [[foo././bar]] [[foo[1]xyz]]

        [[./../foo|bar]] [[foo/.|bar]] [[foo/..|bar]] [[foo~~~~bar]] [[foo>bar]] [[foo././bar]] [[foo{bar]] [[foo}bar]] [[foo[bar]] [[foo]bar]] [[foo<bar]]

        !!html/parsoid

        [[./../foo|bar]] [[foo�|bar]] [[foo/.|bar]] [[foo/..|bar]] [[foo~~~bar]] [[foo>bar]] [[foo[bar]] [[.]] [[..]] [[foo././bar]] [[fooxyz]]

        [[./../foo|bar]] [[foo/.|bar]] [[foo/..|bar]] [[foo~~~~bar]] [[foo>bar]] [[foo././bar]] [[foo{bar]] [[foo}bar]] [[foo[bar]] [[foo]bar]] [[foo<bar]]

        !!end !! test Disabled subpages !! wikitext [[/subpage]] !! html

        /subpage

        !! end !! test T2561: {{/Subpage}} !! options subpage title=[[Page]] !! wikitext {{/Subpage}} !! html

        Page/Subpage

        !! end !! test Subpage with namespaces !! options subpage title=[[Subpage test/1/2/3/4]] !! wikitext [[User:../subpage]] [[meatball:../subpage]] !! html

        [[User:../subpage]] [[meatball:../subpage]]

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

        Category:MediaWiki User's Guide

        !! end !! test Simple category !! options cat !! wikitext [[Category:MediaWiki User's Guide]] !! html/php cat=MediaWiki_User's_Guide sort= !! html/parsoid !! end !! test PAGESINCATEGORY invalid title fatal (r33546 fix) !! wikitext {{PAGESINCATEGORY:}} !! html

        0

        !! end !! test Category with different sort key !! options cat !! wikitext [[Category:MediaWiki User's Guide|Foo]] !! html/php cat=MediaWiki_User's_Guide sort=Foo !! html/parsoid !! end !! test Category with identical sort key !! options cat !! wikitext [[Category:MediaWiki User's Guide|MediaWiki User's Guide]] !! html/php cat=MediaWiki_User's_Guide sort=MediaWiki User's Guide !! html/parsoid !! end !! test Category with newline in sort key !! options cat parsoid=wt2html,html2html !! wikitext [[Category:Wikidata:Tools| *]] !! html/php cat=Wikidata:Tools sort=* !! html/parsoid !! end !! test Category with template-generated sort key !! options cat !! wikitext [[Category:MediaWiki User's Guide|MediaWiki {{1x|Foo}} Guide]] !! html/php cat=MediaWiki_User's_Guide sort=MediaWiki Foo Guide !! html/parsoid !! end !! test Category with empty sort key !! options cat pst !! wikitext [[Category:MediaWiki User's Guide|]] !! html/php [[Category:MediaWiki User's Guide|MediaWiki User's Guide]] !! end !! test Category with empty sort key and parentheses !! options cat pst !! wikitext [[Category:Foo (bar)|]] !! html/php [[Category:Foo (bar)|Foo]] !! end !! test Category with link tail !! options cat pst !! wikitext 123[[Category:Foo]]456 !! html/php 123[[Category:Foo]]456 !! end !! test Category with template !! options cat pst !! wikitext [[Category:{{1x|Foo}}]] !! html/php [[Category:{{1x|Foo}}]] !! end !! test Category with template in sort key !! options cat pst !! wikitext [[Category:Foo|{{1x|Bar}}]] !! html/php [[Category:Foo|{{1x|Bar}}]] !! end !! test Category with template in sort key and title !! options cat pst !! wikitext [[Category:{{1x|Foo}}|{{1x|Bar}}]] !! html/php [[Category:{{1x|Foo}}|{{1x|Bar}}]] !! end ## We used to, but no longer wt2wt this test since the default serializer ## will normalize all categories to serialize on their own line. ## This wikitext usage is going to be fairly uncommon in production and ## selser will take care of preserving formatting in those scenarios. !! test Category / paragraph interactions !! options parsoid=wt2html !! wikitext 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]] {{1x|[[Category:Baz]]}} [[Category:Baz]] !! html/php

        Foo Bar

        Foo Bar

        Foo Bar

        Foo Bar

        Foo Bar

        !! html/parsoid

        Foo Bar

        Foo Bar

        Foo Bar

        Foo Bar

        Foo Bar

        !! end ## We used to, but no longer wt2wt this test since the default serializer ## will normalize all categories to serialize on their own line. ## This wikitext usage is going to be fairly uncommon in production and ## selser will take care of preserving formatting in those scenarios. ## ## The whitespace on the empty line is part of the test. Please do not delete !! test 1. Categories and newlines: All preceding newlines should be suppressed (courtesy T2087) !! options parsoid=wt2html !! wikitext This [[Category:Foo]] and this should be part of same paragraph (not an indent-pre) {{1x|[[Category:Foo]] and so should this!}} !! html/php

        This and this should be part of same paragraph (not an indent-pre) and so should this!

        !! html/parsoid

        This and this should be part of same paragraph (not an indent-pre) and so should this!

        !! end ## Parsoid will not try to wt2wt this while preserving newlines because ## it suppresses excess newlines within list items -- and we don't want to ## introduce a special case just for categories, which is, in reality somewhat ## odd behavior -- categories are unlikely to be used in list items like this ## in top-level pages and are only likely to show up in template-generated ## list items where this RT-ing is a non-issue. ## ## The whitespace on the empty line is part of the test. Please do not delete !! test 2. Categories and newlines: All preceding newlines should be suppressed (courtesy T2087) !! options parsoid=wt2html !! wikitext * This [[Category:Foo]] and this should be part of the same list item * So should this {{1x|[[Category:Foo]] and this should be part of the same list item}} !! html/php
        • This and this should be part of the same list item
        • So should this and this should be part of the same list item
        !! html/parsoid
        • This and this should be part of the same list item
        • So should this and this should be part of the same list item
        !! end ## Newlines and categories that follow the last item of a list ## are treated differently because this (list followed by categories) ## is an extremely common pattern on wikis. !! test 3. Categories and newlines: newline suppression for last list item should RT properly !! wikitext *a *b [[Category:Foo]] [[Category:Bar]] [[Category:Baz]] :c [[Category:C]] ;d [[Category:D]] !! html/parsoid
        • a
        • b
        c
        d
        !! end !! test 4. Categories and newlines: newline suppression for last list item should RT properly !! wikitext *a ****b [[Category:Foo]] !! html/parsoid
        • a
              • b
        !! end ## only wt2html for this to make sure the algo only applies to the rightmost path !! test 5. Categories and newlines: migrateTrailingCategories dom pass should only run on the rightmost path of nested lists !! options parsoid=wt2html !! wikitext *a **b [[Category:Foo]] *c **d [[Category:Foo]] !! html/parsoid
        • a
          • b
        • c
          • d
        !! end ## We used to, but no longer wt2wt this test since the default serializer ## will normalize all categories to serialize on their own line. ## This wikitext usage is going to be fairly uncommon in production and ## selser will take care of preserving formatting in those scenarios. !! test 6. Categories and newlines: migrateTrailingCategories dom pass should not migrate categories not preceded by newlines !! options parsoid=wt2html !! wikitext *a [[Category:Foo]] !! html/parsoid
        • a
        !! end # This test also demonstrates because of newline+category tunneling # through the list hander, template wrapping doesn't expand to the # containing list when the list item swallows the category. !! test 7. Categories and newlines: migrateTrailingCategories dom pass should leave template content alone !! wikitext *{{1x|a [[Category:Foo]]}} !! html/parsoid
        • a
        !! end !! test 8. Categories and newlines: migrateTrailingCategories dom pass should not get tripped by intervening templates !! wikitext *a {{1x|[[Category:Foo]] [[Category:Bar]]}} [[Category:Baz]] !! html/parsoid
        • a
        !! end !! test Categories and newlines: migrateTrailingCategories dom pass should not get tripped by comments and whitespace !! wikitext *a [[Category:Bar]] [[Category:Baz]] !! html/parsoid
        • a
        !! end !! test Categories and newlines: should behave properly with linkprefix (T87753) !! options language=ar !! wikitext foo bar foo bar [[تصنيف:Foo]] [[تصنيف:Bar]] !! html/php

        foo bar foo bar

        !! html/parsoid

        foo bar foo bar

        !! end !! test No regressions on internal links following category (T174639) !! options parsoid=wt2html,html2html !! wikitext [[Category:Foo]]
        a [[Foo]]
        !! html/php
        a Foo
        !! html/parsoid
        a Foo
        !! end # Note that Parsoid differs slightly from PHP due to T175421 !! test 11. Special case where only newlines separate links (T175416) !! options parsoid=wt2html,html2html !! wikitext [[Category:Foo]] [[Foo]][[es:Alimento]] [[Foo]] !! html/php


        Foo

        Foo

        !! html/parsoid

        Foo

        Foo

        !! end !! test Category links with multiple namespaces !! wikitext [[Category:Project:Foo]] !! html/parsoid !! end !! test Parsoid: Serialize link to category page with colon escape !! wikitext [[:Category:Foo]] [[:Category:Foo|Bar]] !! html/php

        Category:Foo Bar

        !! html/parsoid

        Category:Foo Bar

        !! end # We used to, but no longer wt2wt this test since the default serializer # will normalize all categories to serialize on their own line. # This wikitext usage is going to be fairly uncommon in production and # selser will take care of preventing whitespace insertion if this # occurs in an article. # # html2html disabled for the same reason (whitespace insertion between # x and y). # # html2wt disabled because it localizes the "Category" namespace. !! test Link prefix/suffixes aren't applied to category links !! options parsoid=wt2html language=is !! wikitext x[[Category:Foo]]y !! html/php

        xy

        !! html/parsoid

        xy

        !! end !! test Link prefix/suffixes aren't applied to language links !! options parsoid=wt2html language=is !! wikitext x[[es:Foo]]y !! html/php

        xy

        !! html/parsoid

        xy

        !! end !! test Parsoid: Serialize link to file page with colon escape !! wikitext [[:File:Foo.png]] [[:File:Foo.png|Bar]] !! html/php

        File:Foo.png Bar

        !! html/parsoid

        File:Foo.png Bar

        !! end !! test Parsoid: Serialize a genuine category link without colon escape !! wikitext [[Category:Foo]] [[Category:Foo|Bar]] !! html/php !! html/parsoid !! end !! test Normalize hrefs properly before testing for invalid link targets (T72894) !! options parsoid=html2wt !! html/parsoid !! wikitext [[Category:Toxine bactérienne]] !! end !! test Parsoid: Defaultsort !! wikitext {{DEFAULTSORT:Foo}} !! html/parsoid !! end !! test Parsoid: Defaultsort variations (T236846) !! wikitext {{DEFAULTSORT}} {{DEFAULTSORT:}} {{DEFAULTSORT:DOGGIE}} !! html/php

        Template:DEFAULTSORT


        !! html/parsoid !! end !! test Parsoid: Defaultsort with key content being added (T236846) !! options parsoid=html2wt !! html/parsoid !! wikitext {{DEFAULTSORT:BIRD}} !! end # NOTE: mw:ExpandedAttrs is not the best typeof here. mw:Transclusion is better. # But, this is a limitation of our representation and is documented in # TemplateHandler.js in processSpecialMagicWord !! test Parsoid: Defaultsort (template-generated) !! wikitext {{{{1x|DEFAULTSORT}}:Foo}} !! html/parsoid !! end ### ### Inter-language links ### !! test Interlanguage links !! options ill !! wikitext [[es:Alimento]] [[fr:Nourriture]] [[zh:食品]] !! html/php es:Alimento fr:Nourriture zh:食品 !! html/parsoid !! end !! test Duplicate interlanguage links (T26502) !! options ill !! wikitext [[es:1]] [[es:2]] [[fr:1]] [[fr:2]] !! html/php es:1 fr:1 !! html/parsoid !! end ### ### Sections ### !! test Basic section headings !! wikitext ==Headline 1== Some text ==Headline 2== More ===Smaller headline=== Blah blah !! html

        Headline 1[edit]

        Some text

        Headline 2[edit]

        More

        Smaller headline[edit]

        Blah blah

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

        Headline 1[edit]

        Subheadline 1[edit]

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

        Headline 2[edit]

        Some text

        Another headline[edit]

        !! end !! test Section headings with TOC and language conversion (T295187) !! config wgUsePigLatinVariant=true !! options language=en variant=en-x-piglatin !! wikitext ==Headline 1== ===Subheadline 1=== ==Headline 2== Some text ===Another headline=== !! html

        Eadlinehay 1[edit]

        Ubheadlinesay 1[edit]

        Eadlinehay 2[edit]

        Omesay exttay

        Anotherway eadlinehay[edit]

        !! end !! test Section headings with TOC and language conversion disabled (T295187) !! config wgUsePigLatinVariant=true !! options language=en variant=en-x-piglatin !! wikitext ==Headline 1== ===Subheadline 1=== ==Headline 2== Some text ===Another headline=== __NOCONTENTCONVERT__ !! html

        Headline 1[edit]

        Subheadline 1[edit]

        Headline 2[edit]

        Some text

        Another headline[edit]

        !! end !! test TOC anchors don't collide !! wikitext __FORCETOC__ ==Headline 2== ==Headline== ==Headline 2== ==Headline== !! html/php

        Headline 2[edit]

        Headline[edit]

        Headline 2[edit]

        Headline[edit]

        !! end # perl -e 'print "="x$_," Level $_ heading","="x$_,"\n" for 1..10' # Parsoid html2wt direction adds for level 7 and up. !! test Handling of sections up to level 6 and beyond !! options parsoid=wt2html !! wikitext =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========== !! html/php

        Level 1 Heading[edit]

        Level 2 Heading[edit]

        Level 3 Heading[edit]

        Level 4 Heading[edit]

        Level 5 Heading[edit]
        Level 6 Heading[edit]
        =Level 7 Heading=[edit]
        ==Level 8 Heading==[edit]
        ===Level 9 Heading===[edit]
        ====Level 10 Heading====[edit]
        !! html/parsoid

        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====
        !! end !! test TOC regression (T11764) !! wikitext ==title 1== ===title 1.1=== ====title 1.1.1==== ===title 1.2=== ==title 2== ===title 2.1=== !! html

        title 1[edit]

        title 1.1[edit]

        title 1.1.1[edit]

        title 1.2[edit]

        title 2[edit]

        title 2.1[edit]

        !! end !! test TOC for heading containing (T96153) !! wikitext __FORCETOC__ ==New title== !! html/php

        New title[edit]

        !! end !! test TOC with wgMaxTocLevel=3 (T8204) !! options wgMaxTocLevel=3 !! wikitext ==title 1== ===title 1.1=== ====title 1.1.1==== ===title 1.2=== ==title 2== ===title 2.1=== !! html

        title 1[edit]

        title 1.1[edit]

        title 1.1.1[edit]

        title 1.2[edit]

        title 2[edit]

        title 2.1[edit]

        !! end !! test TOC with wgMaxTocLevel=3 and two level four headings (T8204) !! options wgMaxTocLevel=3 !! wikitext ==Section 1== ===Section 1.1=== ====Section 1.1.1==== ====Section 1.1.1.1==== ==Section 2== !! html

        Section 1[edit]

        Section 1.1[edit]

        Section 1.1.1[edit]

        Section 1.1.1.1[edit]

        Section 2[edit]

        !! end !! test Resolving duplicate section names !! wikitext ==Foo bar== ==Foo bar== !! html

        Foo bar[edit]

        Foo bar[edit]

        !! end !! test Resolving duplicate section names with differing case (T12721) !! wikitext ==Foo bar== ==Foo Bar== !! html

        Foo bar[edit]

        Foo Bar[edit]

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

        Section 0[edit]

        Section 1[edit]

        Section 2[edit]

        Section 4[edit]

        !! end !! test __NOEDITSECTION__ keyword !! wikitext __NOEDITSECTION__ ==Section 1== ==Section 2== !! html

        Section 1

        Section 2

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

        Section with a link in it[edit]

        !! end !! test TOC regression (T14077) !! wikitext __TOC__ ==title 1== ===title 1.1=== ==title 2== !! html

        title 1[edit]

        title 1.1[edit]

        title 2[edit]

        !! end # Parsoid doesn't wt2wt this cleanly because it adds s. !! test Short headings with trailing space should match behavior of Parser::doHeadings (T21910) !! options parsoid=wt2html,html2html !! wikitext === The line above must have a trailing space! === But just in case it doesn't... !! html/php

        =[edit]

        The line above must have a trailing space!

        =[edit]

        But just in case it doesn't...

        !! html/parsoid

        =

        The line above must have a trailing space!

        =

        But just in case it doesn't...

        !! end !! test Header with special characters (T27462) !! wikitext 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 !! html/php

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

        text > text[edit]

        section 1

        text < text[edit]

        section 2

        text & text[edit]

        section 3

        text ' text[edit]

        section 4

        text " text[edit]

        section 5

        !! html/parsoid

        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

        !! end !! test Header with space, plus and underscore as entity !! wikitext Id should not contain + for spaces ==Space between Text== section 1 ==Space-Entity between Text== section 2 ==Plus+between+Text== section 3 ==Plus-Entity+between+Text== section 4 ==Underscore_between_Text== section 5 ==Underscore-Entity_between_Text== section 6 [[#Space between Text]] [[#Space-Entity between Text]] [[#Plus+between+Text]] [[#Plus-Entity+between+Text]] [[#Underscore_between_Text]] [[#Underscore-Entity_between_Text]] !! html/php

        Id should not contain + for spaces

        Space between Text[edit]

        section 1

        Space-Entity between Text[edit]

        section 2

        Plus+between+Text[edit]

        section 3

        Plus-Entity+between+Text[edit]

        section 4

        Underscore_between_Text[edit]

        section 5

        Underscore-Entity_between_Text[edit]

        section 6

        #Space between Text #Space-Entity between Text #Plus+between+Text #Plus-Entity+between+Text #Underscore_between_Text #Underscore-Entity_between_Text

        !! html/parsoid

        Id should not contain + for spaces

        Space between Text

        section 1

        Space-Entity between Text

        section 2

        Plus+between+Text

        section 3

        Plus-Entity+between+Text

        section 4

        Underscore_between_Text

        section 5

        Underscore-Entity_between_Text

        section 6

        #Space between Text #Space-Entity between Text #Plus+between+Text #Plus-Entity+between+Text #Underscore_between_Text #Underscore-Entity_between_Text

        !! end # Parsoid html2wt disabled because it adds padding spaces around = !! test Headers with excess '=' characters (Are similar tests necessary beyond the 1st level?) !! options parsoid=wt2html,wt2wt,html2html !! wikitext =foo== ==foo= =''italic'' heading== ==''italic'' heading= !! html/php

        foo=[edit]

        =foo[edit]

        italic heading=[edit]

        =italic heading[edit]

        !! html/parsoid

        foo=

        =foo

        italic heading=

        =italic heading

        !! end !! test HTML headers vs TOC (T25393) (__NOEDITSECTION__ for clearer output, doesn't matter here) !! wikitext

        Header 1

        ==Header 1.1== ==Header 1.2==

        Header 2

        ==Header 2.1== ==Header 2.2== __NOEDITSECTION__ !! html/php

        Header 1

        Header 1.1

        Header 1.2

        Header 2

        Header 2.1

        Header 2.2

        !! html/parsoid

        Header 1

        Header 1.1

        Header 1.2

        Header 2

        Header 2.1

        Header 2.2

        !! end !! test Single-line or multiline-comments can follow headings !! options parsoid=wt2html,wt2wt !! wikitext ==foo== ==bar== ==baz== !! html/php

        foo[edit]

        bar[edit]

        baz[edit]

        !! html/parsoid

        foo

        bar

        baz

        !! end !! test T3186 news: in the middle of text !! wikitext http://en.wikinews.org/wiki/Wikinews:Workplace !! html

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

        !!end !! test Namespaced link must have a title !! wikitext [[Project:]] !! html

        [[Project:]]

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

        [[Project:#fragment]]

        !!end ### ### HTML tags and HTML attributes ### !! test div with no attributes !! wikitext
        HTML rocks
        !! html
        HTML rocks
        !! end !! test div with double-quoted attribute !! wikitext
        HTML rocks
        !! html
        HTML rocks
        !! end !! test div with single-quoted attribute !! wikitext
        HTML rocks
        !! html
        HTML rocks
        !! end !! test div with unquoted attribute !! wikitext
        HTML rocks
        !! html
        HTML rocks
        !! end !! test div with illegal double attributes !! wikitext
        HTML rocks
        !! html
        HTML rocks
        !! end !! test div with empty attribute value, space before equals !! options parsoid=wt2html,html2html !! wikitext
        HTML rocks
        !! html/php
        HTML rocks
        !! html/parsoid
        HTML rocks
        !! end !! test div with multiple empty attribute values !! config wgFragmentMode=[ 'html5', 'legacy' ] !! options parsoid=wt2html,html2html !! wikitext
        HTML rocks
        !! html/php
        HTML rocks
        !! html/parsoid
        HTML rocks
        !! end # FIXME Parsoid doesn't actually match PHP here. !! test Extension tag in attribute value !! options wgRawHtml=1 !! wikitext ok !! html/php

        ok

        !! html/parsoid

        ok

        !! end !! test table with multiple empty attribute values !! options parsoid=wt2html,html2html !! wikitext {| title= id= |hi |} !! html/php
        hi
        !! html/parsoid
        hi
        !! end !! test div with braces in attribute value !! wikitext
        Foo
        !! html/php
        Foo
        !! html/parsoid
        Foo
        !! end !! test div with empty attribute value, no space before equals !! options parsoid=wt2html,html2html !! wikitext
        HTML rocks
        !! html/php
        HTML rocks
        !! html/parsoid
        HTML rocks
        !! end !! test HTML multiple attributes correction !! wikitext

        Awesome!

        !! html

        Awesome!

        !! end !! test Table multiple attributes correction !! wikitext {| !+ class="error" class="awesome"|status |} !! html
        status
        !! end !! test DIV IN UPPERCASE !! wikitext
        HTML ROCKS
        !! html
        HTML ROCKS
        !! end !! test Non-ASCII pseudo-tags are rendered as text !! wikitext !! html

        <khyô>

        !! end !! test Pseudo-tag with URL 'name' renders as url link !! wikitext !! html

        <http://example.com/>

        !! end !! test text with amp in the middle of nowhere !! wikitext Remember AT&T? !! html

        Remember AT&T?

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

        I always thought é was a cute letter.

        !! end !! test text with entity-escaped character entity-like string: eacute !! wikitext I always thought &eacute; was a cute letter. !! html

        I always thought &eacute; was a cute letter.

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

        I always thought &xacute; was a cute letter.

        !! end !! test Text with HTML5 semicolon-less entity (should not decode) !! wikitext &amp; !! html/php

        &ampamp;

        !! html/parsoid

        &ampamp;

        !! end !! test HTML5 tags !! wikitext five This highlighted text !! html

        five This highlighted text

        !! end !! test HTML tag with leading space is parsed as text !! wikitext < div>foo< /div> !! html

        < div>foo< /div>

        !! end ## FIXME: The untrimmed attribute in Parsoid is T205737 !! test Element with broken attribute syntax !! options parsoid=wt2html !! wikitext
        hi
        ho
        !! html/php
        hi
        ho
        !! html/parsoid
        hi
        ho
        !! end ### ### Nesting tests (see T43545, T52604, T53081) ### # This test case is fixed in Parsoid by domino 1.0.12. (T52604) # Note that html2wt is considerably more difficult if we use in # the test case, instead of !! test Ensure that HTML adoption agency algorithm is properly implemented. !! wikitext XYZ !! html

        XYZ

        !! end # This was T43545 in the PHP parser. !! test Nesting of !! wikitext XYZ !! html

        XYZ

        !! end # The following cases were T53081 in the PHP parser. # Note that there are some other nestable tags (b, i, etc) which are # not covered; see T53081 for discussion. !! test Nesting of !! wikitext XYZ !! html

        XYZ

        !! end !! test Nesting of !! wikitext XYZ !! html

        XYZ

        !! end !! test Nesting of !! wikitext XYZ !! html

        XYZ

        !! end !! test Nesting of !! wikitext XYZ !! html

        XYZ

        !! end !! test Nesting of !! wikitext XYZ !! html

        XYZ

        !! end ### ### Media links ### !! test Media link !! wikitext [[Media:Foobar.jpg]] [[Media:Video.ogv]] [[:Media:Video.ogv]] !! html/php

        Media:Foobar.jpg Media:Video.ogv Media:Video.ogv

        !! html/parsoid

        Media:Foobar.jpg Media:Video.ogv Media:Video.ogv

        !! end !! test Media link with text !! wikitext [[Media:Foobar.jpg|A neat file to look at]] !! html/php

        A neat file to look at

        !! html/parsoid

        A neat file to look at

        !! end !! test Localized media link !! options language=is !! wikitext [[Miðill:Foobar.jpg]] [[Miðill:Foobar.jpg|Icelandic]] !! html/php

        Miðill:Foobar.jpg

        Icelandic

        !! html/parsoid

        Miðill:Foobar.jpg

        Icelandic

        !! end # FIXME: this is still bad HTML tag nesting # FIXME: doBlockLevels won't wrap this in a paragraph because it contains a div # Parsoid & Remex fix the p-wrapping since they operate on the DOM. !! test Media link with nasty text !! options parsoid=wt2html,html2html !! wikitext [[Media:Foobar.jpg|Safe Link
        " onmouseover="alert(document.cookie)" onfoo="
        ]] !! html/php

        Safe Link

        " onmouseover="alert(document.cookie)" onfoo="
        !! html/parsoid

        Safe Link

        " onmouseover="alert(document.cookie)" onfoo="
        !! end !! test Media link from missing resource (parsoid-only) !! options parsoid=html2wt !! html/parsoid Bat! !! wikitext [[Media:Foobar.jpg|Bat!]] !! end !! test Media link from missing resource, localized (parsoid-only) !! options parsoid=html2wt language=is !! html/parsoid Bat! !! wikitext [[Miðill:Foobar.jpg|Bat!]] !! end # This is a test to ensure we don't crash or choke when given # old cached 1.7.0 HTML for media links; we don't require that the # result be "valid" because wt2wt was completely broken in 1.7.0 !! test Media link from old 1.7.0 DOM spec (crash test, parsoid-only) T198511 !! options parsoid=html2wt !! html/parsoid

        This is what Parsoid would emit (and we still handle this HTML fine):

        A neat file to look at

        But VisualEditor would mangle the rel attribute, and give us back this:

        A neat file to look at

        But at least we don't crash when trying to handle the mangled HTML!

        !! wikitext This is what Parsoid would emit (and we still handle this HTML fine): [[Media:Foobar.jpg|A neat file to look at]] But VisualEditor would mangle the rel attribute, and give us back this: [http://example.com/images/3/3a/Foobar.jpg A neat file to look at] But at least we don't crash when trying to handle the mangled HTML! !! end !! test Media link to nonexistent file (T3702) !! wikitext [[Media:No such.jpg]] [[Media:No_such file.jpg]] !! html/php

        Media:No such.jpg Media:No_such file.jpg

        !! html/parsoid

        Media:No such.jpg Media:No_such file.jpg

        !! end !! test Media link with nested wikilinks !! config wgParserEnableLegacyMediaDOM=false !! wikitext [[Media:Foobar.jpg|[[Test]]]] [[Media:Foobar.jpg|[[File:Foobar.jpg]]]] !! html/php

        [[Media:Foobar.jpg|Test]] [[Media:Foobar.jpg|Foobar.jpg]]

        !! html/parsoid

        [[Media:Foobar.jpg|Test]] [[Media:Foobar.jpg|]]

        !! end !! test Media link with multiple options !! wikitext [[Media:Foobar.jpg|123|345]] !! html/php

        123|345

        !! html/parsoid

        123|345

        !! end !! test Character reference normalization in link text (T3938) !! wikitext [[Main Page|this&that]] !! html

        this&that

        !! end !! article אַ !! text Test for unicode normalization The page's name is U+05d0 U+05b7, with non-canonical form U+FB2E !! endarticle # Parsoid has a regression here (T258858) note the incorrect redlink as well !! test (T21451) Links should refer to the normalized form. !! wikitext [[אַ]] [[אַ]] [[אַ]] [[אַ]] [[אַ]] !! html/php

        אַ אַ אַ אַ

        !! html/parsoid

        אַ אַ אַ אַ

        !! end !! test Empty attribute crash test (T4067) !! wikitext foo !! html

        foo

        !! end !! test Empty attribute crash test single-quotes (T4067) !! wikitext foo !! html

        foo

        !! end !! test Attribute test: equals, then nothing !! options parsoid=wt2html,html2html !! wikitext foo !! html/php

        foo

        !! html/parsoid

        foo

        !! end !! test Attribute test: unquoted value !! options parsoid=wt2html,html2html !! wikitext foo !! html/php

        foo

        !! html/parsoid

        foo

        !! end !! test Attribute test: unquoted but illegal value (hash) !! wikitext foo !! html

        foo

        !! end # Parsoid does not serialize to empty attribute syntax, # so wt2wt and html2wt cases are skipped !! test Attribute test: no value (T54330) !! options parsoid=wt2html,html2html !! wikitext foo !! html/php

        foo

        !! html/parsoid

        foo

        !! end !! test T4095: link with three closing brackets !! wikitext [[Main Page]]] !! html/php

        Main Page]

        !! html/parsoid

        Main Page]

        !! end !! test T4095: link with pipe and three closing brackets !! wikitext [[Main Page|link]]] !! html/php

        link]

        !! html/parsoid

        link]

        !! end !! test T4095: link with pipe and three closing brackets, version 2 !! wikitext [[Main Page|[http://example.com/]]] !! html/php

        [http://example.com/]

        !! html/parsoid

        [http://example.com/]

        !! end ### ### Safety ### !! article Template:Dangerous attribute !! text " onmouseover="alert(document.cookie) !! endarticle !! article Template:Dangerous style attribute !! text border-size: expression(alert(document.cookie)) !! endarticle !! article Template:Div style !! text
        Magic div
        !! endarticle !! test T4304: HTML attribute safety (safe template; regression T4309) !! wikitext
        !! html/php
        !! html/parsoid
        !! end # Parsoid has enough context to handle this case !! test T4304: HTML attribute safety (dangerous template; 2309) !! wikitext
        !! html/php
        !! html/parsoid
        !! end !! test T4304: HTML attribute safety (dangerous style template; 2309) !! wikitext
        !! html/php
        !! html/parsoid
        !! end !! test T4304: HTML attribute safety (safe parameter; 2309) !! wikitext {{div style|width: 200px}} !! html/php
        Magic div
        !! html/parsoid
        Magic div
        !! end !! test T4304: HTML attribute safety (unsafe parameter; 2309) !! wikitext {{div style|width: expression(alert(document.cookie))}} !! html/php
        Magic div
        !! html/parsoid
        Magic div
        !! end ## Parsoid output here differs; needs investigation. !! test T4304: HTML attribute safety (unsafe breakout parameter; 2309) !! wikitext {{div style|">}} !! html
        <script>alert(document.cookie)</script>">Magic div
        !! end ## Parsoid output here differs; needs investigation. !! test T4304: HTML attribute safety (unsafe breakout parameter 2; 2309) !! wikitext {{div style|" >}} !! html
        <script>alert(document.cookie)</script>">Magic div
        !! end !! test T4304: HTML attribute safety (link) !! wikitext
        !! html/php
        !! html/parsoid
        !! end !! test T4304: HTML attribute safety (italics) !! wikitext
        !! html
        !! end !! test T4304: HTML attribute safety (bold) !! wikitext
        !! html
        !! end !! test T4304: HTML attribute safety (ISBN) !! wikitext
        !! html
        !! end !! test T4304: HTML attribute safety (RFC) !! wikitext
        !! html
        !! end !! test T4304: HTML attribute safety (PMID) !! wikitext
        !! html
        !! end !! test T4304: HTML attribute safety (web link) !! wikitext
        !! html
        !! end !! test T4304: HTML attribute safety (named web link) !! wikitext
        !! html/php
        !! html/parsoid
        !! end !! test T5244: HTML attribute safety (extension; safe) !! wikitext
        !! html/php
        !! html/parsoid
        !! end !! test T5244: HTML attribute safety (extension; unsafe) !! wikitext
        !! html/php
        !! html/parsoid
        !! end # More MSIE fun discovered by Tom Gilder !! test MSIE CSS safety test: spurious slash !! wikitext
        evil
        !! html/php
        evil
        !! html/parsoid
        evil
        !! end !! test MSIE CSS safety test: hex code !! wikitext
        evil
        !! html/php
        evil
        !! html/parsoid
        evil
        !! end !! test MSIE CSS safety test: comment in url !! wikitext
        evil
        !! html/php
        evil
        !! html/parsoid
        evil
        !! end !! test MSIE CSS safety test: comment in expression !! wikitext
        evil4
        !! html/php
        evil4
        !! html/parsoid
        evil4
        !! end !! test CSS safety test (all browsers): vertical tab (T57332 / CVE-2013-4567) !! wikitext

        A

        !! html/php

        A

        !! html/parsoid

        A

        !! end !! test Opera -o-link CSS !! options parsoid=wt2html,html2html !! wikitext
        X
        !! html/php
        X
        !! html/parsoid
        X
        !! end !! test Table attribute legitimate extension !! wikitext {| !+ style="color:blue"|status |} !! html
        status
        !! end !! test Table attribute safety !! wikitext {| !+ style="border-width:expression(0+alert(document.cookie))"|status |} !! html
        status
        !! end !! test CSS line continuation 1 !! wikitext
        !! html
        !! end !! test CSS line continuation 2 !! wikitext
        !! html
        !! end !! article Template:Identity !! text {{{1}}} !! endarticle !! test Expansion of multi-line templates in attribute values (T8255) !! wikitext
        -
        !! html
        -
        !! end !! test Expansion of multi-line templates in attribute values (T8255 check) !! wikitext
        -
        !! html/php
        -
        !! html/parsoid
        -
        !! end !! test Expansion of multi-line templates in attribute values (T8255 check 2) !! wikitext
        -
        !! html
        -
        !! end !! test Tags which are hidden from tidiers cannot pass through the Sanitizer !! wikitext !! html

        <mw:toc><script>alert();</script></mw:toc>

        !! end ### ### Parser hooks (see tests/parser/ParserTestParserHook.php for the extension) ### !! test Parser hook: empty input !! wikitext !! html/php
        ''
        array (
        )
        
        !! html/parsoid
        
        !! end
        
        ## Don't expect parsoid to rt this form.
        !! test
        Parser hook: empty input using terminated empty elements
        !! options
        parsoid=wt2html,html2html
        !! wikitext
        
        !! html/php
        
        NULL
        array (
        )
        
        !! html/parsoid
        
        !! end
        
        !! test
        Parser hook: empty input using terminated empty elements (space before)
        !! wikitext
        
        !! html/php
        
        NULL
        array (
        )
        
        !! html/parsoid
        
        !! end
        
        !! test
        Parser hook: basic input
        !! wikitext
        input
        !! html/php
        
        'input'
        array (
        )
        
        !! html/parsoid
        
        !! end
        
        ## Don't expect parsoid to rt this form.
        !! test
        Parser hook: case insensitive
        !! options
        parsoid=wt2html,html2html
        !! wikitext
        input
        !! html/php
        
        'input'
        array (
        )
        
        !! html/parsoid
        
        !! end
        
        ## Don't expect parsoid to rt this form.
        !! test
        Parser hook: case insensitive, redux
        !! options
        parsoid=wt2html,html2html
        !! wikitext
        input
        !! html/php
        
        'input'
        array (
        )
        
        !! html/parsoid
        
        !! end
        
        !! test
        Parser hook: nested tags
        !! options
        parsoid=wt2html
        !! wikitext
        
        !! html/php
        
        ''
        array (
        )
        

        </tag>

        !! html/parsoid

        </tag>

        !! end !! test Parser hook: basic arguments !! wikitext !! html/php
        ''
        array (
          'width' => '200',
          'height' => '100',
          'depth' => '50',
          'square' => '',
        )
        
        !! html/parsoid
        
        !! end
        
        ## Don't expect parsoid to rt this form.
        !! test
        Parser hook: basic arguments, variations
        !! options
        parsoid=wt2html,html2html
        !! wikitext
        
        !! html/php
        
        ''
        array (
          'width' => '200',
          'height' => '100',
          'depth' => '50',
          'square' => '',
        )
        
        !! html/parsoid
        
        !! end
        
        !! test
        Parser hook: argument containing a forward slash (T7344)
        !! wikitext
        
        !! html/php
        
        ''
        array (
          'filename' => '/tmp/bla',
        )
        
        !! html/parsoid
        
        !! end
        
        ## Don't expect parsoid to rt this form.
        !! test
        Parser hook: empty input using terminated empty elements (T4374)
        !! options
        parsoid=wt2html,html2html
        !! wikitext
        text
        !! html/php
        
        NULL
        array (
          'foo' => 'bar',
        )
        

        text

        !! html/parsoid

        text

        !! end ##
        should be output literally since there is no matching tag that begins it ## Don't expect parsoid to rt this form. !! test Parser hook: basic arguments using terminated empty elements (T4374) !! options parsoid=wt2html !! wikitext other stuff !! html/php
        NULL
        array (
          'width' => '200',
          'height' => '100',
          'depth' => '50',
          'square' => '',
        )
        

        other stuff </tag>

        !! html/parsoid

        other stuff </tag>

        !! end ## Don't expect parsoid to rt this form. !! test Parser hook: Don't allow unclosed extension tags !! options parsoid=wt2html !! wikitext test 123 this is a '''test''' !! html/php

        test <tag>123

        this is a test

        !! html/parsoid

        test <tag>123

        this is a test

        !! end !! test Parser hook: horizontal rule inside extension tag that outputs
        !! wikitext
        
        Hello
        
        Goodbye
        !! html/php
        '
        Hello
        
        Goodbye ' array ( )
        !! end ### ### (see tests/parser/ParserTestParserHook.php for the extension) ### !! test Parser hook: static parser hook not inside a comment !! wikitext hello, world !! html/php


        hello, world

        !! html/parsoid

        hello, world

        !! end !! test Parser hook: static parser hook inside a comment !! wikitext !! html/php


        !! html/parsoid

        !! 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 !! wikitext {{Map-one-parameter|One-parameter|param}} !! html

        (My parameter is: param)

        !! end ### ### Sanitizer ### !! test Sanitizer: Closing of open tags !! wikitext
        !! html/php

        !! html/parsoid

        !! end # Legacy parser adds an extra newline (seen as a space) which Parsoid does not !! test Sanitizer: Closing of open but not closed tags !! wikitext foo !! html/php

        foo

        !! html/parsoid

        foo

        !! end !! test Sanitizer: Closing of closed but not open tags !! options parsoid=wt2html !! wikitext
        !! html

        !! end !! test Sanitizer: Closing of closed but not open table tags !! options parsoid=wt2html !! wikitext Table not started
        !! html

        Table not started

        !! end !! test Sanitizer: Escaping of spaces, multibyte characters, colons & other stuff in id="" !! options title=[[Main Page]] !! config wgFragmentMode=[ 'html5', 'legacy' ] !! wikitext byte[[#æ: v|backlink]] !! html/php

        bytebacklink

        !! html/parsoid

        bytebacklink

        !! end !! test Sanitizer: Escaping of spaces, multibyte characters, colons & other stuff in id="" (legacy) !! config wgFragmentMode=[ 'legacy' ] !! wikitext byte[[#æ: v|backlink]] !! html/php

        bytebacklink

        !! end # In HTML5, the restrictions are that id must contain at least one character, # and must not contain any space characters. !! test Sanitizer: Validating the contents of the id attribute (T6515) !! options disabled !! wikitext

        !! html Something ... !! end # In HTML5, id must be unique amongst all the ids in the element's home subtree. !! test Sanitizer: Validating id attribute uniqueness (T6515, T8301) !! options disabled !! wikitext

        !! html Something need to be done. foo-2 ? !! end !! test Sanitizer: Validating that and work, but only for Microdata !! wikitext
        !! html

        <meta http-equiv="refresh" content="5"> <link rel="stylesheet" href="http://example.org">

        !! end !! test Sanitizer: Strip comments from CSS attributes !! options parsoid=wt2html,wt2wt !! wikitext 2013 !! html/php

        2013

        !! html/parsoid

        2013

        !! end !! test Sanitizer: Avoid unnecessary percent encoded characters in interwiki links !! wikitext [[meatball:Soft"Security]] !! html/php

        meatball:Soft"Security

        !! html/parsoid

        meatball:Soft"Security

        !! end !! test Sanitizer: angle brackets are invalid, even in interwiki links (T182338) !! wikitext [[meatball:FooBar]] [[meatball:Foo<bar]] [[meatball:Foo>bar]] !! html/php

        [[meatball:Foo<Bar]] [[meatball:Foo>Bar]] [[meatball:Foo<bar]] [[meatball:Foo>bar]]

        !! html/parsoid

        [[meatball:Foo<Bar]] [[meatball:Foo>Bar]] [[meatball:Foo<bar]] [[meatball:Foo>bar]]

        !! end !! test Language converter: output gets cut off unexpectedly (T7757) !! options language=zh !! wikitext 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 !! html/php

        this bit is safe: }-

        but if we add a conversion instance: xxx

        then we get cut off here: }-

        all additional text is vanished

        !! html/parsoid

        this bit is safe: }-

        but if we add a conversion instance:

        then we get cut off here: }-

        all additional text is vanished

        !! end !! test Language converter glossary rules inside attributes (T119158) !! options language=sr variant=sr-el !! config wgParserEnableLegacyMediaDOM=false !! wikitext -{H|foAjrjvi=>sr-el:" onload="alert(1)" data-foo="}- [[File:Foobar.jpg|alt=-{}-foAjrjvi-{}-]] !! html/php

        " onload="alert(1)" data-foo="

        !! html/parsoid

        foAjrjvi

        !! end !! test Self closed html pairs (T7487) !! wikitext
        Centered text
        In div text
        !! html
        Centered text
        In div text
        !! end !! test Punctuation: nbsp before exclamation !! wikitext C'est grave ! !! html/php

        C'est grave !

        !! html/parsoid

        C'est grave !

        !! end !! test Punctuation: CSS !important (T13874) !! wikitext
        important
        !! html
        important
        !! end !! test Punctuation: CSS ! important (T13874; with space after) !! wikitext
        important
        !! html
        important
        !! end !! test HTML bullet list, closed tags (T7497) !! wikitext
        • One
        • Two
        !! html/php
        • One
        • Two
        !! html/parsoid
        • One
        • Two
        !! end !! test HTML bullet list, unclosed tags (T7497) !! wikitext
        • One
        • Two
        !! html/php
        • One
        • Two
        !! html/parsoid
        • One
        • Two
        !! end !! test HTML ordered list, closed tags (T7497) !! wikitext
        1. One
        2. Two
        !! html/php
        1. One
        2. Two
        !! html/parsoid
        1. One
        2. Two
        !! end !! test HTML ordered list, unclosed tags (T7497) !! options !! wikitext
        1. One
        2. Two
        !! html/php
        1. One
        2. Two
        !! html/parsoid
        1. One
        2. Two
        !! end !! test HTML nested bullet list, closed tags (T7497) !! wikitext
        • One
        • Two:
          • Sub-one
          • Sub-two
        !! html/php
        • One
        • Two:
          • Sub-one
          • Sub-two
        !! html/parsoid
        • One
        • Two:
          • Sub-one
          • Sub-two
        !! end !! test HTML nested bullet list, open tags (T7497) !! wikitext
        • One
        • Two:
          • Sub-one
          • Sub-two
        !! html
        • One
        • Two:
          • Sub-one
          • Sub-two
        !! end !! test HTML nested ordered list, closed tags (T7497) !! wikitext
        1. One
        2. Two:
          1. Sub-one
          2. Sub-two
        !! html
        1. One
        2. Two:
          1. Sub-one
          2. Sub-two
        !! end !! test HTML nested ordered list, open tags (T7497) !! wikitext
        1. One
        2. Two:
          1. Sub-one
          2. Sub-two
        !! html/php
        1. One
        2. Two:
          1. Sub-one
          2. Sub-two
        !! html/parsoid
        1. One
        2. Two:
          1. Sub-one
          2. Sub-two
        !! end !! test HTML ordered list item with parameters oddity !! wikitext
        1. One
        !! html
        1. One
        !! end # parsoid doesn't explicitly mark autonumbered links, see T55505 !!test T7918: autonumbering !! wikitext [http://first/] [http://second] [ftp://ftp] ftp://inlineftp [mailto:enclosed@mail.tld With target] [mailto:enclosed@mail.tld] mailto:inline@mail.tld !! html/php

        [1] [2] [3]

        ftp://inlineftp

        With target

        [4]

        mailto:inline@mail.tld

        !! html/parsoid

        ftp://inlineftp

        With target

        mailto:inline@mail.tld

        !! end # # Security and HTML correctness # From Nick Jenkins' fuzz testing # !! test Fuzz testing: Parser13 !! wikitext {| | http://a| !! html
        !! end # Note that Parsoid output differs from the PHP parser here: the PHP # parser breaks the URL for the magic word, while in Parsoid the URL # production takes precedence. !! test Fuzz testing: Parser14 !! wikitext ==onmouseover=== http://__TOC__ !! html/php

        onmouseover=[edit]

        http://

        !! html/parsoid

        onmouseover=

        http://__TOC__

        !! end !! test Fuzz testing: Parser14-table !! options parsoid=wt2html,html2html !! wikitext ==a== {| STYLE=__TOC__ !! html/php

        a[edit]

        !! html/parsoid

        a

        !! end # Known to produce bogus xml (extra ) # Don't add the html/php section since it generates broken HTML !! test Fuzz testing: Parser16 !! wikitext {| !https://|||||| !! html
        https://
        !! end !! test Fuzz testing: Parser21 !! wikitext {| !irc://{{ftp://a" onmouseover="alert('hello world');" | !! html
        irc://{{ftp://a" onmouseover="alert('hello world');"
        !! end !! test Fuzz testing: Parser22 !! wikitext http://===r:::https://b {| !! html/php

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

        !! html/parsoid

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

        !! end # The above 'Parser24' fuzz test exposed a tokenizer bug (T221384); # this is a minimized version of the above test to catch regressions. !! test Fuzz testing: Parser24 (minimized) !! options parsoid=wt2html !! wikitext {{}} !! html/php

        {{}}

        !! html/parsoid

        {{}}

        !! end ## Remex doesn't account for fostered content. ## Known to produce bad XML for now !! test Fuzz testing: Parser24 !! options parsoid=wt2html !! wikitext {| {{{| }}}} >
        MOVE YOUR MOUSE CURSOR OVER THIS TEXT | !! html/php {{{| }}}} >
        MOVE YOUR MOUSE CURSOR OVER THIS TEXT
        !! html/parsoid

        {{{| }}}} >
        MOVE YOUR MOUSE CURSOR OVER THIS TEXT

        !! end # Note: the current result listed for this is not what the original one was, # but the original bug was JavaScript injection, which is fixed in any case. # It's not clear that the original result listed was any more correct than the # current one. Original result: #

        {{{| #

        #
      • # }}}blah" onmouseover="alert('hello world');" align="left"MOVE MOUSE CURSOR OVER HERE !!test Fuzz testing: Parser25 (T8055) !! wikitext {{{ |
      • }}}blah" onmouseover="alert('hello world');" align="left"'''MOVE MOUSE CURSOR OVER HERE !! html/php

        <LI CLASS=blah" onmouseover="alert('hello world');" align="left"MOVE MOUSE CURSOR OVER HERE

        !! html/parsoid

        <LI CLASS=blah" onmouseover="alert('hello world');" align="left"MOVE MOUSE CURSOR OVER HERE

        !! end !!test Fuzz testing: URL adjacent extension (with space, clean) !! wikitext http://example.com junk !! html/php

        http://example.com junk

        !! html/parsoid

        http://example.com junk

        !! end !!test Fuzz testing: URL adjacent extension (no space, dirty; nowiki) !! wikitext http://example.comjunk !! html/php

        http://example.comjunk

        !! html/parsoid

        http://example.comjunk

        !! end !! test Fuzz testing: URL adjacent extension (no space, dirty; pre) !! wikitext http://example.com
        junk
        !! html/php

        http://example.com

        junk
        !! html/parsoid

        http://example.com

        junk
        !! end # Parsoid will emit the newline literally in wt2wt; see next test case. !! test Fuzz testing: encoded newline in generated HTML replacements (T8577) !! options parsoid=wt2html !! wikitext
        
        !! html/php
        
        
        !! html/parsoid
        
        
        !! end
        
        !! test
        Fuzz testing: encoded newline in generated HTML replacements, html2wt (T8577)
        !! options
        parsoid=html2wt
        !! html/parsoid
        
        
        !! wikitext
        
        
        !! html/php
        
        
        !! end
        
        !! test
        Templates in extension attributes are not expanded
        !! wikitext
        
        
        !! html/php
        
        
        !! html/parsoid
        
        
        !! end
        
        !! test
        Parsing optional HTML elements (T8171)
        !! options
        !! wikitext
        
        Some tabular data More tabular data ... And yet som tabular data
        !! html
        Some tabular data More tabular data ... And yet som tabular data
        !! end !! test Correct handling of , (T8171) !! options !! wikitext
        Some tabular data More tabular data ... And yet som tabular data
        !! html
        Some tabular data More tabular data ... And yet som tabular data
        !! end !! test Parsing crashing regression (fr:JavaScript) !! wikitext !! html

        </body></x>

        !! end !! test Inline wiki vs wiki block nesting !! wikitext '''Bold paragraph New wiki paragraph !! html

        Bold paragraph

        New wiki paragraph

        !! end # FIXME: The current php output is documented # and desired output is the parsoid target. !! test Inline HTML vs wiki block nesting !! wikitext Bold paragraph New wiki paragraph !! html/php

        Bold paragraph

        New wiki paragraph

        !! html/parsoid

        Bold paragraph

        New wiki paragraph

        !! end # Original result was this: #

        boldboldbolditalics #

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

        'bold'boldbolditalics

        !! end !! article Xyzzyx !! text Article for special page transclusion test !! endarticle !! test Special page transclusion !! options !! wikitext {{Special:Prefixindex/Xyzzyx}} !! html !! end !! test Special page transclusion twice (T7021) !! options !! wikitext {{Special:Prefixindex/Xyzzyx}} {{Special:Prefixindex/Xyzzyx}} !! html !! end !! test Transclusion of default MediaWiki message !! wikitext {{MediaWiki:Mainpage}} !! html

        Main Page

        !! end !! test Transclusion of nonexistent MediaWiki message !! wikitext {{MediaWiki:Mainpagexxx}} !! html

        MediaWiki:Mainpagexxx

        !! end !! test Transclusion of MediaWiki message with underscore !! wikitext {{MediaWiki:history_short}} !! html

        History

        !! end !! test Transclusion of MediaWiki message with space !! wikitext {{MediaWiki:history short}} !! html

        History

        !! end !! test Invalid header with following text !! wikitext = x = y !! html

        = x = y

        !! end !! test Section extraction test (section 0) !! options section=0 !! wikitext start ==a== ===aa=== ====aaa==== ==b== ===ba=== ===bb=== ====bba==== ===bc=== ==c== ===ca=== !! html/php start !! end !! test Section extraction test (section 1) !! options section=1 !! wikitext start ==a== ===aa=== ====aaa==== ==b== ===ba=== ===bb=== ====bba==== ===bc=== ==c== ===ca=== !! html/php ==a== ===aa=== ====aaa==== !! end !! test Section extraction test (section 2) !! options section=2 !! wikitext start ==a== ===aa=== ====aaa==== ==b== ===ba=== ===bb=== ====bba==== ===bc=== ==c== ===ca=== !! html/php ===aa=== ====aaa==== !! end !! test Section extraction test (section 3) !! options section=3 !! wikitext start ==a== ===aa=== ====aaa==== ==b== ===ba=== ===bb=== ====bba==== ===bc=== ==c== ===ca=== !! html/php ====aaa==== !! end !! test Section extraction test (section 4) !! options section=4 !! wikitext start ==a== ===aa=== ====aaa==== ==b== ===ba=== ===bb=== ====bba==== ===bc=== ==c== ===ca=== !! html/php ==b== ===ba=== ===bb=== ====bba==== ===bc=== !! end !! test Section extraction test (section 5) !! options section=5 !! wikitext start ==a== ===aa=== ====aaa==== ==b== ===ba=== ===bb=== ====bba==== ===bc=== ==c== ===ca=== !! html/php ===ba=== !! end !! test Section extraction test (section 6) !! options section=6 !! wikitext start ==a== ===aa=== ====aaa==== ==b== ===ba=== ===bb=== ====bba==== ===bc=== ==c== ===ca=== !! html/php ===bb=== ====bba==== !! end !! test Section extraction test (section 7) !! options section=7 !! wikitext start ==a== ===aa=== ====aaa==== ==b== ===ba=== ===bb=== ====bba==== ===bc=== ==c== ===ca=== !! html/php ====bba==== !! end !! test Section extraction test (section 8) !! options section=8 !! wikitext start ==a== ===aa=== ====aaa==== ==b== ===ba=== ===bb=== ====bba==== ===bc=== ==c== ===ca=== !! html/php ===bc=== !! end !! test Section extraction test (section 9) !! options section=9 !! wikitext start ==a== ===aa=== ====aaa==== ==b== ===ba=== ===bb=== ====bba==== ===bc=== ==c== ===ca=== !! html/php ==c== ===ca=== !! end !! test Section extraction test (section 10) !! options section=10 !! wikitext start ==a== ===aa=== ====aaa==== ==b== ===ba=== ===bb=== ====bba==== ===bc=== ==c== ===ca=== !! html/php ===ca=== !! end !! test Section extraction test (nonexistent section 11) !! options section=11 !! wikitext start ==a== ===aa=== ====aaa==== ==b== ===ba=== ===bb=== ====bba==== ===bc=== ==c== ===ca=== !! html/php !! end !! test Section extraction test with bogus heading (section 1) !! options section=1 !! wikitext ==a== ==bogus== not a legal section ==b== !! html/php ==a== ==bogus== not a legal section !! end !! test Section extraction test with bogus heading (section 2) !! options section=2 !! wikitext ==a== ==bogus== not a legal section ==b== !! html/php ==b== !! end !! test Section extraction test with comment after heading (section 1) !! options section=1 !! wikitext ==a== ==b== ==c== !! html/php ==a== !! end !! test Section extraction test with comment after heading (section 2) !! options section=2 !! wikitext ==a== ==b== ==c== !! html/php ==b== !! end !! test Section extraction test with bogus heading (section 1) !! options section=1 !! wikitext ==a== ==bogus== not a legal section ==b== !! html/php ==a== ==bogus== not a legal section !! end !! test Section extraction test with bogus heading (section 2) !! options section=2 !! wikitext ==a== ==bogus== not a legal section ==b== !! html/php ==b== !! end # Formerly testing for T4587, now resolved by the use of unmarked sections # instead of respecting commented sections !! test Section extraction prefixed by comment (section 1) !! options section=1 !! wikitext ==sec1== ==sec2== !! html/php ==sec2== !!end !! test Section extraction prefixed by comment (section 2) !! options section=2 !! wikitext ==sec1== ==sec2== !! html/php !! end # Formerly testing for T4607, 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 !! wikitext

        unmarked

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

        unmarked

        unmarked ==1== one ==2== two !! html/php ==2== two !! end # Formerly testing for T5342 !! test Section extraction, heading surrounded by !! options section=1 !! wikitext ==unmarked== ==marked== !! html/php ==marked== !!end # Test behavior of T21910 !! test Sectiion with all-equals !! options section=2 !! wikitext === The line above must have a trailing space === But just in case it doesn't... !! html/php === But just in case it doesn't... !! end !! test Section replacement test (section 0) !! options replace=0,"xxx" !! wikitext start ==a== ===aa=== ====aaa==== ==b== ===ba=== ===bb=== ====bba==== ===bc=== ==c== ===ca=== !! html/php xxx ==a== ===aa=== ====aaa==== ==b== ===ba=== ===bb=== ====bba==== ===bc=== ==c== ===ca=== !! end !! test Section replacement test (section 1) !! options replace=1,"xxx" !! wikitext start ==a== ===aa=== ====aaa==== ==b== ===ba=== ===bb=== ====bba==== ===bc=== ==c== ===ca=== !! html/php start xxx ==b== ===ba=== ===bb=== ====bba==== ===bc=== ==c== ===ca=== !! end !! test Section replacement test (section 2) !! options replace=2,"xxx" !! wikitext start ==a== ===aa=== ====aaa==== ==b== ===ba=== ===bb=== ====bba==== ===bc=== ==c== ===ca=== !! html/php start ==a== xxx ==b== ===ba=== ===bb=== ====bba==== ===bc=== ==c== ===ca=== !! end !! test Section replacement test (section 3) !! options replace=3,"xxx" !! wikitext start ==a== ===aa=== ====aaa==== ==b== ===ba=== ===bb=== ====bba==== ===bc=== ==c== ===ca=== !! html/php start ==a== ===aa=== xxx ==b== ===ba=== ===bb=== ====bba==== ===bc=== ==c== ===ca=== !! end !! test Section replacement test (section 4) !! options replace=4,"xxx" !! wikitext start ==a== ===aa=== ====aaa==== ==b== ===ba=== ===bb=== ====bba==== ===bc=== ==c== ===ca=== !! html/php start ==a== ===aa=== ====aaa==== xxx ==c== ===ca=== !! end !! test Section replacement test (section 5) !! options replace=5,"xxx" !! wikitext start ==a== ===aa=== ====aaa==== ==b== ===ba=== ===bb=== ====bba==== ===bc=== ==c== ===ca=== !! html/php start ==a== ===aa=== ====aaa==== ==b== xxx ===bb=== ====bba==== ===bc=== ==c== ===ca=== !! end !! test Section replacement test (section 6) !! options replace=6,"xxx" !! wikitext start ==a== ===aa=== ====aaa==== ==b== ===ba=== ===bb=== ====bba==== ===bc=== ==c== ===ca=== !! html/php start ==a== ===aa=== ====aaa==== ==b== ===ba=== xxx ===bc=== ==c== ===ca=== !! end !! test Section replacement test (section 7) !! options replace=7,"xxx" !! wikitext start ==a== ===aa=== ====aaa==== ==b== ===ba=== ===bb=== ====bba==== ===bc=== ==c== ===ca=== !! html/php start ==a== ===aa=== ====aaa==== ==b== ===ba=== ===bb=== xxx ===bc=== ==c== ===ca=== !! end !! test Section replacement test (section 8) !! options replace=8,"xxx" !! wikitext start ==a== ===aa=== ====aaa==== ==b== ===ba=== ===bb=== ====bba==== ===bc=== ==c== ===ca=== !! html/php start ==a== ===aa=== ====aaa==== ==b== ===ba=== ===bb=== ====bba==== xxx ==c== ===ca=== !!end !! test Section replacement test (section 9) !! options replace=9,"xxx" !! wikitext start ==a== ===aa=== ====aaa==== ==b== ===ba=== ===bb=== ====bba==== ===bc=== ==c== ===ca=== !! html/php start ==a== ===aa=== ====aaa==== ==b== ===ba=== ===bb=== ====bba==== ===bc=== xxx !! end !! test Section replacement test (section 10) !! options replace=10,"xxx" !! wikitext start ==a== ===aa=== ====aaa==== ==b== ===ba=== ===bb=== ====bba==== ===bc=== ==c== ===ca=== !! html/php start ==a== ===aa=== ====aaa==== ==b== ===ba=== ===bb=== ====bba==== ===bc=== ==c== xxx !! end !! test Section replacement test with initial whitespace (T15728) !! options replace=2,"xxx" !! wikitext Preformatted initial line ==a== ===a=== !! html/php Preformatted initial line ==a== xxx !! end !! test Section extraction, heading followed by pre with 20 spaces (T8398) !! options section=1 !! wikitext ==a== a !! html/php ==a== a !! end !! test Section extraction, heading followed by pre with 19 spaces (T8398 check) !! options section=1 !! wikitext ==a== a !! html/php ==a== a !! end !! test Section extraction,
         around bogus header (T12309)
        !! options
        section=2
        !! wikitext
        == Section One ==
        
        =======
        
        == Section Two == stuff !! html/php == Section Two == stuff !! end !! test Section replacement,
         around bogus header (T12309)
        !! options
        replace=2,"xxx"
        !! wikitext
        == Section One ==
        
        =======
        
        == Section Two == stuff !! html/php == Section One ==
        =======
        
        xxx !! end !! test Handling of in URLs !! wikitext *irc:// a !! html/php !! html/parsoid !! end !! test Handling of %0A in URLs !! wikitext *irc://%0Aa !! html/php !! html/parsoid !! end # The PHP parser strips the empty tags out for giggles; parsoid doesn't. !! test 5 quotes, code coverage +1 line !! options parsoid=wt2html !! wikitext ''''' !! html/php !! html/parsoid

        !! end # same html as previous, but wikitext adjusted to match parsoid html2wt # note that wt2html will put the before the !! test 5 quotes, code coverage +1 line (1) !! options parsoid=html2wt !! html/parsoid

        !! wikitext !! end # same as previous, just swapping the and !! test 5 quotes, code coverage +1 line (2) !! options parsoid=html2wt !! html/parsoid

        !! wikitext !! end !! test Special:Search page linking. !! wikitext {{Special:search}} !! html

        Special:Search

        !! end !! test {{!}} is a magic word !! wikitext {{!}} is a magic word there and {{!}} is still a magic word here | is not a magic word here but {{!}} is still a magic word here !! html/php

        | is a magic word there and | is still a magic word here | is not a magic word here but | is still a magic word here

        !! html/parsoid

        | is a magic word there and | is still a magic word here | is not a magic word here but | is still a magic word here

        !! end !! test Single {{!}} in table cell !! wikitext {| | colspan="1" |foo {{!}} bar |} !! html/php
        foo | bar
        !! html/parsoid
        foo | bar
        !! end !! test Say the magic word !! options title=[[Parser test]] !! wikitext *{{PAGENAME}} *{{PAGENAMEE}} *{{FULLPAGENAME}} *{{FULLPAGENAMEE}} *{{BASEPAGENAME}} *{{BASEPAGENAMEE}} *{{SUBPAGENAME}} *{{SUBPAGENAMEE}} *{{ROOTPAGENAME}} *{{ROOTPAGENAMEE}} *{{TALKPAGENAME}} *{{TALKPAGENAMEE}} *{{SUBJECTPAGENAME}} *{{SUBJECTPAGENAMEE}} *{{NAMESPACEE}} *{{NAMESPACE}} *{{NAMESPACENUMBER}} *{{TALKSPACE}} *{{TALKSPACEE}} *{{SUBJECTSPACE}} *{{SUBJECTSPACEE}} *{{Dynamic|{{NUMBEROFUSERS}}|{{NUMBEROFPAGES}}|{{CURRENTVERSION}}|{{CONTENTLANGUAGE}}|{{DIRECTIONMARK}}|{{CURRENTTIMESTAMP}}|{{NUMBEROFARTICLES}}}} !! html
        • Parser test
        • Parser_test
        • Parser test
        • Parser_test
        • Parser test
        • Parser_test
        • Parser test
        • Parser_test
        • Parser test
        • Parser_test
        • Talk:Parser test
        • Talk:Parser_test
        • Parser test
        • Parser_test
        • 0
        • Talk
        • Talk
        • Template:Dynamic
        !! end ### Note: Above tests excludes the "{{NUMBEROFADMINS}}" magic word because it generates a MySQL error when included. !! test HTML Hex character encoding (spells the word "JavaScript") !! options parsoid=wt2html,wt2wt,html2html !! wikitext JavaScript !! html/php

        JavaScript

        !! html/parsoid

        JavaScript

        !! end !! test HTML Hex character encoding bogus encoding (T28437 regression check) !! wikitext &#xsee;&#XSEE; !! html

        &#xsee;&#XSEE;

        !! end !! test HTML Hex character encoding mixed case !! options parsoid=wt2html,wt2wt,html2html !! wikitext îî !! html/php

        îî

        !! html/parsoid

        îî

        !! end # See: https://www.w3.org/TR/html5/syntax.html#character-references # Note that U+000C (form feed) is not a valid XML character, so # it is banned even though allowed in HTML5. # Note there are also weird legacy numeric entities which are mapped # elsewhere; see T113194 !! test Illegal character references (T106578, T113194) !! options parsoid={ "modes": ["wt2html","html2html"], "normalizePhp": true } !! wikitext ; Null: � ; FF: ; CR: ; Control (low):  ; Control (high):  Ÿ ; Unsupported legacy: € ‚ ƒ – Ÿ ; Surrogate: �� ; Invalid characters: ￾ ￿ ; This is an okay astral character: 💩 ; This is an okay multi-codepoint HTML5 entity: ∾̳ ; This are valid wikitext-specific entities: &רלמ; &رلم; ; Highest valid characters: 􏿽 􏿾 􏿿 !! html
        Null
        &#00;
        FF
        &#xC;
        CR
        &#xD;
        Control (low)
        &#8;
        Control (high)
        &#x7F; &#x9F;
        Unsupported legacy
        &#128; &#130; &#131; &#150; &#159;
        Surrogate
        &#xD83D;&#xDCA9;
        Invalid characters
        &#xfffe; &#xffff;
        This is an okay astral character
        💩
        This is an okay multi-codepoint HTML5 entity
        ∾̳
        This are valid wikitext-specific entities
        ‏ ‏
        Highest valid characters
        􏿽 􏿾 􏿿
        !! end !! test __FORCETOC__ override !! wikitext __NEWSECTIONLINK__ __FORCETOC__ !! html/php


        !! end !! test ISBN code coverage !! wikitext ISBN 978-0-1234-56 789 !! html/php

        ISBN 978-0-1234-56 789

        !! html/parsoid

        ISBN 978-0-1234-56 789

        !! end !! test ISBN followed by 5 spaces !! wikitext ISBN !! html

        ISBN

        !! end !! test Double ISBN !! wikitext ISBN ISBN 1234567890 !! html/php

        ISBN ISBN 1234567890

        !! html/parsoid

        ISBN ISBN 1234567890

        !! end # Uppercase X and lowercase x as well !! test ISBN with an X !! wikitext ISBN 3-462-04561-X ISBN 3-462-04561-x ISBN 080442957X ISBN 080442957x ISBN 978080442957X ISBN 978080442957x !! html/php

        ISBN 3-462-04561-X ISBN 3-462-04561-x ISBN 080442957X ISBN 080442957x ISBN 978080442957X ISBN 978080442957x

        !! html/parsoid

        ISBN 3-462-04561-X ISBN 3-462-04561-x ISBN 080442957X ISBN 080442957x ISBN 978080442957X ISBN 978080442957x

        !! end !! test ISBN with empty prefix (parsoid test) !! wikitext ISBN 1234567890 !! html/php

        ISBN 1234567890

        !! html/parsoid

        ISBN 1234567890

        !! end !! test T24905: followed by ISBN followed by !! wikitext (fr) ISBN 2753300917 [http://www.example.com example.com] !! html/php

        (fr) ISBN 2753300917 example.com

        !! html/parsoid

        (fr) ISBN 2753300917 example.com

        !! end !! test Double RFC !! wikitext RFC RFC 1234 !! html/php

        RFC RFC 1234

        !! html/parsoid

        RFC RFC 1234

        !! end !! test Double RFC with a wiki link !! wikitext RFC [[RFC 1234]] !! html/php

        RFC RFC 1234

        !! html/parsoid

        RFC RFC 1234

        !! end !! test RFC code coverage !! wikitext RFC 983 987 !! html/php

        RFC 983 987

        !! html/parsoid

        RFC 983 987

        !! end !! test Another italics / bold test !! options parsoid=wt2html !! wikitext ''' ''x' !! html/*
        ' x'
        
        !! end !! test dt/dd/dl test !! wikitext :;;;:: !! html
        !! end !! test [Before] HTML without raw HTML enabled ($wgRawHtml==false) !! wikitext !! html

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

        !! end !! test HTML with raw HTML ($wgRawHtml==true) !! options wgRawHtml=1 !! wikitext !! html/php

        !! html/parsoid

        !! end !! test Empty tag w/ raw HTML ($wgRawHtml==true) !! options wgRawHtml=1 !! wikitext !! html/php

        !! html/parsoid

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

        L2

        !! html/parsoid

        L2

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

        Subpage test/L1/L2

        !! html/parsoid

        Subpage test/L1/L2

        !! end !! test Parents of subpages, two levels up !! options subpage title=[[Subpage test/L1/L2/L3]] !! wikitext [[../../|L1]]2 [[../../|L1]]l !! html/php

        L12

        L1l

        !! html/parsoid

        L12

        L1l

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

        [[../..]]

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

        Subpage test/L1

        !! html/parsoid

        Subpage test/L1

        !! 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]] !! wikitext {{../L3Sibling}} !! html

        Sibling article

        !! end !! test Transclusion of a child page !! options subpage title=[[Subpage test/L1/L2]] !! wikitext {{/L3Sibling}} !! html

        Sibling article

        !! end # This is wt2html only in Parsoid because we add # because of {{..}} and we don't expect to fix that to # eliminate the nowikis selective for {{..}} markup. !! test Non-transclusion because of too many up levels !! options subpage title=[[Subpage test/L1/L2/L3]] parsoid=wt2html !! wikitext {{../../../../More than parent}} !! html/php

        {{../../../../More than parent}}

        !! html/parsoid

        {{../../../../More than parent}}

        !! end !! test Definition list code coverage !! options parsoid=wt2html,html2html !! wikitext ;title :def ;title :def ;title:def !! html/php
        title
        def
        title
        def
        title
        def
        !! html/parsoid
        title
        def
        title
        def
        title
        def
        !! end !! test Don't fall for the self-closing div !! wikitext
        hello world
        !! html
        hello world
        !! end !! test MSGNW magic word !! wikitext {{MSGNW:msg}} !! html/php

        [[:Template:Msg]]

        !! end !! test RAW magic word !! wikitext {{RAW:QUERTY}} !! html

        Template:QUERTY

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

        ><>

        !! end !! test Template caching !! wikitext {{Test}} {{Test}} !! html

        This is a test template This is a test template

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

        header[edit]

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

        2[edit]

        6[edit]

        3[edit]

        1[edit]

        5[edit]

        2[edit]

        !! end !! test ISBN with a dummy number !! wikitext ISBN --- !! html

        ISBN ---

        !! end !! test ISBN with space-delimited number !! wikitext ISBN 92 9017 032 8 !! html/php

        ISBN 92 9017 032 8

        !! html/parsoid

        ISBN 92 9017 032 8

        !! end !! test ISBN with multiple spaces, no number !! wikitext ISBN foo !! html

        ISBN foo

        !! end !! test ISBN length !! wikitext ISBN 123456789 ISBN 1234567890 ISBN 12345678901 !! html/php

        ISBN 123456789

        ISBN 1234567890

        ISBN 12345678901

        !! html/parsoid

        ISBN 123456789

        ISBN 1234567890

        ISBN 12345678901

        !! end !! test ISBN with trailing year (T9110) !! wikitext ISBN 1-234-56789-0 - 2006 ISBN 1 234 56789 0 - 2006 !! html/php

        ISBN 1-234-56789-0 - 2006

        ISBN 1 234 56789 0 - 2006

        !! html/parsoid

        ISBN 1-234-56789-0 - 2006

        ISBN 1 234 56789 0 - 2006

        !! end !! test anchorencode !! config wgFragmentMode=[ 'html5', 'legacy' ] !! wikitext {{anchorencode:foo bar©#%n}} !! html/php

        foo_bar©#%n

        !! html/parsoid

        foo_bar©#%n

        !! end !! test anchorencode (legacy) !! config wgFragmentMode=[ 'legacy' ] !! wikitext {{anchorencode:foo bar©#%n}} !! html/php

        foo_bar.C2.A9.23.25n

        !! end !! test anchorencode trims spaces !! config wgFragmentMode=[ 'html5', 'legacy' ] !! wikitext {{anchorencode: __pretty__please__}} !! html/php

        pretty_please

        !! html/parsoid

        pretty_please

        !! end !! test anchorencode deals with links !! config wgFragmentMode=[ 'html5', 'legacy' ] !! wikitext {{anchorencode: [[hello|world]] [[hi]]}} !! html/php

        world_hi

        !! html/parsoid

        world_hi

        !! end !! test anchorencode deals with templates !! config wgFragmentMode=[ 'html5', 'legacy' ] !! wikitext {{anchorencode: {{Foo}} x}} !! html/php

        FOO_x

        !! html/parsoid

        FOO_x

        !! end !! test anchorencode encodes like the TOC generator: (T20431) !! config wgFragmentMode=[ 'html5', 'legacy' ] !! wikitext ===_ +:.3A%3A _ &&]] x=== {{anchorencode: _ +:.3A%3A _ &&]] x}} __NOEDITSECTION__ !! html/php

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

        +:.3A%253A_&&]]_x


        !! html/parsoid

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

        +:.3A%253A_&&]]_x

        !! end !! test anchorencode encodes like the TOC generator: (T20431) (legacy) !! config wgFragmentMode=[ 'legacy' ] !! wikitext ===_ +:.3A%3A&&]]=== {{anchorencode: _ +:.3A%3A&&]] }} __NOEDITSECTION__ !! html/php

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

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

        !! end !! test T8200: blockquotes and paragraph formatting !! wikitext
        foo
        bar baz !! html

        foo

        bar

        baz
        
        !! end !! test T10293: Use of center tag ruins paragraph formatting !! wikitext
        foo
        bar baz !! html

        foo

        bar

        baz
        
        !! end !!test Parsing of overlapping (improperly nested) inline html tags !! wikitext x !! html

        x

        !!end ### ### Language variants related tests ### # Parsoid does not mark self-links. # Parsoid does not convert links; PHP will do any necessary redirects. !! test Self-link in language variants !! options title=[[Dunav]] language=sr !! wikitext Both [[Dunav]] and [[Дунав]] are names for this river. !! html/php

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

        !! html/parsoid

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

        !! end !! article Дуна !! text content !! endarticle # T258856: Parsoid doesn't handle redlink processing correctly in this case !! 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 !! wikitext [[Дуна]] is not a self-link while [[Duna]] and [[Dуна]] are still self-links. !! html/php

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

        !! html/parsoid

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

        !! end # T258856: Parsoid doesn't handle redlink processing correctly in this case !! test Link to a section of a variant of this title shouldn't be parsed as self-link !! options title=[[Duna]] language=sr !! wikitext [[Dуна]] is a self-link while [[Dunа#Foo]] and [[Dуна#Foo]] are not self-links. !! html/php

        Dуна is a self-link while Dunа#Foo and Dуна#Foo are not self-links.

        !! html/parsoid

        Dуна is a self-link while Dunа#Foo and Dуна#Foo are not self-links.

        !! end # T258856: Parsoid doesn't handle redlink processing correctly in this case !! test Link to pages in language variants !! options language=sr !! wikitext Main Page can be written as [[Маин Паге]] !! html/php

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

        !! html/parsoid

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

        !! end # T258856: Parsoid doesn't handle redlink processing correctly in this case !! test Multiple links to pages in language variants !! options language=sr !! wikitext [[Main Page]] can be written as [[Маин Паге]] same as [[Маин Паге]]. !! html/php

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

        !! html/parsoid

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

        !! end !! test Simple template in language variants !! options language=sr !! wikitext {{тест}} !! html/php

        This is a test template

        !! end !! test Template with explicit namespace in language variants !! options language=sr !! wikitext {{Template:тест}} !! html/php

        This is a test template

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

        This is a test template with parameter foo

        !! end !! test Simple category in language variants !! options language=sr cat !! wikitext [[Category:МедиаWики Усер'с Гуиде]] !! html/php cat=МедиаWики_Усер'с_Гуиде sort= !! html/parsoid !! end !! article Category:分类 !! text blah !! endarticle !! article Category:分類 !! text blah !! endarticle ## We used to, but no longer wt2wt this test since the default serializer ## will normalize all categories to serialize on their own line. ## This wikitext usage is going to be fairly uncommon in production and ## selser will take care of preserving formatting in those scenarios. !! test Don't convert blue categorylinks to another variant (T35210) !! options cat language=zh parsoid=wt2html !! wikitext [[A]][[Category:分类]] !! html/php cat=分类 sort= !! html/parsoid

        A

        !! end !! test Stripping -{}- tags (language variants) !! options language=sr !! wikitext Latin proverb: -{Ne nuntium necare}- !! html/php

        Latin proverb: Ne nuntium necare

        !! html/parsoid

        Latin proverb:

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

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

        !! html/parsoid

        Latinski:

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

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

        !! html/parsoid

        Latinski:

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

        Main Page

        !! html/parsoid

        !! end !! test -{}- tags within headlines (within html for parserConvert()) !! config wgFragmentMode=[ 'html5', 'legacy' ] !! options language=sr variant=sr-ec !! wikitext ==-{Naslov}-== Note that even an unprotected headline ID is not affected by language conversion: ==Latinski== !! html/php

        Naslov[уреди]

        Ноте тхат евен ан унпротецтед хеадлине ИД ис нот аффецтед бy лангуаге цонверсион:

        Латински[уреди]

        !! html/parsoid

        Note that even an unprotected headline ID is not affected by language conversion:

        Latinski

        !! end !! test Explicit definition of language variant alternatives !! options language=zh variant=zh-tw !! wikitext -{zh:China;zh-tw:Taiwan}-, not China !! html/php

        Taiwan, not China

        !! html/parsoid

        , not China

        !! end !! test Explicit definition of language variant alternatives (BCP 47 codes) !! options language=zh variant=zh-tw !! wikitext -{zh:China;zh-Hant-TW:Taiwan}-, not China !! html/php

        Taiwan, not China

        !! html/parsoid

        , not China

        !! end !! test Filter syntax for language variants !! options language=zh variant=zh-tw !! wikitext foo-{zh;zh-hans;zh-hant|blog, WEBJOURNAL, WEBLOG}-quux !! html/php

        fooblog, WEBJOURNAL, WEBLOGquux

        !! html/parsoid

        fooquux

        !! end # Note that Parsoid post-processing for language variants needs to # update the `title` attribute here, based on the mw:ExpandedAttrs property !! test Conversion around HTML tags !! options language=sr variant=sr-ec !! wikitext -{H|span=>sr-ec:script;title=>sr-ec:src}- ski !! html/php

        ски

        !! html/parsoid

        ski

        !! end !! test Explicit session-wise two-way language variant mapping (A flag and - flag) !! options language=zh variant=zh-tw !! wikitext This is -{zh:China; zh-tw:Taiwan}-, but we'll forget that now. 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. !! html/php

        This is Taiwan, but we'll forget that now.

        Taiwan is not China.

        But Taiwan is Taiwan,

        (This should be stripped!)

        and China is China.

        !! html/parsoid

        This is , but we'll forget that now.

        Taiwan is not China.

        But is China,

        (This should be stripped!)

        and is China.

        !! end !! test Explicit session-wise one-way language variant mapping (A flag and - flag) !! options language=zh variant=zh-tw !! wikitext This is -{COUNTRY=>zh:China;COUNTRY=>zh-tw:Taiwan}-, but we'll forget that now. COUNTRY is China or Taiwan. But -{A|COUNTRY=>zh:China;COUNTRY=>zh-tw:Taiwan}- is COUNTRY, (This-{-|COUNTRY=>zh:China;COUNTRY=>zh-tw:Taiwan}- should be stripped!) and -{COUNTRY}- is COUNTRY. !! html/php

        This is Taiwan, but we'll forget that now.

        COUNTRY is China or Taiwan.

        But Taiwan is Taiwan,

        (This should be stripped!)

        and COUNTRY is COUNTRY.

        !! html/parsoid

        This is , but we'll forget that now.

        COUNTRY is China or Taiwan.

        But is COUNTRY,

        (This should be stripped!)

        and is COUNTRY.

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

        (This should be stripped!)

        Taiwan is Taiwan.

        !! html/parsoid

        (This should be stripped!)

        Taiwan is China.

        !! end !! test Explicit session-wise one-way language variant mapping (H flag for hide) !! options language=zh variant=zh-tw !! wikitext (This-{H|COUNTRY=>zh:China;COUNTRY=>zh-tw:Taiwan}- should be stripped!) COUNTRY is Taiwan or China. !! html/php

        (This should be stripped!)

        Taiwan is Taiwan or China.

        !! html/parsoid

        (This should be stripped!)

        COUNTRY is Taiwan or China.

        !! end ## Note that parsoid test runner does not support 'showtitle' option. !! test Adding explicit conversion rule for title (T flag) !! options language=zh variant=zh-tw showtitle !! wikitext Should be stripped-{T|zh:China;zh-tw:Taiwan}-! Taiwan is China. !! html/php Taiwan

        Should be stripped!

        Taiwan is China.

        !! html/parsoid

        Should be stripped!

        Taiwan is China.

        !! end !! test Code coverage: T combined with H flag !! options language=zh variant=zh-tw showtitle !! wikitext Should be stripped-{T;H|zh:China; zh-tw:Taiwan}-! Taiwan is China. !! html/php Taiwan

        Should be stripped!

        Taiwan is Taiwan.

        !! html/parsoid

        Should be stripped!

        Taiwan is China.

        !! end !! test Code coverage: T with no variants !! options language=zh variant=zh-tw showtitle !! wikitext -{H|zh:China; zh-tw:Taiwan}- Taiwan is China.-{T|Taiwan is China}- !! html/php Taiwan is China

        Taiwan is Taiwan.

        !! html/parsoid

        Taiwan is China.

        !! end !! test Code coverage: rules with no variants !! options language=zh variant=zh-tw !! wikitext -{H|zh:China; zh-tw:Taiwan}- Taiwan is China. -{H|China}- Taiwan is China. !! html/php

        Taiwan is Taiwan. Taiwan is China.

        !! html/parsoid

        Taiwan is China. Taiwan is China.

        !! end !! test Code coverage: D flag for conversion rule !! options language=zh variant=zh-tw !! wikitext -{D|zh-cn:XA; zh-tw:YA}- -{A;D|zh-cn:XB; zh-tw:YB}- -{D;H|zh-cn:XC; zh-tw:YC}- -{D;H|FOO=>zh-tw:BAR;FOO=>zh-cn:BAT}- -{D|0=>zh-tw:1}- -{A;D|2=>zh-tw:3}- -{D;H|4=>zh-tw:5}- XA XB XC YA YB YC FOO BAR BAT 012345 !! html/php

        大陆:XA;臺灣:YA; 大陆:XC;臺灣:YC;

        FOO⇒臺灣:BAR;FOO⇒大陆:BAT;

        0⇒臺灣:1; 4⇒臺灣:5;

        XA YB YC YA YB YC BAR BAR BAT 013355

        !! html/parsoid

        XA XB XC YA YB YC FOO BAR BAT 012345

        !! end !! test Code coverage: N flag for conversion rule !! options language=zh variant=zh-cn !! wikitext -{N|zh-cn}- -{N|zh-tw}- -{N|sr-ec}- !! html/php

        大陆

        臺灣

        српски (ћирилица)

        !! html/parsoid

        !! end # html2wt suppresses the bogus 'D' flag, so this is wt2html only !! test Code coverage: N flag for conversion rule (wt2html only) !! options language=zh variant=zh-cn parsoid=wt2html,html2html !! wikitext -{D;N|en}- !! html/php

        English

        !! html/parsoid

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

        Should be stripped!

        !! html/parsoid

        Should be stripped!

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

        Should be stripped!

        !! html/parsoid

        Should be stripped!

        !! end !! test T26072: more test on conversion rule for title !! options language=zh variant=zh-tw showtitle !! wikitext 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}-. !! html/php Taiwan

        This should be stripped!

        This won't take interferes with the title rule.

        !! html/parsoid

        This should be stripped!

        This won't take interferes with the title rule.

        !! end !! test Partly disable title conversion if variant == main language code !! options language=zh variant=zh title=[[ZH]] showtitle !! wikitext -{T|zh-cn:CN;zh-tw:TW}- !! html/php ZH

        !! html/parsoid

        !! end !! test Partly disable title conversion if variant == main language code, more !! options language=zh variant=zh title=[[ZH]] showtitle !! wikitext -{T|TW}- !! html/php ZH

        !! html/parsoid

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

        Raw: zh:China;zh-tw:Taiwan

        !! html/parsoid

        Raw:

        !! end # html2wt suppresses the bogus 'D' flags, so this is wt2html only !! test Raw output of variant escape tags (R flag) (wt2html only) !! options language=zh variant=zh-tw parsoid=wt2html,html2html !! wikitext -{Variant}- -{D|syntax}- -{D;R|options}- !! html/php

        Variant syntax options

        !! html/parsoid

        !! end !! test Nested markup inside raw output of variant escape tags (R flag) !! options language=zh variant=zh-tw !! wikitext Nested raw: -{R|nested -{zh:China;zh-tw:Taiwan}- nested}- !! html/php

        Nested raw: nested Taiwan nested

        !! html/parsoid

        Nested raw:

        !! end !! test Nested markup and spaces inside raw output of variant escape tags (R flag) !! options language=zh variant=zh-tw !! wikitext X-{ outer -{ inner }- outer }-X !! html/php

        X outer inner outer X

        !! html/parsoid

        XX

        !! end !! test Templates inside raw output of variant escape tags (R flag) !! options language=zh variant=zh-tw !! wikitext Nested raw: -{R|nested {{1x|hi}} templates}- !! html/php

        Nested raw: nested hi templates

        !! html/parsoid

        Nested raw:

        !! end !! test Strings evaluating false shouldn't be ignored by Language converter (T51072) !! options language=zh variant=zh-cn !! wikitext -{zh-cn:0;zh-sg:1;zh-tw:2;zh-hk:3}- !! html/php

        0

        !! html/parsoid

        !! end !! test Conversion rules from [numeric-only string] to [something else] (T48634) !! options language=zh variant=zh-cn !! wikitext -{H|0=>zh-cn:B}--{H|0=>zh-cn:C;0=>zh-cn:D}--{H|0=>zh-hans:A}-012345-{A|zh-tw:0;zh-cn:E;}-012345 !! html/php

        D12345EE12345

        !! html/parsoid

        012345012345

        !! end !! test Two-way converter rule entries with an empty value should be ignored (T53551) !! options language=zh variant=zh-cn !! wikitext -{H|zh-cn:foo;zh-tw:;}-foobar !! html/php

        foobar

        !! html/parsoid

        foobar

        !! end !! test One-way converter rule entries with an empty "from" string should be ignored (T53551) !! options language=zh variant=zh-cn !! wikitext -{H|=>zh-cn:foo;}-foobar !! html/php

        foobar

        !! html/parsoid

        foobar

        !! end !! test Empty converter rule entries shouldn't be inserted into the conversion table (T53551) !! options language=zh variant=zh-cn !! wikitext -{H|}-foobar !! html/php

        foobar

        !! html/parsoid

        foobar

        !! end !! test Nested using of manual convert syntax !! options language=zh variant=zh-hk !! wikitext Nested: -{zh-hans:Hi -{zh-cn:China;zh-sg:Singapore;}-;zh-hant:Hello -{zh-tw:Taiwan;zh-hk:H-{ong}- K-{}-ong;}-;}-! !! html/php

        Nested: Hello Hong Kong!

        !! html/parsoid

        Nested: !

        !! end !! test HTML markups with conversion syntax in attribs, nested in other conversion blocks !! options language=zh variant=zh-cn !! wikitext -{zh;zh-hans;zh-hant|A}- !! html/php

        A

        !! html/parsoid

        !! end !! test HTML markups with conversion syntax in attribs, nested in other conversion blocks (not working yet in PHP parser) !! options language=zh variant=zh-cn !! wikitext -{A}- !! html/php+disabled

        A

        !! html/parsoid

        !! end # Parsoid and PHP disagree on how to parse this example: Parsoid # insists that the content of a language converter element be a valid # DOM fragment or attribute string !! test Language converter markup with block content !! options language=zh variant=zh-cn !! wikitext a-{b
        c}-d a-{zh;zh-hans;zh-hant|b
        c}-d a-{H|0=>zh-cn:xy;0=>zh-tw:b
        c}-d !! html/php ab
        cd ab
        cd ad
        !! html/parsoid a
        d a
        d

        ad

        !! end !! test LanguageConverter selser (1) !! options language=zh variant=zh-cn parsoid={ "modes": ["wt2wt", "selser"], "changes": [ ["span[typeof]", "attr", "data-mw-variant", "{\"disabled\":{\"t\":\"edited\"}}"] ] } !! wikitext -{raw}- !! wikitext/edited -{edited}- !! end !! test LanguageConverter selser (2) !! options language=zh variant=zh-cn parsoid={ "modes": ["wt2wt", "selser"], "changes": [ ["span[class='x']", "contents", "text", "-{foo}-"], ["a", "contents", "text", "-{"], ["span[typeof]", "attr", "data-mw", "{\"parts\":[{\"template\":{\"target\":{\"wt\":\"1x\",\"href\":\"./Template:1x\"},\"params\":{\"1\":{\"wt\":\"-{\"}},\"i\":0}}]}"] ] } !! wikitext TEXT1 [http://example.com TEXT2] [[Foo|TEXT3]] {{1x|TEXT4}} !! wikitext/edited -{foo}- [http://example.com -{] [[Foo|-{]] {{1x|-{}} !! end # Tests LanguageVariantText in ConstrainedText !! test LanguageConverter selser (3) !! options language=zh variant=zh-cn parsoid={ "modes": ["wt2wt", "selser"], "changes": [ ["td > span", "attr", "typeof", "mw:LanguageVariant"], ["td > span", "attr", "data-mw-variant", "{\"disabled\":{\"t\":\"edited\"}}"] ] } !! wikitext {| |- |Foo |} !! wikitext/edited {| |- |-{edited}- |} !! end # Tests LanguageVariantText._fromSelSer !! test LanguageConverter selser (4) !! options language=zh variant=zh-cn parsoid={ "modes": ["wt2wt", "selser"], "changes": [ ["td > span.x", "remove"] ] } !! wikitext {| |- |Foo-{Bar}- ||Foo-{Bar}- |} !! wikitext/edited {| |- |-{Bar}- ||-{Bar}- |} !! end # Since Parsoid is starting to emit canonical wikitext for links, # [http://example.com http://example.com] will not RT back to that # form anymore. # Parsoid does not language-convert links (it is done in a # post-processing step) !! test Proper conversion of text in external links !! options language=sr variant=sr-ec parsoid=wt2html !! wikitext 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] !! html/php

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

        !! html/parsoid

        http://www.google.com gopher://www.google.com http://www.google.com gopher://www.google.com irc://www.google.com www.google.com/ftp://dir www.google.com

        !! end !! test Do not convert roman numbers to language variants !! options language=sr variant=sr-ec !! wikitext Fridrih IV je car. !! html/php

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

        !! html/parsoid

        Fridrih IV je car.

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

        -{T|hello

        !! end !! test Don't convert raw rule "-{R|=>}-" to "=>" !! options language=sr !! wikitext -{R|=>}- !! html/php

        =>

        !! html/parsoid

        !!end !! test Don't break link parsing if language converter markup is in the caption. !! options language=sr variant=sr-ec !! wikitext [[Main Page|-{R|main page}-]] !! html/php

        main page

        !! html/parsoid

        !! end !! test T146304: Don't break template parsing if language converter markup is in the parameter. !! options language=sr variant=sr-ec !! wikitext {{1x|-{R|foo}-}} !! html/php

        foo

        !! html/parsoid

        !! end !! test T153135: Don't break list handling if language converter markup is in the item. !! options language=zh variant=zh-cn !! wikitext ;-{zh-cn:AAA;zh-tw:BBB}- ;-{R|foo:bar}- !! html/php
        AAA
        foo:bar
        !! html/parsoid
        !! end # Note that parsoid does not protect colons unless language converter # markup is properly nested, because it is a backtracking parser. !! test T153135: Unclosed markup in definition list (code coverage) !! options language=zh variant=zh-cn !! wikitext ;foo:bar ;-{zh-cn:AAA !! html/php
        foo:bar
        -{zh-cn:AAA
        !! html/parsoid
        foo:bar
        -{zh-cn
        AAA
        !! end !! test T153135: Nested language converter markup in definition list (code coverage) !! options language=zh variant=zh-cn !! wikitext ;-{|zh-cn:AAA -{zh-hans|foo:bar}- -{R|bat:baz}-}-:def !! html/php
        AAA foo:bar bat:baz
        def
        !! html/parsoid
        def
        !! end # html2wt mode disabled due to insertion. !! test T153140: Don't break table handling if language converter markup is in the cell. !! options language=sr variant=sr-ec parsoid=wt2html,wt2wt,html2html !! wikitext {| |- | -{R|B}- |} !! html/php
        B
        !! html/parsoid
        !! end !! test Language converter tricky html2wt cases (1) !! options language=sr parsoid=html2wt,wt2wt !! html/parsoid

        !! wikitext -{}-}- !! html/php

        }-

        !! end !! test Language converter tricky html2wt cases (2) !! options language=sr parsoid=html2wt,wt2wt !! html/parsoid

        -{foo}-

        !! wikitext -{foo}- !! html/php

        -{foo}-

        !! end !! test Language converter tricky html2wt cases (3) !! options language=sr parsoid=html2wt,wt2wt !! html/parsoid

        !! wikitext -{R||}- -{R|R|raw}- -{-{foo}-}- !! html/php

        |

        R|raw

        -{foo}-

        !! end !! test Language converter tricky html2wt cases (4) !! options language=sr parsoid=html2wt,wt2wt !! html/parsoid

        !! wikitext -{R|{{1x|hey}}}- !! html/php

        hey

        !! end # Note that the escaping added by parsoid for source text, # destination text, and language names only works on the PHP side # for *destination text*. (HTML entity escaping wouldn't work # any better.) This is probably a bug, at least for source texts. # (For language names PHP uses a precise regexp based on the languages # it currently knows have variants, which is fragile since this set # can grow/shrink over time.) !! test Language converter tricky html2wt cases (5) !! options language=zh variant=zh-cn !! html/parsoid

        foobar

        a:b=>c xyz

        !! wikitext -{H|a:b=>c=>zh-cn:x;foo=>zh-cn:boo;bar=>zh-cn:bat;xyz=>zh-cn:abc}-foobar -{H|A=>bo:g;us:B}- -{A|zh-tw:xyz; zh-cn:0;zh-tw:bar}- -{bo:g;us:xyz; zh-cn:abc}- a:b=>c xyz !! html/php+disabled

        foobat;xyz=>zh-cn:abc

        A

        0;zh-tw:bar

        abc

        a:b=>c 0;zh-tw:bar

        !! end !! test T239806: Trailing garbage in language converter rules (1) !! options language=zh variant=zh-hans parsoid=wt2html,html2html !! wikitext -{H|zh-cn:约翰·塞纳; zh-hk:莊·先拿; zh-tw:約翰·希南; ;}- -{H|zh-cn:泰瑞斯·吉布森; zh-hk:泰列斯·吉遜; zh-tw:泰瑞斯·吉布森; ;}- -{H|zh-cn:金·米尔福特; zh-tw:金·米爾福特; 真·米爾福特;}- !! html/php

        !! html/parsoid

        !! end !! test T239806: Trailing garbage in language converter rules (2) !! options language=zh variant=zh-hans parsoid=wt2html,html2html !! wikitext -{H|zh-cn:玛格特·罗比; zh-tw:瑪格·羅比; zh-hk:瑪歌·羅比; zh-sg:玛格·罗比; ;}- !! html/php

        !! html/parsoid

        !! end !! test T179579: Nowiki and lc interaction !! options parsoid=wt2html language=sr !! wikitext -{
        123}- -{123|456}- !! html/parsoid

        !! end !! test Balinese language conversion !! options language=ban variant=ban-x-palmleaf !! wikitext ᬫᬦ᭄ᬢ᭄ᬭ -{ban-x-palmleaf:AAA;ban:BBB}- !! html/php

        mantra AAA

        !! html/parsoid

        ᬫᬦ᭄ᬢ᭄ᬭ

        !! end !! test T2529: Uncovered bullet !! wikitext *Foo {{bullet}} !! html
        • Foo
        • Bar
        !! end !! test T2529: Uncovered bullet in a deeply nested list !! wikitext *******Foo {{bullet}} !! html
                    • Foo
        • Bar
        !! end !! test T2529: Uncovered table already at line-start !! wikitext x {{table}} y !! html

        x

        1 2
        3 4

        y

        !! end !! test T2529: Uncovered bullet in parser function result !! wikitext *Foo {{lc:{{bullet}} }} !! html
        • Foo
        • bar
        !! end !! test T7678: Double-parsed template argument !! wikitext {{lc:{{{1}}}|hello}} !! html

        {{{1}}}

        !! end ## wt2html only, since the bare {{ will get escaped when serializing !! test T7678: Double-parsed template invocation !! options parsoid=wt2html !! wikitext {{lc:{{paramtest {{!}} param = hello }} }} !! html/php

        {{paramtest | param = hello }}

        !! html/parsoid

        {{paramtest param = hello }}

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

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

        !! end !! test Morwen/13: Unclosed link followed by heading !! wikitext [[link ==heading== !! html

        [[link

        heading[edit]

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

        {{foo|

        heading

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

        {{foo|

        heading[edit]

        !! end !! test Tildes in comments !! options pst !! wikitext !! html/php !! end !! test Paragraphs inside divs (no extra line breaks) !! wikitext
        Line one Line two
        !! html
        Line one Line two
        !! end !! test Paragraphs inside divs (extra line break on open) !! wikitext
        Line one Line two
        !! html

        Line one

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

        Line two

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

        Line one

        Line two

        !! end # doBlockLevels screws up this output and Remex cleans up as much as it can. !! test Nesting tags, paragraphs on lines which begin with
        !! wikitext
        A B !! html/php

        A

        B

        !! html/parsoid

        A

        B

        !! end # T8200:
        should behave like
        with respect to line breaks !! test T8200: paragraphs inside blockquotes (no extra line breaks) !! wikitext
        Line one Line two
        !! html

        Line one Line two

        !! end !! test T8200: paragraphs inside blockquotes (extra line break on open) !! wikitext
        Line one Line two
        !! html

        Line one

        Line two

        !! end !! test T8200: paragraphs inside blockquotes (extra line break on close) !! wikitext
        Line one Line two
        !! html

        Line one

        Line two

        !! end !! test T8200: paragraphs inside blockquotes (extra line break on open and close) !! wikitext
        Line one Line two
        !! html

        Line one

        Line two

        !! end ## This is a corner case interaction between the paragraph wrapping in the ## php parser's BlockLevelPass and Remex. `doBlockLevels` has a notion of ## some tags which close paragraphs (and thus prevent wrapping on their line), ## of which "div" is one, but do p-wrapping inside them. These are referred ## to as "never suppressing". Remex, for its part, doesn't traverse into ## "div"s to p-wrap. Hence, we only get this partial wrapping. !! test Paragraphs inside blockquotes/divs (no extra line breaks) !! wikitext
        Line one Line two
        !! html
        Line one Line two
        !! end !! test Paragraphs inside blockquotes/divs (extra line break on open) !! wikitext
        Line one Line two
        !! html

        Line one

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

        Line two

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

        Line one

        Line two

        !! end !! test Interwiki links trounced by handleExternalLinks after early LinkHolderArray expansion !! options wgLinkHolderBatchSize=0 !! wikitext [[meatball:1]] [[meatball:2]] [[meatball:3]] !! html

        meatball:1 meatball:2 meatball:3

        !! end !! test T17196: localised external link numbers !! options language=fa !! wikitext [http://en.wikipedia.org/] !! html/php

        [۱]

        !! html/parsoid

        !! end !! test Multibyte character in padleft !! wikitext {{padleft:-Hello|7|Æ}} !! html/php

        Æ-Hello

        !! html/parsoid

        Æ-Hello

        !! end !! test Multibyte character in padright !! wikitext {{padright:Hello-|7|Æ}} !! html/php

        Hello-Æ

        !! html/parsoid

        Hello-Æ

        !! end !!test formatdate parser function !! wikitext {{#formatdate:2009-03-24}} !! html

        2009-03-24

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

        March 24, 2009

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

        January 15

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

        24 March 2009

        !! end !! test formatdate with invalid month !! wikitext {{#formatdate:2019-22-22|dmy}} !! html

        2019-22-22

        !! end !! test formatdate: dots in month name do not match any char (T220563) !! options language=de !! wikitext {{#formatdate:jun. 3|dmy}} {{#formatdate:junx 3|dmy}} !! html

        3 Juni junx 3

        !! end !! test formatdate uses correct capitalisation in French !! options language=fr !! wikitext {{#formatdate:Juin 3|dmy}} !! html

        3 juin

        !! end !! test formatdate uses correct capitalisation in English !! wikitext {{#formatdate:june 3|dmy}} !! html

        3 June

        !! end # # # # # Edit comments # !! test Edit comment with link !! options comment !! wikitext I like the [[Main Page]] a lot !! html/php I like the Main Page a lot !!end !! test Edit comment with link and link text !! options comment !! wikitext I like the [[Main Page|best pages]] a lot !! html/php I like the best pages a lot !!end !! test Edit comment with link and link text with suffix !! options comment !! wikitext I like the [[Main Page|best page]]s a lot !! html/php I like the best pages a lot !!end !! test Edit comment with section link (non-local, eg in history list) !! options comment title=[[Main Page]] !! wikitext /* External links */ removed bogus entries !! html/php →‎External links: removed bogus entries !!end !! test Edit comment with section link and text before it (non-local, eg in history list) !! options comment title=[[Main Page]] !! wikitext pre-comment text /* External links */ removed bogus entries !! html/php pre-comment text →‎External links: removed bogus entries !!end !! test Edit comment with section link (local, eg in diff view) !! options comment local title=[[Main Page]] !! wikitext /* External links */ removed bogus entries !! html/php →‎External links: removed bogus entries !!end !! test Edit comment with section link that has a link in it !! options comment local title=[[Main Page]] !! wikitext /* [[A link]] */ !! html/php →‎[[A link]] !! end !! test Edit comment with section link that has a template in it !! options comment local title=[[Main Page]] !! wikitext /* {{foobar|param}} */ !! html/php →‎{{foobar|param}} !! end !! test Edit comment with subpage link (T16080) !! options comment subpage title=[[Subpage test]] !! wikitext Poked at a [[/subpage]] here... !! html/php Poked at a /subpage here... !!end !! test Edit comment with subpage link and link text (T16080) !! options comment subpage title=[[Subpage test]] !! wikitext Poked at a [[/subpage|neat little page]] here... !! html/php Poked at a neat little page here... !!end !! test Edit comment with bogus subpage link in non-subpage NS (T16080) !! options comment title=[[Subpage test]] !! wikitext Poked at a [[/subpage]] here... !! html/php Poked at a /subpage here... !!end !! test Edit comment with bare anchor link (local, as on diff) !! options comment local title=[[Main Page]] !! wikitext [[#section]] !! html/php #section !! end !! test Edit comment with bare anchor link (non-local, as on history) !! options comment title=[[Main Page]] !! wikitext [[#section]] !! html/php #section !! end !! test Anchor starting with underscore !! options title=[[Foo]] !! wikitext [[#_ref|One]] !! html/php

        One

        !! html/parsoid

        One

        !! end !! test Id starting with underscore !! wikitext
        !! html/*
        !! end !! test Edit comment with link with more than one pipe (T99346) !! options comment !! wikitext [[Main Page|Many|pipes]] !! html/php Many|pipes !! end !! test Complex edit comment with link with more than one pipe (T99346) !! options comment !! wikitext Created page with "[[Category:Requests for permissions/Bot|{{subst:#titleparts:{{subst:PAGENAME}}|1|3}}]] === [[User:MineoBot|]] 8=== {{Request for permissions/links|Mineo..." !! html/php Created page with "<noinclude>{{subst:#titleparts:{{subst:PAGENAME}}|1|3}}</noinclude> === User:MineoBot 8=== {{Request for permissions/links|Mineo..." !! end !! test Space normalisation on autocomment (T24784) !! options comment title=[[Main Page]] !! wikitext /* __hello__world__ */ !! html/php →‎__hello__world__ !! end !! test percent-encoding and + signs in comments (T28410) !! options comment !! wikitext [[ABC%33D% ++]] [[ABC%33D% ++|+%20]] !! html/php ABC3D% ++ +%20 !! end # Parsoid doesn't support this yet: see T75581 # but it *should* omit the 'src' attribute if the image is bad. # PHP side of tests was disabled in # mediawiki/core:6bd31e7d95161a6e88fa86df60871051da997c3c # because of issues in the PHP parserTests infrastructure # (but the output below is indeed what the PHP side emits) !! test Bad images - basic functionality !! wikitext [[File:Bad.jpg]] !! html/php+disabled !! html/parsoid

        File:Bad.jpg

        !! end !! test Bad images - T18039: text after bad image disappears !! wikitext Foo bar [[File:Bad.jpg]] Bar foo !! html/php+disabled

        Foo bar

        Bar foo

        !! html/parsoid

        Foo bar File:Bad.jpg Bar foo

        !! end !! test Verify that displaytitle works (T24501) no displaytitle !! options showtitle !! config wgAllowDisplayTitle=true wgRestrictDisplayTitle=false !! wikitext this is not the title !! html/php Parser test

        this is not the title

        !! end !! test Verify that displaytitle works (T24501) RestrictDisplayTitle=false !! options showtitle title=[[Screen]] !! config wgAllowDisplayTitle=true wgRestrictDisplayTitle=false !! wikitext this is not the title {{DISPLAYTITLE:whatever}} !! html/php whatever

        this is not the title

        !! end !! test Verify that displaytitle works (T24501) RestrictDisplayTitle=true mismatch !! options showtitle title=[[Screen]] !! config wgAllowDisplayTitle=true wgRestrictDisplayTitle=true !! wikitext this is not the title {{DISPLAYTITLE:whatever}} !! html/php Screen

        this is not the title

        !! end !! test Verify that displaytitle works (T24501) RestrictDisplayTitle=true matching !! options showtitle title=[[Screen]] !! config wgAllowDisplayTitle=true wgRestrictDisplayTitle=true !! wikitext this is not the title {{DISPLAYTITLE:screen}} !! html/php screen

        this is not the title

        !! end !! test Verify that displaytitle works (T24501) AllowDisplayTitle=false !! options showtitle title=[[Screen]] !! config wgAllowDisplayTitle=false !! wikitext this is not the title {{DISPLAYTITLE:screen}} !! html/php Screen

        this is not the title Template:DISPLAYTITLE:screen

        !! end !! test Verify that displaytitle works (T24501) AllowDisplayTitle=false no DISPLAYTITLE !! options showtitle title=[[Screen]] !! config wgAllowDisplayTitle=false !! wikitext this is not the title !! html/php Screen

        this is not the title

        !! end !! test Verify that displaytitle handles inline CSS styles (T28547) - rejected value !! options showtitle title=[[Screen]] !! config wgAllowDisplayTitle=true wgRestrictDisplayTitle=true !! wikitext this is not the title {{DISPLAYTITLE:screen}} !! html/php screen

        this is not the title

        !! end !! test Verify that displaytitle handles inline CSS styles (T28547) - accepted value !! options showtitle title=[[Screen]] !! config wgAllowDisplayTitle=true wgRestrictDisplayTitle=true !! wikitext this is not the title {{DISPLAYTITLE:screen}} !! html/php screen

        this is not the title

        !! end !! test Verify that displaytitle encodes & to & (T291985) !! options showtitle title=[[Art©]] !! config wgAllowDisplayTitle=true wgRestrictDisplayTitle=true !! wikitext this is not the title {{DISPLAYTITLE:art©}} !! html/php art&copy

        this is not the title

        !! end !! test Verify that displaytitle encodes & to & (T291985) !! options showtitle title=[[Art©]] !! config wgAllowDisplayTitle=true wgRestrictDisplayTitle=true !! wikitext this is not the title {{DISPLAYTITLE:art&copy}} !! html/php art&copy

        this is not the title

        !! end !! test Verify that without displaytitle the title encodes & to & (T291985) !! options showtitle title=[[Art©]] !! config wgAllowDisplayTitle=true wgRestrictDisplayTitle=true !! wikitext this is not the title !! html/php Art&copy

        this is not the title

        !! end !! test Page status indicators: Empty name is invalid !! options showindicators !! wikitext !! html/php

        Error: Page status indicators' name attribute must not be empty. Error: Page status indicators' name attribute must not be empty.

        !! end !! test Page status indicators: Weird syntaxes that are okay !! options showindicators !! wikitext !! html/php empty= name=


        !! end !! test Page status indicators: Torture test !! options showindicators !! config wgParserEnableLegacyMediaDOM=false !! wikitext hello world [[Main Page]] [[File:Foobar.jpg|25px|link=]] [[File:Foobar.jpg|25px]] *foo *bar foo Preformatted
        Broken tag {| class=wikitable |cell |} Two paragraphs !! html/php 01=hello world 02=Main Page 03=Foobar.jpg 04=Foobar.jpg 05=
        • foo
        • bar
        06=foo 07=
        Preformatted
        
        08=
        Broken tag
        09=
        cell
        10=

        Two

        paragraphs






        !! end !! test preload: check and !! options preload !! wikitext Hello cruelkind world. !! html/php Hello kind world. !! end !! test preload: check !! options preload !! wikitext Goodbye Hello world !! html/php Hello world !! end !! test preload: can pass tags through if we want to !! options preload !! wikitext <includeonly>Hello world</includeonly> !! html/php Hello world !! end !! test preload: check that it doesn't try to do tricks !! options preload !! wikitext * ''{{world}}'' {{subst:How are you}}{{ {{{|safesubst:}}} #if:1|2|3}} !! html/php * ''{{world}}'' {{subst:How are you}}{{ {{{|safesubst:}}} #if:1|2|3}} !! end !! test Play a bit with r67090 and T5158 !! wikitext
         
         
         
         
        !! html/php
         
         
         
         
        !! html/parsoid
         
         
         
         
        !! end !! test French spaces in wikitext !! wikitext foo ! bar ? bat 50 % is less than 75 %. Hello : this ; is « something ‹ else › again » !! html/php

        foo ! bar ? bat 50 % is less than 75 %.

        Hello : this ; is « something ‹ else › again »

        !! html/parsoid

        foo ! bar ? bat 50 % is less than 75 %.

        Hello : this ; is « something ‹ else › again »

        !! end !! test Corner case: french spaces in definition list !! options parsoid=wt2html,html2html !! wikitext ;foo : bar !! html
        foo
        bar
        !! end !! test T5158: Test for French spaces in attributes !! wikitext
        !! html/php


        !! end !! test HTML5 data attributes !! wikitext Baz

        Quuz

        !! html/php

        Baz

        Quuz

        !! html/parsoid

        Baz

        Quuz

        !! end !! test Strip reserved data attributes !! wikitext
        d
        !! html/php
        d
        !! html/parsoid
        d
        !! end !! test percent-encoding and + signs in internal links (T28410) !! config wgParserEnableLegacyMediaDOM=false !! wikitext [[User:+%]] [[Page+title%]] [[%+]] [[%+|%20]] [[%+ ]] [[%+r]] [[%]] [[+]] [[File:%+abc%39|foo|[[bar]]]] [[%33%45]] [[%33%45+]] !! html/php

        User:+% Page+title% %+ %20 %+ %+r % + File:%+abc9 3E 3E+

        !! html/parsoid

        User:+% Page+title% %+ %20 %+ %+r % + File:%+abc9 3E 3E+

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

        Text's been normalized?

        !! end !! test T21052 U+3000 IDEOGRAPHIC SPACE should terminate free external links !! wikitext http://www.example.org/ <-- U+3000 (vim: ^Vu3000) !! html

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

        !! end !! test T21052 U+3000 IDEOGRAPHIC SPACE should terminate bracketed external links !! wikitext [http://www.example.org/ ideograms] !! html

        ideograms

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

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

        !! end !! article Mediawiki:loop1 !! text {{Identical|A}} !! endarticle !! article Mediawiki:loop2 !! text {{Identical|B}} !! endarticle !! article Template:Identical !! text {{int:loop1}} {{int:loop2}} !! endarticle !! test T33098 Template which includes system messages which includes the template !! wikitext {{Identical}} !! html

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

        !! end !! test T33490 Turkish: ucfirst 'blah' !! options language=tr !! wikitext {{ucfirst:blah}} !! html

        Blah

        !! end !! test T33490 Turkish: ucfirst 'ix' !! options language=tr !! wikitext {{ucfirst:ix}} !! html

        İx

        !! end !! test T33490 Turkish: lcfirst 'BLAH' !! options language=tr !! wikitext {{lcfirst:BLAH}} !! html

        bLAH

        !! end !! test T33490 Turkish: ucfırst (with a dotless i) !! options language=tr !! wikitext {{ucfırst:blah}} !! html

        Şablon:Ucfırst:blah

        !! end !! test T33490 ucfırst (with a dotless i) with English language !! options language=en !! wikitext {{ucfırst:blah}} !! html

        Template:Ucfırst:blah

        !! end # Note that Parsoid doesn't emit an explicit TOC. # Note also that the html2wt direction tends to emit an extra newline # between the __TOC__ magicword and the first heading unless *both* # the and the

        have a data-parsoid attribute set (even if # it's "{}"). !! test T28375: TOC with italics !! options title=[[Main Page]] !! wikitext __TOC__ ==''Lost'' episodes== !! html/php

        Lost episodes[edit]

        !! html/parsoid

        Lost episodes

        !! end !! test T28375: TOC with bold !! options title=[[Main Page]] !! wikitext __TOC__ =='''should be bold''' then normal text== !! html/php

        should be bold then normal text[edit]

        !! html/parsoid

        should be bold then normal text

        !! end !! test T35845: Headings become cursive in TOC when they contain an image !! options title=[[Main Page]] !! config wgParserEnableLegacyMediaDOM=false !! wikitext __TOC__ ==Image [[Image:foobar.jpg]]== !! html/php

        Image Foobar.jpg[edit]

        !! html/parsoid

        Image

        !! end !! test T35845 (2): Headings become bold in TOC when they contain a blockquote !! options title=[[Main Page]] !! wikitext __TOC__ ==
        Quote
        == !! html/php

        Quote

        [edit]

        !! html/parsoid

        Quote

        !! end !! test Unclosed tags in TOC !! config wgFragmentMode=[ 'html5', 'legacy' ] !! options title=[[Main Page]] !! wikitext __TOC__ ==Proof: 2 < 3== Hanc marginis exiguitas non caperet. QED !! html/php

        Proof: 2 < 3[edit]

        Hanc marginis exiguitas non caperet. QED

        !! html/parsoid

        Proof: 2 < 3

        Hanc marginis exiguitas non caperet. QED

        !! end !! test Multiple tags in TOC !! wikitext __TOC__ ==Foo Bar== ==Foo
        Bar
        == !! html/php

        Foo Bar[edit]

        Foo

        Bar

        [edit]

        !! html/parsoid

        Foo Bar

        Foo

        Bar

        !! end # Don't expect Parsoid to roundtrip this until the php parser comes closer to # html5 tag parsing. !! test Tags with parameters in TOC !! options parsoid=wt2html !! wikitext __TOC__ ==Hello== ==Evilbye== !! html/php

        Hello[edit]

        b">Evilbye[edit]

        !! html/parsoid

        Hello

        b">Evilbye

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

        C++[edit]

        זבנג![edit]

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

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

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

        !! html/parsoid

        C++

        זבנג!

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

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

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

        !! end !! test T74884: bdi element in ToC !! wikitext __TOC__ ==test== !! html/php

        test[edit]

        !! html/parsoid

        test

        !! end !! test T35715: s/strike element in ToC !! wikitext __TOC__ ==test test test== !! html/php

        test test test[edit]

        !! html/parsoid

        test test test

        !! end !! test T198618: style element in ToC !! options styletag=1 !! wikitext __TOC__ ==Style== !! html/php

        Style[edit]

        !! html/parsoid

        Style

        !! end !! test T198618: script element in ToC !! options wgRawHtml=1 !! wikitext __TOC__ ==Script== !! html/php

        Script[edit]

        !! html/parsoid

        Script

        !! end !! test Empty

        tag in TOC, removed by Sanitizer (T92892) !! wikitext __TOC__ ==x== !! html/php

        x[edit]

        !! html/parsoid

        x

        !! end !! article MediaWiki:T34057 !! text == {{int:ok}} == !! endarticle !! test T34057: Title needed when expanding nodes. !! options title=[[Main Page]] !! wikitext {{int:T34057}} !! html

        OK[edit]

        !! end !! test Title needed when expanding templates. !! options title=[[Main Page]] !! wikitext {{Template with pagename}} !! html/php

        This is Main Page.

        !! html/parsoid

        This is Main Page.

        !! end !! test Strip marker in urlencode !! wikitext {{urlencode:xy}} {{urlencode:xy|wiki}} {{urlencode:xy|path}} {{urlencode:x
        two
        y}} !! html/php

        xy xy xy xy

        !! end !! test Strip marker in lc !! wikitext {{lc:xy}} !! html

        xy

        !! end !! test Strip marker in uc !! wikitext {{uc:xy}} !! html

        XY

        !! end !! test Strip marker in formatNum !! wikitext {{formatnum:12}} {{formatnum:12|R}} !! html

        12 12

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

        123 456,78 123456.78

        !! end !! test Wrong option for formatNum (T58199) !! wikitext {{formatnum:1,234.56|Random}} {{formatnum:1,234.56|EVERYTHING}} {{formatnum:1234.56|any argument that has the string 'NOSEP'}} !! html

        1,234.56 1,234.56 1,234.56

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

        foobarista

        !! end !! test Strip marker in padleft !! wikitext {{padleft:|2|xy}} !! html

        xy

        !! end !! test Strip marker in padright !! wikitext {{padright:|2|xy}} !! html

        xy

        !! end !! test Strip marker in anchorencode !! wikitext {{anchorencode:xy}} !! html/php

        xy

        !! html/parsoid

        xy

        !! end !! test nowiki inside link inside heading (T20295) !! wikitext ==[[foo|xyz]]== !! html

        xyz[edit]

        !! end !! test new support for bdi element (T33817) !! wikitext

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

        !! html

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

        !! end !! test Ignore pipe between table row attributes !! wikitext {| |quux |- id=foo | style='color: red' |bar |} !! html
        quux
        bar
        !! end !!test Language parser function !! wikitext {{#language:ar}} !! html

        العربية

        !! end !!test Padleft and padright (default 0-padding) !! wikitext {{padleft:xyz|5}} {{padright:xyz|5}} !! html/php

        00xyz xyz00

        !! html/parsoid

        00xyz xyz00

        !! end !!test Padleft and padright (partial fill) !! wikitext {{padleft:xyz|6|ab}} {{padright:xyz|6|ab}} !! html/php

        abaxyz xyzaba

        !! html/parsoid

        abaxyz xyzaba

        !! end !!test Padleft and padright as substr !! wikitext {{padleft:|3|abcde}} {{padright:|3|abcde}} !! html/php

        abc abc

        !! html/parsoid

        abc abc

        !! end !! test Padleft and padright with non-numerical length (T180403) !! wikitext {{padleft:abcdef|junk}} {{padright:abcdef|junk}} !! html/php

        abcdef abcdef

        !! end !!test Special parser function !! wikitext {{#special:RandomPage}} {{#special:BaDtItLe}} {{#special:Foobar}} !! html

        Special:Random Special:Badtitle Special:Foobar

        !! end !! test Langconvert tag: crh-latn to crh-cyrl !! wikitext test !! html/php

        тест

        !! end !! test Langconvert tag: en to en-x-piglatin !! config wgUsePigLatinVariant=true !! wikitext test !! html/php

        esttay

        !! end !! test Langconvert tag: gan-hans to gan-hant !! wikitext !! html/php

        !! end !! test Langconvert tag: kk-latn to kk-cyrl !! wikitext test !! html/php

        тест

        !! end !! test Langconvert tag: ku-latn to ku-arab !! wikitext test !! html/php

        تەست

        !! end !! test Langconvert tag: shi-latn to shi-tfng !! wikitext test !! html/php

        ⵜⴻⵙⵜ

        !! end !! test Langconvert tag: sr-latn to sr-cyrl !! wikitext zdravo !! html/php

        здраво

        !! end !! test Langconvert tag: sr-el to sr-ec (should fail) !! wikitext zdravo !! html/php

        Error: Langconvert tag's from and to attributes must not be empty and must contain BCP 47 codes for convertible variants of the same language.

        !! end !! test Langconvert tag: tg to tg-latn !! wikitext тест !! html/php

        test

        !! end !! test Langconvert tag: uz-cyrl to uz-latn !! wikitext тест !! html/php

        test

        !! end !! test Langconvert tag: zh-hans to zh-hant !! wikitext !! html/php

        !! end !! test Langconvert tag: self-closed !! wikitext xx !! html/php

        xx

        !! end # {{=}} will be converted to a parser function which expands to `=` # If you have it defined as a Template that expands to `=` that's ok; # and using it explicitly as {{Template:=}} (regardless of what it # expands to) is also ok and will not generate a tracking category. # T91154 !! test Using {{=}} when it expands to "=" should not create a tracking category !! wikitext This uses {{=}} and {{Template:=}}. !! html

        This uses = and =.

        !! end # Repeat the test, looking at categories. Note: none should be emitted! !! test Using {{=}} when it expands to "=" should not create a tracking category (cat) !! options cat !! wikitext This uses {{=}} and {{Template:=}}. !! html/php !! end !!test T36939 - Case insensitive link parsing ([HttP://]) !! wikitext [HttP://MediaWiki.Org/] !! html/php

        [1]

        !! html/parsoid

        !! end !!test T36939 - Case insensitive link parsing ([HttP:// title]) !! wikitext [HttP://MediaWiki.Org/ MediaWiki] !! html

        MediaWiki

        !! end !!test T36939 - Case insensitive link parsing (HttP://) !! wikitext HttP://MediaWiki.Org/ !! html/php

        HttP://MediaWiki.Org/

        !! html/parsoid

        HttP://MediaWiki.Org/

        !! end !!test Disable TOC !! options notoc !! wikitext Lead ==Section 1== ==Section 2== ==Section 3== ==Section 4== ==Section 5== !! html

        Lead

        Section 1[edit]

        Section 2[edit]

        Section 3[edit]

        Section 4[edit]

        Section 5[edit]

        !! end ### ### Parsoid-specific tests ### Parsoid-PHP parser incompatibilities ### !!test 1. SOL-sensitive wikitext tokens as template-args !! options parsoid=wt2html,wt2wt !! wikitext {{1x|*a}} {{1x|#a}} {{1x|:a}} !! html/php
        • a
        1. a
        a
        !! html/parsoid
        • a
        1. a
        a
        !!end #### ----------------------------------------------------------------- #### Parsoid-specific functionality tests #### ----------------------------------------------------------------- ## Just a regression test !! test Wikilink with only closing tag in target !! options parsoid=wt2html !! wikitext [[Test|]] !! html/parsoid

        !! end #### ---------------------------------------------------------------- #### Parsoid-only testing of Parsoid's impl of LST #### Not implemented yet, see #### https://www.mediawiki.org/wiki/Parsoid/HTML_based_LST #### ---------------------------------------------------------------- ## We still need to support serializing the older format while content is stored. !! test LST Sections: Backwards compatibility !! options parsoid={ "suppressErrors": true, "modes": ["html2wt"] } !! wikitext
        !! html/parsoid

        !! end !! test LST Sections: Newfangled approach !! wikitext
        !! html/parsoid

        !! end #--------- Test stripping of empty nodes in template content ---------- !! test Empty LI and TR nodes should be stripped from template content !! wikitext {{EmptyLITest}} {{EmptyTRTest}} !! html/parsoid
        • a
        • b
        foo
        bar
        !! end !! test Empty LI and TR nodes should not be stripped from top-level content !! wikitext *a * *b {| |- |- |foo |} !! html/parsoid
        • a
        • b
        foo
        !! end !! test Empty TR nodes should not be stripped if they have any attributes set !! wikitext {{EmptyTRWithHTMLAttrTest}} !! html/parsoid
        foo
        bar
        !! 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

        =foo=

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

        foo

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

        #### 6. Heading chars in SOL context #### ---------------------------------------- !! test Headings: 0. Unnested !! options parsoid=html2wt !! html/parsoid

        =foo=

        =foo= =foo=

        =fooa=

        !! wikitext =foo= =foo= =foo= =foo''a''= !!end # New headings and existing headings are handled differently !! test Headings: 1. Nested inside html !! options parsoid=html2wt !! html/parsoid

        =foo=

        =foo=

        =foo=

        =foo=

        =foo=

        =foo=

        =foo=

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

        foo

        *bar !! options parsoid=html2wt !! html/parsoid

        foo

        *bar

        foo

        =bar

        foo

        =bar= !! wikitext = foo = *bar = foo = =bar = foo = =bar= !!end !! test Headings: 3. Nested inside html with wikitext split by html tags !! options parsoid=html2wt !! html/parsoid

        =boldfoo=

        !! wikitext = ='''bold'''foo= = !!end !! test Headings: 4a. No escaping needed (testing just h1 and h2) !! options parsoid=html2wt !! html/parsoid

        =foo

        foo=

        =foo=

        =foo= bar

        =foo

        foo=

        =

        =foo=

        !! wikitext = =foo = = foo= = = =foo= = = =foo= bar = == =foo == == foo= == = = = = ''=''foo= = !!end !! test Headings: 4b. No escaping needed (inside p-tags) !! options parsoid=html2wt !! html/parsoid

        =foo= x =foo=

        !! wikitext =foo= x =foo= !! html/php

        =foo= x =foo=

        !!end !! test Headings: 4c. Short headings (1) !! options parsoid=html2wt !! html/parsoid

        ===

        !! wikitext === !! html/php

        ===

        !! end # in the html2wt direction we emit '= = =' or '===' !! test Headings: 4d. Short headings (2) !! options parsoid=wt2html,html2html !! wikitext = == === ==== ===== !! html/php

        = ==

        =[edit]

        ==[edit]

        =[edit]

        !! html/parsoid

        = ==

        =

        ==

        =

        !! end !! test Headings: 5. Empty headings !! options parsoid=html2wt !! html/parsoid

        !! wikitext !! end !! test Headings: 6a. Heading chars in SOL context (with trailing spaces) !! options parsoid=html2wt !! html/parsoid

        =a=

        =a=

        =a=

        !! wikitext =a= =a= =a= !!end !! test Headings: 6b. Heading chars in SOL context (with trailing newlines) !! options parsoid=html2wt !! html/parsoid

        =a= b

        =a= b

        =a= b

        !! wikitext =a= b =a= b =a= b !!end !! test Headings: 6c. Heading chars in SOL context (leading newline break) !! options parsoid=html2wt !! html/parsoid

        a =b=

        !! wikitext a =b= !!end !! test Headings: 6d. Heading chars in SOL context (with interspersed comments) !! options parsoid=html2wt !! html/parsoid

        =a=

        =a=

        !! wikitext =a= =a= !!end !! test Headings: 6d. Heading chars in SOL context (No escaping needed) !! options parsoid=html2wt !! html/parsoid =a=
        b
        !! wikitext =a=
        b
        !!end !! test Headings: 7. Insert a newline between new content and headings !! options parsoid=html2wt !! html/parsoid

        NEW

        new

        A

        a

        !! wikitext == NEW == new ==A== a !! end !! test Headings: Used as horizontal rule !! config wgFragmentMode=[ 'html5', 'legacy' ] !! options parsoid=wt2html !! wikitext =============== !! html/php
        ===[edit]
        !! html/parsoid
        ===
        !! end #### --------------- Lists --------------- #### 0. Outside nests (*foo, etc.) #### 1. Nested inside html
        • *foo
        #### 2. Inside definition lists #### 3. Only bullets at start should be escaped #### 4. No escapes needed #### 5. No unnecessary escapes #### 6. Escape bullets in SOL position #### 7. Escape bullets in a multi-line context #### ---------------------------------------- !! test Lists: 0. Outside nests !! options parsoid=html2wt !! html/parsoid

        *foo

        #foo

        ;Foo:bar

        !! wikitext *foo #foo ;Foo:bar !!end ## Making these next 3 tests Parsoid-only since they are html2wt tests ## to test wikitext escaping, and insignificant whitespace diffs ## cause PHP parser tests to barf !! test Lists: 1. Nested inside html (No unnecessary escapes) !! options parsoid=html2wt !! html/parsoid
        • *foo
        • #foo
        • :foo
        • ;foo
        • *foo
        • #foo
        • :foo
        • ;foo
        1. *foo
        2. #foo
        3. :foo
        4. ;foo
        5. *foo
        6. #foo
        7. :foo
        8. ;foo
        !! wikitext * *foo * #foo * :foo * ;foo **foo *#foo *:foo *;foo # *foo # #foo # :foo # ;foo #*foo ##foo #:foo #;foo !!end !! test Lists: 2. Inside definition lists !! options parsoid=html2wt !! html/parsoid
        ;foo
        :foo
        :foo
        bar
        :foo
        !! wikitext ; ;foo ; :foo ; :foo : bar : :foo !!end !! test Lists: 3. Only bullets at start of text in wikitext-generated HTML should be escaped !! options parsoid=html2wt !! html/parsoid
        • *foo*bar
        • *fooit*bar
        !! wikitext * *foo*bar **foo''it''*bar !!end !! test Lists: 4. No escapes needed !! options parsoid=html2wt !! html/parsoid
        • foo*bar
        • foo*bar
        !! wikitext *foo*bar *''foo''*bar *[[Foo]]: bar *[[Foo]]*bar !!end !! test Lists: 5. No unnecessary escapes !! options parsoid=html2wt !! html/parsoid
        • bar [[foo]]
        • =bar [[foo]]
        • [[bar [[foo]]
        • ]]bar [[foo]]
        • =bar foo]]=
        • : a
        • * foo
        !! wikitext * bar [[foo]] * =bar [[foo]] * [[bar [[foo]] * ]]bar [[foo]] * =bar foo]]= * : a * ''* foo'' !!end !! test Lists: 6. Escape bullets in SOL position !! options parsoid=html2wt !! html/parsoid

        *foo

        !! wikitext *foo !!end !! test Lists: 7. Escape bullets in a multi-line context !! options parsoid=html2wt !! html/parsoid

        a *b

        !! wikitext a *b !!end !! test Lists: 8. Escape colons only if not present in tags !! options parsoid=html2wt !! html/parsoid
        a:bc:d
        !! wikitext ; a:b''c:d'' !! end #### --------------- HRs --------------- #### 1. Single line #### ----------------------------------- !! test HRs: 1. Single line !! options parsoid=html2wt !! html/parsoid
        ----
        =foo=
        *foo !! wikitext -------- ----=foo= ----*foo !! end #### --------------- Tables --------------- #### 1a. Simple example #### 1b. No escaping needed (!foo) #### 1c. No escaping needed (|foo) #### 1d. No escaping needed (|}foo) #### #### 2a. Nested in td (foo|bar) #### 2b. Nested in td (foo||bar) #### 2c. Nested in td -- no escaping needed(foo!!bar) #### #### 3a. Nested in th (foo!bar) #### 3b. Nested in th (foo!!bar) #### 3c. Nested in th -- no escaping needed(foo||bar) #### #### 4a. Escape - #### 4b. Escape + #### 4c. No escaping needed #### -------------------------------------- !! test Tables: 1a. Simple example !! options parsoid=html2wt !! html/parsoid

        {| |}

        !! wikitext {| |} !! end !! test Tables: 1b. No escaping needed !! options parsoid=html2wt !! html/parsoid

        !foo

        !! wikitext !foo !! end !! test Tables: 1c. No escaping needed !! options parsoid=html2wt !! html/parsoid

        |foo

        !! wikitext |foo !! end !! test Tables: 1d. No escaping needed !! options parsoid=html2wt !! html/parsoid

        |}foo

        !! wikitext |}foo !! end !! test Tables: 2a. Nested in td !! options parsoid=html2wt !! html/parsoid
        foo|bar
        x
        a|b
        !! wikitext {| |foo|bar |- |x
        a|b
        |} !! html/php
        foo|bar
        x
        a|b
        !! end !! test Tables: 2b. Nested in td !! options parsoid=html2wt !! html/parsoid
        foo||bar ab||c a
        b||c
        !! wikitext {| |foo||bar |a''b||c'' |a''
        b||c
        '' |} !! html/php
        foo||bar ab||c a
        b||c
        !! end !! test Tables: 2c. Nested in td -- no escaping needed !! options parsoid=html2wt !! html/*
        foo!!bar
        !! wikitext {| |foo!!bar |} !! end !! test Tables: 3a. Nested in th !! options parsoid=html2wt !! html/*
        foo!bar
        !! wikitext {| !foo!bar |} !! end !! test Tables: 3b. Nested in th !! options parsoid=html2wt !! html/parsoid
        foo!!bar foo|bar foo!!bar foo!!bar
        !! wikitext {| !foo!!bar !''foo|bar'' !''foo!!bar'' !''foo!!bar'' |} !! html/php
        foo!!bar foo|bar foo!!bar foo!!bar
        !! end !! test Tables: 3c. Nested in th !! options parsoid=html2wt !! html/parsoid
        foo||bar foo||bar
        !! wikitext {| !foo||bar !foo||bar |} !! html/php
        foo||bar foo||bar
        !! end !! test Tables: 4a. Escape - !! options parsoid=html2wt !! html/*
        -bar
        -bar
        !! wikitext {| !-bar |- | -bar |} !! end !! test Tables: 4b. Escape + !! options parsoid=html2wt !! html/*
        +bar
        +bar
        !! wikitext {| !+bar |- | +bar |} !! end !! test Tables: 4c. No escaping needed !! options parsoid=html2wt !! html/parsoid
        foo-barfoo+bar
        foo-barfoo+bar
        foo

        bar|baz +bar -bar

        x
        a|b
        !! wikitext {| |foo-bar |foo+bar |- |''foo''-bar |''foo''+bar |- |foo bar|baz +bar -bar |- |x
        a|b
        |} !! html/php
        foo-bar foo+bar
        foo-bar foo+bar
        foo

        bar|baz +bar -bar

        x
        a|b
        !! end ## FIXME: Looks like normalizing needs to learn about attrSepSrc !! test Tables: 4d. No escaping needed !! options parsoid=html2wt !! html/parsoid
        Foo-bar +1 -2
        !! wikitext {| |[[Foo]]-bar ||+1 ||-2 |} !! html/php
        Foo-bar +1 -2
        !! end !! test Tables: 4e. Escape } !! options parsoid=html2wt !! html/parsoid
        }
        x}
        !! wikitext {| | } |- |x||} |} !! html/php
        }
        x }
        !! end !! test Tables: 5. Empty table cells should get whitespace to avoid need for nowikis !! options parsoid=html2wt !! html/parsoid
        !! wikitext {| | || align="center" | || |} {| | | align="center" | | |} {| | {{!}}{{!}} align="center" | || |} {| ! !! align="center" | !! |} !! html/php
        !! end !! test T97430: Don't emit empty nowiki pairs around marker meta tags !! options parsoid=html2wt !! html/parsoid

        *This is a long sentence here that will make the nowiki algo split up the nowikis into multiple pairs |** Make this another long long long sentence forcing the nowiki algo to split up the nowikis.

        !! wikitext *This is a long sentence here that will make the nowiki algo split up the nowikis into multiple pairs |** Make this another long long long sentence forcing the nowiki algo to split up the nowikis. !! end !! test Unclosed xmlish element in table line shouldn't eat end delimiters !! options parsoid=html2wt !! html/parsoid
        <foo bar>
        !! wikitext {| | |} !! html/php
        <foo bar>
        !! 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. WikiLinks: No escapes needed !! options parsoid=html2wt !! html/parsoid

        Fooboo [Foobar] x [Foobar] x

        !! wikitext [[Foo|Foo''boo'']] [[Foo|[Foobar]]] [[Foo|x [Foobar] x]] !! html/php

        Fooboo [Foobar] x [Foobar] x

        !! end !! test Links 2. WikiLinks: Escapes needed !! options parsoid=html2wt !! html/parsoid Foobar] x [http://google.com g] x [[Bar]] x [[Bar]] x |Bar ]]bar [[bar x [[ y x ]] y x ]] y [[ z !! wikitext [[Foo|Foobar]]] [[Foo|x [http://google.com g] x]] [[Foo|[[Bar]]]] [[Foo|x [[Bar]] x]] [[Foo||Bar]] [[Foo|]]bar]] [[Foo|[[bar]] [[Foo|x [[ y]] [[Foo|x ]] y]] [[Foo|x ]] y [[ z]] !! html/php

        Foobar] x [http://google.com g] x [[Bar]] x [[Bar]] x |Bar ]]bar [[bar x [[ y x ]] y x ]] y [[ z

        !! end !! test Links 3. WikiLinks: No escapes needed !! options parsoid=html2wt !! html/parsoid

        [Foobar foo|bar

        !! wikitext [[Foo|[Foobar]] [[Foo|foo|bar]] !! html/php

        [Foobar foo|bar

        !! end !! test Links 4. ExtLinks: Escapes needed !! options parsoid=html2wt !! html/parsoid

        [google] google] goog] le

        [http://google.com]

        [http://google.com google]

        [http://google.com]

        [http://google.com]

        !! wikitext [http://google.com [google]] [http://google.com google]] [http://google.com goog] le] [http://google.com] [http://google.com google] [http://google.com] [{{1x|http://google.com}}] !! html/php

        [google] google] goog] le

        [http://google.com]

        [http://google.com google]

        [http://google.com]

        [http://google.com]

        !! end !! test Links 5. ExtLinks: No escapes needed !! options parsoid=html2wt !! html/parsoid

        [google

        []

        !! wikitext [http://google.com [google] [[http://google.com]] !! html/php

        [google

        [[1]]

        !! end !! test Links 6. Add s between text-nodes and url-links when required (T66300) !! options parsoid=html2wt !! html/parsoid

        xhttp://example.comy http://example.com?x http://example.com&x http://example.com'x http://example.com,x http://example.com.x http://example.com;x http://example.com:x http://example.com;x http://example.com!x http://example.com=x http://example.com(x) http://example.com(x)

        !! wikitext xhttp://example.comy http://example.com?x http://example.com&x http://example.com'x http://example.com,x http://example.com.x http://example.com;x http://example.com:x http://example.com;x http://example.com!x http://example.com=x http://example.com(x) http://example.com(x) !! end !! test Links 7a. Don't add spurious s between text-nodes and url-links (T66300) !! options parsoid=html2wt !! html/parsoid

        x http://example.com y "http://example.com" (http://example.com) (http://example.com) foo http://example.com, http://example.com, foo

        !! wikitext x http://example.com y "http://example.com" (http://example.com) (http://example.com) foo http://example.com, http://example.com, foo !! html/php

        x http://example.com y "http://example.com" (http://example.com) (http://example.com) foo http://example.com, http://example.com, foo

        !! end !! test Links 7b. Don't add spurious s between text-nodes and url-links (T66300) !! options parsoid=html2wt !! html/parsoid

        http://example.com.,;:!?\ -http://example.com:

        !! wikitext http://example.com.,;:!?\ -http://example.com: !! html/php

        http://example.com.,;:!?\ -http://example.com:

        !! end !! test Links 8. Add s between text-nodes and RFC-links when required (T66300) !! options parsoid=html2wt !! html/parsoid

        RFC 1234 RFC 123y XRFC 123y

        !! wikitext RFC 1234 RFC 123y XRFC 123y !! end !! test Links 9. Don't add spurious s between text-nodes and RFC-links (T66300) !! options parsoid=html2wt !! html/parsoid

        RFC 123?foo RFC 123&foo -RFC 123-

        !! wikitext RFC 123?foo RFC 123&foo -RFC 123- !! html/php

        RFC 123?foo RFC 123&foo -RFC 123-

        !! end !! test Links 10. Add s between text-nodes and PMID-links when required (T66300) !! options parsoid=html2wt !! html/parsoid

        PMID 1234 PMID 123y XPMID 123y !! wikitext PMID 1234 PMID 123y XPMID 123y !! end !! test Links 11. Don't add spurious s between text-nodes and PMID-links (T66300) !! options parsoid=html2wt !! html/parsoid

        PMID 123?foo PMID 123&foo -PMID 123-

        !! wikitext PMID 123?foo PMID 123&foo -PMID 123- !! html/php

        PMID 123?foo PMID 123&foo -PMID 123-

        !! end !! test Links 12. Add s between text-nodes and ISBN-links when required (T66300) !! options parsoid=html2wt !! html/parsoid

        ISBN 12345678901 ISBN 1234567890x aISBN 1234567890b

        !! wikitext ISBN 12345678901 ISBN 1234567890x aISBN 1234567890b !! end !! test Links 13. Don't add spurious s between text-nodes and ISBN-links (T66300) !! options parsoid=html2wt !! html/parsoid

        -ISBN 1234567890's !! wikitext -ISBN 1234567890's !! html/php

        -ISBN 1234567890's

        !! end !! test Links 14. Protect link-like plain text. (Parsoid bug T78425) !! options parsoid=html2wt !! html/*

        this is not a link: http://example.com

        !! wikitext this is not a link: http://example.com !! end !! test Links 15. Link trails can't become link prefixes. !! options language=is parsoid=html2wt !! html/parsoid

        Söfnuður-00

        !! wikitext [[Söfnuður]]-[[00]] !! html/php

        Söfnuður-00

        !! end # This example actually from lnwiki, but arwiki has the same link # prefix and equivalent link trail for this purpose. !! test Links 17. Link trails (T236183) !! options language=ar !! wikitext [[Likalo]] · [[Pusupúsu]] · !! html/php

        Likalo · Pusupúsu ·

        !! html/parsoid

        Likalo · Pusupúsu ·

        !! end #### --------------- Quotes --------------- #### 1. Quotes inside and #### 2. Link fragments separated by and tags #### 3. Link fragments inside and #### 4. No escaping needed #### -------------------------------------- !! test 1a. Quotes inside and !! options parsoid=html2wt !! html/*

        'foo' ''foo'' '''foo''' foo's 'foo' ''foo'' '''foo''' foo'bar'baz foo's 'foo foo' foo'' 'foo' 'foo foo' 'foo' fools' errand fool's errand 'foo bar 'baz a|!*#-:;+-~[]{}b'x

        !! wikitext '''foo''' ''''foo'''' '''''foo''''' ''foo'''s ''''foo'''' '''''foo''''' ''''''foo'''''' '''foo'''bar'''baz''' '''foo''''s '''foo'' ''foo''' ''foo'''' '''foo''' ''''foo''' '''foo'''' ''''foo'''' ''fools' errand'' ''fool's errand'' '''foo'' bar '''baz'' a|!*#-:;+-~[]{}b'''x'' !! end !! test 1b. Quotes inside and with other tags on same line !! options parsoid=html2wt !! html/parsoid 'a foo bar a' foo bar a' foo bar foo x'bar 'foo [1] 'foo
        test
        'foo and
        bar
        1. test
        !! wikitext '''a'' foo ''[[bar]]'' ''a''' foo ''[[bar]]'' ''a''' foo '''{{1x|[[bar]]}}''' [[foo]] x'''[[bar]]'' '''foo'' test '''foo''
        test
        '''foo'' and
        bar !! end !! test 2. Link fragments separated by and tags !! options parsoid=html2wt !! html/parsoid

        [[foohello]]

        [[foohello]]

        !! wikitext [[''foo''hello]] [['''foo'''hello]] !! end # FIXME: Escaping one or both of [[ and ]] is also acceptable -- # this is one of the shortcomings of this format !! test 3. Link fragments inside and !! options parsoid=html2wt !! html/parsoid

        [[foo]]

        [[foo]]

        !! wikitext ''[[foo'']] '''[[foo''']] !! end !! test 4. No escaping needed !! options parsoid=html2wt !! html/parsoid

        'bar' 'bar' 'a:b'foo

        !! wikitext '''bar''' ''''bar'''' 'a:b'foo !! end #### ----------- Paragraphs --------------- #### 1. No unnecessary escapes #### -------------------------------------- !! test 1. No unnecessary escapes !! options parsoid=html2wt !! html/parsoid

        bar [[foo]]

        =bar [[foo]]

        [[bar [[foo]]

        ]]bar [[foo]]

        =bar foo]]=

        !! wikitext bar [[foo]] =bar [[foo]] [[bar [[foo]] ]]bar [[foo]] =bar foo]]= !!end #### ----------------------- PRE -------------------------- !! test 1. Leading whitespace in SOL context should be stripped !! options parsoid=html2wt !! html/parsoid

        a

        a

        a(tab)

        a a

        a b

        a b

        a b

        !! wikitext a a a(tab) a a a b a b a b !! html/php

        a

        a

        a(tab)

        a a

        a b

        a b

        a b

        !! end !! test 2. Leading whitespace in non-indent-pre contexts should not be escaped !! options parsoid=html2wt !! html/parsoid

        foo [1]

        1. a b
        !! wikitext foo ''a'' b !! end !! test 3. Leading whitespace in indent-pre suppressing contexts should not be escaped !! options parsoid=html2wt !! html/parsoid

        a b c

        !! wikitext
        a b c
        !! end !! test 4. Leading whitespace in indent-pre suppressing contexts should not be escaped !! options parsoid=html2wt !! html/parsoid
        caption
        !! wikitext [[File:Foobar.jpg|thumb|caption]] !! end !! test 5. Nowiki escaping should account for indent-pres !! options parsoid=html2wt !! html/parsoid
        ==foo==
        !! wikitext ==foo== !! end !! test T95794: nowiki escaping should account for leading space at start-of-line in an indent-pre block !! options parsoid=html2wt !! html/parsoid
        * foo
        * bar
        
        !! wikitext * foo * bar !! end !! test Whitespace scrubbing in SOL position should account for SOL-sensitive wikitext markup !! options parsoid = { "modes": ["html2wt"] } !! html/parsoid

        foo

        %foo

        *foo

        #foo

        =foo=

        *foo

        *foo

        *foo

        *foo

        foo

        *foo

        !! wikitext foo %foo *foo #foo =foo= [[Category:Foo]] *foo [[Category:Foo]] *foo *foo *foo foo *foo !! end #### --------------- Behavior Switches -------------------- !! test 1. Valid behavior switches should be escaped !! options parsoid=html2wt !! html/parsoid __TOC__ __TOC__ !! wikitext __TOC__ ''__TOC__'' !! end !! test 2. Invalid behavior switches should not be escaped !! options parsoid=html2wt !! html/parsoid __TOO__ __|__ !! wikitext __TOO__ __|__ !! end # We use indent-pre as an indirect way to test for sol-transparent behavior. !! test Behavior switches should be SOL-transparent !! options parsoid=html2wt !! html/parsoid
        __TOO__
         foo
        bar
        !! wikitext __TOC__ __TOO__ __TOC__ foo __TOC__ bar !! end # last two tags test case-insensitivity !! test During serialization, normalize output when given a SOL-transparent prefix !! options parsoid=html2wt !! html/parsoid

        x

        y

        z

        p

        !! wikitext x __NOTOC__y __NOTOC__z __notoc__p !! end #### --------------- HTML tags --------------- #### 1. a tags #### 2. other tags #### 3. multi-line html tag #### 4. extension tags #### ----------------------------------------- !! test 1. a tags !! options parsoid=html2wt !! html/parsoid <a href="http://google.com">google</a> !! wikitext google !! end !! test 2. other tags !! options parsoid=html2wt !! html/parsoid
        • <div>foo</div>
        • <div style="color:red">foo</div>
        • <td>
        !! wikitext *
        foo
        *
        foo
        * !! end !! test 3. multi-line html tag !! options parsoid=html2wt !! html/parsoid

        <div >foo</div >

        !! wikitext
        foo
        !! end !! test 4. extension tags !! options parsoid=html2wt !! html/parsoid

        <ref>foo</ref>

        <ref>bar

        baz</ref>

        !! wikitext foo bar baz !! end ## FIXME: This test is less useful now that the leading space is normalized away !! test Parsoid: newline inducing block nodes don't suppress !! options parsoid=html2wt !! html/parsoid a

        foo

        !! wikitext a = foo = !! end #### --------------- Others --------------- !! test Escaping nowikis !! options parsoid=html2wt !! html/parsoid

        <nowiki>foo</nowiki>

        !! wikitext <nowiki>foo</nowiki> !! end ## The quote-char in the input is necessary for triggering the bug !! test (T54035) Nowiki-escaping should not get tripped by " :" in text !! options parsoid=html2wt !! html/parsoid

        foo's bar :

        !! wikitext foo's bar : !! end #----------- End of wikitext escaping tests -------------- !! test Tag-like HTML structures are passed through as text !! wikitext 1>2 xb 1f !! html

        <x y>

        <x.y>

        <x-y>

        1>2

        x<y

        a>b

        1<d e>f

        !! end !! test HTML tag with necessary entities in attributes !! wikitext foo !! html

        foo

        !! end !! test HTML tag with 'unnecessary' entity encoding in attributes !! wikitext foo !! html

        foo

        !! end !! test HTML tag with broken attribute value quoting !! options parsoid=wt2html,html2html !! wikitext Foo

        !! html/parsoid

        Foo

        !! end !! test Self-closed tag with broken attribute value quoting !! options parsoid=wt2html,html2html !! wikitext
        Foo
        !! end !! test Table with broken attribute value quoting !! options parsoid=wt2html,html2html !! wikitext {| | title="Hello world|Foo |} !! html/php
        Foo
        !! html/parsoid
        Foo
        !! end !! test Table with broken attribute value quoting on consecutive lines !! options parsoid=wt2html,html2html !! wikitext {| | title="Hello world|Foo | style="color:red|Bar |} !! html/php
        Foo Bar
        !! html/parsoid
        Foo Bar
        !! end !!test Accept empty td cell attribute !! wikitext {| | align="center" |foo|| | |} !! html
        foo
        !! end !!test Non-empty attributes in th-cells !! wikitext {| !Foo!! style="color: red" |Bar |} !! html
        Foo Bar
        !! end !!test Accept empty attributes in th-cells !! wikitext {| !|foo!!|bar |} !! html
        foo bar
        !! end !!test Empty table rows go away !! wikitext {| |Hello |there |- class="foo" |- |} !! html
        Hello there
        !! 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 !! wikitext {| |- [[foo]] |} !! html/php
        !! html/parsoid
        !!end # Parsoid-only test of a DOM pass !!test Trailing newlines in a deep dom-subtree that ends a wikitext line should be migrated out !! wikitext {| |foo bar |} {| |foo |} !! html/parsoid
        foo

        bar

        foo
        !!end # Note that the "style" attribute is really a template parameter here. # The = would have to be {{=}} if you wanted the literal. !!test Empty TD followed by TD with tpl-generated attribute !! wikitext {| |- | |{{1x|style='color:red'}}|foo |} !! html
        foo
        !! end !!test Indented table with an empty td !! wikitext {| |- | |foo |} !! html
        foo
        !! end !! test Indented table with blank lines in between (T85627) !! wikitext {| |foo |} !! html/php
        foo


        !! html/parsoid
        foo


        !! end !!test Indented block & table !! wikitext
        foo
        {| |foo |} !! html/php
        foo
        foo
        !! html/parsoid
        foo
        foo
        !!end !! test Indent and comment before table row !! wikitext {| |- |there |} !! html/php
        there
        !! html/parsoid
        there
        !! end # PHP parser omits empty TR !!test Empty TR followed by a template-generated TR !! wikitext {| |- {{1x|foo}} |} !! html/php
        foo
        !! html/parsoid
        foo
        !!end ## PHP and parsoid output differ for this; as usual PHP omits empty ## elements, and since it strips the comments the TR is empty. !!test Empty TR followed by mixed-ws-comment line should RT correctly !! wikitext {| |- |- |} !! html/php
        !! html/parsoid
        !! end !!test Multi-line image caption generated by templates with/without trailing newlines !! wikitext [[File:Foobar.jpg|thumb|300x300px|foo\n{{1x|A}}\n{{1x|B}}\n{{1x|C}}]] [[File:Foobar.jpg|thumb|300x300px|foo\n{{1x|A}}\n{{1x|B}}\n{{1x|C}}\n\n]] !! html/parsoid
        foo\nA\nB\nC
        foo\nA\nB\nC\n\n
        !! end !! test New element inserted (without intervening newlines) after an old sol-transparent node should serialize correctly !! options parsoid=html2wt !! html/parsoid

        new para

        new heading

        !! wikitext foo new para [[Category:Foo]] = new heading = !! 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=html2wt !! html/parsoid

        x x

        !! wikitext x ''' ''x''''' !! end !!test Encapsulate protected attributes from wt !! wikitext
        foo
        {| typeof="mw:placeholder stuff" data-mw="whoo" data-parsoid="weird" data-parsoid-other="no" about="time" rel="mw:true" |ok |} !! html/parsoid
        foo
        ok
        !!end ## Currently the p-wrapper is fragile in how it adds / removes transformations. ## Having nested or stray pre tags results in the attempt to add duplicates, ## causing an assertion fail. This test tries to prevent that situation. !! test Ensure ParagraphWrapper can deal with stray closing pre tags !! options parsoid=wt2html !! wikitext plain text
        !! html/parsoid

        plain text

        !! end ## Remex doesn't account for fostered content. !! test 1. Ensure fostered text content is wrapped in element nodes !! options parsoid=wt2html !! wikitext hi
        ho
        !! html/php hi
        ho
        !! html/parsoid

        hi

        ho

        !! end ## Remex doesn't account for fostered content. !! test 2. Ensure fostered text content is wrapped in element nodes (traps regressions around fostered marker on the element getting lost) !! options parsoid=wt2html,wt2wt !! wikitext || ||
        a
        !! html/php || ||
        a
        !! html/parsoid

        || ||

        a
        !! end ## Remex doesn't account for fostered content. !! test Encapsulation properly handles null DSR information from foster box !! options parsoid=wt2html,wt2wt !! wikitext {{1x|foo
        bar
        }} !! html/parsoid

        foo

        bar
        !! end ## Remex doesn't account for fostered content. !! test 1. Encapsulate foster-parented transclusion content !! options parsoid=wt2wt,wt2html !! wikitext {{1x|foo}}
        bar
        !! html/php foo
        bar
        !! html/parsoid

        foo

        bar
        !! end !! test 2. Encapsulate foster-parented transclusion content !! options parsoid=wt2wt,wt2html !! wikitext
        {{1x|foo}}
        bar
        !! html/parsoid
        foo
        bar
        !! end !! test 3. Encapsulate foster-parented transclusion content !! options parsoid=wt2wt,wt2html !! wikitext

        {{1x|foo

        }}bar
        !! html/parsoid

        foo

        bar
        !! end !! test 4. Encapsulate foster-parented transclusion content !! options parsoid=wt2wt,wt2html !! wikitext

        {{1x|foo

        }}bar
        !! html/parsoid

        foo

        bar
        !! end ## Remex doesn't account for fostered content. !! test 5. Encapsulate foster-parented transclusion content !!options parsoid=wt2wt,wt2html !! wikitext foo}}

        {{1x|foo

        !! html/php foo

        foo

        !! html/parsoid

        foo

        foo

        !! end ## Remex doesn't account for fostered content. !! test 6. Encapsulate foster-parented transclusion content !! options parsoid=wt2wt,wt2html !! wikitext foo

        {{1x|foo

        }}

        ok

        !! html/php foo

        foo

        ok

        !! html/parsoid

        foo

        foo

        ok

        !! end !! test 7. Encapsulate foster-parented transclusion content !!options parsoid=wt2wt,wt2html !! wikitext {{1x|

        foo

        }}
        bar
        !! html/parsoid

        foo

        bar
        !! end ## Remex doesn't account for fostered content. # Note that the wt is broken on purpose: the = should be {{=}} if you # don't want it to be a template parameter key. !! test 8. Encapsulate foster-parented transclusion content !! options parsoid=wt2wt,wt2html !! wikitext {{1x|a }}{|{{1x|style='color:red'}} |- |b |} !! html/php

        a

        b
        !! html/parsoid

        a

        {{{1}}}

        b
        !! end ## Remex doesn't account for fostered content. !! test 9. Encapsulate foster-parented transclusion content !!options parsoid=wt2wt,wt2html !! wikitext {{1x|hi
        hello}} !! html/php hi

        hello

        !! html/parsoid

        hi

        hello

        !! end !! test Table in fosterable position !!options parsoid=wt2html !! wikitext {{OpenTable}}
        {| |}
        |} !! html/parsoid
        !! end # Parsoid only for T66747 # (Also core doesn't define {{#if}} in default install) !! test Properly encapsulate empty-content transclusions in fosterable positions !! wikitext {{#if:| }}
        foo
        !! html/parsoid
        !! end ## No longer captures its original intention !! test Always encapsulate foster box when template range is expanded to table !! options disabled parsoid=wt2wt !! wikitext {| hello {{OpenTable}} |} !! html/parsoid !! end !! test T115289: Unclosed table !! wikitext {{1x|}}[[Category:Two]] !! html/parsoid
        !! end !! test T115289: Don't migrate newlines out of tables with fostered content !! wikitext {{1x|[[Category:One]]}}[[Category:Two]] !! html/parsoid
        !! end !! test T73074: More fostering fun !! wikitext {{1x|}}[[Category:Two]] !! html/parsoid
        !! end !!test Support element with .data attribute !!options parsoid=html2wt !! html/parsoid !! wikitext !!end !! test T72867: Don't block XML namespace declaration !! wikitext MediaWiki !! html/php

        MediaWiki

        !! html/parsoid

        MediaWiki

        !! end # ----------------------------------------------------------------- # The following section of tests are primarily to spec requirements # around Parsoid's serialization (old, new, edited content) # # All these tests are marked Parsoid html2wt and html2html only # ---------------------------------------------------------------- !! test Ignore rel attribute in a-tags during serialization to url-links !! options parsoid=html2wt !! html/parsoid http://en.wikipedia.org/wiki/Foobar http://en.wikipedia.org/wiki/Foobar http://en.wikipedia.org/wiki/Foobar !! wikitext http://en.wikipedia.org/wiki/Foobar http://en.wikipedia.org/wiki/Foobar http://en.wikipedia.org/wiki/Foobar !! end # 'mi' is a localinterwiki prefix as well as a language !! test Serialize interwiki links pointing to the current wiki as plain wiki links (T67869) !! options parsoid=html2wt !! html/parsoid

        Foo

        !! wikitext [[Foo]] !! end !! test Parsoid should accept interwiki shortcuts !! options parsoid=html2wt !! html/parsoid

        Foo Foo Foo

        Foo Foo Foo

        Foo Foo

        !! wikitext [[:fr:Foo|Foo]] [[:fr:Foo|Foo]] [[:fr:Foo|Foo]] [[:fr:Foo|Foo]] [[:fr:Foo|Foo]] [[:fr:Foo|Foo]] [[:fr:Foo|Foo]] [[:fr:Foo|Foo]] !! end !! test Parsoid should not accept invalid interwiki shortcuts !! options parsoid=html2wt !! html/parsoid

        Foo Foo Foo

        !! wikitext [news:Foo Foo] [news:Foo Foo] [news:Foo Foo] !! end # See T93839 !! test New wikilinks should be serialized properly !! options parsoid=html2wt !! html/parsoid Foo Foo //en.wikipedia.org/wiki/Foo http://en.wikipedia.org/wiki/Foo //en.wikipedia.org/wiki/Foo bar !! wikitext [[Foo]] [[Foo]] [[:en:Foo|//en.wikipedia.org/wiki/Foo]] http://en.wikipedia.org/wiki/Foo [[:en:Foo_bar|//en.wikipedia.org/wiki/Foo bar]] !! end !! test New wiki links (href variations) !! options parsoid=html2wt !! html/parsoid Foo_bar Foo_bar Foo_bar Toxine bactérienne !! wikitext [[Foo_bar]] [[Foo_bar]] [[Foo_bar]] [[Toxine bactérienne]] !! end !! test New wiki links (content string variations) !! options parsoid=html2wt !! html/parsoid Foo_bar Foo bar ./Foo_bar !! wikitext [[Foo_bar]] [[Foo bar]] [[Foo_bar|./Foo_bar]] !! end !! test New category links (href variations) !! options parsoid=html2wt !! html/parsoid !! wikitext [[Category:Toxine bactérienne]] [[Category:Toxine bactérienne]] [[Category:Toxine bactérienne]] !! end !! test New sol transparent links don't need indent-pre nowiki protection !! options parsoid=html2wt language=de !! html/parsoid !! wikitext #WEITERLEITUNG [[Main Page]] [[Category:Good]] [[Kategorie:Great]] !! end !! test New interlanguage links (href variations) !! options parsoid=html2wt !! html/parsoid !! wikitext [[es:Toxine bactérienne]] [[es:Toxine_bactérienne]] [[es:Toxine_bactérienne]] !! end # Regression test for T219023 !! test Emit simple non-piped link where possible !! options parsoid=html2wt !! html/parsoid VisualEditor visualEditor VisualEditor link visualEditor link !! wikitext [[VisualEditor]] [[visualEditor]] [[VisualEditor link]] [[visualEditor link]] !! end !! test Lists: Serialize correctly even when list content is wrapped in p-tags (like VE does) !! options parsoid=html2wt !! html/parsoid
        • foo

        !! wikitext * foo !! end !! test Lists: Serialize correctly even when list tags has unneeded whitespace between tags !! options parsoid=html2wt !! html/parsoid
        • foo
        !! wikitext * foo !! end !! test Don't strip leading whitespace when handling indent-pre suppressing tags !! options parsoid=html2wt !! html/parsoid
        indented row

        This is very bold of you!

        indented cell (no pre-wrapping!)

        foo

        bar
        !! wikitext {| | indented row |}
        '''This is very bold of you!''' {| | indented cell (no pre-wrapping!) |}
        foo
        bar
        !! end !! test Strip leading whitespace when handling indent-pre inducing tags !! options parsoid=html2wt !! html/parsoid

        foo

        bar foo2 bar2
        foo
        bar
        foo
        !! wikitext foo bar foo2 bar2
        foo
        bar
        foo
        !! end !! test Lists: Dont insert newlines in a serialized list item. !! options parsoid=html2wt !! html/parsoid
        • a
          b
        • c
        !! wikitext * a
        b * c !! end !! test Headings: Force sol-transparent links and behavior switches to serialize before/after !! options parsoid={ "modes": ["html2wt"] } !! html/parsoid

        hello there

        hi pal

        how goes it

        it goes well

        ok

        !! wikitext == hello there == [[Category:A1]] [[Category:A2]] == hi pal == [[Category:A3]] == how goes it == == it goes well == [[Category:A4]] __TOC__ == ok == !! end !! test Headings: Don't hoist metas that come from templates !! options parsoid={ "modes": ["html2wt"] } !! html/parsoid

        foo

        !! wikitext == {{1x|foo [[Category:Foo]]}} == !! end !! test Headings: Category in ref isn't hoisted !! options parsoid={ "modes": ["html2wt"] } !! html/parsoid

        foo [1]

        1. bar
        !! wikitext == foo bar [[Category:Baz]] == !! end !! test Parsoid: Serialize positional parameters with = in them as named parameter !! options parsoid=html2wt !! html/parsoid

        foo

        foo

        foo

        !! wikitext {{1x|1=f=oo}} {{1x|1=f=oo|2=bar}} {{1x|f=oo|bar}} !! end !! test Parsoid: Serialize positional parameters with = in extlink as named parameter !! options parsoid=html2wt !! html/parsoid

        http://stuff?is=ok

        !! wikitext {{1x|1=http://stuff?is=ok}} !! end !! test Parsoid: Correctly serialize block-node children when they are a combination of text and p-nodes !! options parsoid=html2wt !! html/parsoid
        a

        b

        a

        b

        a

        b

        !! wikitext
        a b
        a b
        a b
        !! end !! test Substrings resembling wikitext in hrefs should not get nowiki escapes !! options parsoid=html2wt !! html/parsoid Foo''bar''baz !! wikitext [[Foo''bar''baz]] !! end !! test Enforce single-line context in the serializer !! options parsoid=html2wt !! html/parsoid

        testing 123

        hi there you

        foo [1]

        1. hello there
        • asd sdf
        • foo bar baz
        • foo bar baz
        hi ho
        hi ho
        ha ha ha
        !! wikitext == testing 123 == == hi {{bogus|there you}} == == foo hello there == * asd sdf * foo bar baz * foo '''bar''' baz ; hi ho : hi ho : {| | ha ha ha |} !! end # Note that core parser doesn't like newlines in wikilinks in headings. # But, Parsoid handles it just fine. We'll consider this acceptable divergence. # We can change behavior if this becomes a real problem (ex: VE users start # adding newlines in links in headings which then breaks rendering when rendered # outside of Parsoid, or breaks section editing code). Eventually Parsoid will # core parser everywhere and this inconsistency will go away. !! test Ignore single-line context for wikilinks !! options parsoid=html2wt !! html/parsoid

        bar

        !! wikitext * [[Foo| bar]] == [[Foo| bar]] == * [[Foo|bar x]] !! end !! test Selser: Ignore single-line context for wikilinks !! options parsoid={ "modes": ["selser"], "selser": "noauto", "changes": [ [ "ul > li ", "append", "
        • foo
        " ] ] } !! wikitext * [[Foo| bar]] !! wikitext/edited * [[Foo| bar]] ** foo !! end !! test Serialize new displayspace spans !! options parsoid=html2wt !! html/parsoid

        foo : bar

        foo : bar

        [1]ok

        «&nsbp;Tour Eiffel&nsbp;» Hello World!
        •  Foo
        !! wikitext foo : bar foo : bar foo : barok [http://example.com « Tour Eiffel »] Hello World! * Foo !! end #----------------------- # Tag minimization tests #----------------------- !! test 1. I/B quote minimization: wikitext-only tags should be combined !! options parsoid=html2wt !! html/parsoid

        AB

        AB

        AB

        AB

        ABCD

        AB

        AB

        AB

        !! wikitext ''AB'' '''AB''' ''A'''B''''' '''A''B''''' '''A''BC''D''' '''''AB''''' '''''AB''''' '''''AB''''' !! end !! test 2. I/B quote minimization: wikitext and html tags should not be combined !! options parsoid=html2wt !! html/parsoid

        AB

        AB

        !! wikitext ''A''B ''A'''''B''' !! end !! test 3. I/B quote minimization: templated content stops minimization !! options parsoid=html2wt !! html/parsoid

        AB

        AB !! wikitext ''A''{{1x|''B''}} ''A''{{1x|'''''B'''''}} !! end !! test 4. I/B quote minimization: new content should be mimimized with adjacent old content !! options parsoid=html2wt !! html/parsoid

        AB

        AB

        AB

        !! wikitext ''AB'' '''AB''' ''A'''B''''' !! end !! test 5a. Merge adjacent quote nodes if they've been edited !! options parsoid={ "modes": ["wt2wt", "selser"], "changes": [ ["p", "contents", "remove", ":contains('b')"] ] } !! wikitext ''a''b''c'' !! wikitext/edited ''ac'' !! end !! test 5b. Merge adjacent quote nodes if they've been edited !! options parsoid={ "modes": ["wt2wt", "selser"], "changes": [ ["#x", "remove"] ] } !! wikitext ''a''b''c'' !! wikitext/edited ''ac'' !! end !! test 1. Merge adjacent link nodes as long as at least one element is new !! options parsoid={ "modes": ["html2wt"] } !! html/parsoid Football Football Football !! wikitext [[Football]] [[Football]] [[Football|Foot]][[Football|ball]] !! end !! test 2. Merge adjacent link nodes and enable additional normalizations !! options parsoid={ "modes": ["html2wt"] } !! html/parsoid Football !! wikitext ''[[Football]]'' !! end !! test 1. Move format tags outside of WikiLink !! options parsoid={ "modes": ["html2wt"] } !! html/parsoid Football Football Football !! wikitext ''[[Football]]'' '''''[[Football]]''''' '''''[[Football]]''''' !! end !! test 2. Move format tags outside of WikiLink with mergable A tags !! options parsoid={ "modes": ["html2wt"] } !! html/parsoid Football !! wikitext '''''[[Football]]''''' !! end !! test 3. Move format tags outside of WikiLink while preserving formats already outside WikiLink !! options parsoid={ "modes": ["html2wt"] } !! html/parsoid Foo !! wikitext '''[[Foo]]''' !! end !! test 4. Do not move format tags outside of WikiLink which includes attributes color, style and class !! options parsoid={ "modes": ["html2wt"] } !! html/parsoid Foo Foo> Foo !! wikitext [[Foo|Foo]] [[Foo|Foo>]] [[Foo|Foo]] !! end !! test 5. T194083 Regression test: Manual edit test to move format tags outside wikilinks !! options parsoid={ "modes": ["selser"], "changes": [ ["a", "html", "Foo"] ] } !! wikitext [[Foo]] !! wikitext/edited ''[[Foo]]'' !! end !! test 6. Regression test: Manual edit test to ensure diff markers are not lost !! options parsoid={ "modes": ["selser"], "changes": [ ["i", "wrap", ""] ] } !! wikitext ''Foo'' !! wikitext/edited ''[[Foo]]'' !! end !! test 7. T194083 Regression test: Manual edit test to ensure nested diff markers aren't inserted !! options parsoid={ "modes": ["selser"], "changes": [ ["div", "after", "\n

        Foo , placeholder

        "] ] } !! wikitext
        placeholder
        !! wikitext/edited
        placeholder
        [[Foo]] , placeholder !! end ## No sort-key or templated sort-key !! test T192913 Regression test: 1. html2wt of links should not trip on parser functions found in target !! options parsoid !! wikitext [[Category:Bugs-{{#if:blah|Regression|None}}]] [[Category:Bugs-{{#if:blah|Regression|None}}|{{#if:blah|2020|None}}-#fragment]] !! html/parsoid !! end ## Untemplated sort-key (wt2html data-mw is missing sort-key information!) !! test T192913 Regression test: 2. html2wt of links should not trip on parser functions found in target (2) !! options parsoid !! wikitext [[Category:Bugs-{{#if:blah|Regression|None}}|fragment]] [[Category:Bugs-{{#if:blah|Regression|None}}-{{#if:blah|2020|None}}|fragment]] !! html/parsoid !! end #------------------------------ # End of tag minimization tests #------------------------------ !!test T56262: New entities !! options parsoid=html2wt !! html/parsoid   !! wikitext   !! end ## Note that there is no wikitext output for 'unknownproperty' ## ## Unknown magic words are silently dropped ## !! test Magic words !! options parsoid=html2wt !! html/parsoid !! wikitext __TOC__ __NOTOC__ __FORCETOC__ __INDEX__ __NOINDEX__ __NOGALLERY__ __NOEDITSECTION__ __NOTITLECONVERT__ __NOCONTENTCONVERT__ !! end !! test Consecutive
        s should not get merged
        !! options
        parsoid=html2wt,html2html
        !! html/parsoid
        
        a
        b
        c
        
        d
        e
        
        
        
        f
        !! wikitext a b c d e f !! end !! test Edited ISBN links not serializable as ISBN links should serialize as wikilinks !! options parsoid=html2wt !! html/parsoid ISBN 1234567895 !! wikitext [[Special:BookSources/1234567890|ISBN 1234567895]] !! end !! test Edited RFC links not serializable as RFC links should serialize as extlinks !! options parsoid=html2wt !! html/parsoid New RFC !! wikitext [https://tools.ietf.org/html/rfc123 New RFC] !! end !! test Edited PMID links not serializable as PMID links should serialize as extlinks !! options parsoid=html2wt !! html/parsoid New PMID !! wikitext [//www.ncbi.nlm.nih.gov/pubmed/123?dopt=Abstract New PMID] !! end !! test WTS of autolinks with trailing/surrounding context !! options parsoid=html2wt !! html/parsoid

        http://cscott.netfoo

        http://cscott.netfoo

        http://cscott.net

        http://cscott.net

        http://cscott.netx

        http://cscott.netx

        !! wikitext http://cscott.net'''foo''' http://cscott.netfoo '''http://cscott.net''' '''http://cscott.net ''' '''http://cscott.netx''' http://cscott.netx !! end !! test WTS of autolinks with nowikis (round-trip) !! wikitext xhttp://cscott.netx !! html/parsoid

        xhttp://cscott.netx

        !! end # this is the "easy" test because it leaves in place all the # data-parsoid information indicating this is an autolink !! test WTS of autolinks with escapes (editing) !! options parsoid={ "modes": ["wt2wt"], "changes": [ [ "span", "remove" ] ] } !! wikitext xhttp://cscott.netx !! wikitext/edited xhttp://cscott.netx !! end !! test WTS of edited autolink-like text (T103364) !! options parsoid={ "modes": ["wt2wt"], "changes": [ [ "span[typeof]", "removeAttr", "typeof" ] ] } !! wikitext Not a link: http://example.com. !! wikitext/edited Not a link: http://example.com. !! end !! test WTS of newly-authored autolink-like text (T103364) !! options parsoid=html2wt !! html/parsoid

        http://example.com is not a link.

        !! wikitext http://example.com is not a link. !! end !! test WTS of autolink-like text after an autolink (T108563) !! options parsoid=html2wt !! html/parsoid

        http://example.com http://example.com is not a link.

        !! wikitext http://example.com http://example.com is not a link. !! end !! test WTS of an autolink surrounded by square brackets (T220018) !! options parsoid=html2wt !! html/parsoid

        [http://example.com]

        !! wikitext [http://example.com] !! end !! test WTS of edited autolink surrounded by square brackets (T220018) !! options parsoid={ "modes": ["wt2wt"], "changes": [ [ "a", "before", "[" ], [ "a", "after", "]" ] ] } !! wikitext http://example.com !! wikitext/edited [http://example.com] !! end !! test WTS of an external link surrounded by square brackets (T220018) !! options parsoid=html2wt !! html/parsoid

        [foo]

        !! wikitext [[http://example.com foo]] !! end !! test WTS of edited external link surrounded by square brackets (T220018) !! options parsoid={ "modes": ["wt2wt"], "changes": [ [ "a", "before", "[" ], [ "a", "after", "]" ] ] } !! wikitext [http://example.com foo] !! wikitext/edited [[http://example.com foo]] !! end !! test Magic links inside links (not autolinked) !! wikitext [[Foo|http://example.com]] [[Foo|RFC 1234]] [[Foo|PMID 1234]] [[Foo|ISBN 123456789x]] [http://foo.com http://example.com] [http://foo.com RFC 1234] [http://foo.com PMID 1234] [http://foo.com ISBN 123456789x] !! html/php

        http://example.com RFC 1234 PMID 1234 ISBN 123456789x

        http://example.com RFC 1234 PMID 1234 ISBN 123456789x

        !! html/parsoid

        http://example.com RFC 1234 PMID 1234 ISBN 123456789x

        http://example.com RFC 1234 PMID 1234 ISBN 123456789x

        !! end !! test WTS of magic word text (T109371) !! options parsoid=html2wt !! html/parsoid

        RFC 1234

        RFC 1234

        RFC 1234

        !! wikitext RFC 1234 [http://foo.com RFC 1234] [[Foo|RFC 1234]] !! end !! test Edited Redirect link should emit a non-piped wikitext link !! options parsoid=html2wt !! html/parsoid !! wikitext #REDIRECT [[Bar]] !! end !! test T75121: Infer extension name from typeOf if data-mw is not present !! options parsoid={ "modes": ["html2wt"], "suppressErrors": true } !! html/parsoid
        !! wikitext !! end # Note that the

        wrapping isn't present in PHP parser output # The important thing for this test is that P-wrapping doesn't # interfere with the protection for leading - in # (which isn't necessary for ). !! test T88318: p-wrapped dash in table. !! options parsoid=html2wt,wt2wt !! html/parsoid

        -

        -

        -

        -

        -

        -


        -
        !! wikitext {| !- !- |- |- |- |- |- |
        - |
        - |} !! html/php
        - -
        - -
        -

        -


        -
        !! end !! test T149209: WTS: Handle newlines in table cells properly !! options parsoid=html2wt !! html/parsoid
        a b c

        x

        y
        a b c

        x

        y
        !! wikitext {| |a b |c |- |x {{!}}y |} {| !a b !c |- !x !y |} !! end !! test T149209: Selser: Handle newlines in table cells properly !! options parsoid={ "modes": ["selser"], "changes": [ [ "#h1", "html", "a\nb\n" ], [ "#h2", "html", "a\nb\n" ], [ "#c1", "html", "a\nb\n" ], [ "#c2", "html", "

        a

        " ], [ "#c3", "html", "

        a

        " ], [ "#c4", "html", "edit-me

        a

        " ] ] } !! wikitext {| ! id="h1" |edit-me!!1 |- ! id="h2" |edit-me||2 |- | id="c1" |edit-me||3 |- | id="c2" |edit-me||4 |- | id="c3" |edit-me||p||q||r |- | id="c4" |edit-me||p||q||r |} !! wikitext/edited {| ! id="h1" |a b !1 |- ! id="h2" |a b !2 |- | id="c1" |a b |3 |- | id="c2" |a |4 |- | id="c3" |a |p||q||r |- | id="c4" |edit-me a |p||q||r |} !! end !! test HTML id attribute with Parsoid-like element ids should not be serialized to wikitext !! options parsoid=html2wt !! html/parsoid
        foo bar
        !! wikitext {| |foo | id="serialize-this" |bar |} !! end !! test Parsoid-like element ids should not be serialized to wikitext unless shadowed !! options parsoid=html2wt !! html/parsoid
        ok
        !! wikitext
        ok
        !! end !! test Testing serialization after deletion in references !! options parsoid={ "modes": ["wt2wt"], "changes": [ ["#x", "remove"] ] } !! wikitext hi
        ho
        !! wikitext/edited hi !! end !!test Testing serialization after deletion of table cells !!options parsoid={ "modes": ["wt2wt", "selser"], "changes": [ ["#x", "remove"] ] } !!wikitext {| !h1 !!h2 !!h3 | id="x" |c1 {{!}}{{!}}{{!}}c2 |||c3 |} !! wikitext/edited {| !h1!!h2!!h3 |c2|||c3 |} !!end !! test Testing selser after addition of new row before first row (T125419) !! options parsoid={ "modes": ["wt2wt", "selser"], "changes": [ [ "tr", "before", "X" ] ] } !! wikitext {| |a |} !! wikitext/edited {| |X |- |a |} !! end !! test Serialize new table rows in a HTML table using HTML tags !! options parsoid={ "modes": ["wt2wt", "selser"], "changes": [ [ "tr", "before", "X" ] ] } !! wikitext
        a
        !! wikitext/edited
        X
        a
        !! end !! test Serialize new table cells in a HTML row using HTML tags !! options parsoid={ "modes": ["wt2wt", "selser"], "changes": [ [ "td", "before", "X" ] ] } !! wikitext
        a
        !! wikitext/edited
        Xa
        !! end !! test Serialize wikitext list items as HTML list items when embedded in a HTML list !! options parsoid=html2wt !! html/parsoid
        • a
        • b
        !! wikitext
        • a
        • b
        !! html/php
        • a
        • b
        !! end # Nested list should be inside
      • , that is #
        • foo
            ..
        instead of #
        • foo
          • ..
        # See https://stackoverflow.com/questions/5899337/proper-way-to-make-html-nested-list !! test Wikitext lists can be nested inside HTML lists !! options parsoid=html2wt !! html/parsoid
        • a
          • b
        • x
          • y
        !! wikitext
        • a * b
        • x * y
        !! html/php
        • a
          • b
        • x
          • y
        !! end !! test WTS change modes !! options parsoid={ "modes": ["wt2wt"], "changes": [ [ "#xyz", "before", "before stuff " ], [ "#xyz", "after", " stuff after" ], [ "#xyz", "html", "x y z" ] ] } !! wikitext hello !! wikitext/edited '''before''' stuff x '''y''' z stuff ''after'' !! end !! test Never serialize a-tag as html, regardless of what data-parsoid has to say !! options parsoid={ "modes": ["html2wt"], "suppressErrors": true } !! html/parsoid Foo !! wikitext [[Foo]] !! end ## SSS FIXME: This is broken output nevertheless. ## What might be a reasonable non-broken output for this? ## This is an edge case unlikely to be seen in production ## that I am not wasting more time on this right now. !! test Never serialize a-tag as html, no matter what attributes it has !! options parsoid={ "modes": ["html2wt"], "suppressErrors": true } !! html/parsoid !! wikitext [http://boo.org http://boohoo.org] !! end # Misnested is an indication that selser can reuse the source but these have # shown to sneak through on occasion. See T101768. # The original wikitext here is: [http://test.com [[one]] two three] !! test Strip span tags added to mark misnested links !! options parsoid=html2wt !! html/parsoid

        one two three

        !! wikitext [http://test.com][[one]] two three !! end !! test Catch regression when unpacking misnested links !! options parsoid=wt2html !! wikitext {{1x|hi}}[http://example.com [[ho]]] !! html/parsoid

        hiho

        !! end !! test Catch regression when unpacking with trailing content !! wikitext {{1x|Foo bar}} !! html/parsoid

        Foo

          bar

          !! end !! test Use data-parsoid.firstWikitextNode to compute newline constraints for template content !! options parsoid=html2wt !! html/parsoid a
          d
          !! wikitext {{1x|a}} {|{{1x|c {{!}}d }} |} !! end ## This test verifies the presence and computation of this attribute indirectly ## by making an edit and ensuring that the serialization is correct (which it would be ## only if firstWikitextNode is properly set). !! test data-parsoid.firstWikitextNode should be computed properly in the presence of fostered content !! options parsoid= { "modes": ["wt2wt"], "changes": [ [ "div#x", "remove" ], [ "div", "before", "
          new
          " ] ] } !! wikitext
          foo
          {| {{1x|
          boo
          {{!}}b}} |c |} !! wikitext/edited
          new
          {| {{1x|
          boo
          {{!}}b}} |c |} !! end # -------------------------------------------- # Tests spec'ing wikitext serialization norms | # -------------------------------------------- !! test Serialize multi-line indent-pre starting with wikitext syntax !! options parsoid=html2wt !! html/parsoid
          * 1
          ** 2
          * 3
          !! wikitext * 1 ** 2 * 3 !! end !! test 1. Categories should always be serialized on their own line !! options parsoid=html2wt !! html/parsoid foobar !! wikitext foo [[Category:Foo]] bar !! end !! test 2. Categories that are part of templates should not introduce a line break !! wikitext foo {{1x|bar [[Category:baz]]}} bar !! html/parsoid

          foo bar bar

          !! end # Careful while editing these next 2 tests. There are \u200f characters # before and after the tags in the HTML and following some # of the categories in wikitext # Do not remove these characters in edits. # # As part of the serialization, these bidi characters will get stripped. !! test RTL (\u200f) and LTR (\u200e) markers around category tags should be stripped !! options parsoid={ "modes": ["html2wt"] } !! html/parsoid

          ‏ ‏

          !! wikitext [[קטגוריה:טקסים]] [[קטגוריה: שיטות משפט]] !! end !! test RTL (\u200f) and LTR (\u200e) markers should not be stripped if followed by a text node !! options parsoid={ "modes": ["html2wt"] } !! html/parsoid

          ‏y

          !! wikitext [[קטגוריה:טקסים]] ‏y !! end !! test Lists: Add space after bullets !! options parsoid=html2wt !! html/parsoid
          • foo
          • bar
          • baz
          !! wikitext * foo * bar * baz !! end !! test 1. Headings: Add space before/after == (T53744) !! options parsoid=html2wt !! html/parsoid

          foo

          bar

          baz

          baz

          !! wikitext == foo == == bar == == baz == == baz == !! end !! test 2. Headings: Add space before/after == even after hoisted content !! options parsoid={ "modes": ["html2wt"] } !! html/parsoid

          ok

          !! wikitext [[Category:A2]] == ok == !! end !! test 1. Headings: suppress newly created empty headings !! options parsoid={ "modes": ["html2wt"] } !! html/parsoid

          !! wikitext !! end !! test 2. Headings: suppress empty headings on edits !! options parsoid={ "modes": ["selser"], "changes": [ [ "#x", "remove"] ] } !! wikitext ==foo== !! wikitext/edited !! end !! test Headings: Replace
          with a single whitespace char !! options parsoid={ "modes": ["html2wt"] } !! html/parsoid

          foo
          bar

          foo
          bar
          baz

          !! wikitext == foo bar == == foo bar baz == !! end !! test 1. WT Quote Tags: suppress newly created empty style tags !! options parsoid={ "modes": ["html2wt"] } !! html/parsoid !! wikitext !! end !! test 2. WT Quote Tags: suppress empty style tags on edits !! options parsoid={ "modes": ["selser"], "changes": [ [ "#x", "remove"] ] } !! wikitext '''foo''' !! wikitext/edited !! end !! test 1. Anchors: suppress newly created empty anchors !! options parsoid={ "modes": ["html2wt"] } !! html/parsoid !! wikitext !! end !! test 2. Anchors: suppress empty anchors on edits !! options parsoid={ "modes": ["selser"], "changes": [ [ "#x", "remove"] ] } !! wikitext [[Test|foo]] !! wikitext/edited !! end !! test 3a. Anchors: do not suppress numbered extlinks !! options parsoid={ "modes": ["wt2wt"] } !! wikitext [http://foo.com] !! html/parsoid !! end !! test 3b. Anchors: do not suppress numbered extlinks !! options parsoid={ "modes": ["wt2wt"], "changes": [ [ "#x", "remove"] ] } !! wikitext [http://foo.com foo] !! wikitext/edited [http://foo.com] !! end !!test Normalizations should be restricted to edited content !!options parsoid={ "modes": ["selser"], "changes": [ [ "h1", "before", ""] ] } !!wikitext a = = b !!wikitext/edited a = = b !!end !! test 1. Multiple normalizations (html2wt) !! options parsoid={ "modes": ["html2wt"] } !! html/parsoid

          foo x

          !! wikitext [[foo]] x !! end !! test 2. Multiple normalizations (selser) !! options parsoid={ "modes": ["selser"], "changes": [ [ "#x", "after", "

          \n

          bar

          "] ] } !! wikitext
          foo
          !! wikitext/edited
          foo
          bar !! end !! test 1. Indent Pre Nowiki: suppress whitespace at the start of new paragraph !! options parsoid={ "modes": ["html2wt"] } !! html/parsoid

          hi

          hello

          !! wikitext hi hello !! end !! test 2. Indent Pre Nowiki: suppress whitespace after newlines in new paragraph or table cell !! options parsoid={ "modes": ["html2wt"] } !! html/parsoid

          Foo bar baz

          Foo bar baz bang

          foo bar

          foo barboo

          !! wikitext Foo bar baz {| |Foo bar baz bang |} foo bar foo barboo !! end !! test 3. Indent Pre Nowiki: suppress leading whitespace in edited paragraphs !! options parsoid={ "modes": ["selser"], "changes": [ [ "p", "html", " a\n b" ] ] } !! wikitext xyz !! wikitext/edited a b !! end !! test New links that end in spaces !! options parsoid={ "modes": ["html2wt"] } !! html/parsoid

          Berlin is the capital of Germany.

          Foo bar

          Boston is a city.

          !! wikitext [[Berlin]] is the capital of Germany. [[Foo]] '''bar''' [[Boston]] is a city. !! end !! test 1. Table cells with escapable prefixes !! options parsoid={ "modes": ["html2wt"] } !! html/parsoid
          a
          -
          +
          }
          !! wikitext {| |a |- | - |- | + |- | } |} !! end !! test 2a. Table cells with escapable prefixes after edits !! options parsoid={ "modes": ["selser"], "changes": [ [ "table tbody tr:first-child td:first-child", "remove"] ] } !! wikitext {| |a||- |} !! wikitext/edited {| | - |} !! end !! test 2b. Table cells with escapable prefixes after edits !! options parsoid={ "modes": ["selser"], "changes": [ [ "table tbody tr:first-child td:first-child", "html", "-" ], [ "#x", "remove" ] ] } !! wikitext {| |pqr |foo+ |} !! wikitext/edited {| | - | + |} !! end # FIXME: This test will fail because # normalization doesn't realize that the id attribute # will eliminate the escapable scenario !! test 3a. Table cells without escapable prefixes after edits !! options parsoid={ "modes": ["selser"], "changes": [ [ "#x", "html", "-" ] ] } !! wikitext {| | id="x" |abcd |} !! wikitext/edited {| | id="x" |- |} !! end ## This tests normalizer's ability to discriminate between ## cells having identical content. !! test 3b. Table cells without escapable prefixes after edits !! options parsoid={ "modes": ["selser"], "changes": [ [ "td", "html", "-" ] ] } !! wikitext {| |a||b |} !! wikitext/edited {| | -||- |} !! end ## This tests normalizer's ability to not be tripped by ## comments (and whitespace) !! test 3c. Table cells without escapable prefixes after edits !! options parsoid={ "modes": ["selser"], "changes": [ [ "table tbody tr td:first-child", "remove" ] ] } !! wikitext {| |- |a||- |} !! wikitext/edited {| |- | - |} !! end ## This tests normalizer's ability to handle HTML cells !! test 3d. Table cells without escapable prefixes after edits !! options parsoid={ "modes": ["selser"], "changes": [ [ "td", "html", "-" ] ] } !! wikitext
          a
          !! wikitext/edited
          -
          !! end ## T111151 Remove font elements without attributes !! test 4. font tags without attributes should be dropped !! options parsoid={ "modes": ["html2wt"] } !! html/parsoid foo bar boo !! wikitext foo bar boo !! end !! test Normalize empty paragraphs to HTML form that html2wt expects !! options parsoid={ "modes": ["html2wt"] } !! html/parsoid
          1

          a

          b

          2

          a

          b

          3

          a

          b

          4

          a

          foo
          !! wikitext
          1
          a b
          2
          a b
          3
          a b
          4
          a
          foo
          !! html/php
          1

          a


          b

          2

          a


          b

          3

          a



          b

          4

          a

          foo
          !! end !! test Templated content should be skipped over by normalization !! options parsoid={ "modes": ["html2wt"] } !! html/parsoid

          foobar

          foobar

          !! wikitext {{SomeTemplate1|boo}}{{SomeTemplate2|booboo}} !! end !! test Escape nowiki DOM elements !! options parsoid=html2wt !! html/parsoid foo !! wikitext <nowiki>''foo''</nowiki> !! end !! test New list is serialized on newlines !! options parsoid=html2wt !! html/parsoid

          The quick brown fox jumps over the lazy dog.

          • Yesterday
          • Today
          • Tomorrow

          The quick onyx goblin jumps over the lazy dwarf.

          !! wikitext The quick brown fox jumps over the lazy dog. * Yesterday * Today * Tomorrow The quick onyx goblin jumps over the lazy dwarf. !! end !! test New lists in formatting elements serialized w/o newlines !! options parsoid=html2wt !! html/parsoid
          • 123
          • hi
          !! wikitext * 123 * hi !! end !! test New list in table doesn't need newlines !! options parsoid=html2wt !! html/parsoid
          • test
          • 123
          !! wikitext {| | * test * 123 |} !! end !! test Newly inserted noinclude tags do not need newlines before/after !! html/parsoid

          abc

          !! wikitext abc !! end # --------------------------------------------------- # End of tests spec'ing wikitext serialization norms | # --------------------------------------------------- # T104032 !! test Bare inline nodes not wrapped inside p-tags should be treated as p-wrapped !! options parsoid=html2wt !! html/parsoid a

          b

          c

          d

          a

          b

          c

          d

          !! wikitext a b '''c''' d {| |a b |'''c''' d |} !! end !! test Anchor without href scenarios !! options parsoid={ "modes": ["html2wt"], "suppressErrors": true } !! html/parsoid dice !! wikitext dice !! end !! test New transclusion added after a list should be serialized after the list !! options parsoid=html2wt !! html/parsoid
          • a
          foo !! wikitext * a {{1x|foo}} !! end ## FIXME: This test is less useful now that the leading space is normalized away !! test Only html p-tag is strong indent pre suppressing !! options parsoid=html2wt !! html/parsoid

          test2 test3

          !! wikitext test2 test3 !! end # Clients like VE don't know about this property (T238721) !! test T238721: New transclusion without the "i" property for a template part should be handled properly !! options parsoid=html2wt !! html/parsoid foo !! wikitext {{1x}} !! end # ----------------------------------------------------------------- # End of section for Parsoid-only html2wt tests for serialization # of new content # ----------------------------------------------------------------- # ----------------------------------------------------------------- # The following section of tests are primarily to spec behavior of # the selective serializer. All these tests have manual selser # changes. The automated selser changes for all tests handle the # wide variation of changes, but these tests here capture specs # deterministically. # ---------------------------------------------------------------- ## T90517 !! test Selser: New comments should not be lost !! options parsoid={ "modes": ["selser"], "changes": [ [ "#a", "after", "" ], [ "#b", "before", "" ] ] } !! wikitext a b !! wikitext/edited a b !! end ## T89383 !! test Selser: Check for validity of DSR before using it !! options parsoid={ "modes": ["selser"], "changes": [ [ "#a", "before", "" ] ] } !! wikitext a !! wikitext/edited {{DISPLAYTITLE:foo}} a !! end !! test 1. DOMDiff: Changes to content should be looked up using id !! options parsoid={ "modes": ["selser"], "changes": [ ["#X", "after", "bar"], ["#Y", "after", "baz"] ] } !! wikitext X foo Y foo !! wikitext/edited X foobar Y foobaz !! end !! test 2. DOMDiff: Changes to content should be looked up using id !! options parsoid={ "modes": ["selser"], "changes": [ ["#Z", "after", "bar"] ] } !! wikitext A foo bar for a B foo !! wikitext/edited A foo bar for a B foobar !! end !! test DOMDiff: Edits to content nested in elements with templated attributes should not be lost (T139388) !! options parsoid={ "modes": ["selser"], "changes": [ [ "div:first-child", "text", "bar" ] ] } !! wikitext
          foo
          !! wikitext/edited
          bar
          !! end !! test Empty LI (T49673) !! wikitext *a * * *b !! html
          • a
          • b
          !! end !! test unclosed internal link XSS (T137264) !! wikitext [[#%3Cscript%3Ealert(1)%3C/script%3E| !! html/php

          [[#<script>alert(1)</script>|

          !! html/parsoid

          [[#%3Cscript%3Ealert(1)%3C/script%3E|

          !! end !! test Validating that !! html/php
          !! html/parsoid
          !! end ## Right now, Parsoid doesn't de-duplicate style tags. ## So, we shouldn't see link tags that need to bypass the sanitizer. ## In a followup patch, when we de-duplicate style tags and ## introduce link tags, we'll add a hook for link tags in ## the parser test runner script. !! test Validating that But if it's on a line with other content, let it be wrapped. bar foo foo bar And the same if we have non-paragraph-breaking whitespace foo bar !! html/php

          A style tag, by itself or with other style/link tags, shouldn't be wrapped in a paragraph

          But if it's on a line with other content, let it be wrapped.

          bar

          foo

          foo bar

          And the same if we have non-paragraph-breaking whitespace

          foo bar

          !! html/parsoid

          A style tag, by itself or with other style/link tags, shouldn't be wrapped in a paragraph

          <link rel="foo" href="bar"/>

          But if it's on a line with other content, let it be wrapped.

          bar

          foo

          foo bar

          And the same if we have non-paragraph-breaking whitespace

          foo bar

          !! end !! test Validating that isn't wrapped in a paragraph (T186965) !! options styletag=1 !! wikitext A link tag, by itself or with other style/link tags, shouldn't be wrapped in a paragraph But if it's on a line with other content, let it be wrapped. bar foo foo bar And the same if we have non-paragraph-breaking whitespace foo bar !! html/php

          A link tag, by itself or with other style/link tags, shouldn't be wrapped in a paragraph

          But if it's on a line with other content, let it be wrapped.

          bar

          foo

          foo bar

          And the same if we have non-paragraph-breaking whitespace

          foo bar

          !! end !! test Extension returning multiple nodes starting with a style tag roundtrips !! options wgRawHtml=1 !! wikitext {{1x|}}
          ho
          !! html/parsoid

          ho
          !! end !! test Decoding of HTML entities in headings and links for IDs and link fragments (T103714) !! config wgFragmentMode=[ 'html5', 'legacy' ] !! wikitext ==A&B&C&amp;D&amp;amp;E== [[#A&B&C&amp;D&amp;amp;E]] !! html/php

          A&B&C&amp;D&amp;amp;E[edit]

          #A&B&C&amp;D&amp;amp;E

          !! html/parsoid

          A&B&C&amp;D&amp;amp;E

          #A&B&C&amp;D&amp;amp;E

          !! end !! test Decoding of HTML entities in headings and links for IDs and link fragments (T103714) (legacy) !! config wgFragmentMode=[ 'legacy' ] !! wikitext ==A&B&C&amp;D&amp;amp;E== [[#A&B&C&amp;D&amp;amp;E]] !! html/php

          A&B&C&amp;D&amp;amp;E[edit]

          #A&B&C&amp;D&amp;amp;E

          !! end !! test Decoding of HTML entities in embedded HTML tags !! wikitext
          x
          !! html/php
          x
          !! html/parsoid
          x
          !! end !! test Decoding of HTML entities in indicator names for IDs (T104196) !! options parsoid=wt2html,html2html showindicators !! wikitext Indicator !! html/php 1&2&3&4&amp;5=Indicator !! html/parsoid

          !! end # this version of the test strips out the ambiguity so Parsoid rts cleanly !! test Decoding of HTML entities in indicator names for IDs (unambiguous) (T104196) !! options showindicators !! wikitext Indicator !! html/php 1&2&3&4&amp;5=Indicator !! html/parsoid

          !! end # This fragment mode is what Parsoid supports. !! test HTML5 ids: fallback to legacy !! config wgFragmentMode=[ 'html5', 'legacy' ] !! wikitext ==Foo bar== ==foo Bar== ==Тест== ==Тест== ==тест== ==Hey < # " > % : '== [[#Foo bar]] [[#foo Bar]] [[#Тест]] [[#тест]] [[#Hey < # " > % : ']] {{anchorencode:💩}} [[#啤酒]] [[#%E5%95%A4%E9%85%92]] !! html/php

          Foo bar[edit]

          foo Bar[edit]

          Тест[edit]

          Тест[edit]

          тест[edit]

          Hey < # " > % : '[edit]

          #Foo bar #foo Bar #Тест #тест #Hey < # " > % : '

          💩

          #啤酒 #啤酒

          !! html/parsoid

          Foo bar

          foo Bar

          Тест

          Тест

          тест

          Hey < # " > % : '

          #Foo bar #foo Bar #Тест #тест #Hey < # " > % : '

          💩

          #啤酒 #啤酒

          !! end # Parsoid doesn't support this mode !! test HTML5 ids: legacy with a fallback to modern !! config wgFragmentMode=[ 'legacy', 'html5' ] !! wikitext ==Foo bar== ==foo Bar== ==Тест== ==Тест== ==тест== ==Hey < # " > % : '== [[#Foo bar]] [[#foo Bar]] [[#Тест]] [[#тест]] [[#Hey < # " > % : ']] {{anchorencode:💩}} [[#啤酒]] [[#%E5%95%A4%E9%85%92]] !! html/php

          Foo bar[edit]

          foo Bar[edit]

          Тест[edit]

          Тест[edit]

          тест[edit]

          Hey < # " > % : '[edit]

          #Foo bar #foo Bar #Тест #тест #Hey < # " > % : '

          .F0.9F.92.A9

          #啤酒 #啤酒

          !! end # Parsoid doesn't support this mode. !! test HTML5 ids: no legacy !! config wgFragmentMode=[ 'html5' ] !! wikitext ==Foo bar== ==foo Bar== ==Тест== ==Тест== ==тест== ==Hey < # " > % : '== [[#Foo bar]] [[#foo Bar]] [[#Тест]] [[#тест]] [[#Hey < # " > % : ']] {{anchorencode:💩}} [[#啤酒]] [[#%E5%95%A4%E9%85%92]] !! html/php

          Foo bar[edit]

          foo Bar[edit]

          Тест[edit]

          Тест[edit]

          тест[edit]

          Hey < # " > % : '[edit]

          #Foo bar #foo Bar #Тест #тест #Hey < # " > % : '

          💩

          #啤酒 #啤酒

          !! end !! test T90902: Normalize weird characters in section IDs !! config wgFragmentMode=[ 'html5', 'legacy' ] !! wikitext ==Foo bar== [[#Foo bar]] !! html/php

          Foo bar[edit]

          #Foo bar

          !! html/parsoid

          Foo bar

          #Foo bar

          !! end !! test T51672: Test for brackets in attributes of elements in external link texts !! wikitext [http://example.com/ link span] [http://example.com/ link span] !! html/php

          link span link span

          !! html/parsoid

          link span link span

          !! end !! test T72875: Test for brackets in attributes of elements in internal link texts !! wikitext [[Foo|link span]] [[Foo|link span]] !! html/php

          link span link span

          !! html/parsoid

          link span link span

          !! end !! test T199926: html arrow wt: Parsoid sometimes trips up on verticalbar chars in hrefs !! options parsoid={ "modes": ["html2wt"] } !! html/parsoid 9 10 !! wikitext [https://stats.wikimedia.org/v2/#/fr.wikipedia.org/reading/page-views-by-country/normal|map|2-Year~2016060100~2018071100|~total 9] [[stats:v2/#/fr.wikipedia.org/reading/page-views-by-country/normal%7Cmap%7C2-Year~2016060100~2018071100%7C~total|10]] !! end !! test T199926: Hash only interwiki link !! config wgFragmentMode=[ 'html5' ] !! wikitext [[meatball:Test#1/2]] [[gerrit:#/q/project:mediawiki/services/parsoid|Gerrit]] !! html/php

          meatball:Test#1/2 Gerrit

          !! html/parsoid

          meatball:Test#1/2 Gerrit

          !! end !! test T179544: {{anchorencode:}} output should be always usable in links !! config wgFragmentMode=[ 'html5' ] !! wikitext [[#{{anchorencode:[foo]}}]] !! html/php

          #[foo]

          !! html/parsoid

          #[foo]

          !! end ########################################################################## # Tests demonstrating white-space insensitivity in input wikitext # for wikitext headings, wikitext list items, and wikitext table captions, # headings, and cells. HTML versions of the same should preserve whitespace. ########################################################################## !! test Trim whitespace in wikitext headings, list items, table captions, headings, and cells !! options parsoid={ "modes": ["wt2html"], "preserveIEW": true } !! wikitext __NOTOC__ == Spaces == == Tabs == == Личная жизнь == * List item ; term : definition {| |+ Table Caption |- ! Table Heading 1 !! Table Heading 2 |- | Table Cell 1 || Table Cell 2 |- | class="foo" || Table Cell 3 |- | testing [[one|two]] | some content |} : {| | Table Cell 1 || Table Cell 2 |} foo !! html/php

          Spaces[edit]

          Tabs[edit]

          Личная жизнь[edit]

          • List item
          term
          definition
          Table Caption
          Table Heading 1 Table Heading 2
          Table Cell 1 Table Cell 2
          class="foo" Table Cell 3
          testing two | some content
          Table Cell 1 Table Cell 2
          foo
          !! html/parsoid

          Spaces

          Tabs

          Личная жизнь

          • List item
          term
          definition
          Table Caption
          Table Heading 1Table Heading 2
          Table Cell 1Table Cell 2
          class="foo"Table Cell 3
          testing two | some content
          Table Cell 1Table Cell 2
          foo
          !! end # Looks like is not accepted in HTML !! test Do not trim whitespace in HTML headings, list items, table captions, headings, and cells !! options parsoid={ "modes": ["wt2html"], "preserveIEW": true } !! wikitext __NOTOC__

          Heading

          • List item
          Table Heading
          Table Cell
          !! html/php

          Heading

          • List item
          Table Heading
          Table Cell
          !! html/parsoid

          Heading

          • List item
          Table Heading
          Table Cell
          !! end !! test Do not trim whitespace in links and quotes !! options parsoid={ "modes": ["wt2html"], "preserveIEW": true } !! wikitext foo '' italic '' and ''' bold ''' [[Foo| some text ]] !! html/php

          foo italic and bold some text

          !! html/parsoid

          foo italic and bold some text

          !! end !! test Remove p tags surrounding a single element in a figcaption !! options parsoid=html2wt !! wikitext [[File:Foobar.jpg|right|200x200px|Caption]] !! html/parsoid

          Caption

          !! end !! test Selser preserves lack of newline before list and allows newline after the list !! options parsoid={ "modes": ["selser"], "changes": [ [ "ul", "after", "

          footer

          " ] ] } !! wikitext header *foo *bar !! wikitext/edited header *foo *bar footer !! end !! test Selser does not introduce newlines between unedited paragraph preceding the list !! options parsoid={ "modes": ["selser"], "changes": [ [ "table tbody tr td p:last-child", "empty" ] ] } !! wikitext {| | header *foo *bar footer |} !! wikitext/edited {| | header *foo *bar |} !! end !! test Selser does not introduce newlines between unedited paragraph following the list !! options parsoid={ "modes": ["selser"], "changes": [ [ "table tbody tr td p:first-child", "empty" ] ] } !! wikitext {| | header *foo *bar footer |} !! wikitext/edited {| | *foo *bar footer |} !! end !! test Remove a list item but do not insert newline above list !! options parsoid={ "modes": ["selser"], "changes": [ [ "ul li:last-child", "remove" ] ] } !! wikitext header *foo *bar footer !! wikitext/edited header *foo footer !! end !! test Spaced heading with element !! options parsoid={ "modes": ["selser"], "changes": [ ["#x", "attr", "class", "y"] ] } !! wikitext === hi hi hi ho === !! wikitext/edited === hi hi hi ho === !! end !! test Allow tabindex 0 !! wikitext
          A
          !! html
          A
          !! end !! test Don't allow tabindex -1 !! options parsoid=wt2html !! wikitext
          A
          !! html
          A
          !! end !! test Don't Allow tabindex > 0 !! options parsoid=wt2html !! wikitext
          A
          !! html
          A
          !! end !! test aside tag in extension HTML is not p-wrapped (T278565) !! wikitext This is some article content. !! html/php

          This is some article content.

          !! html/parsoid

          This is some article content.

          !! end !! test aside tag is not allowed directly in wikitext (T278565) !! wikitext !! html

          <aside>This aside tag in wikitext should be escaped</aside>

          !! end !! test Stripped tag in list !! options parsoid={ "modes": ["selser"], "selser": "noauto", "changes": [ ["dd", "append", "ho"] ] } !! wikitext :hi !! wikitext/edited :hiho !! end !! test Misnested link nested in span !! options parsoid={ "modes": ["selser"], "selser": "noauto", "changes": [ ["dd", "append", " ho"] ] } !! wikitext : [http://google.com [[Lala]]:ok]-hi !! wikitext/edited : [http://google.com [[Lala]]:ok]-hi ho !! end ## From T290938, wrapper unmodified was prevented due to the auto-inserted end !! test Preserve the order invalid attributes !! options parsoid={ "modes": ["selser"], "selser": "noauto", "changes": [ ["div", "append", "ho"] ] } !! wikitext
          hi !! wikitext/edited
          hiho !! end