# 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 three: # # (default) generate HTML output # pst apply pre-save transform # msg apply message transform # # Plus any combination of these: # # cat add category links # (ignored by Parsoid, since it emits s) # ill add inter-language links # (ignored by Parsoid, since it emits s) # 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) # 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) # showtitle make the first line the title # showindicators make the first lines the page status indicators # comment run through Linker::formatComment() instead of main parser # local format section links in edit comment text as local links # 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) # # You can also set the following parser properties via test options: # wgEnableUploads, wgAllowExternalImages, wgMaxTocLevel, # wgLinkHolderBatchSize, wgRawHtml, wgInterwikiMagic, # wgEnableMagicLinks # # 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 Template:Foo !!text 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:echo !! text {{{1}}} !! endarticle // For Serbian; localize Template namespace !! article Шаблон:Echo !! text {{{1}}} !! endarticle !! article Template:echo_with_span !! text {{{1}}} !! endarticle !! article Template:echo_with_div !! text
{{{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 |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:PartialTable !! text {| |- !! endarticle !! article Template:image_attribs !! text [[File:foobar.jpg|right|Caption text]] !! endarticle ## See T48811 for details !! article Template:mixed_attr_content_template !! text style="color:red;" title="T48811" |- |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 ### ### 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 foo bar baz booz !! html

foo

bar


baz


booz

!! 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 !! wikitext =b= [[a]] !! html

b[edit]

a

!! 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 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 # The PHP parser strips the empty tags out for giggles; parsoid doesn't. !! test Italics and bold: 2-quote opening sequence: (2,5) !! options parsoid=wt2html !! wikitext ''foo''''' !! html/php

foo

!! html/parsoid

foo

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

foo

!! html/parsoid

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/php

foo

!! html/parsoid

foo

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

foo

!! html/parsoid

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/php

'foo

!! html/parsoid

'foo

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

'foo

!! html/parsoid

'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/*

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 # The PHP parser strips the empty tags out for giggles; parsoid doesn't. !! test Italics and bold: multiple quote sequences: (3,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: (3,4,2+2) w/ nowiki !! wikitext '''foo''''bar'''' !! html/php

foo'bar

!! html/parsoid

foo'bar

!! end # The PHP parser strips the empty tags out for giggles; parsoid doesn't. !! test Italics and bold: multiple quote sequences: (3,4,3) !! 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: (3,4,3+3) w/ nowiki !! wikitext '''foo''''bar'''''' !! html/php

foo'bar

!! html/parsoid

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+tidy
a b a b
!! end ### ### Non-html5 tags ### !! 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</blockquote>

<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 !! test Non-word characters don't terminate tag names !! wikitext a doesn't terminate doesn't terminate doesn't terminate doesn't terminate !! html+tidy

<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/parserTestsParserHook.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/php+tidy

<s.foo>s

!! html/parsoid

<s.foo>s

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

|

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

|

!! 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 {{echo|–}} !! html/php+tidy

!! 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 # This test fails because wikitext whitespace is not normalized before comparing. !! 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 {{echo|foo{{!}}bar}} {{echo|foo|bar |[[}} !! end !! test T53961: Output correct nowikis in template arguments !! options parsoid=html2wt !! html/parsoid

!! wikitext {{echo|a [ b}} {{echo|a }} b}} {{echo|a [[ b}} {{echo|a | {{ ]]}} {{echo|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 ### ### 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 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 ### ### 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

!! html+tidy

a

foo

b

!! end # Remex wraps empty tag runs with p-tags. # Parsoid strips them out during p-wrapping. !! test No p-wrappable content !! wikitext
x
x
x
!! html/php+tidy
x
x

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

x

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

b

!! html+tidy

a

foo

b

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

a

foo

b

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

a

foo

b

foo

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

b c d e

x
foo
z !! html+tidy
foo

a

b c d e

x

foo

z

!! end # The difference between Parsoid & Remex here # is because of Parsoid's Tidy-emulation code # for p-wrapping. We'll start work to remove this # emulation code in Parsoid sooner than later. # Remex wraps empty tag runs with p-tags. # Parsoid strips them out in a separate pass. !! test Empty lines between lines with block tags !! wikitext
a b
a
b
b
d
e
!! html


a

b

a
b
b
d


e
!! html+tidy


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+tidy

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
{{echo|[[Category:Foo]]}} !! html/php
foo
foo
!! html/parsoid
foo
foo
!! end !! test Avoid expanding multiline sol transparent template ranges unnecessarily !! wikitext hi {{echo|
}} [[Category:Ho]] !! html/php

hi



!! html/parsoid

hi



!! 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 !! 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
!! html+tidy

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>

<pre> <nowiki> </pre> </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+tidy

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+tidy

foo

!! html/parsoid

foo

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

!!end

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

foo

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

b

!!end !! test Templates: Indent-Pre: 1d: Wrapping should be based on expanded content !! wikitext {{echo|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 {{echo| foo}} {{echo| foo}}{{echo| bar}} {{echo| foo}} {{echo| bar}} {{echo| foo}} {{echo| foo}} {{echo|{{echo| }}bar}} !! html
foo
foo bar
foo
bar
foo
foo
bar
!!end !! test Templates: Indent-Pre: 1f: Wrapping should be based on expanded content !! wikitext {{echo| }}a {{echo| }}a {{echo| b}} {{echo|a }}b {{echo|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 !! test Handle broken pre-like tags (T66025) !! options parsoid=wt2html !! wikitext {{echo|
x
}}
!! html/php
x
<pre
!! html/php+tidy
x
<pre
!! html/parsoid
x

<pre

!! end !! test Parsoid: handle pre with space after attribute !! options parsoid=wt2html !! wikitext
{{echo|foo}}
!! html/php
{{echo|foo}}
!! html/parsoid
{{echo|foo}}
!! end # TODO / maybe: fix wt2wt for this !! test Parsoid: Don't paragraph-wrap fosterable content !! options parsoid=wt2html !! wikitext {| |} !! html
!! end !! test Self-closed pre !! wikitext
!! html/php


!! html/parsoid

!! end

!! test
Parsoid: Don't paragraph-wrap fosterable content even if table syntax is unbalanced
!! options
parsoid=wt2html
!! wikitext
{|






|}
!! html
!! 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 {{echo|1= a }} {{echo|1= {{echo|b}} }} {{echo| 1 = c }} {{echo| 1 = * d }} !! html

a

b

c

  • d
!! end !! test Templates: Don't strip whitespace from positional-param values !! wikitext {{echo|a }} {{echo|{{echo|b}} }} {{echo| c }} {{echo| {{echo|d}} }} {{echo| e}} {{echo| *f}} {{echo| }}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 {{ echo |foo}} !! html/php

foo

!! html/parsoid

foo

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

foo bar

!! html/parsoid

foo bar

!! end !! test Templates: Handle comments in the target !! wikitext {{echo |foo}} {{echo |foo}} {{echo |foo}} {{echo|foo}} {{echo|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 {{echo|1 =foo}} {{echo| 1 = foo}} {{echo|1=foo}} {{echo|1=foo}} !! html/php

foo

foo

foo

foo

!! html/parsoid

foo

foo

foo

foo

!! end !! test Templates: Other wikitext in parameter names (T69657) !! wikitext {{echo|''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 {{echo|[foo]|{{echo|[bar]}}}} !! html/php+tidy

[foo]

!! html/parsoid

[foo]

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

link

!! html/parsoid

link

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

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 {{echo|[http://foo.com/a|b a|b]}} !! html/php+tidy

a|b

!! html/parsoid

a|b

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

[Main Page bar]

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

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 {{echo|{{echo|1=bar}}}} !! html/php+tidy

bar

!! html/parsoid

bar

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

a : b

!! html/parsoid

a : b

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

{{{1}}}

!! html/parsoid

{{{1}}}

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

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 3a. Indent-Pre and block tags (single-line html) !! wikitext a

foo

b
foo
c
foo
foo !! html a

foo

b
foo
c
foo
 foo 
!! html/parsoid

a

foo

b

foo

c

foo
 foo 
!! html/php+tidy

a

foo

b

foo

c

foo

 foo 
!! end !!test 3b. Indent-Pre and block tags (multi-line html) !! wikitext a foo b
foo
!! html
a foo
b
foo
!! html/parsoid
a foo
b
foo
!! html/php+tidy
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

foo

foo
foo

foo

foo
foo
  • foo
!!end !! test 4. Indent-Pre and extension tags !! 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 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]] {{echo| [[Category:foo]]}} !! html/php+tidy !! 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]] {{echo|b}} !! html/parsoid
 a
  b
!! end !! test Indent-Pre: Newlines in comments shouldn't affect sol state !! wikitext a b !! html/php+tidy

a b

!! html/parsoid

a b

!! 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+tidy
foo
foo

foo


foo
!! html/parsoid
foo
foo

foo


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




haha




haha




!! html/php+tidy




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 !! 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 !! wikitext ;http://example.com/ :definition !! html
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 !! 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 !! wikitext ;[http://www.wikipedia2.org/ Wikipedia :The Next Generation] :OK, I made that up !! html
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 !! 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 !! wikitext ;onetwo :bad tag fun !! html/php+tidy
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. !! 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+tidy
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 !! wikitext ::{| |foo |} !! html/parsoid
foo
!! 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 ## 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+tidy
t1
d2
!! end !! test Definition Lists: Nesting: Test 3 !! wikitext :;t1 ::::d2 !! html+tidy
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+tidy
    • 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 !! 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 !! wikitext *;foo :bar !! html
    • foo 
      bar
    !! end !! test Definition Lists: Mixed Lists: Test 10 !! 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 !! wikitext *#*#;*;;foo :bar *#*#;boo :baz !! html/php
          1. foo 
            • bar
    boo 
    baz
!! html/php+tidy
        1. foo 
          • bar
      boo 
      baz
!! html/parsoid
          • foo 
            bar
          boo 
          baz
!! end # FIXME: Maybe get rid of this test? # From whitelist: # * 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 !! wikitext *#;*::;;foo :bar (who uses this?) !! html/php+tidy
      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
    ;{{echo|a:b}} ;{{echo|''a:b''}} ;;;''a:b'' !! html+tidy
    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: 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,html2html !! 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 [{{echo|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 {{echo|[http://example.com x}} [[Foo {{echo|[[Foo}} !! html/php

    [http://example.com x

    [http://example.com x

    [[Foo

    {{echo|[[Foo}}

    !! html/parsoid

    [http://example.com x

    [http://example.com x

    [[Foo

    {{echo|[[Foo}}

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

    [[ Foo B C]]

    !! html/parsoid

    [[ Foo B C]]

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

    {{echo|}}

    [[Foo|]]

    !! html/parsoid

    {{echo|}}

    [[Foo|]]

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

    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 sanity check) !! wikitext Some [http://example.com/ pretty ''italics'' and stuff]! !! html

    Some pretty italics and stuff!

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

    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+tidy

    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 !! 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] [{{echo|foo}}] [{{echo|foo}} bar] [{{echo|foo}} ''bar''] [{{echo|foo}}l's] errand [{{echo|foo}}l's errand] [url={{echo|foo}}] [url=http://example.com] [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/{{echo|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 # Parsoid inserts an empty bold tag pair at the end of the line, that the PHP # parser strips. The wikitext contains just the first half of the bold # quote pair. !! 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 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
    foo
    foo
    foo
    !! end !! test A table with no data (take 2) !! wikitext {| |} !! html/parsoid
    !! 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 {{echo|b!!c}} |} !! html/php
    a b c
    !! html/parsoid !! end !! test Accept "!!" in table headings after newline !! wikitext {| !a b!!c |} !! html/php
    a bc
    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+tidy
    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 !! 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
    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 # 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 {{echo|1=
    ha
    }} !! html/php

    ho">ha</div>

    !! html/parsoid ho">ha !! end !! test Break on | in element attribute name in template !! wikitext {{echo|
    ha
    }} !! html/parsoid

    <div cla

    !! end !! test Don't break on | in extension attribute in template !! wikitext {{echo|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+tidy
    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 !! test Fostered content in tables: Plain text !! options parsoid=wt2html,html2html !! wikitext {| |- a |} !! html/php a
    !! html/php+tidy a
    !! html/parsoid

    a

    !! end !! test Fostered content in tables: Lists !! options parsoid=wt2html,html2html !! wikitext {| |- *a |} !! html/php
    • a
    !! html/php+tidy
    • a
    !! html/parsoid
    • a
    !! end !! test Template generated table cell with attributes !! wikitext {| |- {{table_attribs_4}} ||a||b |} !! html/php+tidy
    a b
    !! html/parsoid !! end !! test Parsoid: Round-trip tables directly followed by content (T53219) !! options parsoid=wt2html,wt2wt !! wikitext {| |foo |} bar {| |baz |}quux !! html+tidy
    ab
    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: newline inducing block nodes don't suppress !! options parsoid=html2wt !! html/parsoid a

    foo

    !! wikitext a = foo = !! 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
    foo bar baz quux
    !! end !!test Parsoid: Recover better from broken table attributes !!options parsoid=wt2html !!wikitext {| class="foo | class="bar" | foo |} !!html/php+tidy

    foo

    !!html/parsoid

    foo

    !!end !! test Tables: Digest broken attributes on table and tr tag !! options parsoid=wt2html !! wikitext {| || |} ++ |- || || ++ -- |- > [ |} !! html
    !! 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+tidy
    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 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 Wikitext tables can be nested inside HTML tables !! options parsoid=html2wt !! html
    foo
    !! wikitext
    {| |foo |}
    !! end !! test Serialize wikitext list items as HTML list items when embedded in a HTML list !! options parsoid=html2wt !! html
    • a
    • b
    !! wikitext
    • a
    • b
    !! end # SSS FIXME: Is this actually a good thing given the # odd nested list output that is generated by MW? #
    • foo
        ..
    instead of #
    • foo
      • ..
    !! test Wikitext lists can be nested inside HTML lists !! options parsoid=html2wt !! html
    • a
      • b
    • x
      • y
    !! wikitext
    • a * b
    • x * y
    !! 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 space [[Main Page| ]] - empty non breaking space !! html/php

    - empty nowiki - empty space   - empty non breaking space

    !! html/parsoid

    - empty nowiki - empty space   - empty non breaking space

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

    Zigzagzogzagzig

    !! end !! test Broken link with fragment !! wikitext [[Zigzagzogzagzig#zug]] !! html

    Zigzagzogzagzig#zug

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

    Special:Version#anchor

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

    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 !! 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 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 File containing double quotes and spaces !! wikitext [[File:Cool "Gator".png]] !! html/parsoid

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

    Some pretty italics and stuff!

    !! end !! test Link with double quotes in title part (literal) and alternate part (interpreted) !! wikitext [[File:Denys_Savchenko_''Pentecoste''.jpg]] [[''Pentecoste'']] [[''Pentecoste''|Pentecoste]] [[''Pentecoste''|''Pentecoste'']] !! html/php

    File:Denys Savchenko Pentecoste.jpg

    ''Pentecoste''

    Pentecoste

    Pentecoste

    !! html/parsoid

    ''Pentecoste''

    Pentecoste

    Pentecoste

    !! end !! test Broken image links with HTML captions (T41700) !! wikitext [[File:Nonexistent|]] [[File:Nonexistent|100x100px|]] [[File:Nonexistent|<]] [[File:Nonexistent|abc]] !! html/php

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

    !! html/parsoid

    !! 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 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 Plain link in template argument !! options parsoid=wt2html !! wikitext {{echo|[http://www.example.com |123]}} {{echo|[[http://www.example.com |123]]}} {{echo|[[http://www.example.com |123]}} {{echo|[http://www.example.com |123]]}} !! html/php

    [http://www.example.com

    [|123]

    {{echo|[|123}}

    [http://www.example.com

    !! html/parsoid

    [http://www.example.com

    [|123]

    {{echo|[|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+tidy

    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

    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

    [[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 sanity 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 {{echo|[[Foo]]}}l !! html/parsoid

    Fool

    !! end !! test 2. Interaction of linktrail and template encapsulation !! options parsoid !! wikitext {{echo|Some [[Fool]]}}s !! html

    Some Fools

    !! end !! test 3. Interaction of linktrail and template encapsulation !! options parsoid !! wikitext {{echo|Some [[Fool]]s are '''bold and foolish'''}} !! html

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

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

    !! 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|{{echo|a}} b {{echo|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 ### ### 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 !! html/php+tidy !! html/parsoid !! end !! test Interwiki link with fragment (T4130) !! wikitext [[MeatBall:SoftSecurity#foo]] !! html

    MeatBall:SoftSecurity#foo

    !! end !! test Link scenarios with escaped fragments !! 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 ### ### 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 !! 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 [[{{echo|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 !! wikitext
    !! html/php

    </br>

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

    !! html+tidy



    !! 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 ## FIXME: Is Parsoid's acceptance of self-closing html-tags ## a feature or a bug? See https://phabricator.wikimedia.org/T76962 !! test Handling html with a div self-closing tag !! wikitext
    !! html/php

    <div title /> <div title/>

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

    !! html/parsoid
    !! end !! test Handling html with a br self-closing tag !! wikitext





    !! html/php







    !! html/parsoid







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

    foo
    bar !! html+tidy

    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
    Foo !! html+tidy

    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 :{{echo|
  • 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 !! test Nested lists 9 (extension interaction) !! options parsoid !! wikitext * !! html/parsoid
      !! end !! test 1. Lists with start-of-line-transparent tokens before bullets: Comments !! wikitext *foo *bar *baz !! html
      • foo
      • bar
      • baz
      !! end !! test 2. Lists with start-of-line-transparent tokens before bullets: Template close !! wikitext *foo {{echo|bar }}*baz !! html
      • 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 {{echo|
    • }}a {{echo|
    • }}b {{echo|
    • }}c !! html
    • a
    • b
    • c
    • !! html+tidy
    • a
    • b
    • c
    • !! html/parsoid
    • a
    • b
    • c
    • !!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: Parsoid has a dedicated DOM pass to mimic this Tidy-specific li-hack # That pass could possibly be removed. !!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 *{{echo|
    • templated li-hack}} *
    • unsupported li-hack with preceding comments
      • not a li-hack
      !! html+tidy
      • foo
      • li-hack
      • templated li-hack
      • unsupported li-hack with preceding comments
      • not a li-hack
      !! html/parsoid
      • foo
      • li-hack
      • templated li-hack
      • 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 !! options parsoid !! wikitext #foo ##bar *foo **bar :foo ::bar !! html
      1. foo
        1. bar
      • foo
        • bar
      foo
      bar
      !! end !! test Parsoid: Test of whitespace serialization with Templated bullets !! options parsoid !! 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) # ------------------------------------------------------------------------ # Remex and Parsoid output stems from list handling diffs because Parsoid & PHP parser. # Parsoid's list handling is more aware of block structure. !! test Unbalanced closing block tags break a list !! wikitext
      *a
      *b
      !! html+tidy
      • a
    • b
    • !! html/parsoid
      • a
      • b
      !! end !! test Unbalanced closing non-block tags don't break a list !! wikitext *a *b !! html/php+tidy

      • 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+tidy
      1. a
      2. b
      !! html/parsoid
      1. a
      2. b
      !! end # Output is ugly because of all the misnested tag fixups. # Remex is wrapping p-tags around empty elements. # Parsoid has special-case handling of this pattern of # wrapping lists in formatting tags. # FIXME: Should we remove this code from Parsoid? Or add # special support in Remex? If the latter, maybe just wait # for Parsoid to become the default parser. # See T70395. !!test 1. List embedded in a formatting tag !! wikitext *foo !! html/php+tidy

      • foo

      !! html/parsoid
      • foo
      !!end # Output is ugly because of all the misnested tag fixups # Remex is wrapping p-tags around empty elements. # Parsoid has code that strips useless p-tags. !!test 2. List embedded in a formatting tag in a misnested way !! wikitext *a *b !! html/php+tidy

      • a
      • b
      !! html/parsoid
      • a
      • b
      !!end !! test Table with missing opening tag !! options parsoid=wt2html,wt2wt !! wikitext
      foo
      !! html+tidy
      foo
      !! 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+tidy

      '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+tidy

      *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+tidy

      *RFC_1234_http://example.com/

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

      1337

      flags=vary-revision-id !! 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 !! wikitext {{DISPLAYTITLE:''{{PAGENAME}}''}} !! 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 {{{{echo|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: 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|{{echo|foo}}|{{echo|a}}={{echo|b}}|a = b}} !! html

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

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

      {{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 !! test Template with just whitespace in it, T70421 !! wikitext {{echo|{{ }}}} !! html/parsoid

      {{ }}

      !! 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 {{{{echo|echo}}|foo}} {{{{echo|inner list}} }} !! html

      foo

      • item 1
      !! html/parsoid

      foo

      • item 1
      !! end ## Regression test; the output here isn't really that interesting. !! test Templates with templated name and top level template args !! wikitext {{1{{2{{{3}}}|4=5}}}} !! html/parsoid

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

      !! end # Parsoid markup is deliberate "broken". This is an edge case. # See long comment in TemplateHandler.js:convertAttribsToString. !! test Templates with invalid templated targets !! wikitext {{echo {{echo|foo}} }} !! html/php

      {{echo foo }}

      !! html/parsoid

      {{echo foo }}

      !! end !! test Template with thumb image (with link in description) !! wikitext {{paramtest|param=[[Image:noimage.png|thumb|[[no link|link]] [[no link|caption]]]]}} !! html/php This is a test template with parameter !! html+tidy

      This is a test template with parameter

      !! html/parsoid

      This is a test template with parameter

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

      Template loop detected: Template:Loop1

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

      blah blah

      !! 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]]}} {{[[{{echo|foo}}]]}} {{{{echo|[[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 {|{{echo|

      ha

      }} {|{{echo|

      ho

      }} {{echo|{{!}}hi}} |} !! html/php+tidy

      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

      Foo

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

      Foo

      !! end !! test and on a page !! wikitext Foozarbar !! html

      Foozar

      !! end !! test Un-closed !! wikitext !! html !! end !! test on a page !! wikitext Foobar !! html

      Foobar

      !! end !! test Un-closed !! wikitext !! html !! 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. !! test Includes and comments at SOL !! options parsoid=wt2html,html2html !! wikitext ==hu== some *stuff *here can have stuff===here=== !! html/php

      hu

      some

      • stuff
      • here

      here

      !! html/parsoid

      hu

      some

      • stuff
      • here

      here

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

      ab

      cd

      ab

      cd

      a

      b

      !! end !! test Parsoid: Merge double tds (T52603) !! options parsoid !! wikitext {| |{{echo|{{!}} foo}} |} !! html
      foo
      !! end !! test Parsoid: Merge double tds in nested transclusion content (T52603) !! options parsoid !! wikitext {{echo|
      }} {| |{{echo|{{!}} foo}} |} {{echo|
      }} !! html
      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: {{echo|[[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 -{{echo|foo}-}}- !! html/php

      -foo}--

      !! html/parsoid

      -foo}--

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

      hi

      {{echo|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 {{echo|[[Foo}} {{echo|[[Foo|bar|bat=baz}} !! html/php

      {{echo|[[Foo}}

      {{echo|[[Foo|bar|bat=baz}}

      !! html/parsoid

      {{echo|[[Foo}}

      {{echo|[[Foo|bar|bat=baz}}

      !! end # This next test exposes a difference between PHP and Parsoid: # Given [[Foo|{{echo|Bar]]x}}y]]z: # 1) Both PHP and Parsoid ignore the `]]` inside the `echo` in the # "preprocessor" stage. The `{{echo` 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|{{echo|Bar]] [[Foo|{{echo|Bar]]-x}}-y]]-z Careful: linktrails can move the end of the wikilink: [[Foo|{{echo|y']]a}}l]]l !! html/php

      {{echo|Bar

      Bar-x-y]]-z

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

      !! html/parsoid

      [[Foo|{{echo|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|-{{echo|x}}}}}} {{echo|-{{echo|-{{echo|x}}}}}} {{echo|-{{echo|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: *{{echo|foo-{bar}bat}} But if the broken language converter markup is inside an extension tag, nothing bad happens: *foo-{bar}bat *{{echo|foo-{bar}bat}} *
      foo-{bar}bat
      *{{echo|
      foo-{bar}bat
      }} foo-{bar}bat {{echo|foo-{bar}bat}} !! html/php+tidy

      This form breaks the template, which is unfortunate:

      • {{echo|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:

      • {{echo|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]
      *{{echo|[http://example.com/-{foo Breaks template, however]}}
      !! html/php+tidy
      
      !! html/parsoid
      
      !! end
      
      !! test
      Preprocessor precedence 14: broken language converter in comment
      !! wikitext
      *...should be ok
      *...extra dashes
      *{{echo|foobat}}...should be ok
      !! html/php+tidy
      
      • ...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+tidy

      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 -{{{echo|foo}}bar}- !! html/php

      foobar

      !! html/parsoid

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

      hi {{}}

      !! html/parsoid

      hi {{}}

      !! end !! test Preprocessor precedence 18: another rightmost wins scenario !! options parsoid=wt2html !! 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 ### ### 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 blacklisting 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 {{echo|}}{| 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 ### ### 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

      foo

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

      foo

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

      quote

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

      Foo

      !!end !!test Templates: 2. Inside a block tag !! wikitext
      {{echo|Foo}}
      {{echo|Foo}}
      !! html
      Foo
      Foo
      !! html+tidy
      Foo

      Foo

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

      Foo bar

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

      Foo

      bar baz

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

      Foo

      bar
      baz
      !! html+tidy

      Foo

      bar

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

      Bar

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

      Foobarbaz

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

      Foobar

      !!end !!test Templates: Block Tags: 1. Multiple template uses !! wikitext {{echo|
      Foo
      }}
      bar
      {{echo|
      baz
      }} !! html
      Foo
      bar
      baz
      !!end !!test Templates: Block Tags: 2. Back-to-back template uses !! wikitext {{echo|
      Foo
      }}{{echo|
      bar
      }} !! html
      Foo
      bar
      !!end # This is an edge case relating to paragraph wrapping. !!test Templates: Correctly encapsulate templates producing

      tag without a corresponding

      tag !! wikitext {{echo|a b

      }} !! html/parsoid

      a b

      !!end !!test Templates: Links: 1. Simple example !! wikitext {{echo|[[Foo|bar]]}} !! html

      bar

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

      bar

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

      bar

      Foobar

      Foobarbaz

      bar

      Foobar

      bar

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

      Foobar

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

      bar

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

      bar

      !!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 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 Templates: HTML Tables: 1. Generating start of a HTML table !! wikitext {{echo|}}
      foo
      !! html
      foo
      !!end !!test Templates: HTML Tables: 2a. Generating middle of a HTML table !! wikitext {{echo|}}
      foo
      !! html
      foo
      !!end !!test Templates: HTML Tables: 2b. Generating middle of a HTML table !! wikitext {{echo|}}
      foo
      !! html
      foo
      !!end !!test Templates: HTML Tables: 3. Generating end of a HTML table !! wikitext {{echo|
      foo
      }} !! html
      foo
      !!end !!test Templates: HTML Tables: 4a. Generating a single tag of a HTML table !! wikitext {{echo|}}
      foo
      !! html
      foo
      !!end !!test Templates: HTML Tables: 4b. Generating a single tag of a HTML table !! wikitext {{echo|}}
      foo
      !! html
      foo
      !!end !!test Templates: HTML Tables: 4c. Generating a single tag of a HTML table !! wikitext {{echo|
      }}foo
      !! html
      foo
      !!end !!test Templates: HTML Tables: 4d. Generating a single tag of a HTML table !! wikitext }}
      foo{{echo|
      !! html
      foo
      !!end !!test Templates: HTML Tables: 4e. Generating a single tag of a HTML table !! wikitext {{echo|}}
      foo
      !! html
      foo
      !!end !!test Templates: HTML Tables: 4f. Generating a single tag of a HTML table !! wikitext {{echo|
      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
      foo
      foo
      !!end !!test Templates: Wiki Tables: 1a. Fostering of entire template content !! wikitext {| {{echo|a}} |} !! html a
      !! html/php+tidy a
      !! html/parsoid

      a

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

      foo

      !! html/php+tidy

      foo

      !! html/parsoid

      foo

      !! end !!test Templates: Wiki Tables: 2. Fostering of partial template content !! wikitext {| {{echo|a
      b
      }} |} !! html a
      b
      !! html/php+tidy a
      b
      !! html/parsoid

      a

      b
      !! end !!test Templates: Wiki Tables: 3. td-content via multiple templates !! wikitext {| {{echo|{{pipe}}a}}{{echo|b}} |} !! html
      ab
      !!end !!test Templates: Wiki Tables: 4. Templated tags, no content !! wikitext {{tbl-start}} {{tbl-end}} !! html
      !!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 !! test Templates: Wiki Tables: 8. Fosterable meta-tags should get fostered !! wikitext {{echo| {{{!}} {{!}}-}} |foo {{!}}} !! html/parsoid
      foo
      !! end !!test Templates: Lists: Multi-line list-items via templates !! wikitext *{{echo|a {{nonexistent| unused}}}} *{{echo|b {{nonexistent| unused}}}} !! html !!end !!test Templates: Ugly nesting: 1. Quotes opened/closed across templates (echo) !! wikitext {{echo|''a}}{{echo|b''c''d}}{{echo|''e}} !! html

      abcde

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

      abcde

      !!end !!test Templates: Ugly nesting: 3. Quotes opened/closed across templates (echo_with_div) (PHP parser generates misnested html; Parsoid html2wt mode adds newlines between {{echo}}s) !! options parsoid=wt2html,wt2wt !! wikitext {{echo_with_div|''a}}{{echo_with_div|b''c''d}}{{echo_with_div|''e}} !! html
      a
      bcd
      e
      !!end !!test Templates: Ugly nesting: 4. Divs opened/closed across templates !! wikitext a
      b{{echo|c
      d}}e !! html a
      bc
      de !! html+tidy

      a

      bc

      de

      !! end !! test Templates: Ugly templates: 3. newline-only template parameter !! wikitext foo {{echo| }} !! 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 {{echo| }} !! 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 {{echo|}} {{echo|
      foo}} {{echo|
      }} !! 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 {{echo|
      }} {{echo|
      }} {{echo|
      }} !! html/parsoid
      !! end !! test Templates: Parameters substituted at the top-level !! wikitext {{{foo|''who'' {{echo|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 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 ### ### 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 !! 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 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 comma in title !! options pst title=[[Someplace, Somewhere]] !! wikitext [[|Otherplace]] [[Otherplace, Elsewhere|]] [[Otherplace, Elsewhere, Anywhere|]] !! html/php [[Otherplace, Somewhere|Otherplace]] [[Otherplace, Elsewhere|Otherplace]] [[Otherplace, Elsewhere, Anywhere|Otherplace]] !! end !! test pre-save transform: context links ("pipe trick") with parens and comma !! options pst title=[[Someplace (IGNORED), Somewhere]] !! 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

      <div>[[foo]]

      ab

      cd

      ef

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

      <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 ### ### Images ### ### For Parsoid-specific tests, see #### https://www.mediawiki.org/wiki/Parsoid/MediaWiki_DOM_spec#Images !! test Simple image !! options parsoid=wt2html,wt2wt,html2html !! wikitext [[Image:foobar.jpg]] !! html/php

      Foobar.jpg

      !! html/parsoid

      !! end !! test Serialize simple image with span wrapper !! options parsoid=html2wt !! html/parsoid

      !! wikitext [[File:Foobar.jpg]] !! end !! test Simple image (using File: namespace, now canonical) !! wikitext [[File:Foobar.jpg]] !! html/php

      Foobar.jpg

      !! html/parsoid

      !! end !! test Right-aligned image !! wikitext [[File:Foobar.jpg|right]] !! html/php
      Foobar.jpg
      !! html/parsoid
      !! end !! test Image with caption !! wikitext [[File:Foobar.jpg|right|Caption text]] !! html/php
      Caption text
      !! html/parsoid
      Caption text
      !! end !! test Image with caption, T55312 #1 !! wikitext [[File:Foobar.jpg|right|Caption page stuff]] !! html/php
      Caption page stuff
      !! html/parsoid
      Caption page stuff
      !! end !! test Image with caption, T55312 #2 !! wikitext [[File:Foobar.jpg|right|Caption page=]] !! html/php
      Caption page=
      !! html/parsoid
      Caption page=
      !! end !! test Image with caption, T55312 #3 !! wikitext [[File:Foobar.jpg|right|Caption page=stuff]] !! html/php
      Caption page=stuff
      !! html/parsoid
      Caption page=stuff
      !! end !! test Image caption with pipe entity !! wikitext [[File:Foobar.jpg|thumb|one | two]] [[File:Foobar.jpg|thumb|one ''two'' | three]] !! html/php
      one | two
      one two | three
      !! html/parsoid
      one | two
      one two | three
      !! end !! test Allow empty links in image captions (T62753) !! options thumbsize=220 !! wikitext [[File:Foobar.jpg|thumb|Caption [[Link1]] [[]] [[Link2]] ]] !! html/php
      Caption Link1 [[]] Link2
      !! html/parsoid
      Caption Link1 [[]] Link2
      !! end !! test Titles in unlinked images (T23454) !! wikitext [[File:Foobar.jpg|link=|stuff]] !! html/php

      stuff

      !! html/parsoid

      !! end !! test Link with empty target !! wikitext [[]] !! html

      [[]]

      !! end !! test Image with link trail !! wikitext Linktrails should not work for images: [[File:Foobar.jpg]]s !! html/php

      Linktrails should not work for images: Foobar.jpgs

      !! html/parsoid

      Linktrails should not work for images: s

      !! end !! test Image with empty attribute !! options parsoid=wt2html,wt2wt,html2html !! wikitext [[File:Foobar.jpg|right||Caption text]] !! html/php
      Caption text
      !! html/parsoid
      Caption text
      !! end !! test 1. Block image with individual attributes from templates !! wikitext [[File:Foobar.jpg|thumb|{{echo|137px}}|This is a caption]] !! html/php
      This is a caption
      !! html/parsoid
      This is a caption
      !! end !! test 2. Block Image with individual attributes from templates !! wikitext [[File:Foobar.jpg|{{echo|thumb}}|{{echo|137px}}|This is a caption]] !! html/php
      This is a caption
      !! html/parsoid
      This is a caption
      !! end !! test 3. Inline image with individual attributes from templates !! wikitext [[File:Foobar.jpg|{{echo|50px}}]] !! html/php

      Foobar.jpg

      !! html/parsoid

      !! end ## Parsoid does not provide editing support for images where templates produce multiple image attributes. ## To signal this, we add a 'mw:Placeholder' type to such images. This could change in the future. !! test Image with multiple attributes from the same template !! wikitext [[File:Foobar.jpg|{{image_attribs}}]] !! html/php
      Caption text
      !! html/parsoid
      Caption text
      !! end !! test Image with link tails !! options thumbsize=220 !! wikitext 123[[File:Foobar.jpg]]456 123[[File:Foobar.jpg|right]]456 123[[File:Foobar.jpg|thumb]]456 !! html/php

      123Foobar.jpg456

      123
      Foobar.jpg
      456 123
      Foobar.jpg
      456 !! html/php+tidy

      123Foobar.jpg456

      123

      Foobar.jpg

      456 123

      Foobar.jpg

      456

      !! html/parsoid

      123456

      123

      456

      123

      456

      !! end !! test Image with multiple captions -- only last one is accepted !! wikitext [[File:Foobar.jpg|right|Caption1 - ignored|[[Caption2]] - ignored|Caption3 - accepted]] !! html/php
      Caption3 - accepted
      !! html/parsoid
      Caption3 - accepted
      !! end !! test Image with multiple widths -- use last !! wikitext [[File:Foobar.jpg|200px|300px|caption]] !! html/php

      caption

      !! html/parsoid

      !! end !! test Image with multiple alignments -- use first (T50664) !! options thumbsize=220 !! wikitext [[File:Foobar.jpg|thumb|left|right|center|caption]] [[File:Foobar.jpg|middle|text-top|caption]] !! html/php
      caption

      caption

      !! html/parsoid
      caption

      !! end !! test Image with width attribute at different positions !! wikitext [[File:Foobar.jpg|200px|right|Caption]] [[File:Foobar.jpg|right|200px|Caption]] [[File:Foobar.jpg|right|Caption|200px]] !! html/php
      Caption
      Caption
      Caption
      !! html/parsoid
      Caption
      Caption
      Caption
      !! end # a sad bit of backward-compatibility !! test Image with size specified with pxpx (T15500, T53628) !! options parsoid=wt2html,wt2wt,html2html !! wikitext [[File:Foobar.jpg|20pxpx]] [[File:Foobar.jpg|200x20pxpx]] !! html/php

      Foobar.jpg Foobar.jpg

      !! html/parsoid

      !! end !! test Image with link parameter, wiki target !! wikitext [[File:Foobar.jpg|link=Main Page]] !! html/php

      Foobar.jpg

      !! html/parsoid

      !! end # parsoid T51293 (part 1) !! test Image with link parameter, URL target !! wikitext [[File:Foobar.jpg|link=http://example.com/]] !! html/php

      Foobar.jpg

      !! html/parsoid

      !! end # parsoid T51293 (part 2) !! test Image with link parameter, protocol-less URL target !! wikitext [[File:Foobar.jpg|link=//example.com/]] !! html/php

      Foobar.jpg

      !! html/parsoid

      !! end !! test Escaping non-block captions (T107435) !! options parsoid={ "modes": ["wt2wt"], "changes": [ ["[typeof~='mw:Image']", "attr", "data-mw", "{\"caption\": \"|\"}"] ] } !! wikitext [[Image:Foobar.jpg|caption]] !! wikitext/edited [[Image:Foobar.jpg||]] !! end # wgExternalLinkTarget not supported by Parsoid !! test Image with link parameter, wgExternalLinkTarget !! wikitext [[Image:foobar.jpg|link=http://example.com/]] !! config wgExternalLinkTarget='foobar' !! html/php

      Foobar.jpg

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

      Foobar.jpg

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

      Foobar.jpg

      !! end # wgExternalLinkTarget not supported by Parsoid !! test Image with link parameter, wgExternalLinkTarget, unnamed parameter !! wikitext [[Image:foobar.jpg|link=http://example.com/|Title]] !! config wgExternalLinkTarget='foobar' !! html/php

      Title

      !! end !! test Image with empty link parameter !! wikitext [[File:Foobar.jpg|link=]] !! html/php

      Foobar.jpg

      !! html/parsoid

      !! end !! test Image with link parameter (wiki target) and unnamed parameter !! wikitext [[File:Foobar.jpg|link=Main_Page|Title]] !! html/php

      Title

      !! html/parsoid

      !! end !! test Image with link parameter (URL target) and unnamed parameter !! wikitext [[File:Foobar.jpg|link=http://example.com/|Title]] !! html/php

      Title

      !! html/parsoid

      !! end !! test Thumbnail image with link parameter !! options thumbsize=220 parsoid=wt2html,wt2wt,html2html !! wikitext [[File:Foobar.jpg|thumb|link=http://example.com/|Title]] !! html/php
      Title
      !! html/parsoid
      Title
      !! end !! test Manually-specified thumbnail image !! options thumbsize=220 !! wikitext [[File:Foobar.jpg|thumbnail=Thumb.png|Title]] !! html/php
      Title
      !! html/parsoid
      Title
      !! end !! test Manually-specified thumbnail image with explicit link to wiki page !! options thumbsize=220 parsoid=wt2html,wt2wt,html2html !! wikitext [[File:Foobar.jpg|thumb=Thumb.png|link=Main_Page|Title]] !! html/php
      Title
      !! html/parsoid
      Title
      !! end !! test Manually-specified thumbnail image with explicit link to url !! options thumbsize=220 parsoid=wt2html,wt2wt,html2html !! wikitext [[File:Foobar.jpg|thumb=Thumb.png|link=http://example.com|Title]] !! html/php
      Title
      !! html/parsoid
      Title
      !! end !! test Manually-specified thumbnail image with explicit no link !! options thumbsize=220 parsoid=wt2html,wt2wt,html2html !! wikitext [[File:Foobar.jpg|thumb=Thumb.png|link=|Title]] !! html/php
      Title
      !! html/parsoid
      Title
      !! end !! test Manually-specified thumbnail image with explicit link and alt text !! options thumbsize=220 parsoid=wt2html,wt2wt,html2html !! wikitext [[File:Foobar.jpg|thumb=Thumb.png|link=Main_Page|alt=alttext|Title]] !! html/php
      alttext
      Title
      !! html/parsoid
      alttext
      Title
      !! end !! test Image with frame and link !! options parsoid=wt2html,wt2wt,html2html !! wikitext [[File:Foobar.jpg|frame|left|This is a test image [[Main Page]]]] !! html/php
      This is a test image Main Page
      !! html/parsoid
      This is a test image Main Page
      !! end !! test Image with frame and link and explicit alt !! options parsoid=wt2html,wt2wt,html2html !! wikitext [[Image:Foobar.jpg|frame|left|This is a test image [[Main Page]]|alt=Altitude]] !! html/php
      Altitude
      This is a test image Main Page
      !! html/parsoid
      Altitude
      This is a test image Main Page
      !! end !! test Image with wiki markup in implicit alt !! wikitext [[Image:Foobar.jpg|testing '''bold''' in alt]] [[Image:Foobar.jpg|alt=testing '''bold''' in alt]] !! html/php

      testing bold in alt

      testing bold in alt

      !! html/parsoid

      testing bold in alt

      !! end !! test Alt image option should handle most kinds of wikitext without barfing !! wikitext [[Image:Foobar.jpg|thumb|This is the image caption|alt=This is a [[link]] and a {{echo|''bold template''}}.]] !! html/php
      This is a link and a bold template.
      This is the image caption
      !! html/parsoid
      This is a link and a bold template.
      This is the image caption
      !! end !! test Image with table with attributes in caption !! options parsoid=wt2html,html2html !! wikitext [[File:Foobar.jpg|thumb| {| class="123" | |- class="456" | | ha |} ]] !! html/parsoid
      ha
      !! end !! test Image with table with rows from templates in caption !! wikitext [[File:Foobar.jpg|thumb| {| {{echo|{{!}} hi}} |} ]] !! html/parsoid
      hi
      !! end !! test Image with nested tables in caption !! wikitext [[File:Foobar.jpg|thumb|Foo
      {| | {| |z |} |} ]] !! html/parsoid
      Foo
      z
      !! end ################### # Conflicting image format options. # First option specified should 'win'. # All three cases in each test should be identical. !! test Image with 'frameless' first. !! options parsoid=wt2html,wt2wt,html2html !! wikitext [[File:Foobar.jpg|frameless|caption]] [[File:Foobar.jpg|frameless|frame|caption]] [[File:Foobar.jpg|frameless|thumb|caption]] !! html/php

      caption

      caption

      caption

      !! html/parsoid

      !! end !! test Image with 'frame' first. !! options parsoid=wt2html,wt2wt,html2html !! wikitext [[File:Foobar.jpg|frame|caption]] [[File:Foobar.jpg|frame|frameless|caption]] [[File:Foobar.jpg|frame|thumb|caption]] !! html/php
      caption
      caption
      caption
      !! html/parsoid
      caption
      caption
      caption
      !! end !! test Image with 'thumb' first. !! options parsoid=wt2html,wt2wt,html2html !! wikitext [[File:Foobar.jpg|thumb|caption]] [[File:Foobar.jpg|thumb|frameless|caption]] [[File:Foobar.jpg|thumb|frame|caption]] !! html/php
      caption
      caption
      caption
      !! html/parsoid
      caption
      caption
      caption
      !! end ################### # Image sizing. # See https://www.mediawiki.org/wiki/Help:Images#Size_and_frame # and https://phabricator.wikimedia.org/T64258 # Foobar has actual size of 1941x220 # 1. Thumbs & frameless always reduce, can't be enlarged unless it's # a scalable format. # 2. Framed images always ignore size options; always render at default size. # 3. "Unspecified format" and border are the only types which can be # enlarged. !! test Image: unspecified format and border enlarge !! options parsoid=wt2html,wt2wt,html2html !! wikitext [[File:Foobar.jpg|2000px]] [[File:Foobar.jpg|border|2000px]] !! html/php

      Foobar.jpg

      Foobar.jpg

      !! html/parsoid

      !! end !! test Image: "unspecified format" and border reduce !! options parsoid=wt2html,wt2wt,html2html !! wikitext [[File:Foobar.jpg|1000px]] [[File:Foobar.jpg|border|1000px]] !! html/php

      Foobar.jpg

      Foobar.jpg

      !! html/parsoid

      !! end !! test Image: thumbs reduce !! options parsoid=wt2html,wt2wt,html2html !! wikitext [[File:Foobar.jpg|thumb|50px]] !! html/php
      Foobar.jpg
      !! html/parsoid
      !! end !! test Image: bitmap thumbs can't be enlarged past original size, but vector can. !! options parsoid=wt2html,wt2wt,html2html !! wikitext [[File:Foobar.jpg|thumb|2000px]] [[File:Foobar.svg|thumb|2000px]] !! html/php
      Foobar.jpg
      Foobar.svg
      !! html/parsoid
      !! end !! test Image: frameless can reduce in size !! options parsoid=wt2html,wt2wt,html2html !! wikitext [[File:Foobar.jpg|frameless|50px]] !! html/php

      Foobar.jpg

      !! html/parsoid

      !! end !! test Image: bitmap frameless can't be enlarged past original size, but vector can !! options parsoid=wt2html,wt2wt,html2html !! wikitext [[File:Foobar.jpg|frameless|2000px]] [[File:Foobar.svg|frameless|2000px]] !! html/php

      Foobar.jpg

      Foobar.svg

      !! html/parsoid

      !! end !! test Image: framed images are always unscaled. !! options parsoid=wt2html,wt2wt,html2html !! wikitext [[File:Foobar.jpg|frame]] [[File:Foobar.jpg|frame|50px]] [[File:Foobar.jpg|frame|50x50px]] [[File:Foobar.jpg|frame|2000px]] !! html/php
      Foobar.jpg
      Foobar.jpg
      Foobar.jpg
      Foobar.jpg
      !! html/parsoid
      !! end ################### !! test Link to image page- image page normally doesn't exists, hence edit link Add test with existing image page #

      Image:test !! wikitext [[:Image:test]] !! html

      Image:test

      !! end !! test T20784 Link to non-existent image page with caption should use caption as link text !! wikitext [[:Image:test|caption]] !! html

      caption

      !! end !! test Frameless image caption with a free URL !! wikitext [[File:Foobar.jpg|http://example.com]] !! html/php

      http://example.com

      !! html/parsoid

      !! end !! test Thumbnail image caption with a free URL !! options thumbsize=220 !! wikitext [[File:Foobar.jpg|thumb|http://example.com]] !! html/php !! html/parsoid
      http://example.com
      !! end !! test Thumbnail image caption with a free URL and explicit alt !! options thumbsize=220 parsoid=wt2html,wt2wt,html2html !! wikitext [[File:Foobar.jpg|thumb|http://example.com|alt=Alteration]] !! html/php !! html/parsoid
      Alteration
      http://example.com
      !! end !! test SVG thumbnails with no language set !! options !! wikitext [[File:Foobar.svg|thumb|caption]] !! html/php
      caption
      !! html/parsoid
      caption
      !! end !! test SVG thumbnails with language de !! options parsoid=wt2html,wt2wt,html2html !! wikitext [[File:Foobar.svg|thumb|caption|lang=de]] !! html/php
      caption
      !! html/parsoid
      caption
      !! end !! test SVG thumbnails with invalid language code !! options parsoid=wt2html,wt2wt,html2html !! wikitext [[File:Foobar.svg|thumb|caption|lang=invalid:language:code]] !! html/php
      lang=invalid:language:code
      !! html/parsoid
      lang=invalid:language:code
      !! end !! test T3887: A ISBN with a thumbnail !! wikitext [[File:Foobar.jpg|thumb|ISBN 1235467890]] !! html/php !! html/parsoid
      ISBN 1235467890
      !! end !! test T3887: A RFC with a thumbnail !! wikitext [[File:Foobar.jpg|thumb|This is RFC 12354]] !! html/php
      This is RFC 12354
      !! html/parsoid
      This is RFC 12354
      !! end !! test T3887: A mailto link with a thumbnail !! wikitext [[File:Foobar.jpg|thumb|Please mailto:nobody@example.com]] !! html/php !! html/parsoid
      Please mailto:nobody@example.com
      !! end # Pending resolution to T2368 !! test T2648: Frameless image caption with a link !! wikitext [[File:Foobar.jpg|text with a [[link]] in it]] !! html/php

      text with a link in it

      !! html/parsoid

      !! end !! test T2648: Frameless image caption with a link (suffix) !! wikitext [[File:Foobar.jpg|text with a [[link]]foo in it]] !! html/php

      text with a linkfoo in it

      !! html/parsoid

      !! end !! test T2648: Frameless image caption with an interwiki link !! wikitext [[File:Foobar.jpg|text with a [[MeatBall:Link]] in it]] !! html/php

      text with a MeatBall:Link in it

      !! html/parsoid

      !! end !! test T2648: Frameless image caption with a piped interwiki link !! wikitext [[File:Foobar.jpg|text with a [[MeatBall:Link|link]] in it]] !! html/php

      text with a link in it

      !! html/parsoid

      !! end !! test T107474: Frameless image caption with !! wikitext [[File:Foobar.jpg|text with a [[MeatBall:Link|link]] in it]] !! html/parsoid

      !! end !! test Escape HTML special chars in image alt text !! wikitext [[File:Foobar.jpg|& < > "]] !! html/php

      & < > "

      !! html/parsoid

      !! end !! test Escape HTML special chars in image alt text with LanguageConverter !! options language=zh !! wikitext [[File:Foobar.jpg|& < > "]] !! html/php

      & < > "

      !! html/parsoid

      !! end !! test Entities in file name and attributes !! wikitext [[File:7%25 solution.gif|manualthumb=7%25 solution.gif|link=7%25 solution|[[7%25 solution]]]] !! html/php

      7% solution

      !! html/parsoid

      !! end !! test T2499: Alt text should have Ӓ, not &1234; !! wikitext [[File:Foobar.jpg|♀]] !! html/php

      ♀

      !! html/parsoid

      !! end !! test Broken image caption with link !! options parsoid=wt2html,wt2wt,html2html !! wikitext [[Image:Foobar.jpg|thumb|This is a broken caption. But [[Main Page|this]] is just an ordinary link. !! html/php

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

      !! html/parsoid

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

      !! end !! test Image caption containing another image !! wikitext [[File:Foobar.jpg|thumb|This is a caption with another [[File:Thumb.png|image]] inside it!]] !! html/php
      This is a caption with another image inside it!
      !! html/parsoid
      This is a caption with another inside it!
      !! end !! test Image: caption containing a newline !! wikitext [[File:Foobar.jpg|This *is some text]] !! html/php

      This *is some text

      !! html/parsoid

      !!end !!test Image: caption containing leading space (The leading space should not trigger nowiki escaping in wt2wt mode) !! wikitext [[File:Foobar.jpg|thumb| bar]] !! html/php
      bar
      !! html/parsoid
      bar
      !!end # html/php output not have newlines after table, td, th, etc. because # Linker::makeThumbLink2() replaces the newlines with spaces since # the table is inside a caption. # FIXME: Verify if that circa 2004 fix is still required. !! test Image: caption containing a table !! options parsoid=wt2html,wt2wt,html2html !! wikitext [[Image:Foobar.jpg|thumb|200px|This is an example image thumbnail caption with a table {| !Foo!!Bar |- |Foo1||Bar1 |} and some more text.]] !! html/php
      This is an example image thumbnail caption with a table
      Foo Bar
      Foo1 Bar1
      and some more text.
      !! html/parsoid
      This is an example image thumbnail caption with a table
      FooBar
      Foo1 Bar1
      and some more text.
      !! end !! test T5090: External links other than http: in image captions !! wikitext [[File:Foobar.jpg|thumb|200x200px|This caption has [irc://example.net irc] and [https://example.com Secure] ext links in it.]] !! html/php
      This caption has irc and Secure ext links in it.
      !! html/parsoid
      This caption has irc and Secure ext links in it.
      !! end !! test Custom class !! options parsoid=wt2html,wt2wt,html2html !! wikitext [[Image:foobar.jpg|a|class=b]] !! html/php

      a

      !! html/parsoid

      !! end !! test Localized image handling (1). !! options parsoid=wt2html,wt2wt,html2html language=es !! wikitext [[Archivo:Foobar.jpg|izquierda|enlace=foo|caption]] !! html/php
      caption
      !! html/parsoid
      caption
      !! end !! test Localized image handling (2). !! options thumbsize=220 parsoid=wt2html,wt2wt,html2html language=es !! wikitext [[Archivo:Foobar.jpg|miniatura|izquierda|enlace=foo|caption]] !! html/php
      caption
      !! html/parsoid
      caption
      !! end !! test Localized image handling (3). !! options language=fa parsoid=html2wt !! html/parsoid
      !! wikitext [[File:Foobar.jpg|بندانگشتی]] !! end !! test "border", "frameless" and "class" attributes on an image. !! options thumbsize=220 parsoid=wt2html,wt2wt,html2html !! wikitext [[File:Foobar.jpg|frameless|border|class=extra|caption]] !! html/php

      caption

      !! html/parsoid

      !! end # Note that 'right' is the default alignment, despite the misspelled 'righ' below !! test Invalid image attributes (T64500) !! options thumbsize=220 parsoid=wt2html,wt2wt,html2html !! wikitext [[File:Foobar.jpg|thumb|float|left|caption]] [[File:Foobar.jpg|thumb|righ|caption]] [[File:Foobar.jpg|bogus1|thumb|bogus2|left|bogus3|caption]] !! html/php
      caption
      caption
      caption
      !! html/parsoid
      caption
      caption
      caption
      !! end !! article File:Barfoo.jpg !! text #REDIRECT [[File:Barfoo.jpg]] !! endarticle # FIXME: Parsoid should run this test -- but we'd need to teach the # mockAPI about the redirected Barfoo.jpg image. !! test Redirected image !! wikitext [[Image:Barfoo.jpg]] !! html/php

      File:Barfoo.jpg

      !! end !! test Missing image with uploads disabled !! options wgEnableUploads=0 !! wikitext [[File:Foobaz.jpg]] !! html/php

      File:Foobaz.jpg

      !! html/parsoid

      !! end # Parsoid-specific testing for images # https://www.mediawiki.org/wiki/Parsoid/MediaWiki_DOM_spec#Images # Currently imperfect due to a flaw in the Parsoid testrunner # Work in progress # THESE TESTS SHOULD BE MOVED UP and merged with the php-specific # image tests. !! test Parsoid-specific image handling - simple image with size and middle alignment !! wikitext [[File:Foobar.jpg|middle|50px]] !! html/parsoid

      !! end !! test Parsoid-specific image handling - simple image with size, middle alignment, non-standard namespace alias !! options parsoid=wt2wt,wt2html,html2html !! wikitext [[Image:Foobar.jpg|middle|50px]] !! html/parsoid

      !! end !! test Parsoid-specific image handling - simple image with size and middle alignment (existing content) !! wikitext [[File:Foobar.jpg|50px|middle]] !! html/parsoid

      !! end !! test Parsoid-specific image handling - simple image with size and middle alignment and non-standard namespace name !! options parsoid=wt2html,wt2wt,html2html !! wikitext [[Image:Foobar.jpg|50px|middle]] !! html/parsoid

      !! end !! test Parsoid-specific image handling - simple image with both sizes, a baseline alignment, and a caption !! wikitext [[File:Foobar.jpg|500x10px|baseline|caption]] !! html/parsoid

      !! end !! test Parsoid-specific image handling - simple image with border and size spec !! wikitext [[File:Foobar.jpg|50px|border|caption]] !! html/parsoid

      !! end !! test Parsoid-specific image handling - thumbnail with halign, valign, and caption !! wikitext [[File:Foobar.jpg|left|baseline|thumb|caption content]] !! html/parsoid
      caption content
      !! end !! test Parsoid-specific image handling - thumbnail with halign, valign, and caption (existing content) !! wikitext [[File:Foobar.jpg|thumb|left|baseline|caption content]] !! html/parsoid
      caption content
      !! end !! test Parsoid-specific image handling - thumbnail with specific size, halign, valign, and caption !! wikitext [[Image:Foobar.jpg|right|middle|thumb|50x50px|caption]] !! html/parsoid
      caption
      !! end !! test Parsoid-specific image handling - thumbnail with specific size, halign, valign, and caption (existing content) !! wikitext [[File:Foobar.jpg|thumb|50x50px|right|middle|caption]] !! html/parsoid
      caption
      !! end !! test Parsoid-specific image handling - framed image with specific size and caption (size is ignored) !! options parsoid=wt2html,wt2wt,html2html !! wikitext [[File:Foobar.jpg|frame|500x50px|caption]] !! html/parsoid
      caption
      !! end !! test Parsoid-specific image handling - framed image with specific size, halign, valign, and caption (size is ignored) !! options parsoid=wt2html,wt2wt,html2html !! wikitext [[File:Foobar.jpg|left|baseline|frame|500x50px|caption]] !! html/parsoid
      caption
      !! end !! test Parsoid-specific image handling - frameless image with specific size, border, and caption !! wikitext [[File:Foobar.jpg|frameless|442x50px|border|caption]] !! html/parsoid

      !! end !! test Parsoid-specific image handling - simple image with a formatted caption !! wikitext [[File:Foobar.jpg|
      ab
      c
      ]] !! html/parsoid

      !! end !! test Parsoid-specific image handling - caption with a template in it !! wikitext [[File:Foobar.jpg|thumb|200x23px|This caption has a {{echo|transclusion}} in it.]] !! html/parsoid
      This caption has a transclusion in it.
      !! end !! test Parsoid-specific image handling - caption with unbalanced tags in it !! options parsoid=wt2html,wt2wt,html2html !! wikitext foo [[File:Foobar.jpg|thumb|200x200px|This caption has a
      unbalanced tag in it.]] bar !! html/parsoid

      foo

      This caption has a
      unbalanced tag in it.

      bar

      !! end !! test Parsoid-specific image handling - empty caption (1) !! options parsoid=wt2html,wt2wt !! wikitext [[File:Foobar.jpg|thumb|]] !! html/parsoid
      !! end # empty captions don't get serialized unless we're in the "round trip" case !! test Parsoid-specific image handling - empty caption (2) !! options parsoid=html2wt !! html/parsoid
      !! wikitext [[File:Foobar.jpg|thumb]] !! end !! test Parsoid-specific image handling - whitespace caption !! wikitext [[File:Foobar.jpg|thumb| ]] !! html/parsoid
      !! end !! test Parsoid-specific image handling - lang option !! wikitext foo [[File:Foobar.svg|lang=de|caption]] bar !! html/parsoid

      foo bar

      !! end ## Edge case bugs in Parsoid from T93580 !! test T93580: 1. Templated inside block images !! wikitext [[File:Foobar.jpg|thumb|Caption with templated ref: {{echo|foo}}]] !! html/parsoid
      Caption with templated ref: [1]
      1. foo
      !! end !! test T93580: 2. inside inline images !! wikitext [[File:Foobar.jpg|Undisplayed caption in inline image with ref: foo]] !! html/parsoid

      1. foo
      !! end !! test T93580: 3. Templated inside inline images !! wikitext [[File:Foobar.jpg|Undisplayed caption in inline image with ref: {{echo|{{echo|foo}}}}]] !! html/parsoid

      1. foo
      !! 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]] [[{{echo|./../foo}}|bar]] [[{{echo|foo/.}}|bar]] [[{{echo|foo/..}}|bar]] [[{{echo|foo~~~~bar}}]] [[{{echo|foo>bar}}]] [[{{echo|foo././bar}}]] [[{{echo|foo{bar}}]] [[{{echo|foo}bar}}]] [[{{echo|foo[bar}}]] [[{{echo|foo]bar}}]] [[{{echo|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 ### ### 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 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:{{echo|Foo}}]] !! html/php [[Category:{{echo|Foo}}]] !! end !! test Category with template in sort key !! options cat pst !! wikitext [[Category:Foo|{{echo|Bar}}]] !! html/php [[Category:Foo|{{echo|Bar}}]] !! end !! test Category with template in sort key and title !! options cat pst !! wikitext [[Category:{{echo|Foo}}|{{echo|Bar}}]] !! html/php [[Category:{{echo|Foo}}|{{echo|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]] {{echo|[[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) {{echo|[[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 {{echo|[[Category:Foo]] and this should be part of the same list item}} !! html
      • 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]] !! html/parsoid
      • a
      • b
      !! 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 * {{echo|a [[Category:Foo]]}} !! html/parsoid
      • a
      !! end !! test 8. Categories and newlines: migrateTrailingCategories dom pass should not get tripped by intervening templates !! wikitext * a {{echo|[[Category:Foo]] [[Category:Bar]]}} [[Category:Baz]] !! html/parsoid
      • a
      !! end !! test 9. 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 10. 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 !! options parsoid !! wikitext [[:Category:Foo]] [[:Category:Foo|Bar]] !! html

      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 !! options parsoid !! wikitext [[:File:Foo.png]] [[:File:Foo.png|Bar]] !! html

      File:Foo.png Bar

      !! end !! test Parsoid: Serialize a genuine category link without colon escape !! options parsoid !! wikitext [[Category:Foo]] [[Category:Foo|Bar]] !! html !! 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 # 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 {{{{echo|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 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

      Contents

      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 !! test T3219 URL next to image (good) !! wikitext http://example.com [[File:Foobar.jpg]] !! html/php

      http://example.com Foobar.jpg

      !! html/parsoid

      http://example.com

      !!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 T3219 URL next to image (broken) !! wikitext http://example.com[[File:Foobar.jpg]] !! html/php

      http://example.comFoobar.jpg

      !! html/parsoid

      http://example.com

      !!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. # Probably we should use the synthetic or # extensions for this test, which are enabled when running parser tests. !! test Extension tag in attribute value !! wikitext ok !! html/php+disabled

      <span title="<translate>123</translate>">ok</span>

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

      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 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 ## Don't expect Parsoid and PHP to match, since PHP isn't exactly following ## the HTML5 parsing spec. !! 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+tidy

      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+tidy

      XYZ

      !! end !! test Nesting of !! wikitext XYZ !! html+tidy

      XYZ

      !! end !! test Nesting of !! wikitext XYZ !! html+tidy

      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 # 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 !! wikitext [[Media:Foobar.jpg|Safe Link
      " onmouseover="alert(document.cookie)" onfoo="
      ]] !! html/php Safe Link<div style="display:none">" onmouseover="alert(document.cookie)" onfoo="</div> !! html/php+tidy

      Safe Link

      " onmouseover="alert(document.cookie)" onfoo="
      !! html/parsoid

      Safe Link

      !! 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 Image link to nonexistent file (T3850 - good) !! wikitext [[File:No_such.jpg]] !! html/php

      File:No such.jpg

      !! html/parsoid

      !! end !! test :Image link to nonexistent file (T3850 - bad) !! wikitext [[:Image:No such.jpg]] !! html/php

      Image:No such.jpg

      !! html/parsoid

      Image:No such.jpg

      !! 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 !! test (T21451) Links should refer to the normalized form. !! wikitext [[אַ]] [[אַ]] [[אַ]] [[אַ]] [[אַ]] !! html

      אַ אַ אַ אַ

      !! 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 MSIE 6 CSS safety test: Fullwidth (T57332) !! wikitext

      A

      B
      !! html/php

      A

      B
      !! html/parsoid

      A

      B
      !! end !! test MSIE 6 CSS safety test: IPA extensions (T57332) !! wikitext
      A

      B

      !! html/php
      A

      B

      !! html/parsoid
      A

      B

      !! end !! test MSIE 6 CSS safety test: sup/sub script (T57332) !! wikitext
      A
      B

      C

      !! html/php
      A
      B

      C

      !! html/parsoid
      A
      B

      C

      !! end !! test Opera -o-link CSS !! options parsoid=wt2html,html2html !! wikitext
      X
      !! html/php
      X
      !! html/parsoid
      X
      !! end !! test MSIE 6 CSS safety test: Repetition markers (T57332) !! wikitext

      A

      B

      C

      D

      E

      F

      G

      !! html/php

      A

      B

      C

      D

      E

      F

      G

      !! html/parsoid

      A

      B

      C

      D

      E

      F

      G

      !! 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 sanity check) !! wikitext
      -
      !! html/php
      -
      !! html/parsoid
      -
      !! end !! test Expansion of multi-line templates in attribute values (T8255 sanity check 2) !! wikitext
      -
      !! html
      -
      !! end !! test Tags which are hidden from tidiers cannot pass through the Sanitizer !! wikitext !! html+tidy

      <mw:toc><script>alert();</script></mw:toc>

      !! end ### ### Parser hooks (see tests/parser/parserTestsParserHook.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
      !! 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/parserTestsParserHook.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 ### # Remex wraps empty tag runs with p-tags. # Parsoid strips them out during p-wrapping. !! test Sanitizer: Closing of open tags !! wikitext
      !! html/php+tidy

      !! html/parsoid
      !! end !! test Sanitizer: Closing of open but not closed tags !! wikitext foo !! html

      foo

      !! end !! test Sanitizer: Closing of closed but not open tags !! options parsoid=wt2html !! wikitext
      !! html/php+tidy

      !! html/parsoid !! end !! test Sanitizer: Closing of closed but not open table tags !! options parsoid=wt2html !! wikitext Table not started
      !! html+tidy

      Table not started

      !! end !! test Sanitizer: Escaping of spaces, multibyte characters, colons & other stuff in id="" !! 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 !! 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+tidy
      Centered text
      In div text
      !! end !! test Punctuation: nbsp before exclamation !! wikitext C'est grave ! !! html

      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+tidy
      • 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+tidy
      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+tidy
      • 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://

      Contents

      !! html/php+tidy

      onmouseover=[edit]

      http://

      Contents

      !! html/parsoid

      onmouseover=

      http://__TOC__

      !! end !! test Fuzz testing: Parser14-table !! options parsoid=wt2html,html2html !! wikitext ==a== {| STYLE=__TOC__ !! html

      a[edit]

      !! html+tidy

      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+tidy
      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

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

      !! end # 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/php+tidy

      http://example.com

      junk
      !! html/parsoid

      http://example.com

      junk
      !! end !! test Fuzz testing: image with bogus manual thumbnail !! wikitext [[Image:foobar.jpg|thumbnail= ]] !! html/php
      Error creating thumbnail:
      !! html/parsoid
      !! 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 sanity 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 and html2html will put the before the !! test 5 quotes, code coverage +1 line w/ nowiki (1) !! options parsoid=wt2wt,html2wt !! wikitext '''''''''' !! html/php

      !! html/parsoid

      !! end # same as previous, just swapping the and !! test 5 quotes, code coverage +1 line w/ nowiki (2) !! wikitext '''''''''' !! html/php

      !! html/parsoid

      !! 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 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 Gallery with valid attributes !! wikitext File:File:Foobar.jpg !! html/php !! html/parsoid !! end ## Parsoid thinks the "centre" here is a property, not a caption. !! test Gallery !! options parsoid={ "modes": ["wt2html"], "nativeGallery": true } !! wikitext image1.png | image2.gif||||| image3| image4 |300px| centre image5.svg| http:///////// [[x|xx]]]] * image6 !! html/php !! html/parsoid !! end !! test Gallery (with options, html) !! options parsoid={ "modes": ["wt2html", "html2html"], "nativeGallery": true } !! wikitext File:Nonexistent.jpg|caption File:Nonexistent.jpg image:foobar.jpg|some '''caption''' [[Main Page]] image:foobar.jpg image:foobar.jpg|Blabla|alt=This is a foo-bar.|blabla. !! html/php !! html/parsoid !! end !! test Gallery (with options, extsrc) !! options parsoid={ "nativeGallery": false } !! wikitext File:Nonexistent.jpg|caption File:Nonexistent.jpg image:foobar.jpg|some '''caption''' [[Main Page]] image:foobar.jpg image:foobar.jpg|Blabla|alt=This is a foo-bar.|blabla. !! html/php !! html/parsoid !! end !! test Gallery (without px units) !! wikitext File:Foobar.jpg !! html/php !! html/parsoid !! end !! test Gallery (with invalid units) !! wikitext File:Foobar.jpg !! html/php !! html/parsoid !! end !! test Gallery with link that has fragment !! options parsoid={ "modes": ["wt2html", "html2html"], "nativeGallery": true } !! wikitext image:foobar.jpg|link=Main_Page image:foobar.jpg|link=Main_Page#section image:foobar.jpg|link=Main Page#section|caption !! html/php !! html/parsoid !! end ## Whoops, Parsoid shouldn't be parsing templates in the attribute caption! !! test Gallery with template inside caption !! options parsoid={ "nativeGallery": true } !! wikitext File:Foobar.jpg|{{echo|ho}} !! html/php !! html/parsoid !! end !! test Gallery with wikitext inside caption !! options parsoid={ "nativeGallery": true } !! wikitext File:Foobar.jpg|alt=galleryalt|[[File:Foobar.jpg|alt=inneralt|20x20px|desc]] File:Foobar.jpg|alt=galleryalt|{{Test|unamedParam|alt=param}} !! html/php !! html/parsoid !! end !! test Gallery (with showfilename option) !! options parsoid={ "nativeGallery": true } !! wikitext File:Nonexistent.jpg|caption File:Nonexistent.jpg File:Foobar.jpg|some '''caption''' [[Main Page]] File:Foobar.jpg !! html/php !! html/parsoid !! end ## Should Parsoid be preserving these variations? See T151367 !! test Gallery (with namespace-less filenames) !! options parsoid={ "modes": ["wt2html", "html2html"], "nativeGallery": true } !! wikitext File:Nonexistent.jpg Nonexistent.jpg image:foobar.jpg foobar.jpg !! html/php !! html/parsoid !! end !! test Gallery override link with wikilink (T36852) !! options parsoid={ "nativeGallery": true } !! wikitext File:Foobar.jpg|alt=galleryalt|link=Wikilink !! html/php !! html/parsoid !! end !! test Gallery override link with absolute external link (T36852) !! options parsoid={ "nativeGallery": true } !! wikitext File:Foobar.jpg|alt=galleryalt|link=http://www.example.org !! html/php !! html/parsoid !! end !! test Gallery override link with absolute external link with LanguageConverter !! options language=zh !! wikitext File:foobar.jpg|caption|alt=galleryalt|link=http://www.example.org !! html/php !! html/parsoid !! end !! test Gallery override link with malicious javascript (T36852) !! options parsoid={ "modes": ["wt2html", "html2html"], "nativeGallery": true } !! wikitext File:Foobar.jpg|alt=galleryalt|link=" onclick="alert('malicious javascript code!'); !! html/php !! html/parsoid !! end # Note that parsoid uses the invalid link as a caption, PHP does not. !! test Gallery with invalid title as link (T45964) !! options parsoid={ "modes": ["wt2html", "html2html"], "nativeGallery": true } !! wikitext File:Foobar.jpg|link=< !! html/php !! html/parsoid !! end !! test Serialize gallery without attrs in data-mw !! options parsoid={ "modes": ["html2wt"], "nativeGallery": true } !! html/parsoid !! wikitext File:Test.png !! end !! test Gallery with class and style attributes !! options parsoid={ "nativeGallery": true } !! wikitext File:Foobar.jpg !! html/php !! html/parsoid !! end !! test Gallery in slideshow mode !! options parsoid={ "nativeGallery": true } !! wikitext File:Foobar.jpg !! html/php !! html/parsoid !! end !! 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. !! test Illegal character references (T106578) !! wikitext ; Null: � ; FF: ; CR: ; Control (low):  ; Control (high):  Ÿ ; Surrogate: �� ; This is an okay astral character: 💩 !! html+tidy
      Null
      &#00;
      FF
      &#xC;
      CR
      &#xD;
      Control (low)
      &#8;
      Control (high)
      &#x7F; &#x9F;
      Surrogate
      &#xD83D;&#xDCA9;
      This is an okay astral character
      💩
      !! 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

      RFC RFC 1234

      !! end !! test Double RFC with a wiki link !! wikitext RFC [[RFC 1234]] !! html

      RFC RFC 1234

      !! end !! test RFC code coverage !! wikitext RFC 983 987 !! html/php

      RFC 983 987

      !! html/parsoid

      RFC 983 987

      !! end !! test Centre-aligned image !! wikitext [[Image:foobar.jpg|centre]] !! html/php
      Foobar.jpg
      !! html/parsoid
      !! end !! test None-aligned image !! wikitext [[Image:foobar.jpg|none]] !! html/php
      Foobar.jpg
      !! html/parsoid
      !! end !! test Width + Height sized image (using px) (height is ignored) !! wikitext [[Image:foobar.jpg|640x480px]] !! html/php

      Foobar.jpg

      !! html/parsoid

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

      Foobar.jpg

      !! html/parsoid

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

      Foobar.jpg

      !! html/parsoid

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

      Foobar.jpg

      !! html/parsoid

      !! end !! test Image with page parameter !! options djvu !! wikitext [[File:LoremIpsum.djvu|page=2]] !! html/php

      LoremIpsum.djvu

      !! html/parsoid

      !! end !! test Another italics / bold test !! wikitext ''' ''x' !! html
      ' x'
      
      !!end # FIXME: The php output seems broken. It's interleaving some open/close tags. !! test dt/dd/dl test !! wikitext :;;;:: !! html/php
    !! html/parsoid
    !!end # Images with the "|" character in external URLs in comment tags; Eats half the comment, leaves unmatched "" tag. !! test Images with the "|" character in the comment !! wikitext [[File:Foobar.jpg|thumb|An [http://test/?param1=|left|¶m2=|x external] URL]] !! html/php
    An external URL
    !! html/parsoid
    An external URL
    !! 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

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

    L2

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

    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

    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

    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 !! 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%3A_&&]]_x

    !! html/parsoid

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

    +:.3A%3A_&&]]_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/php

    x</span>

    !! html/parsoid

    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 !! 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 !! 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 !! 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 !! 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 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 {{echo|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+tidy 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]] {{echo|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 {{echo|-{R|foo}-}} !! html/php

    foo

    !! html/parsoid

    !! end !! test T146305: Don't break image parsing if language converter markup is in the caption. !! options language=sr !! wikitext [[Датотека:Foobar.jpg|thumb|-{R|caption:}-]] !! html/php
    caption:
    !! html/parsoid
    !! end !! test T146305: Don't break image parsing if nested language converter markup is in the caption. !! options language=zh variant=zh-cn !! wikitext [[File:Foobar.jpg|thumb|-{|zh-cn:blog (hk: -{zh-hans|WEBJOURNAL}-, tw: -{zh-hans|WEBLOG}-)}-]] !! html/php
    blog (hk: WEBJOURNAL, tw: WEBLOG)
    !! html/parsoid
    !! end # XXX html2wt disabled because rich markup in alt is not preserved. !! test Don't break gallery if language converter markup is inside. !! options language=zh !! wikitext File:foobar.jpg|[[File:foobar.jpg|20px|desc|alt=-{R|foo}-|-{R|bar}-]]|alt=-{R|bat}- File:foobar.jpg|{{Test|unamedParam|alt=-{R|param}-}}|alt=galleryalt !! html/php !! 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+tidy
    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|{{echo|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 T179579: Nowiki and lc interaction !! options parsoid=wt2html language=sr !! wikitext -{
    123}- -{123|456}- !! 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 !! test T7678: Double-parsed template invocation !! wikitext {{lc:{{paramtest {{!}} param = hello }} }} !! html

    {{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. # Parsoid seems to do a better job here since its p-wrapper is probably smarter. !! test Nesting tags, paragraphs on lines which begin with
    !! wikitext
    A B !! html/php+tidy

    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
    !! html+tidy

    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
    !! html+tidy

    Line one

    Line two

    !! end # Parsoid's output is broken on this because of Tidy-compatibility cruft !! test T8200: paragraphs inside blockquotes (extra line break on close) !! wikitext
    Line one Line two
    !! html
    Line one

    Line two

    !! html+tidy

    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 # FIXME: Why does/should the blockquote+div combo suppress p-wrapping here? !! 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 replaceExternalLinks after early LinkHolderArray expansion !! options wgLinkHolderBatchSize=0 !! wikitext [[meatball:1]] [[meatball:2]] [[meatball:3]] !! html

    meatball:1 meatball:2 meatball:3

    !! end !! test Free external link invading image caption !! wikitext [[Image:Foobar.jpg|thumb|http://x|hello]] !! html/php
    hello
    !! html/parsoid
    hello
    !! 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 # # # # # 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 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

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

    !! end !! test Verify that displaytitle works (T24501) no displaytitle !! options showtitle !! config wgAllowDisplayTitle=true wgRestrictDisplayTitle=false !! wikitext this is not the the title !! html/php Parser test

    this is not the 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 the title {{DISPLAYTITLE:whatever}} !! html/php whatever

    this is not the 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 the title {{DISPLAYTITLE:whatever}} !! html/php Screen

    this is not the 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 the title {{DISPLAYTITLE:screen}} !! html/php screen

    this is not the the title

    !! end !! test Verify that displaytitle works (T24501) AllowDisplayTitle=false !! options showtitle title=[[Screen]] !! config wgAllowDisplayTitle=false !! wikitext this is not the the title {{DISPLAYTITLE:screen}} !! html/php Screen

    this is not the 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 the title !! html/php Screen

    this is not the 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 the title {{DISPLAYTITLE:screen}} !! html/php screen

    this is not the 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 the title {{DISPLAYTITLE:screen}} !! html/php screen

    this is not the 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 !! 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 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) !! wikitext [[User:+%]] [[Page+title%]] [[%+]] [[%+|%20]] [[%+ ]] [[%+r]] [[%]] [[+]] [[File:%+abc%39|foo|[[bar]]]] [[%33%45]] [[%33%45+]] !! html/php

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

    !! html/parsoid

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

    !! end !! test Special characters in embedded file links (T29679) !! wikitext [[File:Contains & ampersand.jpg]] [[File:Does not exist.jpg|Title with & ampersand]] !! html/php

    File:Contains & ampersand.jpg Title with & ampersand

    !! html/parsoid

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

    Contents

    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]] !! wikitext __TOC__ ==Image [[Image:foobar.jpg]]== !! html/php

    Contents

    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

    Contents

    Quote
    [edit]

    !! html/php+tidy

    Contents

    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

    Contents

    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/php+tidy

    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

    Contents

    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 Empty

    tag in TOC, removed by Sanitizer (T92892) !! wikitext __TOC__ ==x== !! html/php

    Contents

    x[edit]

    !! html/parsoid

    x

    !! end !! article MediaWiki:T34057 !! text == {{int:headline_sample}} == !! endarticle !! test T34057: Title needed when expanding nodes. !! options title=[[Main Page]] !! wikitext {{int:T34057}} !! html

    Headline text[edit]

    !! 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 Special parser function !! wikitext {{#special:RandomPage}} {{#special:BaDtItLe}} {{#special:Foobar}} !! html

    Special:Random Special:Badtitle Special:Foobar

    !! 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 {{echo|*a}} {{echo|#a}} {{echo|:a}} !! html
    • a
    1. a
    a
    !!end #### ----------------------------------------------------------------- #### Parsoid-specific functionality tests #### ----------------------------------------------------------------- # T65642/T68749: Formatting elt fixup around images is cleaned up. # We know wt2wt will fail, but we expect selser to pass. # Due to the nature of our testing, wt2wt and selser tests will enter the # blacklist and we'll catch selser regressions based on changes to the # blacklist entries for selser tests. !! test 1. Bad treebuilder fixup of formatting elt is cleaned up !! options parsoid=wt2html,wt2wt !! wikitext {| | [[Image:Foobar.jpg|right|Test]] |} !! html/parsoid
    Test
    !! end !! test 2. Bad treebuilder fixup of formatting elt is cleaned up !! options parsoid=wt2html,wt2wt !! wikitext '''foo[[File:Foobar.jpg|thumb|caption]]bar''' [[Image:Foobar.jpg|right|300px]] !! html/parsoid

    foo

    caption

    bar

    !! end !! test 3. Bad treebuilder fixup of formatting elt is cleaned up !! options parsoid=wt2html,wt2wt !! wikitext '''foo[[File:Foobar.jpg|thumb|caption]]bar''' !! html/parsoid

    foo

    caption

    bar

    !! end !! test 4. Bad treebuilder fixup of formatting elt is cleaned up: formatting tags around captionless images are ignored !! options parsoid=wt2html,wt2wt !! wikitext '''[[Image:Foobar.jpg|right|300px]]''' !! 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+tidy
    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 !! 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 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] [{{echo|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 #### --------------- 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 '''{{echo|[[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 -------------------------- #### 1. Leading whitespace in SOL context should be escaped #### ------------------------------------------------------ !! test 1. Leading whitespace in SOL context should be escaped !! 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 #### --------------- 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 #### --------------- 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 #### --------------- 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

    !! html/parsoid

    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 {| |- | |{{echo|style='color:red'}}|foo |} !! html
    foo
    !!end !!test Indented table with an empty td !! wikitext {| |- | |foo |} !! html
    foo
    !!end ## We have some newline diffs RT-ing this edge case ## and it is not important enough -- we seem to be emitting ## at most 2 newlines after a and this is unrelated to ## the issue from T85627 that this is testing. !!test Indented table with blank lines in between (T85627) !! options parsoid=wt2html !! wikitext {| |foo |} !! html
    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 # Parsoid-specific since PHP parser doesn't handle this mixed tbl-wikitext !!test Empty TR followed by a template-generated TR !!options parsoid !! wikitext {| |- {{echo|foo}} |} !! html
    foo
    !!end ## PHP and parsoid output differ for this, and since this is primarily ## for testing Parsoid's serializer, marking this Parsoid only !!test Empty TR followed by mixed-ws-comment line should RT correctly !!options parsoid !! wikitext {| |- |- |} !! html
    !!end !!test Multi-line image caption generated by templates with/without trailing newlines !! wikitext [[File:Foobar.jpg|thumb|300x300px|foo\n{{echo|A}}\n{{echo|B}}\n{{echo|C}}]] [[File:Foobar.jpg|thumb|300x300px|foo\n{{echo|A}}\n{{echo|B}}\n{{echo|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 !! wikitext x ''' ''x''' '' !! html/parsoid

    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 !!test 1. Ensure fostered text content is wrapped in element nodes !!options parsoid=wt2html !! wikitext hi
    ho
    !! html/parsoid

    hi

    ho

    !!end !!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/parsoid

    || ||

    a
    !!end !!test Encapsulation properly handles null DSR information from foster box !!options parsoid=wt2html,wt2wt !! wikitext {{echo|foo
    bar
    }} !! html/parsoid foo
    bar
    !!end !!test 1. Encapsulate foster-parented transclusion content !!options parsoid=wt2wt,wt2html !! wikitext {{echo|foo}}
    bar
    !! html/parsoid

    foo

    bar
    !!end !!test 2. Encapsulate foster-parented transclusion content !!options parsoid=wt2wt,wt2html !! wikitext
    {{echo|foo}}
    bar
    !! html/parsoid
    foo
    bar
    !!end !!test 3. Encapsulate foster-parented transclusion content !!options parsoid=wt2wt,wt2html !! wikitext

    {{echo|foo

    }}bar
    !! html/parsoid

    foo

    bar
    !!end !!test 4. Encapsulate foster-parented transclusion content !!options parsoid=wt2wt,wt2html !! wikitext

    {{echo|foo

    }}bar
    !! html/parsoid

    foo

    bar
    !!end !!test 5. Encapsulate foster-parented transclusion content !!options parsoid=wt2wt,wt2html !! wikitext foo}}

    {{echo|foo

    !! html/parsoid

    foo

    foo

    !!end !!test 6. Encapsulate foster-parented transclusion content !!options parsoid=wt2wt,wt2html !! wikitext foo

    {{echo|foo

    }}

    ok

    !! html/parsoid

    foo

    foo

    ok

    !!end !!test 7. Encapsulate foster-parented transclusion content !!options parsoid=wt2wt,wt2html !! wikitext {{echo|

    foo

    }}
    bar
    !! html/parsoid

    foo

    bar
    !!end # 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 {{echo|a }}{|{{echo|style='color:red'}} |- |b |} !! html/parsoid

    a

    {{{1}}}

    b
    !!end !!test 9. Encapsulate foster-parented transclusion content !!options parsoid=wt2wt,wt2html !! wikitext {{echo|hi
    hello}} !! html/parsoid

    hi

    hello

    !!end !!test Table in fosterable position !!options parsoid=wt2html !! wikitext {{OpenTable}}
    {| |}
    |} !! html/parsoid
    !!end # Parsoid only for T66747 !! test Properly encapsulate empty-content transclusions in fosterable positions !! wikitext {{#if:| }}
    foo
    !! html/parsoid
    !! end !! test Always encapsulate foster box when template range is expanded to table !! options parsoid=wt2wt !! wikitext {| hello {{OpenTable}} |} !! html/parsoid !! end !! test T115289: Unclosed table !! wikitext {{echo|}}[[Category:Two]] !! html/parsoid
    !! end !! test T115289: Don't migrate newlines out of tables with fostered content !! wikitext {{echo|[[Category:One]]}}[[Category:Two]] !! html/parsoid
    !! end !! test T73074: More fostering fun !! wikitext {{echo|}}[[Category:Two]] !! html/parsoid
    !! end !!test Support element with .data attribute !!options parsoid=html2wt !! html/parsoid !! wikitext !!end !! test 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 !! test Image: Modifying size of an image (1) !! options parsoid={ "modes": ["wt2wt"], "changes": [ ["img[height]", "attr", "height", "22"], ["img[width]", "attr", "width", "200"] ] } !! wikitext [[Image:Foobar.jpg|230x230px]] !! wikitext/edited [[Image:Foobar.jpg|200x200px]] !!end !! test Image: Modifying size of an image (2) !! options parsoid={ "modes": ["wt2wt"], "changes": [ ["img[height]", "attr", "height", "100"], ["img[width]", "attr", "width", "500"] ] } !! wikitext [[Image:Foobar.jpg|230x230px]] !! wikitext/edited [[Image:Foobar.jpg|500x500px]] !!end # Change in size is ignored so long as class='mw-default-size' !! test Image: Modifying size of an image (3) !! options parsoid={ "modes": ["wt2wt"], "changes": [ ["figure[class]", "removeClass", "mw-default-size"], ["figure img", "attr", "height", "19"], ["figure img", "attr", "width", "170"] ] } !! wikitext [[Image:Foobar.jpg|thumb]] !! wikitext/edited [[Image:Foobar.jpg|thumb|170x170px]] !!end !! test Image: Modifying alignment of an image (T50665) !! options parsoid={ "modes": ["wt2wt"], "changes": [ ["figure[class]", "removeClass", "mw-halign-right"], ["figure[class]", "addClass", "mw-halign-left"] ] } !! wikitext [[Image:Foobar.jpg|thumb|caption|right]] !! wikitext/edited [[Image:Foobar.jpg|thumb|caption|left]] !! end !! test Image: Modifying mw-default-size of an frameless image (T64805) !! options parsoid={ "modes": ["wt2wt"], "changes": [ ["figure.mw-default-size", "removeClass", "mw-default-size"] ] } !! wikitext [[Image:Foobar.jpg|frameless|right]] !! wikitext/edited [[Image:Foobar.jpg|frameless|right|220x220px]] !! end !! test Image: Modifying valign of an image (T51221) !! options parsoid={ "modes": ["wt2wt"], "changes": [ ["*[typeof=\"mw:Image\"]", "removeClass", "mw-valign-middle"], ["*[typeof=\"mw:Image\"]", "addClass", "mw-valign-text-top"] ] } !! wikitext [[File:Foobar.jpg|20px|middle]] !! wikitext/edited [[File:Foobar.jpg|20px|text-top]] !! end !! test Image: Modifying alt attribute of an image (T58400) !! options parsoid={ "modes": ["wt2wt"], "changes": [ ["img[alt]", "attr", "alt", "some alternate edited text"] ] } !! wikitext [[File:Foobar.jpg|thumb|some caption|alt=some alternate text]] !! wikitext/edited [[File:Foobar.jpg|thumb|some caption|alt=some alternate edited text]] !!end !! test Image: Modifying caption of an image !! options parsoid={ "modes": ["wt2wt"], "changes": [ ["figcaption", "text", "new caption"] ] } !! wikitext [[Image:Foobar.jpg|thumb|original caption]] !! wikitext/edited [[Image:Foobar.jpg|thumb|new caption]] !!end !! test Image: empty alt attribute (T50924) !! options parsoid !! wikitext [[File:Foobar.jpg|thumb|alt=|bar]] !! html
    bar
    !! end !! test Image: new attributes should be serialized in wiki's language for RTL languages (T53852) !! options parsoid=html2wt language=ar disabled !! html/parsoid
    !! wikitext [[Imagen:Foobar.jpg|derecha|miniaturadeimagen]] !! end !! test Image: Block level image should have \n before and after !! wikitext 123 [[File:Foobar.jpg|right|thumb|150x150px]] 456 !! html/parsoid

    123

    456

    !! end !! test Image: New block level image should have \n before and after (existing content) !! wikitext 123 [[File:Foobar.jpg|right|thumb|150x150px]] 456 !! html/parsoid

    123

    456

    !! end !! test Image: upright option (parsoid) !! wikitext [[File:Foobar.jpg|thumb|upright|caption]] [[File:Foobar.jpg|thumb|upright=0.5|caption]] [[File:Foobar.jpg|thumb|500x500px|upright=0.5|caption]] !! html/parsoid
    caption
    caption
    caption
    !! end !! test Image: upright option is ignored on inline and frame images (parsoid) !! wikitext [[File:Foobar.jpg|500x500px|upright=0.5|caption]] !! html/parsoid

    !! end !! test Image: in template parameter with empty parameter !! wikitext {{echo|[[File:Foobar.jpg|link=]]}} !! html/parsoid

    !! end !! test Image: from basic HTML (1) !! options parsoid=html2wt !! html/parsoid Alt !! wikitext [[File:Foobar.jpg|link=|alt=Alt|100x100px]] !! end !! test Image: from basic HTML (2) !! options parsoid=html2wt !! html/parsoid Alt !! wikitext [[File:Foobar.jpg|link=|alt=Alt|100x100px]] !! end !! test Image: from basic HTML (3) !! options parsoid=html2wt !! html/parsoid Alt !! wikitext [[File:Foobar.jpg|link=Main|alt=Alt|100x100px]] !! end !! test Image: from basic HTML (4) !! options parsoid=html2wt !! html/parsoid !! wikitext [[File:Foobar.jpg|link=]] !! end !! test Image: Invalid title as link !! wikitext [[File:Foobar.jpg|link=<]] !! html/php

    link=<

    !! html/parsoid

    !! 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 Nowiki-wrap 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 1. Headings: Force sol-transparent links and behavior switches to serialize before/after !! options parsoid={ "modes": ["html2wt"], "scrubWikitext": false } !! html/parsoid

    hello there

    hi pal

    how goes it

    it goes well

    howdy

    ok

    !! wikitext == hello there [[Category:A1]] == == [[Category:A2]] hi pal == == [[Category:A3]] how goes it == == it goes well [[Category:A4]] == ==howdy [[Category:A5]]== == __TOC__ ok == !! end !! test 2. Headings: Force sol-transparent links and behavior switches to serialize before/after !! options parsoid={ "modes": ["html2wt"], "scrubWikitext": true } !! 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"], "scrubWikitext": true } !! html/parsoid

    foo

    !! wikitext == {{echo|foo [[Category:Foo]]}} == !! end !! test Headings: Category in ref isn't hoisted !! options parsoid={ "modes": ["html2wt"], "scrubWikitext": true } !! 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 {{echo|1=f=oo}} {{echo|1=f=oo|2=bar}} {{echo|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 {{echo|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 !! test Serialize new placeholder space without spans !! options parsoid=html2wt !! html/parsoid

    foo : bar

    foo : bar

    [1]ok

    !! wikitext foo : bar foo : bar foo : barok !! 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''{{echo|''B''}} ''A''{{echo|'''''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"], "scrubWikitext": true } !! 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"], "scrubWikitext": true } !! html/parsoid Football !! wikitext [[Football|''Football'']] !! end !! test 3. Don't merge adjacent link nodes if scrubWikitext is false !! options parsoid={ "modes": ["html2wt"], "scrubWikitext": false } !! html/parsoid Football !! wikitext [[Football|Foot]][[Football|ball]] !! 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 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+tidy

    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 Magic links inside image captions (autolinked) !! wikitext [[File:Foobar.jpg|thumb|http://example.com]] [[File:Foobar.jpg|thumb|RFC 1234]] [[File:Foobar.jpg|thumb|PMID 1234]] [[File:Foobar.jpg|thumb|ISBN 123456789x]] !! html+tidy !! html/parsoid
    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+tidy
    - -
    - -
    -

    -


    -

    !! 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 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 {{echo|hi}}[http://example.com [[ho]]] !! html/parsoid

    hiho

    !! end !! test Catch regression when unpacking with trailing content !! wikitext {{echo|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 {{echo|a}} {|{{echo|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
      {| {{echo|
      boo
      {{!}}b}} |c |} !! wikitext/edited
      new
      {| {{echo|
      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 {{echo|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 Unicode directional formatting characters will get stripped. !! test RTL (\u200f) and LTR (\u200e) markers around category tags should be stripped !! options parsoid={ "modes": ["html2wt"], "scrubWikitext": true } !! 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"], "scrubWikitext": true } !! 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"], "scrubWikitext": true } !! html/parsoid

      ok

      !! wikitext [[Category:A2]] == ok == !! end !! test 1. Headings: suppress newly created empty headings !! options parsoid={ "modes": ["html2wt"], "scrubWikitext": true } !! html/parsoid

      !! wikitext !! end !! test 2. Headings: don't suppress empty headings if scrubWikitext is false !! options parsoid=html2wt !! html/parsoid

      !! wikitext ==== !! end !! test 3. Headings: suppress empty headings on edits !! options parsoid={ "modes": ["selser"], "scrubWikitext": true, "changes": [ [ "#x", "remove"] ] } !! wikitext ==foo== !! wikitext/edited !! end !! test Headings: Replace
      with a single whitespace char (when scrubWikitext = true) !! options parsoid={ "modes": ["html2wt"], "scrubWikitext": true } !! html/parsoid

      foo
      bar

      foo
      bar
      baz

      !! wikitext == foo bar == == foo bar baz == !! end !! test Headings: Replace
      with a single whitespace char (when scrubWikitext = false) !! options parsoid={ "modes": ["html2wt"], "scrubWikitext": false } !! html/parsoid

      foo
      bar

      !! wikitext == foo
      bar == !! end !! test 1. WT Quote Tags: suppress newly created empty style tags !! options parsoid={ "modes": ["html2wt"], "scrubWikitext": true } !! html/parsoid !! wikitext !! end !! test 2. WT Quote Tags: don't suppress empty style tags if scrubWikitext is false !! options parsoid=html2wt !! html/parsoid !! wikitext '''''''''' !! end !! test 3. WT Quote Tags: suppress empty style tags on edits !! options parsoid={ "modes": ["selser"], "scrubWikitext": true, "changes": [ [ "#x", "remove"] ] } !! wikitext '''foo''' !! wikitext/edited !! end !! test 1. Anchors: suppress newly created empty anchors !! options parsoid={ "modes": ["html2wt"], "scrubWikitext": true } !! html/parsoid !! wikitext !! end !! test 2. Anchors: don't suppress empty anchors if scrubWikitext is false !! options parsoid={ "modes": ["html2wt"], "scrubWikitext": false } !! html/parsoid !! wikitext [[Test|]] !! end !! test 3. Anchors: suppress empty anchors on edits !! options parsoid={ "modes": ["selser"], "scrubWikitext": true, "changes": [ [ "#x", "remove"] ] } !! wikitext [[Test|foo]] !! wikitext/edited !! end !! test 3a. Anchors: do not suppress numbered extlinks !! options parsoid={ "modes": ["wt2wt"], "scrubWikitext": true } !! wikitext [http://foo.com] !! html/parsoid !! end !! test 3b. Anchors: do not suppress numbered extlinks !! options parsoid={ "modes": ["wt2wt"], "scrubWikitext": true, "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"], "scrubWikitext": true, "changes": [ [ "h1", "before", ""] ] } !!wikitext a = = b !!wikitext/edited a = = b !!end !! test 1. Multiple normalizations (html2wt) !! options parsoid={ "modes": ["html2wt"], "scrubWikitext": true } !! html

      foo x

      !! wikitext [[foo]] x !! end !! test 2. Multiple normalizations (selser) !! options parsoid={ "modes": ["selser"], "scrubWikitext": true, "changes": [ [ "#x", "after", "

      \n

      x

      "] ] } !! wikitext foo !! wikitext/edited foo x !! end !! test 1. Indent Pre Nowiki: suppress whitespace at the start of new paragraph !! options parsoid={ "modes": ["html2wt"], "scrubWikitext": true } !! html/parsoid

      hi

      hello

      !! wikitext hi hello !! end !! test 2. Indent Pre Nowiki: don't suppress whitespace at the start of new paragraph if scrubWikitext is false !! options parsoid=html2wt !! html/parsoid

      hi

      hello

      !! wikitext hi hello !! end !! test 3. Indent Pre Nowiki: suppress whitespace after newlines in new paragraph or table cell !! options parsoid={ "modes": ["html2wt"], "scrubWikitext": true } !! 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 4. Indent Pre Nowiki: suppress leading whitespace in edited paragraphs !! options parsoid={ "modes": ["selser"], "scrubWikitext": true, "changes": [ [ "p", "html", " a\n b" ] ] } !! wikitext xyz !! wikitext/edited a b !! end !! test 1. New links that end in spaces !! options parsoid={ "modes": ["html2wt"], "scrubWikitext": false } !! 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 2. New links that end in spaces !! options parsoid={ "modes": ["html2wt"], "scrubWikitext": true } !! 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"], "scrubWikitext": false } !! html
      a
      -
      +
      !! wikitext {| |a |- |- |- |+ |} !! end !! test 2. Table cells with escapable prefixes !! options parsoid={ "modes": ["html2wt"], "scrubWikitext": true } !! html
      a
      -
      +
      !! wikitext {| |a |- | - |- | + |} !! end !! test 3a. Table cells with escapable prefixes after edits !! options parsoid={ "modes": ["selser"], "scrubWikitext": true, "changes": [ [ "table tbody tr:first-child td:first-child", "remove"] ] } !! wikitext {| |a||- |} !! wikitext/edited {| | - |} !! end !! test 3b. Table cells with escapable prefixes after edits !! options parsoid={ "modes": ["selser"], "scrubWikitext": true, "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 4a. Table cells without escapable prefixes after edits !! options parsoid={ "modes": ["selser"], "scrubWikitext": true, "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 4b. Table cells without escapable prefixes after edits !! options parsoid={ "modes": ["selser"], "scrubWikitext": true, "changes": [ [ "td", "html", "-" ] ] } !! wikitext {| |a||b |} !! wikitext/edited {| | -||- |} !! end ## This tests normalizer's ability to not be tripped by ## comments (and whitespace) !! test 4c. Table cells without escapable prefixes after edits !! options parsoid={ "modes": ["selser"], "scrubWikitext": true, "changes": [ [ "table tbody tr td:first-child", "remove" ] ] } !! wikitext {| |- |a||- |} !! wikitext/edited {| |- | - |} !! end ## This tests normalizer's ability to handle HTML cells !! test 4d. Table cells without escapable prefixes after edits !! options parsoid={ "modes": ["selser"], "scrubWikitext": true, "changes": [ [ "td", "html", "-" ] ] } !! wikitext
      a
      !! wikitext/edited
      -
      !! end ## T111151 Remove font elements without attributes !! test 5a. font tags without attributes should be dropped in scrubWikitext mode !! options parsoid={ "modes": ["html2wt"], "scrubWikitext": true } !! html foo bar boo !! wikitext foo bar boo !! end !! test 5b. font tags should not be dropped without scrubWikitext being enabled !! options parsoid={ "modes": ["html2wt"], "scrubWikitext": false } !! html foo !! wikitext foo !! end !! test Escape nowiki DOM elements !! options parsoid=html2wt !! html/parsoid foo !! wikitext <nowiki>''foo''</nowiki> !! end # This is meant to be an interim fix while we go about figuring out # how to not introduce these trailing s in the first place. !! test T115717: Strip trailing s (without affecting valid uses) !! options parsoid=html2wt !! html/parsoid

      x y

      !! wikitext x y {{echo| 1 = }} {{echo| 1 = }} !! 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 # --------------------------------------------------- # 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 {{echo|foo}} !! 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+tidy
      • a
      • b
      !! end !! test Thumbnail output !! wikitext [[File:Thumb.png|thumb]] !! html/php+tidy
      Thumb.png
      !! html/parsoid
      !! 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+tidy
      !! end !! 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

      !! 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 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 T179544: {{anchorencode:}} output should be always usable in links !! config wgFragmentMode=[ 'html5' ] !! wikitext [[#{{anchorencode:[foo]}}]] !! html/php

      #[foo]

      !! html/parsoid

      #[foo]

      !! end ## ------------------------------ ## Parsoid section-wrapping tests ## ------------------------------ !! test Section wrapping for well-nested sections (no leading content) !! options parsoid={ "wrapSections": true } !! wikitext =1= a =2= b ==2.1== c ==2.2== d ===2.2.1=== e =3= f !! html/parsoid

      1

      a

      2

      b

      2.1

      c

      2.2

      d

      2.2.1

      e

      3

      f

      !! end !! test Section wrapping for well-nested sections (with leading content) !! options parsoid={ "wrapSections": true } !! wikitext Para 1. Para 2 with a
      nested in it
      Para 3. =1= a =2= b ==2.1== c !! html/parsoid

      Para 1.

      Para 2 with a

      nested in it

      Para 3.

      1

      a

      2

      b

      2.1

      c

      !! end !! test Section wrapping with template-generated sections (good nesting 1) !! options parsoid={ "wrapSections": true } !! wikitext =1= a {{echo|1= ==1.1== b }} ==1.2== c =2= d !! html/parsoid

      1

      a

      1.1

      b

      1.2

      c

      2

      d

      !! end # In this example, the template scope is mildly expanded to incorporate the # trailing newline after the transclusion since that is part of section 1.1.1 !! test Section wrapping with template-generated sections (good nesting 2) !! options parsoid={ "wrapSections": true, "modes": ["wt2html", "wt2wt"] } !! wikitext =1= a {{echo|1= ==1.1== b ===1.1.1=== d }} =2= e !! html/parsoid

      1

      a

      1.1

      b

      1.1.1

      d

      2

      e

      !! end # In this example, the template scope is mildly expanded to incorporate the # trailing newline after the transclusion since that is part of section 1.2.1 !! test Section wrapping with template-generated sections (good nesting 3) !! options parsoid={ "wrapSections": true, "modes": ["wt2html", "wt2wt"] } !! wikitext =1= a {{echo|1= x ==1.1== b ==1.2== c ===1.2.1=== d }} =2= e !! html/parsoid

      1

      a

      x

      1.1

      b

      1.2

      c

      1.2.1

      d

      2

      e

      !! end # Because of section-wrapping and template-wrapping interactions, # the scope of the template is expanded so that the template markup # is valid in the presence of
      tags. # This exercises the s1 is null scenario in the wrapSections code !! test Section wrapping with template-generated sections (bad nesting 1) !! options parsoid={ "wrapSections": true } !! wikitext
      a {{echo| =1= b }} c
      !! html/parsoid

      a

      1

      b

      c

      !! end # Because of section-wrapping and template-wrapping interactions, # the scope of the template is expanded so that the template markup # is valid in the presence of
      tags. # This exercises the s1 is ancestor of s2 scenario in the wrapSections code !! test Section wrapping with template-generated sections (bad nesting 2) !! options parsoid={ "wrapSections": true } !! wikitext =1= a {{echo|1= =2= b ==2.1== c }} d =3= e !! html/parsoid

      1

      a

      2

      b

      2.1

      c

      d

      3

      e

      !! end # Because of section-wrapping and template-wrapping interactions, # additional template wrappers are added to
      tags # so that template wrapping semantics are valid whether section # tags are retained or stripped. But, the template scope can expand # greatly when accounting for section tags. # This exercises the s1 and s2 are in different subtrees scenario !! test Section wrapping with template-generated sections (bad nesting 3) !! options parsoid={ "wrapSections": true, "modes": ["wt2html", "wt2wt"] } !! wikitext =1= a {{echo|1= ==1.2== b =2= c }} d =3= e !! html/parsoid

      1

      a

      1.2

      b

      2

      c

      d

      3

      e

      !! end !! test Section wrapping with uneditable lead section + div wrapping multiple sections !! options parsoid={ "wrapSections": true } !! wikitext foo
      =1= a ==1.1== b =2= c
      =3= d ==3.1== e !! html/parsoid

      foo

      1

      a

      1.1

      b

      2

      c

      3

      d

      3.1

      e

      !! end !! test Section wrapping with editable lead section + div overlapping multiple sections !! options parsoid={ "wrapSections": true } !! wikitext foo =1= a
      b ==1.1== c =2= d
      e =3= f ==3.1== g !! html/parsoid

      foo

      1

      a

      b

      1.1

      c

      2

      d

      e

      3

      f

      3.1

      g

      !! end !! test HTML header tags should not be wrapped in section tags !! options parsoid={ "wrapSections": true } !! wikitext foo

      a

      =b=

      c

      =d= !! html/parsoid

      foo

      a

      b

      c

      d

      !! end !! test Lead section containing only whitespace and comments. !! options parsoid={ "wrapSections": true } !! wikitext =1= a =2= b !! html/parsoid

      1

      a

      2

      b

      !! end !! test Pseudo-sections emitted by templates should have id -2 !! options parsoid={ "wrapSections": true } !! wikitext foo {{echo|
      ==a== ==b==
      }} !! html/parsoid

      foo

      a

      b

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

      Spaces[edit]

      Tabs[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
      !! end # Looks like is not accepted in HTML !! test Do not trim whitespace in HTML headings, list items, table captions, headings, and cells !! wikitext __NOTOC__

      Heading

      • List item
      Table Heading
      Table Cell
      !! html/php+tidy

      Heading

      • List item
      Table Heading
      Table Cell
      !! end !! test Do not trim whitespace in links and quotes !! wikitext foo '' italic '' and ''' bold ''' [[Foo| some text ]] !! html/php+tidy

      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"], "scrubWikitext": true, "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 Check soft hyphens as entities (­) in displaytitle (T66528) !! options showtitle title=[[Lopadotemachoselachogaleokranioleipsanodrimhypotrimmatosilphioparaomelitokatakechymenokichlepikossyphophattoperisteralektryonoptekephalliokigklopeleiolagoiosiraiobaphetraganopterygon]] !! wikitext {{DISPLAYTITLE:Lopado­temacho­selacho­galeo­kranio­leipsano­drim­hypo­trimmato­silphio­parao­melito­katakechy­meno­kichl­epi­kossypho­phatto­perister­alektryon­opte­kephallio­kigklo­peleio­lagoio­siraio­baphe­tragano­pterygon}} !! html/php Lopado­temacho­selacho­galeo­kranio­leipsano­drim­hypo­trimmato­silphio­parao­melito­katakechy­meno­kichl­epi­kossypho­phatto­perister­alektryon­opte­kephallio­kigklo­peleio­lagoio­siraio­baphe­tragano­pterygon !! end !! test Check soft hyphens as Unicode characters (U+00AD) in displaytitle (T66528) !! options showtitle title=[[Lopadotemachoselachogaleokranioleipsanodrimhypotrimmatosilphioparaomelitokatakechymenokichlepikossyphophattoperisteralektryonoptekephalliokigklopeleiolagoiosiraiobaphetraganopterygon]] !! wikitext {{DISPLAYTITLE:Lopado­temacho­selacho­galeo­kranio­leipsano­drim­hypo­trimmato­silphio­parao­melito­katakechy­meno­kichl­epi­kossypho­phatto­perister­alektryon­opte­kephallio­kigklo­peleio­lagoio­siraio­baphe­tragano­pterygon}} !! html/php Lopado­temacho­selacho­galeo­kranio­leipsano­drim­hypo­trimmato­silphio­parao­melito­katakechy­meno­kichl­epi­kossypho­phatto­perister­alektryon­opte­kephallio­kigklo­peleio­lagoio­siraio­baphe­tragano­pterygon !! end