# 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:CircularRef !! text {{CircularRef}} !! endarticle !! article Template:With: Colon !! text Template with colon !! endarticle ### ### Basic tests ### !! test Blank input !! wikitext !! html !! end !! test CircularRef !! wikitext {{CircularRef}} !! html/parsoid

[1]

  1. Error: Expansion loop detected at Template:CircularRef
!! 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 !! wikitext == A B C == !! html

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 # Note that the html+tidy output removes the spaces after the
  • , # which is a bug (https://sourceforge.net/p/tidy/bugs/945/, etc). # This is an issue for all tests with lists. We intentionally do # *not* add html+tidy clauses for these, as we don't want to # document/test the broken behavior. (Parsoid matches the non-tidy # output in these cases.) !! test Simple list !! wikitext * Item 1 * Item 2 !! html
    • Item 1
    • Item 2
    !! 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
    • plain
    • plainitalicplain
    • plainitalicplainitalicplain
    • plainboldplain
    • plainboldplainboldplain
    • plainitalicplainboldplain
    • plainboldplainitalicplain
    • plainitalicbold-italicitalicplain
    • plainboldbold-italicboldplain
    • plainbold-italicitalicplain
    • plainbold-italicboldplain
    • plainitalicbold-italicplain
    • plainboldbold-italicplain
    • plain l'italicplain
    • plain l'bold plain
    !! 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 Parsoid only: Quote balancing context should be restricted to td/th cells on the same wikitext line (Requires tidy for PHP parser output to be fixed up) !! options parsoid=wt2html,wt2wt !! wikitext {| !''a!!''b |''a||''b |} !! html/php+tidy
    a b a b
    !! html/parsoid
    ab ab
    !! 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 # There is a tidy bug here: https://sourceforge.net/p/tidy/bugs/946/ # If the non-word-character tag made it through the sanitizer, tidy # would munge it up. !! test Non-word characters don't terminate tag names + tidy !! 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 !! 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 # Tidy strips out the empty
    tags. Parsoid doesn't. # So, we have a separate section for Parsoid. We don't want # to mimic this stripping behavior in Parsoid. It affects # editing experience and also requires us to maintain additional # info for RT-ing. !! 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 ## PHP parser emits output which is broken !! 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 ### ### 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 # Note that the p-wrapping is newline sensitive, which could be # considered a bug: tidy will wrap only the 'Foo' in the example # below in a

    tag. (see comment 23-25 of T8200) !! 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 # Parsoid doesn't strip empty tags, like Tidy does. !! test Empty pre; pre inside other HTML tags (T56946) !! wikitext a
    foo
    
    
    !! html/php
    

    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 # Note that tidy removes the empty

    tags from the start and end. # Parsoid does not, by design. !! 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 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+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+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 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) !! options parsoid !! wikitext ;t1 :d1 ;;t2 ::d2 ;;;t3 :::d3 !! html
    t1
    d1
    t2
    :d2
    t3
    ::d3
    !! end !! test Definition Lists: Nesting: Test 2 (Parsoid only) !! wikitext ;t1 ::d2 !! html/php+tidy
    t1
    d2
    !! html/parsoid
    t1
    d2
    !! end !! test Definition Lists: Nesting: Test 3 (Parsoid only) !! wikitext :;t1 ::::d2 !! html/php+tidy
    t1
    d2
    !! html/parsoid
    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 # This is a regression test for T175099 # html/php+tidy is insufficient since Tidy covers up the bug. # But once Tidy is replaced with RemexHTML, html/php+tidy is good enough !! test Definition Lists: Mixed Lists: Test 11 !! wikitext ; a :* b !! html/*
      a
      • b
      !! end # The Parsoid team disagrees with the PHP parser's seemingly-random # rules regarding dd/dt on the next two tests. Parsoid is more # consistent, and recognizes the shared nesting and keeps the # still-open tags around until the nesting is complete. # (And tidy again converts
      to
      before 'bar'.) !! 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 # Another case where tidy converts a
    to a
    (but Parsoid doesn't). # 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
        1. 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 !! test Definition Lists: colons and tables 1 !! wikitext :{| | x |} :{| | y |} !! html
    x
    y
    !! end # Parsoid's output (as documented below) differs from php's in this case. # This is probably a bug. If we fixup parsoid to match php's output, the # above test should pass and the below test case can be removed. It is # unclear which output is more desirable. !! test Definition Lists: colons and tables 2 !! wikitext :{| | x |} :{| | y |} !! html/parsoid
    x
    y
    !! end !! 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 !! test External links: with no contents !! 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 !! test External links: wiki links within external link (T5695) !! options parsoid=wt2html,html2html !! wikitext [http://example.com [[wikilink]] embedded in ext link] !! html/php

    wikilink embedded in ext link

    !! html/parsoid

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

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

    !! html/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]] [[wikipedia:Foo|Bar]] [[wikipedia:Foo|Bar]] [[wikipedia:European_Robin|European Robin]] [[wikipedia: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+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 here foo
    !! 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 Implicit after a |- !! options parsoid=wt2html,html2html !! wikitext {| |- a |} !! html/php a
    !! html/php+tidy

    a

    !! html/parsoid

    a

    !! end !! test Lists should be recognized in an implicit context !! options parsoid=wt2html,html2html !! wikitext {| |- *a |} !! html/php
    • a
    !! html/php+tidy
    • a
    !! html/parsoid
    • a
    !! end !! test Table cells not properly parsed in an implicit-td context !! 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
    a b
    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) !! 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 !! wikitext [[%23%3c]][[%23%3e]] !! html/php

    #<#>

    !! html/parsoid

    #<#>

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

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

    Foo#<bar>

    !! html/parsoid

    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 !! test Interwiki link encoding conversion (T3636) !! wikitext *[[Wikipedia:ro:Olteniţa]] *[[Wikipedia:ro:Olteniţa]] !! html !! html+tidy !! end !! test Interwiki link with fragment (T4130) !! wikitext [[MeatBall:SoftSecurity#foo]] !! html

    MeatBall:SoftSecurity#foo

    !! end !! test Link scenarios with escaped fragments !! 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 # 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 !! 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 !! 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 !! 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
      !!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 !!test Test the li-hack (The PHP parser relies on Tidy for the hack) !!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) # ------------------------------------------------------------------------ !! test Unbalanced closing block tags break a list (php parser relies on Tidy to fix up) !! wikitext
      *a
      *b
      !! html+tidy
      • a
      • b
      !! end # Parsoid fails this test, but it might be tricky to support properly. # See T70395. !! test Unbalanced closing non-block tags don't break a list (php parser relies on Tidy to fix up) !! wikitext *a *b !! html/php+tidy
      • a
      • b
      !! html/parsoid
      • a
      • b
      !! end !! test Unclosed formatting tags that straddle lists are closed and reopened (php parser relies on Tidy to fix up) !! options parsoid=wt2html,wt2wt,html2html !! wikitext # a # b !! html/php+tidy
      1. a
      2. b
      !! html/parsoid
      1. a
      2. b
      !! end # See T70395. !!test 1. List embedded in a formatting tag !! wikitext * foo !! html/php+tidy
      • foo
      !! html/parsoid
      • foo
      !!end ## Ugly Parsoid output here ## Not sure what the right output is. !!test 2. List embedded in a formatting tag !! wikitext *a *b !! html/php+tidy
      • a
      • b
      !! html/parsoid
      • a
      • b
      !!end # Ugly Parsoid and PHP parser output here # Not sure if we want to make this a test! # ## !!test ## 3. Unclosed formatting tags in list elements ## !! wikitext ## *a ## *b ## !! html/php+tidy ##
        ##
      • a
      • ##
      • b
      • ##
      ## !! html/parsoid ##
        ##
      • a
      • ## ##
      • b
      • ##
      ## !!end # This is a bug in the PHP parser + tidy combination. # (The tag gets parsed as text and html-escaped by PHP, # and then fostered out of the table by tidy.) # We believe the Parsoid output to be correct. !! 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/php

      'foo & bar = baz'

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

      *RFC 1234 http://example.com/

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

      *RFC_1234_http://example.com/

      !! 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[//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 # 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 | three four three four testing="two" | three four
      !! 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 !! 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 ### ### 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+tidy

      a

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

      foo

      !! html+tidy

      foo

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

      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: 1. Navbox template parses badly leading to table misnesting (Parsoid-centric) !! options parsoid !! wikitext {| |{{echo|foo}} |bar |} !! html
      foo
      |bar |} !!end !!test Templates: Ugly templates: 2. Navbox template parses badly leading to table misnesting (Parsoid-centric) !! options parsoid !! wikitext
      1. {{echo|foo
      }}
      bar 2. {{echo|baz
      }} abc xyz !! html
      1. foo
      bar 2. baz
      abc xyz !!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 figure-inline 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

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

      Foobar.jpg

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

      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 ################### # 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 !! 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
      Foo Bar
      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 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 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' !! test Handling of sections up to level 6 and beyond !! 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

      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]
      !! 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 !! test Short headings with trailing space should match behavior of Parser::doHeadings (T21910) !! wikitext === The line above must have a trailing space! === But just in case it doesn't... !! html

      =[edit]

      The line above must have a trailing space!

      =[edit]

      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

      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

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

      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

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

      foo=[edit]

      =foo[edit]

      italic heading=[edit]

      =italic heading[edit]

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

      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

      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 !! options parsoid=wt2html,html2html !! wikitext
      HTML rocks
      !! html/php
      HTML rocks
      !! html/parsoid
      HTML rocks
      !! end !! test table with multiple empty attribute values !! options parsoid=wt2html,html2html !! wikitext {| title= id= | hi |} !! html/php
      hi
      !! html/parsoid
      hi
      !! end !! test div with braces in attribute value !! wikitext
      Foo
      !! html/php
      Foo
      !! html/parsoid
      Foo
      !! end !! test div with empty attribute value, no space before equals !! options parsoid=wt2html,html2html !! wikitext
      HTML rocks
      !! html/php
      HTML rocks
      !! html/parsoid
      HTML rocks
      !! end !! test HTML multiple attributes correction !! wikitext

      Awesome!

      !! html

      Awesome!

      !!end !! test Table multiple attributes correction !! wikitext {| !+ class="error" class="awesome"| status |} !! html
      status
      !!end !! test DIV IN UPPERCASE !! wikitext
      HTML ROCKS
      !! html
      HTML ROCKS
      !!end !! test Non-ASCII pseudo-tags are rendered as text !! wikitext !! html

      <khyô>

      !! end !! test Pseudo-tag with URL 'name' renders as url link !! wikitext !! html

      <http://example.com/>

      !! end !! test text with amp in the middle of nowhere !! wikitext Remember AT&T? !! html

      Remember AT&T?

      !! end !! test text with character entity: eacute !! wikitext I always thought é was a cute letter. !! html

      I always thought é was a cute letter.

      !! 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. # Note that tidy doesn't handle this correctly. !! test Nesting of !! wikitext XYZ !! html

      XYZ

      !! end # The following cases were T53081 in the PHP parser. # Note that there are some other nestable tags (b, i, etc) which are # not covered; see T53081 for discussion. # Note that tidy doesn't handle this correctly. !! test Nesting of !! wikitext XYZ !! html

      XYZ

      !! end # Note that tidy doesn't handle this correctly. !! test Nesting of !! wikitext XYZ !! html

      XYZ

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

      XYZ

      !! end # Note that tidy doesn't handle this correctly. !! test Nesting of !! wikitext XYZ !! html

      XYZ

      !! end # Note that tidy doesn't handle this correctly. !! 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 !! 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
      !! 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
      !! 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 Tidy 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 ### ### (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 ### # HTML+Tidy effectively strips out the empty tags completely # But since Parsoid doesn't it wraps the tags in p-tags # which Tidy would have done for the PHP parser had there been content inside it. !! test Sanitizer: Closing of open tags !! wikitext
      !! html
      !! 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/php+tidy

      Table not started

      !! html/parsoid

      Table not started

      !! end !! test Sanitizer: Escaping of spaces, multibyte characters, colons & other stuff in id="" !! wikitext byte[[#æ: v|backlink]] !! html/php

      bytebacklink

      !! html/parsoid

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

      " onload="alert(1)" data-foo="

      !! 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/php+tidy
      • One
      • Two:
        • Sub-one
        • Sub-two
      !! html/parsoid
      • 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 !! test Fuzz testing: Parser14 !! wikitext == onmouseover= == http://__TOC__ !! html

      onmouseover=[edit]

      http://

      Contents

      !! html+tidy

      onmouseover=[edit]

      http://

      Contents

      !! 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 ) !! test Fuzz testing: Parser16 !! wikitext {| !https://|||||| !! html
      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 !! test Fuzz testing: encoded newline in generated HTML replacements (T8577) !! 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 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=InterWikiLink !! 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 !! input File:foobar.jpg|caption|alt=galleryalt|link=http://www.example.org !! result !! 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/php+tidy

      JavaScript

      !! html/parsoid

      JavaScript

      !! end !! test HTML Hex character encoding bogus encoding (T28437 regression check) !! wikitext &#xsee;&#XSEE; !! html/php

      &#xsee;&#XSEE;

      !! html/parsoid

      &#xsee;&#XSEE;

      !! end !! test HTML Hex character encoding mixed case !! options parsoid=wt2html,wt2wt,html2html !! wikitext îî !! html/php

      îî

      !! html/php+tidy

      îî

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

      ISBN 978-0-1234-56 789

      !! html+tidy

      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

      RFC 983 987

      !! html+tidy

      RFC 983 987

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

      Foobar.jpg

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

      Foobar.jpg

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

      Foobar.jpg

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

      Foobar.jpg

      !!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 !! wikitext {{anchorencode:foo bar©#%n}} !! html

      foo_bar.C2.A9.23.25n

      !! end !! test anchorencode trims spaces !! wikitext {{anchorencode: __pretty__please__}} !! html

      pretty_please

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

      world_hi

      !! end !! test anchorencode deals with templates !! wikitext {{anchorencode: {{Foo}} }} !! html

      FOO

      !! end !! test anchorencode encodes like the TOC generator: (T20431) !! wikitext === _ +:.3A%3A&&]] === {{anchorencode: _ +:.3A%3A&&]] }} __NOEDITSECTION__ !! html

      _ +:.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()) !! 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 !! input -{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 !! input -{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 !! input -{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 !! input -{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 !! input -{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 T2529: Uncovered bullet !! wikitext * Foo {{bullet}} !! html
      • Foo
      • Bar
      !! end # Plain MediaWiki does not remove empty lists, but tidy actually does. # Templates in Wikipedia rely on this behavior, as tidy has always been # enabled there. These tests are normally run *without* tidy, so specify the # full output here. # To test realistic parsing behavior, apply a tidy-like transformation to both # the expected output and your parser's output. !! test T2529: Uncovered bullet leaving empty list, normally removed by tidy !! 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 !! 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 !! 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

      !! html+tidy

      Line one

      Line two

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

      Æ-Hello

      !! end !! test Multibyte character in padright !! wikitext {{padright:Hello-|7|Æ}} !! html

      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]] !! DISABLED/html/php !! html/parsoid

      !! end !! test Bad images - T18039: text after bad image disappears !! wikitext Foo bar [[File:Bad.jpg]] Bar foo !! DISABLED/html/php

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

      Contents

      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 # Note that the html output does not have the

      , but the # html+tidy output *does*. This is because the empty

      is # removed by the sanitizer, but only when tidy is *not* enabled (!). !! test Empty

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

      Contents

      x[edit]

      !! html/php+tidy

      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

      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 as substr !! wikitext {{padleft:|3|abcde}} {{padright:|3|abcde}} !! html

      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= !!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 #### --------------- 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 since PHP parser relies on Tidy for correct output !!test Trailing newlines in a deep dom-subtree that ends a wikitext line should be migrated out !!options parsoid !! wikitext {| |foo bar |} {| |foo |} !! html
      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 [//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 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 bidi 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 # --------------------------------------------------- # 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/php+tidy
      • a
      • b
      !! end !! test Thumbnail output !! wikitext [[File:Thumb.png|thumb]] !! html/php+tidy
      Thumb.png
      !! 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 # Use $wgRawHtml to inject a !! html/php+tidy
      !! end !! test Decoding of HTML entities in headings and links for IDs and link fragments (T103714) !! 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 indicator names for IDs (T104196) !! options showindicators !! wikitext Indicator !! html/php 1&2&3&4&amp;5=Indicator !! end !! 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 < # " > % : '

      💩

      #啤酒 #啤酒

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