As noted on the comments, this needed a markup that work better in bidi scenarios and as a part of replacing bidi control codes with HTML markup I was able to test different bidi scenarios using <bdi> HTML tags. Bug: T375975 Change-Id: If2af751fc9f78869acf7b7e93199fa927de2cc19
17136 lines
490 KiB
Text
17136 lines
490 KiB
Text
# The parsoid-compatible option below is only relevant when we are running
|
||
# parser tests in integrated mode with Parsoid. This option is ignored
|
||
# when this test file is run with Parsoid in standalone mode.
|
||
!! options
|
||
parsoid-compatible=wt2html,wt2wt
|
||
version=2
|
||
!! end
|
||
|
||
# MediaWiki Parser test cases
|
||
# Some taken from https://meta.wikimedia.org/wiki/Parser_testing
|
||
# All (C) their respective authors and released under the GPL
|
||
#
|
||
# The syntax should be fairly self-explanatory.
|
||
#
|
||
# Currently supported test options:
|
||
# One of the following modes:
|
||
#
|
||
# (default) generate HTML output
|
||
# pst apply pre-save transform
|
||
# msg apply message transform
|
||
# comment run through MediaWiki\CommentFormatter\CommentFormatter::format() instead of main parser
|
||
#
|
||
# Options for adding metadata to the metadata section:
|
||
# (Previously, these options pre- or post- pended to the html section)
|
||
#
|
||
# cat add category links
|
||
# extlinks add external link metadata
|
||
# ill add inter-language links
|
||
# iwl add inter-wiki links
|
||
# links add local wiki links
|
||
# special add links to special pages
|
||
# templates add template information
|
||
# property=XXX add the value of the page property with the given name.
|
||
# This can also be a comma-separated list.
|
||
# extension=XXX add the JSON-encoded value of the given extension data.
|
||
# This can also be a comma-separated list.
|
||
# showtitle add the rendered title
|
||
# showflags add the set parser output flags
|
||
# showtocdata add table of contents data
|
||
# showindicators add the page status indicators
|
||
# showmedia add the titles of the rendered media
|
||
#
|
||
# Parser parameters:
|
||
#
|
||
# subpage enable subpages (disabled by default)
|
||
# title=[[XXX]] run test using article title XXX
|
||
# language=XXX set content language to XXX for this test
|
||
# wtVariantLanguage=XXX set the wikitext (input) variant of language for this
|
||
# test using a BCP-47 code (eg zh-Hant-TW)
|
||
# htmlVariantLanguage=XXX set the html (output) variant of language for this
|
||
# test using a BCP-47 code (eg zh-Hant-TW)
|
||
# userLanguage=XXX set user language to XXX for this test
|
||
# notoc disable table of contents
|
||
# thumbsize=NNN set the default thumb size to NNNpx for this test
|
||
# wrap include the normal wrapper <div class="mw-parser-output"> (since 1.30)
|
||
# local format section links in edit comment text as local links
|
||
#
|
||
# Configuration globals:
|
||
#
|
||
# wgEnableUploads, wgAllowExternalImages, wgMaxTocLevel,
|
||
# wgLinkHolderBatchSize, wgRawHtml, wgInterwikiMagic,
|
||
# wgEnableMagicLinks, wgLocaltimezone
|
||
#
|
||
# Test execution options:
|
||
#
|
||
# disabled do not run test
|
||
# parsoid parsoid-specific options (not run by PHP parser unless
|
||
# the test includes an html/php section)
|
||
# php php-only test (not run by the parsoid parser unless
|
||
# the test includes an html/parsoid section)
|
||
#
|
||
# For testing purposes, temporary articles can created:
|
||
# !!article / NAMESPACE:TITLE / !!text / ARTICLE TEXT / !!endarticle
|
||
# where '/' denotes a newline.
|
||
|
||
# This is the standard article assumed to exist.
|
||
!! article
|
||
Main Page
|
||
!! text
|
||
blah blah
|
||
!! endarticle
|
||
|
||
!!article
|
||
Foo
|
||
!!text
|
||
FOO
|
||
!!endarticle
|
||
|
||
!!article
|
||
Foo''s bar''s
|
||
!!text
|
||
Article titles can contain single quotes!
|
||
!!endarticle
|
||
|
||
!!article
|
||
Template:Foo
|
||
!!text
|
||
FOO
|
||
!!endarticle
|
||
|
||
!! article
|
||
Template:redirect to foo
|
||
!! text
|
||
#REDIRECT [[Template:Foo]]
|
||
!! endarticle
|
||
|
||
!! article
|
||
Template:Blank
|
||
!! text
|
||
!! endarticle
|
||
|
||
!! article
|
||
Template:pipe
|
||
!! text
|
||
|
|
||
!! endarticle
|
||
|
||
!! article
|
||
Template:=
|
||
!! text
|
||
<nowiki>=</nowiki>
|
||
!! endarticle
|
||
|
||
!! article
|
||
Template:inner list
|
||
!! text
|
||
* item 1
|
||
!! endarticle
|
||
|
||
!! article
|
||
Template:tbl-start
|
||
!! text
|
||
{|
|
||
!! endarticle
|
||
|
||
!! article
|
||
Template:tbl-end
|
||
!! text
|
||
|}
|
||
!! endarticle
|
||
|
||
!! article
|
||
Template:table_attribs_3
|
||
!! text
|
||
<noinclude>
|
||
|</noinclude>style{{=}}"background:#f9f9f9;"|Foo
|
||
!! endarticle
|
||
|
||
!! article
|
||
Template:table_attribs_6
|
||
!! text
|
||
style="background: <nowiki>
|
||
|
||
|
||
red;</nowiki>" |
|
||
!! endarticle
|
||
|
||
!! article
|
||
Template:1x
|
||
!! text
|
||
{{{1}}}
|
||
!! endarticle
|
||
|
||
# For is; localize Template namespace
|
||
!! article
|
||
Snið:1x
|
||
!! text
|
||
{{{1}}}
|
||
!! endarticle
|
||
|
||
!! article
|
||
Template:3x_on_newline
|
||
!! text
|
||
{{{1}}}
|
||
{{{1}}}
|
||
{{{1}}}
|
||
!! endarticle
|
||
|
||
!! article
|
||
Template:1x_with_span
|
||
!! text
|
||
<span>{{{1}}}</span>
|
||
!! endarticle
|
||
|
||
!! article
|
||
Template:1x_with_div
|
||
!! text
|
||
<div>{{{1}}}</div>
|
||
!! endarticle
|
||
|
||
!! article
|
||
Template:1x with depth
|
||
!! text
|
||
{{1x|{{{1}}}}}
|
||
!! endarticle
|
||
|
||
!! article
|
||
Template:blank_param
|
||
!! text
|
||
{{{1}}}
|
||
{{{}}}
|
||
!! endarticle
|
||
|
||
## See T48811 for details
|
||
!! article
|
||
Template:mixed_attr_content_template
|
||
!! text
|
||
style="color:red;" title="T48811"
|
||
|-
|
||
|foo
|
||
!! endarticle
|
||
|
||
## This template has a category in fosterable position. See T249740 for details
|
||
!! article
|
||
Template:mixed_attr_content_template_2
|
||
!! text
|
||
style="color:red;" title="T249740"
|
||
|-
|
||
[[Category:Fostered Content]]
|
||
|foo
|
||
!! endarticle
|
||
|
||
!! article
|
||
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
|
||
<table>
|
||
<tr align="center"></tr>
|
||
<tr><td>foo</td></tr>
|
||
<tr align="center"></tr>
|
||
<tr><td>bar</td></tr>
|
||
</table>
|
||
!!endarticle
|
||
|
||
!! article
|
||
Template:With: Colon
|
||
!! text
|
||
Template with colon
|
||
!! endarticle
|
||
|
||
!! article
|
||
Template:Template with pagename
|
||
!! text
|
||
This is {{PAGENAME}}.
|
||
!! endarticle
|
||
|
||
!! article
|
||
File:Redirect to foobar.jpg
|
||
!! text
|
||
#REDIRECT[[File:Foobar.jpg]]
|
||
!! endarticle
|
||
|
||
# Use an entity in the name
|
||
!! article
|
||
Template:Foo–bar
|
||
!! text
|
||
foo
|
||
!! endarticle
|
||
|
||
###
|
||
### Basic tests
|
||
###
|
||
|
||
!! test
|
||
Blank input
|
||
!! wikitext
|
||
!! html
|
||
!! end
|
||
|
||
!! test
|
||
Simple paragraph
|
||
!! wikitext
|
||
This is a simple paragraph.
|
||
!! html
|
||
<p>This is a simple paragraph.
|
||
</p>
|
||
!! end
|
||
|
||
!! test
|
||
Paragraphs with extra newline spacing
|
||
!! wikitext
|
||
a
|
||
|
||
b (+2 nls)
|
||
|
||
|
||
c (+3 nls)
|
||
|
||
|
||
|
||
d (+4 nls)
|
||
|
||
|
||
|
||
|
||
e (+5 nls)
|
||
!! html
|
||
<p>a
|
||
</p><p>b (+2 nls)
|
||
</p><p><br />
|
||
c (+3 nls)
|
||
</p><p><br />
|
||
</p><p>d (+4 nls)
|
||
</p><p><br />
|
||
</p><p><br />
|
||
e (+5 nls)
|
||
</p>
|
||
!! end
|
||
|
||
!! test
|
||
Paragraphs with newline spacing with comment lines in between
|
||
!! wikitext
|
||
----
|
||
a
|
||
<!--foo-->
|
||
b
|
||
----
|
||
a
|
||
<!--foo--><!--More than 1 comment, still stripped-->
|
||
b
|
||
----
|
||
a
|
||
<!--foo--> <!----> <!-- bar -->
|
||
b
|
||
----
|
||
a
|
||
<!--foo-->
|
||
|
||
b
|
||
----
|
||
a
|
||
|
||
<!--foo-->
|
||
b
|
||
----
|
||
a
|
||
<!--foo-->
|
||
|
||
|
||
b
|
||
----
|
||
a
|
||
|
||
|
||
<!--foo-->
|
||
b
|
||
----
|
||
!! html
|
||
<hr />
|
||
<p>a
|
||
b
|
||
</p>
|
||
<hr />
|
||
<p>a
|
||
b
|
||
</p>
|
||
<hr />
|
||
<p>a
|
||
b
|
||
</p>
|
||
<hr />
|
||
<p>a
|
||
</p><p>b
|
||
</p>
|
||
<hr />
|
||
<p>a
|
||
</p><p>b
|
||
</p>
|
||
<hr />
|
||
<p>a
|
||
</p><p><br />
|
||
b
|
||
</p>
|
||
<hr />
|
||
<p>a
|
||
</p><p><br />
|
||
b
|
||
</p>
|
||
<hr />
|
||
!! end
|
||
|
||
!! test
|
||
Paragraphs with newline spacing with non-empty white-space lines in between
|
||
!! wikitext
|
||
----
|
||
a
|
||
|
||
b
|
||
----
|
||
a
|
||
|
||
|
||
b
|
||
----
|
||
!! html
|
||
<hr />
|
||
<p>a
|
||
</p><p>b
|
||
</p>
|
||
<hr />
|
||
<p>a
|
||
</p><p><br />
|
||
b
|
||
</p>
|
||
<hr />
|
||
!! end
|
||
|
||
!! test
|
||
Paragraphs with newline spacing with non-empty mixed comment and white-space lines in between
|
||
!! wikitext
|
||
----
|
||
a
|
||
<!--foo-->
|
||
b
|
||
----
|
||
a
|
||
<!--foo--><!--More than 1 comment doesn't disable stripping of this line!-->
|
||
b
|
||
----
|
||
a
|
||
|
||
<!--foo-->
|
||
<!--bar-->
|
||
b
|
||
----
|
||
a
|
||
|
||
<!--foo-->
|
||
<!--bar-->
|
||
|
||
b
|
||
----
|
||
!! html
|
||
<hr />
|
||
<p>a
|
||
b
|
||
</p>
|
||
<hr />
|
||
<p>a
|
||
b
|
||
</p>
|
||
<hr />
|
||
<p>a
|
||
</p><p>b
|
||
</p>
|
||
<hr />
|
||
<p>a
|
||
</p><p><br />
|
||
b
|
||
</p>
|
||
<hr />
|
||
!! end
|
||
|
||
!! test
|
||
Extra newlines: More paragraphs with indented comment
|
||
!! wikitext
|
||
a
|
||
|
||
<!--boo-->
|
||
|
||
b
|
||
!! html
|
||
<p>a
|
||
</p><p><br />
|
||
b
|
||
</p>
|
||
!!end
|
||
|
||
!! test
|
||
Extra new lines before and after lists are preserved
|
||
!! wikitext
|
||
a
|
||
|
||
|
||
*b
|
||
|
||
|
||
c
|
||
!! html/php
|
||
<p>a
|
||
</p><p><br />
|
||
</p>
|
||
<ul><li>b</li></ul>
|
||
<p><br />
|
||
c
|
||
</p>
|
||
!! html/parsoid
|
||
<p>a</p>
|
||
<p>
|
||
<br></p>
|
||
<ul><li>b</li></ul>
|
||
<p>
|
||
<br>
|
||
c</p>
|
||
!! end
|
||
|
||
# Parsoid regression test
|
||
!!test
|
||
Multiple newlines after tables are converted to p-br-p tags
|
||
!!options
|
||
parsoid=wt2html,wt2wt
|
||
!! config
|
||
wgParserEnableLegacyHeadingDOM=false
|
||
!!wikitext
|
||
{|
|
||
|x
|
||
|}
|
||
|
||
|
||
|
||
|
||
=b=
|
||
!!html/php
|
||
<table>
|
||
<tbody><tr>
|
||
<td>x
|
||
</td></tr></tbody></table>
|
||
<p><br />
|
||
</p><p><br />
|
||
</p>
|
||
<div class="mw-heading mw-heading1"><h1 id="b">b</h1><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&action=edit&section=1" title="Edit section: b">edit</a><span class="mw-editsection-bracket">]</span></span></div>
|
||
!!html/parsoid
|
||
<table>
|
||
<tbody>
|
||
<tr>
|
||
<td>x</td>
|
||
</tr>
|
||
</tbody>
|
||
</table>
|
||
<p><br/></p>
|
||
<p><br/></p>
|
||
<h1 id="b">b</h1>
|
||
!!end
|
||
|
||
!! test
|
||
Parsing an URL
|
||
!! wikitext
|
||
http://fr.wikipedia.org/wiki/🍺
|
||
<!-- EasterEgg we love beer, better be able be able to link to it -->
|
||
!! html
|
||
<p><a rel="nofollow" class="external free" href="http://fr.wikipedia.org/wiki/🍺">http://fr.wikipedia.org/wiki/🍺</a>
|
||
</p>
|
||
!! end
|
||
|
||
!! test
|
||
Simple list
|
||
!! wikitext
|
||
*Item 1
|
||
*Item 2
|
||
!! html
|
||
<ul><li>Item 1</li>
|
||
<li>Item 2</li></ul>
|
||
!! end
|
||
|
||
|
||
###
|
||
### Non-html5 tags
|
||
###
|
||
|
||
## The attribute on the font tag is so Parsoid won't normalize it away
|
||
!! test
|
||
Non-html5 tags should be accepted
|
||
!! wikitext
|
||
<center>''foo''</center>
|
||
<big>''foo''</big>
|
||
<font style="123">''foo''</font>
|
||
<strike>''foo''</strike>
|
||
<tt>''foo''</tt>
|
||
!! html
|
||
<center><i>foo</i></center>
|
||
<p><big><i>foo</i></big>
|
||
<font style="123"><i>foo</i></font>
|
||
<strike><i>foo</i></strike>
|
||
<tt><i>foo</i></tt>
|
||
</p>
|
||
!! end
|
||
|
||
!! test
|
||
<wbr> is valid wikitext (T54468)
|
||
!! wikitext
|
||
<wbr>
|
||
!! html
|
||
<p><wbr />
|
||
</p>
|
||
!! end
|
||
|
||
# <strike> is HTML4, <s> is HTML4/5.
|
||
!! test
|
||
<s> or <strike> for strikethrough
|
||
!! wikitext
|
||
<strike>strike</strike>
|
||
|
||
<s>s</s>
|
||
!! html
|
||
<p><strike>strike</strike>
|
||
</p><p><s>s</s>
|
||
</p>
|
||
!! end
|
||
|
||
## a not permitted
|
||
## i,b,br omitted
|
||
!! test
|
||
Text-level semantic html elements in wikitext
|
||
!! wikitext
|
||
<em>text</em>
|
||
<strong>text</strong>
|
||
<small>text</small>
|
||
<s>text</s>
|
||
<cite>text</cite>
|
||
<q>text</q>
|
||
<dfn>text</dfn>
|
||
<abbr>text</abbr>
|
||
<data>text</data>
|
||
<time>text</time>
|
||
<code>text</code>
|
||
<var>text</var>
|
||
<samp>text</samp>
|
||
<kbd>text</kbd>
|
||
<sub>text</sub>
|
||
<u>text</u>
|
||
<mark>text</mark>
|
||
<ruby><rb>明日</rb><rp>(</rp><rt>Ashita</rt><rp> </rp><rtc>あした</rtc><rp>)</rp></ruby>
|
||
<bdi>text</bdi>
|
||
<bdo>text</bdo>
|
||
<span>text</span>
|
||
<wbr />
|
||
!! html
|
||
<p><em>text</em>
|
||
<strong>text</strong>
|
||
<small>text</small>
|
||
<s>text</s>
|
||
<cite>text</cite>
|
||
<q>text</q>
|
||
<dfn>text</dfn>
|
||
<abbr>text</abbr>
|
||
<data>text</data>
|
||
<time>text</time>
|
||
<code>text</code>
|
||
<var>text</var>
|
||
<samp>text</samp>
|
||
<kbd>text</kbd>
|
||
<sub>text</sub>
|
||
<u>text</u>
|
||
<mark>text</mark>
|
||
<ruby><rb>明日</rb><rp>(</rp><rt>Ashita</rt><rp> </rp><rtc>あした</rtc><rp>)</rp></ruby>
|
||
<bdi>text</bdi>
|
||
<bdo>text</bdo>
|
||
<span>text</span>
|
||
<wbr />
|
||
</p>
|
||
!! 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
|
||
:<ruby>日<rt>に</rt>本<rt>ほん</rt>語<rt>ご</rt></ruby>
|
||
;Group ruby
|
||
:<ruby>今日<rt>きょう</rt></ruby>
|
||
;Jukugo ruby
|
||
:<ruby>法<rb>華</rb><rb>経</rb><rt>ほ</rt><rt>け</rt><rt>きょう</rt></ruby>
|
||
;Inline ruby
|
||
:<ruby>東<rb>京</rb><rp>(</rp><rt>とう</rt><rt>きょう</rt><rp>)</rp></ruby>
|
||
;Double-sided ruby
|
||
:<ruby><rb>旧</rb><rb>金</rb><rb>山</rb><rt>jiù</rt><rt>jīn</rt><rt>shān</rt><rtc>San Francisco</rtc></ruby>
|
||
|
||
<ruby>
|
||
<rb>♥</rb><rtc><rt>Heart</rt></rtc><rtc lang="fr"><rt>Cœur</rt></rtc>
|
||
<rb>☘</rb><rtc><rt>Shamrock</rt></rtc><rtc lang="fr"><rt>Trèfle</rt></rtc>
|
||
<rb>✶</rb><rtc><rt>Star</rt></rtc><rtc lang="fr"><rt>Étoile</rt></rtc>
|
||
</ruby>
|
||
!! html
|
||
<dl><dt>Mono-ruby for individual base characters</dt>
|
||
<dd><ruby>日<rt>に</rt>本<rt>ほん</rt>語<rt>ご</rt></ruby></dd>
|
||
<dt>Group ruby</dt>
|
||
<dd><ruby>今日<rt>きょう</rt></ruby></dd>
|
||
<dt>Jukugo ruby</dt>
|
||
<dd><ruby>法<rb>華</rb><rb>経</rb><rt>ほ</rt><rt>け</rt><rt>きょう</rt></ruby></dd>
|
||
<dt>Inline ruby</dt>
|
||
<dd><ruby>東<rb>京</rb><rp>(</rp><rt>とう</rt><rt>きょう</rt><rp>)</rp></ruby></dd>
|
||
<dt>Double-sided ruby</dt>
|
||
<dd><ruby><rb>旧</rb><rb>金</rb><rb>山</rb><rt>jiù</rt><rt>jīn</rt><rt>shān</rt><rtc>San Francisco</rtc></ruby></dd></dl>
|
||
<p><ruby>
|
||
<rb>♥</rb><rtc><rt>Heart</rt></rtc><rtc lang="fr"><rt>Cœur</rt></rtc>
|
||
<rb>☘</rb><rtc><rt>Shamrock</rt></rtc><rtc lang="fr"><rt>Trèfle</rt></rtc>
|
||
<rb>✶</rb><rtc><rt>Star</rt></rtc><rtc lang="fr"><rt>Étoile</rt></rtc>
|
||
</ruby>
|
||
</p>
|
||
!! end
|
||
|
||
# The next two test different paths in the sanitizer.
|
||
!! test
|
||
Non-word characters don't terminate tag names (T19663, T42670, T54022)
|
||
!! wikitext
|
||
<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>
|
||
!! html
|
||
<p><blockquote|>a
|
||
</p><p><b→> doesn't terminate </b→>
|
||
</p><p><bä> doesn't terminate </bä>
|
||
</p><p><boo> doesn't terminate </boo>
|
||
</p><p><s.foo> doesn't terminate </s.foo>
|
||
</p><p><sub-ID#1>
|
||
</p>
|
||
!! end
|
||
|
||
###
|
||
### See tests/parser/ParserTestParserHook.php for the <tåg> 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>tåg</tåg>
|
||
!! html/php
|
||
<pre>'tåg'
|
||
array (
|
||
)
|
||
</pre>
|
||
!! html/parsoid
|
||
<pre typeof="mw:Extension/tåg" about="#mwt3" data-mw='{"name":"tåg","attrs":{},"body":{"extsrc":"tåg"}}'>'tåg'
|
||
array (
|
||
)
|
||
</pre>
|
||
!! end
|
||
|
||
!! test
|
||
Isolated close tags should be treated as literal text (T54760)
|
||
!! options
|
||
parsoid=wt2html
|
||
!! wikitext
|
||
</b>
|
||
|
||
<s.foo>s</s>
|
||
!! html
|
||
<p class="mw-empty-elt">
|
||
</p><p><s.foo>s
|
||
</p>
|
||
!! end
|
||
|
||
!! test
|
||
Self-closed tag hooks
|
||
!! wikitext
|
||
<pre />
|
||
<gallery />
|
||
<indicator name="something" />
|
||
!! html/php
|
||
<pre></pre>
|
||
<ul class="gallery mw-gallery-traditional">
|
||
</ul>
|
||
!! html/parsoid
|
||
<pre typeof="mw:Extension/pre" about="#mwt2" data-parsoid='{"stx":"html"}' data-mw='{"name":"pre","attrs":{}}'></pre>
|
||
<ul class="gallery mw-gallery-traditional" typeof="mw:Extension/gallery" about="#mwt5" data-mw='{"name":"gallery","attrs":{}}'>
|
||
</ul>
|
||
<meta typeof="mw:Extension/indicator" about="#mwt6" data-mw='{"name":"indicator","attrs":{"name":"something"},"html":""}'/>
|
||
!! end
|
||
|
||
###
|
||
### Special characters
|
||
###
|
||
|
||
!! test
|
||
Bare pipe character (T54363)
|
||
!! wikitext
|
||
|
|
||
!! html
|
||
<p>|
|
||
</p>
|
||
!! end
|
||
|
||
!! test
|
||
Bare pipe character from a template (T54363)
|
||
!! wikitext
|
||
{{pipe}}
|
||
!! html
|
||
<p>|
|
||
</p>
|
||
!! end
|
||
|
||
!! test
|
||
Implicit newline insertion/sol when expanding templates (T241150/T14974/T2529)
|
||
!! wikitext
|
||
{{1x|#foo}}{{1x|#foo}}
|
||
!! html/php
|
||
<ol><li>foo</li>
|
||
<li>foo</li></ol>
|
||
!! html/parsoid
|
||
<ol about="#mwt1" typeof="mw:Transclusion" data-parsoid='{"pi":[[{"k":"1"}],[{"k":"1"}]],"dsr":[0,22,null,null]}' data-mw='{"parts":[{"template":{"target":{"wt":"1x","href":"./Template:1x"},"params":{"1":{"wt":"#foo"}},"i":0}},{"template":{"target":{"wt":"1x","href":"./Template:1x"},"params":{"1":{"wt":"#foo"}},"i":1}}]}'><li>foo</li>
|
||
<li>foo</li></ol>
|
||
!! end
|
||
|
||
###
|
||
### <nowiki> test cases
|
||
###
|
||
|
||
!! test
|
||
<nowiki> unordered list
|
||
!! wikitext
|
||
<nowiki>* This is not an unordered list item.</nowiki>
|
||
!! html/php
|
||
<p>* This is not an unordered list item.
|
||
</p>
|
||
!! html/parsoid
|
||
<p><span typeof="mw:Nowiki">* This is not an unordered list item.</span></p>
|
||
!! end
|
||
|
||
!! test
|
||
<nowiki> spacing
|
||
!! wikitext
|
||
<nowiki>Lorem ipsum dolor
|
||
|
||
sed abit.
|
||
sed nullum.
|
||
|
||
:and a colon
|
||
</nowiki>
|
||
!! html/php
|
||
<p>Lorem ipsum dolor
|
||
|
||
sed abit.
|
||
sed nullum.
|
||
|
||
:and a colon
|
||
|
||
</p>
|
||
!! html/parsoid
|
||
<p><span typeof="mw:Nowiki">Lorem ipsum dolor
|
||
|
||
sed abit.
|
||
sed nullum.
|
||
|
||
:and a colon
|
||
</span></p>
|
||
!! end
|
||
|
||
!! test
|
||
Don't parse <nowiki><span class="error"></nowiki> (T149622)
|
||
!! wikitext
|
||
<nowiki><span class="error"></nowiki>
|
||
!! html/php
|
||
<p><span class="error">
|
||
</p>
|
||
!! html/parsoid
|
||
<p><span typeof="mw:Nowiki"><span class="error"></span></p>
|
||
!! end
|
||
|
||
!! test
|
||
nowiki 3
|
||
!! wikitext
|
||
:There is not nowiki.
|
||
:There is <nowiki>nowiki</nowiki>.
|
||
|
||
#There is not nowiki.
|
||
#There is <nowiki>nowiki</nowiki>.
|
||
|
||
*There is not nowiki.
|
||
*There is <nowiki>nowiki</nowiki>.
|
||
!! html/php
|
||
<dl><dd>There is not nowiki.</dd>
|
||
<dd>There is nowiki.</dd></dl>
|
||
<ol><li>There is not nowiki.</li>
|
||
<li>There is nowiki.</li></ol>
|
||
<ul><li>There is not nowiki.</li>
|
||
<li>There is nowiki.</li></ul>
|
||
!! html/parsoid
|
||
<dl><dd data-parsoid='{}'>There is not nowiki.</dd>
|
||
<dd data-parsoid='{}'>There is <span typeof="mw:Nowiki">nowiki</span>.</dd></dl>
|
||
|
||
<ol><li data-parsoid='{}'>There is not nowiki.</li>
|
||
<li data-parsoid='{}'>There is <span typeof="mw:Nowiki">nowiki</span>.</li></ol>
|
||
|
||
<ul><li data-parsoid='{}'>There is not nowiki.</li>
|
||
<li data-parsoid='{}'>There is <span typeof="mw:Nowiki">nowiki</span>.</li></ul>
|
||
!! end
|
||
|
||
!! test
|
||
Entities inside <nowiki>
|
||
!! wikitext
|
||
<nowiki><</nowiki>
|
||
!! html/php
|
||
<p><
|
||
</p>
|
||
!! html/parsoid
|
||
<p><span typeof="mw:Nowiki"><span typeof="mw:Entity" data-parsoid='{"src":"&lt;","srcContent":"<"}'><</span></span></p>
|
||
!! end
|
||
|
||
!! test
|
||
Entities inside template parameters
|
||
!! wikitext
|
||
{{1x|–}}
|
||
!! html/php
|
||
<p>–
|
||
</p>
|
||
!! html/parsoid
|
||
<p><span typeof="mw:Transclusion mw:Entity" data-mw='{"parts":[{"template":{"target":{"wt":"1x","href":"./Template:1x"},"params":{"1":{"wt":"&ndash;"}},"i":0}}]}'>–</span></p>
|
||
!! end
|
||
|
||
!! test
|
||
Properly escape nowiki when combined with other wiki markup
|
||
!! options
|
||
parsoid=html2wt
|
||
!! html/parsoid
|
||
<p>* </nowiki> tag</p>
|
||
!! wikitext
|
||
<nowiki>*</nowiki> <nowiki></nowiki></nowiki> tag
|
||
!! end
|
||
|
||
!! test
|
||
T93824: Put escaped HTML tags inside nowiki
|
||
!! options
|
||
parsoid=html2wt
|
||
!! html/parsoid
|
||
<p><h2>foo</h2></p>
|
||
!! wikitext
|
||
<nowiki><h2>foo</h2></nowiki>
|
||
!! end
|
||
|
||
!! test
|
||
T71950: 1. Put nowiki as close to cause as possible, even with non-quote escapable chars
|
||
!! options
|
||
parsoid=html2wt
|
||
!! html/parsoid
|
||
<p>This text: L'<a rel="mw:WikiLink" href="./Foo">Foo</a>
|
||
This text: L''<a rel="mw:WikiLink" href="./Foo">Foo</a>
|
||
This text: L'''<a rel="mw:WikiLink" href="./Foo">Foo</a>''</p>
|
||
!! wikitext
|
||
This text: L'[[Foo]]
|
||
This text: L<nowiki>''</nowiki>[[Foo]]
|
||
This text: L<nowiki>'''</nowiki>[[Foo]]<nowiki>''</nowiki>
|
||
!! end
|
||
|
||
!! test
|
||
T71950: 2. Put nowiki as close to cause as possible, after ' :'
|
||
!! options
|
||
parsoid=html2wt
|
||
!! html/parsoid
|
||
<p>This text : L''<a rel="mw:WikiLink" href="./Foo">Foo</a>
|
||
</p>
|
||
!! wikitext
|
||
This text : L<nowiki>''</nowiki>[[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
|
||
<p><span typeof="mw:Transclusion" data-mw="{"parts":[{"template":{"target":{"wt":"1x","href":"./Template:1x"},"params":{"1":{"wt":"foo|bar"}},"i":0}}]}" about="#mwt1"></span>
|
||
<span typeof="mw:Transclusion" data-mw="{"parts":[{"template":{"target":{"wt":"1x","href":"./Template:1x"},"params":{"1":{"wt":"foo|bar |[["}},"i":0}}]}" about="#mwt2"></p>
|
||
!! wikitext
|
||
{{1x|foo{{!}}bar}}
|
||
{{1x|<nowiki>foo|bar |[[</nowiki>}}
|
||
!! end
|
||
|
||
!! test
|
||
T53961: Output correct nowikis in template arguments
|
||
!! options
|
||
parsoid=html2wt
|
||
!! html/parsoid
|
||
<p><span typeof="mw:Transclusion" data-mw="{"parts":[{"template":{"target":{"wt":"1x","href":"./Template:1x"},"params":{"1":{"wt":"a [ b"}},"i":0}}]}" about="#mwt1"></span>
|
||
<span typeof="mw:Transclusion" data-mw="{"parts":[{"template":{"target":{"wt":"1x","href":"./Template:1x"},"params":{"1":{"wt":"a }} b"}},"i":0}}]}" about="#mwt2"></span>
|
||
<span typeof="mw:Transclusion" data-mw="{"parts":[{"template":{"target":{"wt":"1x","href":"./Template:1x"},"params":{"1":{"wt":"a [[ b"}},"i":0}}]}" about="#mwt3"></span>
|
||
<span typeof="mw:Transclusion" data-mw="{"parts":[{"template":{"target":{"wt":"1x","href":"./Template:1x"},"params":{"1":{"wt":"a | {{ ]]"}},"i":0}}]}" about="#mwt4"></span>
|
||
<span typeof="mw:Transclusion" data-mw="{"parts":[{"template":{"target":{"wt":"1x","href":"./Template:1x"},"params":{"1":{"wt":"a }"}},"i":0}}]}" about="#mwt5"></span></p>
|
||
!! wikitext
|
||
{{1x|a [ b}}
|
||
{{1x|<nowiki>a }} b</nowiki>}}
|
||
{{1x|<nowiki>a [[ b</nowiki>}}
|
||
{{1x|<nowiki>a | {{ ]]</nowiki>}}
|
||
{{1x|a <nowiki>}</nowiki>}}
|
||
!! end
|
||
|
||
!! test
|
||
Cases where "!!" needs nowiki protection
|
||
!! options
|
||
parsoid=html2wt
|
||
!! html/parsoid
|
||
<table>
|
||
<tr><th>this needs protection !! here</th></tr>
|
||
</table>
|
||
|
||
<table>
|
||
<tr><th>this does not need
|
||
protection !! here</th></tr>
|
||
</table>
|
||
!! wikitext
|
||
{|
|
||
!<nowiki>this needs protection !! here</nowiki>
|
||
|}
|
||
|
||
{|
|
||
!this does not need
|
||
protection !! here
|
||
|}
|
||
!! end
|
||
|
||
!! test
|
||
Nowiki with newlines in list
|
||
!! wikitext
|
||
:<nowiki>test
|
||
123</nowiki>
|
||
!! html/php
|
||
<dl><dd>test
|
||
123</dd></dl>
|
||
!! html/parsoid
|
||
<dl><dd data-parsoid="{}"><span typeof="mw:Nowiki">test
|
||
123</span></dd></dl>
|
||
!! end
|
||
|
||
## The output here may change with the outcome of T255007
|
||
!! test
|
||
Nowiki and french spacing
|
||
!! wikitext
|
||
<nowiki>test : 123</nowiki>
|
||
!! html/php
|
||
<p>test : 123
|
||
</p>
|
||
!! html/parsoid
|
||
<p><span typeof="mw:Nowiki">test<span typeof="mw:DisplaySpace"> </span>: 123</span></p>
|
||
!! end
|
||
|
||
!! test
|
||
T255007: French spacing in raw text elements
|
||
!! options
|
||
wgRawHtml=1
|
||
!! wikitext
|
||
<html>
|
||
<script>test ; 123</script>
|
||
<style>test : 123</style>
|
||
</html>
|
||
!! html/php
|
||
<p>
|
||
<script>test ; 123</script>
|
||
<style>test : 123</style>
|
||
|
||
</p>
|
||
!! html/parsoid
|
||
<p><span typeof="mw:Extension/html" about="#mwt2" data-mw='{"name":"html","attrs":{},"body":{"extsrc":"\n<script>test ; 123</script>\n<style>test : 123</style>\n"}}'>
|
||
</span><script about="#mwt2">test ; 123</script><span about="#mwt2">
|
||
</span><style about="#mwt2">test : 123</style><span about="#mwt2">
|
||
</span></p>
|
||
!! end
|
||
|
||
!! article
|
||
Test
|
||
!! text
|
||
Dummy article to suppress redlinks in tests
|
||
!! end
|
||
|
||
!! test
|
||
French spacing and spans
|
||
!! wikitext
|
||
[[Test]] : <span>123</span>
|
||
« Test »<span>123</span>
|
||
!! html/php
|
||
<p><a href="/wiki/Test" title="Test">Test</a> : <span>123</span>
|
||
« Test »<span>123</span>
|
||
</p>
|
||
!! html/parsoid
|
||
<p><a rel="mw:WikiLink" href="./Test" title="Test" data-parsoid='{"stx":"simple","a":{"href":"./Test"},"sa":{"href":"Test"}}'>Test</a><span typeof="mw:DisplaySpace"> </span>: <span data-parsoid='{"stx":"html"}'>123</span>
|
||
«<span typeof="mw:DisplaySpace"> </span>Test<span typeof="mw:DisplaySpace"> </span>»<span data-parsoid='{"stx":"html"}'>123</span></p>
|
||
!! end
|
||
|
||
!! test
|
||
post-expand include size being exceeded
|
||
!! options
|
||
maxincludesize=30
|
||
!! wikitext
|
||
{{3x_on_newline|1234567890}}
|
||
!! html/php
|
||
<p><a href="/wiki/Template:3x_on_newline" title="Template:3x on newline">Template:3x on newline</a><!-- WARNING: template omitted, post-expand include size too large -->
|
||
</p>
|
||
!! html/parsoid+integrated
|
||
<p><a rel="mw:WikiLink" href="./Template:3x_on_newline" title="Template:3x on newline" about="#mwt1" typeof="mw:Transclusion" data-parsoid='{"stx":"simple","a":{"href":"./Template:3x_on_newline"},"sa":{"href":":Template:3x on newline"},"pi":[[{"k":"1"}]]}' data-mw='{"parts":[{"template":{"target":{"wt":"3x_on_newline","href":"./Template:3x_on_newline"},"params":{"1":{"wt":"1234567890"}},"i":0}}]}'>Template:3x on newline</a><span about="#mwt1"><!-- WARNING: template omitted, post-expand include size too large --></span></p>
|
||
!! end
|
||
|
||
!! test
|
||
max template depth being reached
|
||
!! options
|
||
maxtemplatedepth=1
|
||
!! wikitext
|
||
{{1x with depth|too deep!}}
|
||
!! html/php
|
||
<p><span class="error">Template recursion depth limit exceeded (1)</span>
|
||
</p>
|
||
!! html/parsoid+integrated
|
||
<p><span class="error" about="#mwt1" typeof="mw:Transclusion" data-parsoid='{"stx":"html","pi":[[{"k":"1"}]]}' data-mw='{"parts":[{"template":{"target":{"wt":"1x with depth","href":"./Template:1x_with_depth"},"params":{"1":{"wt":"too deep!"}},"i":0}}]}'>Template recursion depth limit exceeded (1)</span></p>
|
||
!! end
|
||
|
||
!! test
|
||
multiple templates that are redirects
|
||
!! options
|
||
templates
|
||
!! wikitext
|
||
{{redirect to foo}}
|
||
{{redirect to foo}}
|
||
!! metadata
|
||
template=Template:Redirect_to_foo
|
||
template=Template:Foo
|
||
!! html/php
|
||
<p>FOO
|
||
FOO
|
||
</p>
|
||
!! html/parsoid+integrated
|
||
<p><span about="#mwt1" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"redirect to foo","href":"./Template:Redirect_to_foo"},"params":{},"i":0}}]}'>FOO</span>
|
||
<span about="#mwt2" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"redirect to foo","href":"./Template:Redirect_to_foo"},"params":{},"i":0}}]}'>FOO</span></p>
|
||
!! end
|
||
|
||
!! test
|
||
Transclusion with a (stripped) fragment
|
||
!! options
|
||
templates
|
||
!! wikitext
|
||
{{Foo#bar}}
|
||
!! metadata
|
||
template=Template:Foo
|
||
!! html/php
|
||
<p>FOO
|
||
</p>
|
||
!! html/parsoid+integrated
|
||
<p><span typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"Foo#bar","href":"./Template:Foo#bar"},"params":{},"i":0}}]}'>FOO</span></p>
|
||
!! end
|
||
|
||
!! test
|
||
T53086: Double newlines in blockquotes should be turned into paragraphs
|
||
!! wikitext
|
||
<blockquote>
|
||
Foo
|
||
|
||
Bar
|
||
</blockquote>
|
||
!! html
|
||
<blockquote>
|
||
<p>Foo
|
||
</p><p>Bar
|
||
</p>
|
||
</blockquote>
|
||
!! end
|
||
|
||
!! test
|
||
T17491: <ins>/<del> in blockquote
|
||
!! wikitext
|
||
<blockquote>
|
||
Foo <del>bar</del> <ins>baz</ins> quux
|
||
</blockquote>
|
||
!! html
|
||
<blockquote>
|
||
<p>Foo <del>bar</del> <ins>baz</ins> quux
|
||
</p>
|
||
</blockquote>
|
||
!! end
|
||
|
||
!! test
|
||
T17491: <ins>/<del> in blockquote (2)
|
||
!! wikitext
|
||
<blockquote>Foo <del>bar</del> <ins>baz</ins> quux
|
||
</blockquote>
|
||
!! html
|
||
<blockquote><p>Foo <del>bar</del> <ins>baz</ins> quux
|
||
</p></blockquote>
|
||
!! end
|
||
|
||
# Regression test to prevent problematic simplifications of parser tests
|
||
!! test
|
||
Don't paragraph-wrap empty newlines between HTML list items
|
||
!! options
|
||
parsoid=wt2html
|
||
!! wikitext
|
||
<ol>
|
||
<li>foo</li>
|
||
|
||
|
||
|
||
<li>foo</li>
|
||
</ol>
|
||
!! html/php
|
||
<ol>
|
||
<li>foo</li>
|
||
|
||
|
||
|
||
<li>foo</li>
|
||
</ol>
|
||
!! html/parsoid
|
||
<ol data-parsoid='{"stx":"html"}'>
|
||
<li data-parsoid='{"stx":"html"}'>foo</li>
|
||
|
||
|
||
|
||
<li data-parsoid='{"stx":"html"}'>foo</li>
|
||
</ol>
|
||
!! end
|
||
|
||
#--------------------------------------------------------------------
|
||
# Transclusion parameter whitespace stripping tests
|
||
# Behavior is different for positional and named parameters
|
||
#--------------------------------------------------------------------
|
||
!! test
|
||
Templates: Strip leading and trailing whitespace from named-param values
|
||
!! wikitext
|
||
{{1x|1= a }}
|
||
|
||
{{1x|1= {{1x|b}} }}
|
||
|
||
{{1x| 1 =
|
||
c }}
|
||
|
||
{{1x| 1 =
|
||
* d
|
||
}}
|
||
!! html
|
||
<p>a
|
||
</p><p>b
|
||
</p><p>c
|
||
</p>
|
||
<ul><li>d</li></ul>
|
||
!! end
|
||
|
||
!! test
|
||
Templates: Don't strip whitespace from positional-param values
|
||
!! wikitext
|
||
{{1x|a }}
|
||
|
||
{{1x|{{1x|b}} }}
|
||
|
||
{{1x| c
|
||
}}
|
||
|
||
{{1x| {{1x|d}}
|
||
}}
|
||
|
||
{{1x|
|
||
e}}
|
||
|
||
{{1x|
|
||
*f}}
|
||
|
||
{{1x|
|
||
}}g
|
||
!! html
|
||
<p>a
|
||
</p><p>b
|
||
</p>
|
||
<pre>c
|
||
</pre>
|
||
<p><br />
|
||
</p>
|
||
<pre>d
|
||
</pre>
|
||
<p><br />
|
||
</p>
|
||
<pre>e
|
||
</pre>
|
||
<p><br />
|
||
</p>
|
||
<ul><li>f</li></ul>
|
||
<p><br />
|
||
</p>
|
||
<pre>g
|
||
</pre>
|
||
!! html/parsoid
|
||
<p><span typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"1x","href":"./Template:1x"},"params":{"1":{"wt":"a "}},"i":0}}]}'>a</span></p>
|
||
<p><span about="#mwt2" typeof="mw:Transclusion" data-parsoid='{"pi":[[{"k":"1"}]]}' data-mw='{"parts":[{"template":{"target":{"wt":"1x","href":"./Template:1x"},"params":{"1":{"wt":"{{1x|b}} "}},"i":0}}]}'>b </span></p>
|
||
|
||
<pre about="#mwt4" typeof="mw:Transclusion" data-parsoid='{"pi":[[{"k":"1"}]]}' data-mw='{"parts":[{"template":{"target":{"wt":"1x","href":"./Template:1x"},"params":{"1":{"wt":" c \n"}},"i":0}}]}'>c </pre><span about="#mwt4">
|
||
</span>
|
||
|
||
<pre about="#mwt5" typeof="mw:Transclusion" data-parsoid='{"pi":[[{"k":"1"}]]}' data-mw='{"parts":[{"template":{"target":{"wt":"1x","href":"./Template:1x"},"params":{"1":{"wt":" {{1x|d}}\n"}},"i":0}}]}'>d</pre><span about="#mwt5">
|
||
</span>
|
||
|
||
<span about="#mwt7" typeof="mw:Transclusion" data-parsoid='{"pi":[[{"k":"1"}]]}' data-mw='{"parts":[{"template":{"target":{"wt":"1x","href":"./Template:1x"},"params":{"1":{"wt":"\n e"}},"i":0}}]}'>
|
||
</span><pre about="#mwt7">e</pre>
|
||
|
||
<ul about="#mwt8" typeof="mw:Transclusion" data-parsoid='{"pi":[[{"k":"1"}]]}' data-mw='{"parts":[{"template":{"target":{"wt":"1x","href":"./Template:1x"},"params":{"1":{"wt":"\n*f"}},"i":0}}]}'><li>f</li></ul>
|
||
|
||
<span about="#mwt9" typeof="mw:Transclusion" data-parsoid='{"pi":[[{"k":"1"}]]}' data-mw='{"parts":[{"template":{"target":{"wt":"1x","href":"./Template:1x"},"params":{"1":{"wt":"\n "}},"i":0}},"g"]}'>
|
||
</span><pre about="#mwt9">g</pre>
|
||
!! end
|
||
|
||
!! test
|
||
Templates: Don't recognize targets split by newlines
|
||
!! options
|
||
parsoid=wt2html
|
||
!! wikitext
|
||
{{ech
|
||
o|foo}}
|
||
!! html/php
|
||
<p>{{ech
|
||
o|foo}}
|
||
</p>
|
||
!! html/parsoid
|
||
<p>{{ech
|
||
o|foo}}</p>
|
||
!! end
|
||
|
||
!! test
|
||
Templates: Recognize targets when newlines and comments don't split the target
|
||
!! options
|
||
parsoid=wt2html
|
||
!! wikitext
|
||
{{
|
||
<!--X--> 1<!--X-->x<!--X-->
|
||
<!--X--> <!--X-->
|
||
|
||
|foo}}
|
||
!! html/php
|
||
<p>foo
|
||
</p>
|
||
!! html/parsoid
|
||
<p><span about="#mwt1" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"1<!--X-->x<!--X--> \n <!--X--> <!--X-->\n\n ","href":"./Template:1x"},"params":{"1":{"wt":"foo"}},"i":0}}]}'>foo</span></p>
|
||
!! end
|
||
|
||
## wt2html only, since the bare {{ will get escaped when serializing
|
||
!! test
|
||
Templates: Target with an extension tag
|
||
!! options
|
||
parsoid=wt2html
|
||
!! wikitext
|
||
{{{{1x|1x}}<nowiki>hi</nowiki>|ho}}
|
||
!! html/php
|
||
<p>{{1xhi|ho}}
|
||
</p>
|
||
!! html/parsoid
|
||
<p>{{<span about="#mwt5" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"1x","href":"./Template:1x"},"params":{"1":{"wt":"1x"}},"i":0}}]}'>1x</span><span typeof="mw:Nowiki">hi</span>|ho}}</p>
|
||
!! end
|
||
|
||
!! test
|
||
Templates: Handle empty comment-and-ws-only lines correctly
|
||
!! wikitext
|
||
{{1x|foo
|
||
<!--should be ignored-->
|
||
<!--should be ignored as well-->
|
||
bar}}
|
||
!! html/php
|
||
<p>foo
|
||
bar
|
||
</p>
|
||
!! html/parsoid+standalone
|
||
<p><span about="#mwt1" typeof="mw:Transclusion" data-parsoid='{"pi":[[{"k":"1"}]]}' data-mw='{"parts":[{"template":{"target":{"wt":"1x","href":"./Template:1x"},"params":{"1":{"wt":"foo\n<!--should be ignored-->\n <!--should be ignored as well-->\nbar"}},"i":0}}]}'>foo
|
||
</span><span about="#mwt1"><!--should be ignored--></span><span about="#mwt1">
|
||
</span><span about="#mwt1"><!--should be ignored as well--></span><span about="#mwt1">
|
||
bar</span></p>
|
||
!! html/parsoid+integrated
|
||
<p><span typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"1x","href":"./Template:1x"},"params":{"1":{"wt":"foo\n<!--should be ignored-->\n <!--should be ignored as well-->\nbar"}},"i":0}}]}'>foo bar</span></p>
|
||
!! end
|
||
|
||
!! test
|
||
Templates: Handle comments in the target
|
||
!! wikitext
|
||
{{1x
|
||
<!-- should be ignored -->
|
||
|foo}}
|
||
|
||
{{1x
|
||
<!-- should be ignored and spaces on next line should not trip us up (T147742) -->
|
||
|foo}}
|
||
|
||
{{1x<!-- should be ignored -->
|
||
|foo}}
|
||
|
||
{{1x<!-- should be ignored -->|foo}}
|
||
|
||
{{<!-- should be ignored -->1x|foo}}
|
||
!! html/php
|
||
<p>foo
|
||
</p><p>foo
|
||
</p><p>foo
|
||
</p><p>foo
|
||
</p><p>foo
|
||
</p>
|
||
!! html/parsoid
|
||
<p><span about="#mwt1" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"1x\n<!-- should be ignored -->\n","href":"./Template:1x"},"params":{"1":{"wt":"foo"}},"i":0}}]}'>foo</span></p>
|
||
|
||
<p><span about="#mwt2" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"1x\n<!-- should be ignored and spaces on next line should not trip us up (T147742) -->\n ","href":"./Template:1x"},"params":{"1":{"wt":"foo"}},"i":0}}]}'>foo</span></p>
|
||
|
||
<p><span about="#mwt3" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"1x<!-- should be ignored -->\n","href":"./Template:1x"},"params":{"1":{"wt":"foo"}},"i":0}}]}'>foo</span></p>
|
||
|
||
<p><span about="#mwt4" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"1x<!-- should be ignored -->","href":"./Template:1x"},"params":{"1":{"wt":"foo"}},"i":0}}]}'>foo</span></p>
|
||
|
||
<p><span about="#mwt5" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"1x","href":"./Template:1x"},"params":{"1":{"wt":"foo"}},"i":0}}]}'>foo</span></p>
|
||
!! end
|
||
|
||
!! test
|
||
Templates: Handle comments in parameter names (T69657)
|
||
!! wikitext
|
||
{{1x|1
|
||
<!-- should be ignored -->
|
||
=foo}}
|
||
|
||
{{1x|
|
||
<!-- should be ignored -->
|
||
1 = foo}}
|
||
|
||
{{1x|1<!-- should be ignored -->=foo}}
|
||
|
||
{{1x|<!-- should be ignored -->1=foo}}
|
||
!! html/php
|
||
<p>foo
|
||
</p><p>foo
|
||
</p><p>foo
|
||
</p><p>foo
|
||
</p>
|
||
!! html/parsoid
|
||
<p><span about="#mwt1" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"1x","href":"./Template:1x"},"params":{"1":{"wt":"foo","key":{"wt":"1\n<!-- should be ignored -->"}}},"i":0}}]}'>foo</span></p>
|
||
|
||
<p><span about="#mwt2" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"1x","href":"./Template:1x"},"params":{"1":{"wt":"foo","key":{"wt":"<!-- should be ignored -->\n1"}}},"i":0}}]}'>foo</span></p>
|
||
|
||
<p><span about="#mwt3" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"1x","href":"./Template:1x"},"params":{"1":{"wt":"foo","key":{"wt":"1<!-- should be ignored -->"}}},"i":0}}]}'>foo</span></p>
|
||
|
||
<p><span about="#mwt4" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"1x","href":"./Template:1x"},"params":{"1":{"wt":"foo","key":{"wt":"<!-- should be ignored -->1"}}},"i":0}}]}'>foo</span></p>
|
||
!! end
|
||
|
||
!! test
|
||
Templates: Other wikitext in parameter names (T69657)
|
||
!! wikitext
|
||
{{1x|''1''=foo}}
|
||
!! html/php
|
||
<p>{{{1}}}
|
||
</p>
|
||
!! html/parsoid+integrated
|
||
<p><span about="#mwt1" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"1x","href":"./Template:1x"},"params":{"''1''":{"wt":"foo"}},"i":0}}]}'>{{{1}}}</span></p>
|
||
!! end
|
||
|
||
!! test
|
||
Templates: With colons
|
||
!! wikitext
|
||
{{With: Colon}}
|
||
!! html/php
|
||
<p>Template with colon
|
||
</p>
|
||
!! html/parsoid
|
||
<p><span about="#mwt1" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"With: Colon","href":"./Template:With:_Colon"},"params":{},"i":0}}]}'>Template with colon</span></p>
|
||
!! end
|
||
|
||
#--------------------------------------------------------------------
|
||
# Transclusion parameter escaping tests
|
||
#--------------------------------------------------------------------
|
||
|
||
!! test
|
||
Templates: Parsoid parameter escaping test 1
|
||
!! wikitext
|
||
{{1x|[foo]|{{1x|[bar]}}}}
|
||
!! html/php
|
||
<p>[foo]
|
||
</p>
|
||
!! html/parsoid
|
||
<p><span about="#mwt1" typeof="mw:Transclusion"
|
||
data-mw='{"parts":[{"template":{"target":{"wt":"1x","href":"./Template:1x"},"params":{"1":{"wt":"[foo]"},"2":{"wt":"{{1x|[bar]}}"}},"i":0}}]}'>[foo]</span></p>
|
||
!! end
|
||
|
||
!! test
|
||
Parsoid: Pipes in external links in template parameter
|
||
!! wikitext
|
||
{{1x|[{{1x|http://example.com}} link]}}
|
||
!! html/php
|
||
<p><a rel="nofollow" class="external text" href="http://example.com">link</a>
|
||
</p>
|
||
!! html/parsoid
|
||
<p><a rel="mw:ExtLink" href="http://example.com" about="#mwt31" typeof="mw:Transclusion" class="external text" data-mw='{"parts":[{"template":{"target":{"wt":"1x","href":"./Template:1x"},"params":{"1":{"wt":"[{{1x|http://example.com}} link]"}},"i":0}}]}'>link</a></p>
|
||
!! end
|
||
|
||
!! test
|
||
Parsoid: pipe in transclusion parameter
|
||
!! wikitext
|
||
{{1x|http://foo.com/a|b}}
|
||
!! html/php
|
||
<p><a rel="nofollow" class="external free" href="http://foo.com/a%7Cb">http://foo.com/a%7Cb</a>
|
||
</p>
|
||
!! html/parsoid
|
||
<p><a rel="mw:ExtLink" href="http://foo.com/a%7Cb" about="#mwt1" typeof="mw:Transclusion" class="external free" data-mw='{"parts":[{"template":{"target":{"wt":"1x","href":"./Template:1x"},"params":{"1":{"wt":"http://foo.com/a&#124;b"}},"i":0}}]}'>http://foo.com/a%7Cb</a></p>
|
||
!! end
|
||
|
||
!! test
|
||
Parsoid: Pipe in external link target and content in template parameter
|
||
!! options
|
||
parsoid=html2wt,wt2wt
|
||
!! wikitext
|
||
{{1x|[http://foo.com/a|b a|b]}}
|
||
!! html/php
|
||
<p><a rel="nofollow" class="external text" href="http://foo.com/a%7Cb">a|b</a>
|
||
</p>
|
||
!! html/parsoid
|
||
<p><a rel="mw:ExtLink" href="http://foo.com/a|b" about="#mwt1"
|
||
typeof="mw:Transclusion"
|
||
data-mw='{"parts":[{"template":{"target":{"wt":"1x","href":"./Template:1x"},
|
||
"params":{"1":{"wt":"[http://foo.com/a|b a|b]"}},"i":0}}]}'>a|b</a></p>
|
||
!! end
|
||
|
||
!! test
|
||
Parsoid: Pipe in template with nested template in external link target in template parameter (seriously)
|
||
!! wikitext
|
||
{{1x|[{{fullurl:{{FULLPAGENAME}}|action=edit}} bar]}}
|
||
!! html/php
|
||
<p><a rel="nofollow" class="external text" href="http://example.org/index.php?title=Parser_test&action=edit">bar</a>
|
||
</p>
|
||
!! html/parsoid
|
||
<p><a rel="mw:ExtLink" href="http://example.org/index.php?title=Parser_test&action=edit" typeof="mw:Transclusion" class="external text" data-mw='{"parts":[{"template":{"target":{"wt":"1x","href":"./Template:1x"},"params":{"1":{"wt":"[{{fullurl:{{FULLPAGENAME}}|action=edit}} bar]"}},"i":0}}]}'>bar</a></p>
|
||
!! end
|
||
|
||
!! test
|
||
Templates: Don't escape already nowiki-escaped text in template parameters
|
||
!! options
|
||
parsoid=html2wt,wt2wt
|
||
!! wikitext
|
||
{{1x|foo<nowiki>|</nowiki>bar}}
|
||
{{1x|<nowiki><div></nowiki>}}
|
||
{{1x|<nowiki></nowiki>}}
|
||
!! html/php
|
||
<p>foo|bar
|
||
<div>
|
||
|
||
</p>
|
||
!! html/parsoid
|
||
<p><span about="#mwt1" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"1x","href":"./Template:1x"},"params":{"1":{"wt":"foo<nowiki>|</nowiki>bar"}},"i":0}}]}'>foo</span><span typeof="mw:Nowiki" about="#mwt1">|</span><span about="#mwt1">bar</span>
|
||
<span typeof="mw:Transclusion mw:Nowiki" about="#mwt2" data-mw='{"parts":[{"template":{"target":{"wt":"1x","href":"./Template:1x"},"params":{"1":{"wt":"<nowiki>&lt;div&gt;</nowiki>"}},"i":0}}]}'><span typeof="mw:Entity"><</span>div<span typeof="mw:Entity">></span></span>
|
||
<span typeof="mw:Transclusion mw:Nowiki" about="#mwt3" data-mw='{"parts":[{"template":{"target":{"wt":"1x","href":"./Template:1x"},"params":{"1":{"wt":"<nowiki></nowiki>"}},"i":0}}]}'></span>
|
||
</p>
|
||
!! end
|
||
|
||
## T54824
|
||
!! test
|
||
Templates: '=' char in nested transclusions should not trigger nowiki escapes or conversion to named param
|
||
!! options
|
||
parsoid=html2wt,wt2wt
|
||
!! wikitext
|
||
{{1x|{{1x|1=bar}}}}
|
||
!! html/php
|
||
<p>bar
|
||
</p>
|
||
!! html/parsoid
|
||
<p><span about="#mwt1" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"1x","href":"./Template:1x"},"params":{"1":{"wt":"{{1x|1=bar}}"}},"i":0}}]}'>bar</span></p>
|
||
!! end
|
||
|
||
## T58733
|
||
!! test
|
||
Templates parameters with special tokenizing behavior dont get modified because of arg escaping
|
||
!! wikitext
|
||
{{1x|a : b}}
|
||
!! html/php
|
||
<p>a : b
|
||
</p>
|
||
!! html/parsoid
|
||
<p><span about="#mwt1" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"1x","href":"./Template:1x"},"params":{"1":{"wt":"a : b"}},"i":0}}]}'>a<span typeof="mw:DisplaySpace"> </span>: b</span></p>
|
||
!! end
|
||
|
||
## T73412
|
||
!! test
|
||
Templates: Preserve blank parameter names
|
||
!! wikitext
|
||
{{1x|=foo}}
|
||
!! html/php
|
||
<p>{{{1}}}
|
||
</p>
|
||
!! html/parsoid
|
||
<p><span about="#mwt1" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"1x","href":"./Template:1x"},"params":{"":{"wt":"foo"}},"i":0}}]}'>{{{1}}}</span></p>
|
||
!! end
|
||
|
||
!! test
|
||
Templates: Preserve blank parameter names in other positions
|
||
!! wikitext
|
||
{{blank_param|bar|=foo}}
|
||
!! html/php
|
||
<p>bar
|
||
foo
|
||
</p>
|
||
!! html/parsoid
|
||
<p><span about="#mwt1" typeof="mw:Transclusion" data-parsoid='{"pi":[[{"k":"1"},{"k":"","named":true}]]}' data-mw='{"parts":[{"template":{"target":{"wt":"blank_param","href":"./Template:Blank_param"},"params":{"1":{"wt":"bar"},"":{"wt":"foo"}},"i":0}}]}'>bar
|
||
foo</span></p>
|
||
!! end
|
||
|
||
# wt2html only because Parsoid would want to add <nowiki>s coming from html
|
||
!! test
|
||
Broken wikilinks (but not external links) prevent templates from closing
|
||
!! options
|
||
parsoid=wt2html
|
||
!! wikitext
|
||
[http://example.com x
|
||
|
||
{{1x|[http://example.com x}}
|
||
|
||
[[Foo
|
||
|
||
{{1x|[[Foo}}
|
||
!! html/php
|
||
<p>[<a rel="nofollow" class="external free" href="http://example.com">http://example.com</a> x
|
||
</p><p>[<a rel="nofollow" class="external free" href="http://example.com">http://example.com</a> x
|
||
</p><p>[[Foo
|
||
</p><p>{{1x|[[Foo}}
|
||
</p>
|
||
!! html/parsoid
|
||
<p>[<a rel="mw:ExtLink" href="http://example.com" class="external free">http://example.com</a> x</p>
|
||
<p><span about="#mwt1" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"1x","href":"./Template:1x"},"params":{"1":{"wt":"[http://example.com x"}},"i":0}}]}'>[</span><a about="#mwt1" rel="mw:ExtLink" href="http://example.com" class="external free">http://example.com</a><span about="#mwt1"> x</span></p>
|
||
<p>[[Foo</p>
|
||
<p>{{1x|[[Foo}}</p>
|
||
!! end
|
||
|
||
!! test
|
||
Wikilinks with embedded newlines are not broken
|
||
!! wikitext
|
||
{{1x|[[ Foo
|
||
B
|
||
C]]}}
|
||
!! html/php
|
||
<p>[[ Foo
|
||
B
|
||
C]]
|
||
</p>
|
||
!! html/parsoid
|
||
<p><span about="#mwt1" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"1x","href":"./Template:1x"},"params":{"1":{"wt":"[[ Foo\nB\nC]]"}},"i":0}}]}'>[[ Foo B C]]</span></p>
|
||
!! end
|
||
|
||
!! test
|
||
Broken templates
|
||
!! options
|
||
parsoid=wt2html
|
||
!! wikitext
|
||
{{1x|[[Foo|}}]]
|
||
|
||
[[Foo|{{1x|]]}}
|
||
!! html/php
|
||
<p>{{1x|<a href="/wiki/Foo" title="Foo">}}</a>
|
||
</p><p>[[Foo|]]
|
||
</p>
|
||
!! html/parsoid
|
||
<p>{{1x|<a rel="mw:WikiLink" href="./Foo" title="Foo">}}</a></p>
|
||
<p>[[Foo|<span typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"1x","href":"./Template:1x"},"params":{"1":{"wt":"]]"}},"i":0}}]}'>]]</span></p>
|
||
!! end
|
||
|
||
!! article
|
||
Template:pipe page
|
||
!! text
|
||
Main|Page
|
||
!! endarticle
|
||
|
||
## FIXME: Parsoid doesn't support this and may never. See T226523
|
||
!! test
|
||
Template returning pipe used in wikilink target
|
||
!! wikitext
|
||
[[{{pipe page}}]]
|
||
!! html/php
|
||
<p><a href="/index.php?title=Main&action=edit&redlink=1" class="new" title="Main (page does not exist)">Page</a>
|
||
</p>
|
||
!! html/parsoid
|
||
<p>[[<span about="#mwt1" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"pipe page","href":"./Template:Pipe_page"},"params":{},"i":0}}]}'>Main|Page</span>]]</p>
|
||
!! end
|
||
|
||
# Italic/link nesting is changed in this test, but the rendered result is the
|
||
# same. Currently the Parsoid result is actually an improvement over
|
||
# the legacy parser output.
|
||
!! test
|
||
T4702: Mismatched <i>, <b> and <a> tags are invalid
|
||
!! wikitext
|
||
''[http://example.com text'']
|
||
[http://example.com '''text]'''
|
||
''Something [http://example.com in italic'']
|
||
''Something [http://example.com mixed''''', even bold]'''
|
||
'''''Now [http://example.com both''''']
|
||
!! html/php
|
||
<p><i><a rel="nofollow" class="external text" href="http://example.com">text</a></i>
|
||
<a rel="nofollow" class="external text" href="http://example.com"><b>text</b></a>
|
||
<i>Something <a rel="nofollow" class="external text" href="http://example.com">in italic</a></i>
|
||
<i>Something <a rel="nofollow" class="external text" href="http://example.com">mixed</a></i><a rel="nofollow" class="external text" href="http://example.com"><b>, even bold</b></a>
|
||
<i><b>Now <a rel="nofollow" class="external text" href="http://example.com">both</a></b></i>
|
||
</p>
|
||
!! html/parsoid
|
||
<p><i data-parsoid='{"autoInsertedEnd":true}'><a rel="mw:ExtLink" href="http://example.com" class="external text">text<i data-parsoid='{"autoInsertedEnd":true}'></i></a></i>
|
||
<a rel="mw:ExtLink" href="http://example.com" class="external text"><b data-parsoid='{"autoInsertedEnd":true}'>text</b></a><b data-parsoid='{"autoInsertedEnd":true}'></b>
|
||
<i data-parsoid='{"autoInsertedEnd":true}'>Something <a rel="mw:ExtLink" href="http://example.com" class="external text">in italic<i data-parsoid='{"autoInsertedEnd":true}'></i></a></i>
|
||
<i>Something <a rel="mw:ExtLink" href="http://example.com" class="external text">mixed<b data-parsoid='{"autoInsertedEnd":true}'><i data-parsoid='{"autoInsertedEnd":true}'>, even bold</i></b></a>'</i>
|
||
<b data-parsoid='{"autoInsertedEnd":true}'><i data-parsoid='{"autoInsertedEnd":true}'>Now <a rel="mw:ExtLink" href="http://example.com" class="external text">both<b data-parsoid='{"autoInsertedEnd":true}'><i data-parsoid='{"autoInsertedEnd":true}'></i></b></a></i></b></p>
|
||
!! end
|
||
|
||
!! test
|
||
Serialize <a> tags with invalid link targets as plain text
|
||
!! options
|
||
parsoid={ "modes": ["html2wt"], "suppressErrors": true }
|
||
!! html/parsoid
|
||
<a rel="mw:WikiLink" href="[[foo]]">text</a>
|
||
<a rel="mw:WikiLink" href="[[foo]]">*text</a>
|
||
<a rel="mw:WikiLink" href="[[foo]]">[[foo]]</a>
|
||
<a rel="mw:WikiLink" href="[[foo]]">*a [[foo]]</a>
|
||
!! wikitext
|
||
text
|
||
<nowiki>*</nowiki>text
|
||
<nowiki>[[foo]]</nowiki>
|
||
<nowiki>*</nowiki>a <nowiki>[[foo]]</nowiki>
|
||
!! end
|
||
|
||
!! test
|
||
mw:ExtLink -vs- mw:WikiLink (T94723)
|
||
!! options
|
||
parsoid=html2wt
|
||
!! html/parsoid
|
||
<a rel="mw:WikiLink" href="./Foo" title="Foo" data-parsoid='{"stx":"piped","a":{"href":"./Foo"},"sa":{"href":"Foo"}}'>Bar</a>
|
||
<a rel="mw:WikiLink" href="./Foo" title="Foo">Bar</a>
|
||
<a rel="mw:WikiLink" href="http://en.wikipedia.org/wiki/Foo" title="Foo">Bar</a>
|
||
<a rel="mw:ExtLink" href="http://en.wikipedia.org/wiki/Foo" title="Foo">Bar</a>
|
||
<p>
|
||
<a rel="mw:ExtLink" href="http://en.wikipedia.org/wiki/European_Robin">European Robin</a>
|
||
<a rel="mw:WikiLink" href="http://en.wikipedia.org/wiki/European_Robin">European Robin</a>
|
||
</p>
|
||
!! wikitext
|
||
[[Foo|Bar]]
|
||
[[Foo|Bar]]
|
||
[[:en:Foo|Bar]]
|
||
[[:en:Foo|Bar]]
|
||
|
||
[[:en:European_Robin|European Robin]]
|
||
[[:en:European_Robin|European Robin]]
|
||
!! end
|
||
|
||
!! test
|
||
Break on | in element attribute in template
|
||
!! options
|
||
parsoid=wt2html,html2html
|
||
!! wikitext
|
||
{{1x|1=<div class="hi|ho">ha</div>}}
|
||
!! html/php
|
||
<p>ho">ha</p>
|
||
!! html/parsoid
|
||
<p about="#mwt1" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"1x","href":"./Template:1x"},"params":{"1":{"wt":"ho\">ha</div>"}},"i":0}}]}'>ho">ha</p>
|
||
!! end
|
||
|
||
!! test
|
||
Break on | in element attribute name in template
|
||
!! wikitext
|
||
{{1x|<div cla|ss="hiho">ha</div>}}
|
||
!! html/parsoid
|
||
<p><span about="#mwt1" typeof="mw:Transclusion" data-parsoid='{"pi":[[{"k":"1"},{"k":"ss","named":true}]]}' data-mw='{"parts":[{"template":{"target":{"wt":"1x","href":"./Template:1x"},"params":{"1":{"wt":"<div cla"},"ss":{"wt":"\"hiho\">ha</div>"}},"i":0}}]}'><div cla</span></p>
|
||
!! end
|
||
|
||
!! test
|
||
Don't break on | in extension attribute in template
|
||
!! wikitext
|
||
{{1x|<tag name="hi|ho">ha</tag>}}
|
||
!! html/parsoid
|
||
<pre typeof="mw:Extension/tag mw:Transclusion" data-mw='{"name":"tag","attrs":{"name":"hi|ho"},"body":{"extsrc":"ha"},"parts":[{"template":{"target":{"wt":"1x","href":"./Template:1x"},"params":{"1":{"wt":"<tag name=\"hi|ho\">ha</tag>"}},"i":0}}]}'>'ha'
|
||
array (
|
||
'name' => 'hi|ho',
|
||
)</pre>
|
||
!! end
|
||
|
||
###
|
||
### Internal links
|
||
###
|
||
!! test
|
||
Plain link, capitalized
|
||
!! wikitext
|
||
[[Main Page]]
|
||
!! html
|
||
<p><a href="/wiki/Main_Page" title="Main Page">Main Page</a>
|
||
</p>
|
||
!! end
|
||
|
||
!! test
|
||
Plain link, uncapitalized
|
||
!! wikitext
|
||
[[main Page]]
|
||
!! html
|
||
<p><a href="/wiki/Main_Page" title="Main Page">main Page</a>
|
||
</p>
|
||
!! end
|
||
|
||
!! test
|
||
Piped link
|
||
!! wikitext
|
||
[[Main Page|The Main Page]]
|
||
!! html
|
||
<p><a href="/wiki/Main_Page" title="Main Page">The Main Page</a>
|
||
</p>
|
||
!! end
|
||
|
||
!! test
|
||
Piped link with comment in link text
|
||
!! wikitext
|
||
[[Main Page|The Main<!--front--> Page]]
|
||
!! html
|
||
<p><a href="/wiki/Main_Page" title="Main Page">The Main Page</a>
|
||
</p>
|
||
!! end
|
||
|
||
!! test
|
||
Piped link with multiple pipe characters in link text
|
||
!! wikitext
|
||
[[Main Page||The|Main|Page|]]
|
||
!! html/php
|
||
<p><a href="/wiki/Main_Page" title="Main Page">|The|Main|Page|</a>
|
||
</p>
|
||
!! html/parsoid
|
||
<p><a rel="mw:WikiLink" href="./Main_Page" title="Main Page">|The|Main|Page|</a></p>
|
||
!! end
|
||
|
||
!! test
|
||
Piped link with no link text
|
||
!! wikitext
|
||
[[Thomas Bek (bishop of St David's)|]]
|
||
!! html/php
|
||
<p>[[Thomas Bek (bishop of St David's)|]]
|
||
</p>
|
||
!! html/parsoid
|
||
<p>[[Thomas Bek (bishop of St David's)|]]</p>
|
||
!! end
|
||
|
||
!! test
|
||
Piped link with empty link text
|
||
!! wikitext
|
||
[[Main Page|<nowiki/>]] - empty nowiki
|
||
[[Main Page| ]] - empty non breaking space
|
||
!! html/php
|
||
<p><a href="/wiki/Main_Page" title="Main Page"></a> - empty nowiki
|
||
<a href="/wiki/Main_Page" title="Main Page"> </a> - empty non breaking space
|
||
</p>
|
||
!! html/parsoid
|
||
<p><a rel="mw:WikiLink" href="./Main_Page" title="Main Page"><span typeof="mw:Nowiki"></span></a> - empty nowiki
|
||
<a rel="mw:WikiLink" href="./Main_Page" title="Main Page"><span typeof="mw:Entity" data-parsoid='{"src":"&nbsp;","srcContent":" "}'> </span></a> - empty non breaking space</p>
|
||
!! end
|
||
|
||
## Separate from the above because Parsoid normalizes the empty link away
|
||
!! test
|
||
Piped link with empty link text - 2
|
||
!! options
|
||
parsoid=wt2html
|
||
!! wikitext
|
||
[[Main Page| ]] - empty space
|
||
!! html/php
|
||
<p><a href="/wiki/Main_Page" title="Main Page"> </a> - empty space
|
||
</p>
|
||
!! html/parsoid
|
||
<p><a rel="mw:WikiLink" href="./Main_Page" title="Main Page"> </a> - empty space</p>
|
||
!! end
|
||
|
||
!! test
|
||
Broken link
|
||
!! wikitext
|
||
[[Zigzagzogzagzig]]
|
||
!! html/php
|
||
<p><a href="/index.php?title=Zigzagzogzagzig&action=edit&redlink=1" class="new" title="Zigzagzogzagzig (page does not exist)">Zigzagzogzagzig</a>
|
||
</p>
|
||
!! html/parsoid
|
||
<p><a rel="mw:WikiLink" href="./Zigzagzogzagzig?action=edit&redlink=1" title="Zigzagzogzagzig" class="new" typeof="mw:LocalizedAttrs" data-parsoid='{"stx":"simple","a":{"href":"./Zigzagzogzagzig"},"sa":{"href":"Zigzagzogzagzig"}}' data-mw-i18n='{"title":{"lang":"x-page","key":"red-link-title","params":["Zigzagzogzagzig"]}}'>Zigzagzogzagzig</a></p>
|
||
!! end
|
||
|
||
# The PHP parser strips the hash fragment for non-existent pages, but
|
||
# Parsoid does not. (T227693)
|
||
!! test
|
||
Broken link with fragment
|
||
!! options
|
||
links
|
||
!! wikitext
|
||
[[Zigzagzogzagzig#zug]]
|
||
!! metadata
|
||
link=Zigzagzogzagzig
|
||
!! html/php
|
||
<p><a href="/index.php?title=Zigzagzogzagzig&action=edit&redlink=1" class="new" title="Zigzagzogzagzig (page does not exist)">Zigzagzogzagzig#zug</a>
|
||
</p>
|
||
!! html/parsoid
|
||
<p><a rel="mw:WikiLink" href="./Zigzagzogzagzig?action=edit&redlink=1#zug" title="Zigzagzogzagzig" class="new" typeof="mw:LocalizedAttrs" data-parsoid='{"stx":"simple","a":{"href":"./Zigzagzogzagzig#zug"},"sa":{"href":"Zigzagzogzagzig#zug"}}' data-mw-i18n='{"title":{"lang":"x-page","key":"red-link-title","params":["Zigzagzogzagzig"]}}'>Zigzagzogzagzig#zug</a></p>
|
||
!! end
|
||
|
||
!! test
|
||
Special page link with fragment
|
||
!! options
|
||
special
|
||
!! wikitext
|
||
[[Special:Version#anchor]]
|
||
!! metadata
|
||
special=Special:Version
|
||
!! html
|
||
<p><a href="/wiki/Special:Version#anchor" title="Special:Version">Special:Version#anchor</a>
|
||
</p>
|
||
!! end
|
||
|
||
# Parsoid does not strip fragment from red links: T227693
|
||
!! test
|
||
Nonexistent special page link with fragment
|
||
!! wikitext
|
||
[[Special:ThisNameWillHopefullyNeverBeUsed#anchor]]
|
||
!! html/php
|
||
<p><a href="/wiki/Special:ThisNameWillHopefullyNeverBeUsed" class="new" title="Special:ThisNameWillHopefullyNeverBeUsed (page does not exist)">Special:ThisNameWillHopefullyNeverBeUsed#anchor</a>
|
||
</p>
|
||
!! html/parsoid
|
||
<p><a rel="mw:WikiLink" href="./Special:ThisNameWillHopefullyNeverBeUsed?action=edit&redlink=1#anchor" title="Special:ThisNameWillHopefullyNeverBeUsed" class="new" typeof="mw:LocalizedAttrs" data-parsoid='{"stx":"simple","a":{"href":"./Special:ThisNameWillHopefullyNeverBeUsed#anchor"},"sa":{"href":"Special:ThisNameWillHopefullyNeverBeUsed#anchor"}}' data-mw-i18n='{"title":{"lang":"x-page","key":"red-link-title","params":["Special:ThisNameWillHopefullyNeverBeUsed"]}}'>Special:ThisNameWillHopefullyNeverBeUsed#anchor</a></p>
|
||
!! end
|
||
|
||
!! test
|
||
Link with prefix
|
||
!! wikitext
|
||
xxx[[main Page]], xxx[[Main Page]], Xxx[[main Page]] XXX[[main Page]], XXX[[Main Page]]
|
||
!! html
|
||
<p>xxx<a href="/wiki/Main_Page" title="Main Page">main Page</a>, xxx<a href="/wiki/Main_Page" title="Main Page">Main Page</a>, Xxx<a href="/wiki/Main_Page" title="Main Page">main Page</a> XXX<a href="/wiki/Main_Page" title="Main Page">main Page</a>, XXX<a href="/wiki/Main_Page" title="Main Page">Main Page</a>
|
||
</p>
|
||
!! end
|
||
|
||
!! test
|
||
Link with suffix
|
||
!! wikitext
|
||
[[Main Page]]xxx, [[Main Page]]XXX, [[Main Page]]!!!
|
||
!! html
|
||
<p><a href="/wiki/Main_Page" title="Main Page">Main Pagexxx</a>, <a href="/wiki/Main_Page" title="Main Page">Main Page</a>XXX, <a href="/wiki/Main_Page" title="Main Page">Main Page</a>!!!
|
||
</p>
|
||
!! end
|
||
|
||
!! article
|
||
prefixed article
|
||
!! text
|
||
Some text
|
||
!! endarticle
|
||
|
||
!! test
|
||
T45661: Piped links with identical prefixes
|
||
!! wikitext
|
||
[[prefixed article|prefixed articles with spaces]]
|
||
|
||
[[prefixed article|prefixed articlesaoeu]]
|
||
|
||
[[Main Page|Main Page test]]
|
||
!! html
|
||
<p><a href="/wiki/Prefixed_article" title="Prefixed article">prefixed articles with spaces</a>
|
||
</p><p><a href="/wiki/Prefixed_article" title="Prefixed article">prefixed articlesaoeu</a>
|
||
</p><p><a href="/wiki/Main_Page" title="Main Page">Main Page test</a>
|
||
</p>
|
||
!! end
|
||
|
||
|
||
!! test
|
||
Link with HTML entity in suffix / tail
|
||
!! wikitext
|
||
[[Main Page]]", [[Main Page]]a
|
||
!! html/php
|
||
<p><a href="/wiki/Main_Page" title="Main Page">Main Page</a>", <a href="/wiki/Main_Page" title="Main Page">Main Page</a>a
|
||
</p>
|
||
!! html/parsoid
|
||
<p><a rel="mw:WikiLink" href="./Main_Page" title="Main Page">Main Page</a><span typeof="mw:Entity" data-parsoid='{"src":"&quot;","srcContent":"\""}'>"</span>, <a rel="mw:WikiLink" href="./Main_Page" title="Main Page">Main Page</a><span typeof="mw:Entity" data-parsoid='{"src":"&#97;","srcContent":"a"}'>a</span></p>
|
||
!! end
|
||
|
||
!! test
|
||
Link with 3 brackets
|
||
!! wikitext
|
||
[[[Main Page]]]
|
||
Foo [[[Main Page]]]
|
||
!! html
|
||
<p>[[[Main Page]]]
|
||
Foo [[[Main Page]]]
|
||
</p>
|
||
!! end
|
||
|
||
!! test
|
||
Link with 4 brackets
|
||
!! wikitext
|
||
[[[[Main Page]]]]
|
||
!! html
|
||
<p>[[<a href="/wiki/Main_Page" title="Main Page">Main Page</a>]]
|
||
</p>
|
||
!! end
|
||
|
||
!! test
|
||
Piped link with 3 brackets
|
||
!! wikitext
|
||
[[[main page|the main page]]]
|
||
!! html
|
||
<p>[[[main page|the main page]]]
|
||
</p>
|
||
!! end
|
||
|
||
!! test
|
||
Piped link with extlink-like text
|
||
!! wikitext
|
||
[[Main Page|[bar]]]
|
||
[[Main Page|This is a [bar]]]
|
||
[[Main Page|[bar]]
|
||
!! html/php
|
||
<p><a href="/wiki/Main_Page" title="Main Page">[bar]</a>
|
||
<a href="/wiki/Main_Page" title="Main Page">This is a [bar]</a>
|
||
<a href="/wiki/Main_Page" title="Main Page">[bar</a>
|
||
</p>
|
||
!! html/parsoid
|
||
<p><a rel="mw:WikiLink" href="./Main_Page" title="Main Page" data-parsoid='{"stx":"piped"}'>[bar]</a>
|
||
<a rel="mw:WikiLink" href="./Main_Page" title="Main Page" data-parsoid='{"stx":"piped"}'>This is a [bar]</a>
|
||
<a rel="mw:WikiLink" href="./Main_Page" title="Main Page" data-parsoid='{"stx":"piped"}'>[bar</a></p>
|
||
!! end
|
||
|
||
!! test
|
||
Link with multiple pipes
|
||
!! wikitext
|
||
[[Main Page|The|Main|Page]]
|
||
!! html
|
||
<p><a href="/wiki/Main_Page" title="Main Page">The|Main|Page</a>
|
||
</p>
|
||
!! end
|
||
|
||
!! test
|
||
Anchor containing a #. (T65430)
|
||
!! config
|
||
wgFragmentMode=[ "html5", "legacy" ]
|
||
!! options
|
||
links
|
||
!! wikitext
|
||
[[Main Page#And#Link]]
|
||
!! metadata
|
||
link=Main_Page
|
||
!! html/php
|
||
<p><a href="/wiki/Main_Page#And#Link" title="Main Page">Main Page#And#Link</a>
|
||
</p>
|
||
!! html/parsoid
|
||
<p><a rel="mw:WikiLink" href="./Main_Page#And#Link" title="Main Page" data-parsoid='{"stx":"simple","a":{"href":"./Main_Page#And#Link"},"sa":{"href":"Main Page#And#Link"}}'>Main Page#And#Link</a></p>
|
||
!! end
|
||
|
||
!! article
|
||
Talk:Parser testing
|
||
!! text
|
||
Dummy article to suppress redlinks in tests
|
||
!! end
|
||
|
||
!! article
|
||
Meta:Disclaimers
|
||
!! text
|
||
Dummy article to suppress redlinks in tests
|
||
!! end
|
||
|
||
!! test
|
||
Link to namespaces
|
||
!! wikitext
|
||
[[Talk:Parser testing]], [[Meta:Disclaimers]]
|
||
!! html/php
|
||
<p><a href="/wiki/Talk:Parser_testing" title="Talk:Parser testing">Talk:Parser testing</a>, <a href="/wiki/Meta:Disclaimers" title="Meta:Disclaimers">Meta:Disclaimers</a>
|
||
</p>
|
||
!! html/parsoid
|
||
<p><a rel="mw:WikiLink" href="./Talk:Parser_testing" title="Talk:Parser testing" data-parsoid='{"stx":"simple","a":{"href":"./Talk:Parser_testing"},"sa":{"href":"Talk:Parser testing"}}'>Talk:Parser testing</a>, <a rel="mw:WikiLink" href="./Meta:Disclaimers" title="Meta:Disclaimers" data-parsoid='{"stx":"simple","a":{"href":"./Meta:Disclaimers"},"sa":{"href":"Meta:Disclaimers"}}'>Meta:Disclaimers</a></p>
|
||
!! end
|
||
|
||
!! article
|
||
User talk:Foo bar
|
||
!! text
|
||
Dummy article to suppress redlinks in tests
|
||
!! end
|
||
|
||
!! test
|
||
Link with space in namespace
|
||
!! wikitext
|
||
[[User talk:Foo bar]]
|
||
!! html/php
|
||
<p><a href="/wiki/User_talk:Foo_bar" title="User talk:Foo bar">User talk:Foo bar</a>
|
||
</p>
|
||
!! html/parsoid
|
||
<p><a rel="mw:WikiLink" href="./User_talk:Foo_bar" title="User talk:Foo bar" data-parsoid='{"stx":"simple","a":{"href":"./User_talk:Foo_bar"},"sa":{"href":"User talk:Foo bar"}}'>User talk:Foo bar</a></p>
|
||
!! 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
|
||
<p><a href="/wiki/MemoryAlpha:AlphaTest" title="MemoryAlpha:AlphaTest">MemoryAlpha:AlphaTest</a>
|
||
</p>
|
||
!! 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
|
||
<p><a rel="mw:WikiLink" href="./MemoryAlpha:AlphaTest" title="MemoryAlpha:AlphaTest">MemoryAlpha:AlphaTest</a></p>
|
||
!! wikitext
|
||
[[MemoryAlpha:AlphaTest]]
|
||
!! end
|
||
|
||
!! test
|
||
Piped link to namespace
|
||
!! wikitext
|
||
[[Meta:Disclaimers|The disclaimers]]
|
||
!! html/php
|
||
<p><a href="/wiki/Meta:Disclaimers" title="Meta:Disclaimers">The disclaimers</a>
|
||
</p>
|
||
!! html/parsoid
|
||
<p><a rel="mw:WikiLink" href="./Meta:Disclaimers" title="Meta:Disclaimers" data-parsoid='{"stx":"piped","a":{"href":"./Meta:Disclaimers"},"sa":{"href":"Meta:Disclaimers"}}'>The disclaimers</a></p>
|
||
!! end
|
||
|
||
!! test
|
||
Link containing }
|
||
!! wikitext
|
||
[[Usually caused by a typo (oops}]]
|
||
!! html
|
||
<p>[[Usually caused by a typo (oops}]]
|
||
</p>
|
||
!! 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
|
||
<p><a href="/wiki/7%25_Solution" title="7% Solution">7% Solution</a>
|
||
<a href="/wiki/7%25_Solution" title="7% Solution">7%25 Solution</a>
|
||
</p>
|
||
!! html/parsoid
|
||
<p><a rel="mw:WikiLink" href="./7%25_Solution" title="7% Solution">7% Solution</a>
|
||
<a rel="mw:WikiLink" href="./7%25_Solution" title="7% Solution">7%25 Solution</a></p>
|
||
!! 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
|
||
<p><a href="/wiki/7%25_Solution" title="7% Solution">7% Solution</a>
|
||
<a href="/wiki/7%25_Solution" title="7% Solution">7%25 Solution</a>
|
||
</p>
|
||
!! html/parsoid
|
||
<p><a rel="mw:WikiLink" href="./7%25_Solution" title="7% Solution">7% Solution</a>
|
||
<a rel="mw:WikiLink" href="./7%25_Solution" title="7% Solution">7%25 Solution</a></p>
|
||
!!end
|
||
|
||
!! test
|
||
Link containing % as a double hex sequence interpreted to hex sequence
|
||
!! wikitext
|
||
[[7%2525 Solution]]
|
||
!! html
|
||
<p>[[7%2525 Solution]]
|
||
</p>
|
||
!!end
|
||
|
||
## Example for such a section: == < ==
|
||
!! test
|
||
Link containing "#<" and "#>" % as a hex sequences- these are valid section anchors
|
||
!! options
|
||
title=[[Main Page]]
|
||
!! config
|
||
wgFragmentMode=[ "html5", "legacy" ]
|
||
!! wikitext
|
||
[[%23%3c]][[%23%3e]]
|
||
!! html/php
|
||
<p><a href="#<">#<</a><a href="#>">#></a>
|
||
</p>
|
||
!! html/parsoid
|
||
<p><a rel="mw:WikiLink" href="./Main_Page#<" class="mw-selflink-fragment" data-parsoid='{"stx":"simple","a":{"href":"./Main_Page#<"},"sa":{"href":"%23%3c"}}'>#<</a><a rel="mw:WikiLink" href="./Main_Page#>" class="mw-selflink-fragment" data-parsoid='{"stx":"simple","a":{"href":"./Main_Page#>"},"sa":{"href":"%23%3e"}}'>#></a></p>
|
||
!! end
|
||
|
||
## Example for such a section: == < ==
|
||
!! test
|
||
Link containing "#<" and "#>" % as a hex sequences- these are valid section anchors (legacy)
|
||
!! config
|
||
wgFragmentMode=[ "legacy" ]
|
||
!! wikitext
|
||
[[%23%3c]][[%23%3e]]
|
||
!! html/php
|
||
<p><a href="#.3C">#<</a><a href="#.3E">#></a>
|
||
</p>
|
||
!! end
|
||
|
||
!! test
|
||
Link containing "<#" and ">#" as a hex sequences
|
||
!! wikitext
|
||
[[%3c%23]][[%3e%23]]
|
||
!! html
|
||
<p>[[%3c%23]][[%3e%23]]
|
||
</p>
|
||
!! end
|
||
|
||
!! test
|
||
Link containing an equals sign
|
||
!! wikitext
|
||
[[Special:BookSources/isbn=4-00-026157-6]]
|
||
!! html/php
|
||
<p><a href="/wiki/Special:BookSources/isbn%3D4-00-026157-6" title="Special:BookSources/isbn=4-00-026157-6">Special:BookSources/isbn=4-00-026157-6</a>
|
||
</p>
|
||
!! html/parsoid
|
||
<p><a rel="mw:WikiLink" href="./Special:BookSources/isbn=4-00-026157-6" title="Special:BookSources/isbn=4-00-026157-6">Special:BookSources/isbn=4-00-026157-6</a></p>
|
||
!! end
|
||
|
||
!! article
|
||
Foo & bar
|
||
!! text
|
||
Just a test of an article title containing an ampersand
|
||
!! endarticle
|
||
|
||
!! test
|
||
Link containing an ampersand
|
||
!! wikitext
|
||
[[Foo & bar]]
|
||
|
||
[[Foo & bar]]
|
||
|
||
[[Foo &amp; bar]]
|
||
!! html/php
|
||
<p><a href="/wiki/Foo_%26_bar" title="Foo & bar">Foo & bar</a>
|
||
</p><p><a href="/wiki/Foo_%26_bar" title="Foo & bar">Foo & bar</a>
|
||
</p><p>[[Foo &amp; bar]]
|
||
</p>
|
||
!! html/parsoid
|
||
<p><a rel="mw:WikiLink" href="./Foo_&_bar" title="Foo & bar">Foo & bar</a></p>
|
||
<p><a rel="mw:WikiLink" href="./Foo_&_bar" title="Foo & bar" data-parsoid='{"stx":"simple","a":{"href":"./Foo_&_bar"},"sa":{"href":"Foo &amp; bar"}}'>Foo & bar</a></p>
|
||
<p>[[Foo <span typeof="mw:Entity" data-parsoid='{"src":"&amp;","srcContent":"&"}'>&</span>amp; bar]]</p>
|
||
!! end
|
||
|
||
!! article
|
||
Foo~bar
|
||
!! text
|
||
Just a test of an article title containing a tilde.
|
||
!! endarticle
|
||
|
||
# note that links containing signatures, like [[Foo~~~~]], are
|
||
# massaged by the pre-save transform (PST) and so the tildes are never
|
||
# seen by the parser.
|
||
!! test
|
||
Link containing a tilde
|
||
!! wikitext
|
||
[[Foo~bar]]
|
||
!! html/php
|
||
<p><a href="/wiki/Foo~bar" title="Foo~bar">Foo~bar</a>
|
||
</p>
|
||
!! html/parsoid
|
||
<p><a rel="mw:WikiLink" href="./Foo~bar" title="Foo~bar">Foo~bar</a></p>
|
||
!! end
|
||
|
||
!! article
|
||
Lista d''e paise d''o munno
|
||
!! text
|
||
Dummy article to suppress redlinks in tests
|
||
!! end
|
||
|
||
!! test
|
||
Link containing double-single-quotes '' (T6598)
|
||
!! wikitext
|
||
[[Lista d''e paise d''o munno]]
|
||
!! html/php
|
||
<p><a href="/wiki/Lista_d%27%27e_paise_d%27%27o_munno" title="Lista d''e paise d''o munno">Lista d''e paise d''o munno</a>
|
||
</p>
|
||
!! html/parsoid
|
||
<p><a rel="mw:WikiLink" href="./Lista_d''e_paise_d''o_munno" title="Lista d''e paise d''o munno" data-parsoid='{"stx":"simple","a":{"href":"./Lista_d''e_paise_d''o_munno"},"sa":{"href":"Lista d''e paise d''o munno"}}'>Lista d''e paise d''o munno</a></p>
|
||
!! end
|
||
|
||
!! article
|
||
Cool "Gator"
|
||
!! text
|
||
Dummy article to suppress redlinks in tests
|
||
!! end
|
||
|
||
!! test
|
||
Link containing double quotes and spaces
|
||
!! wikitext
|
||
[[Cool "Gator"]]
|
||
!! html/php
|
||
<p><a href="/wiki/Cool_%22Gator%22" title="Cool "Gator"">Cool "Gator"</a>
|
||
</p>
|
||
!! html/parsoid
|
||
<p><a rel="mw:WikiLink" href='./Cool_"Gator"' title='Cool "Gator"' data-parsoid='{"stx":"simple","a":{"href":"./Cool_\"Gator\""},"sa":{"href":"Cool \"Gator\""}}'>Cool "Gator"</a></p>
|
||
!! end
|
||
|
||
!! article
|
||
Link
|
||
!! text
|
||
Dummy article to suppress redlinks in tests
|
||
!! end
|
||
|
||
!! test
|
||
Link containing double-single-quotes '' in text (T6598 check)
|
||
!! wikitext
|
||
Some [[Link|pretty ''italics'' and stuff]]!
|
||
!! html/php
|
||
<p>Some <a href="/wiki/Link" title="Link">pretty <i>italics</i> and stuff</a>!
|
||
</p>
|
||
!! html/parsoid
|
||
<p>Some <a rel="mw:WikiLink" href="./Link" title="Link" data-parsoid='{"stx":"piped","a":{"href":"./Link"},"sa":{"href":"Link"}}'>pretty <i>italics</i> and stuff</a>!</p>
|
||
!! end
|
||
|
||
!! test
|
||
Link containing double-single-quotes '' in text embedded in italics (T6598 check)
|
||
!! wikitext
|
||
''Some [[Link|pretty ''italics'' and stuff]]!''
|
||
!! html/php
|
||
<p><i>Some <a href="/wiki/Link" title="Link">pretty <i>italics</i> and stuff</a>!</i>
|
||
</p>
|
||
!! html/parsoid
|
||
<p><i>Some <a rel="mw:WikiLink" href="./Link" title="Link" data-parsoid='{"stx":"piped","a":{"href":"./Link"},"sa":{"href":"Link"}}'>pretty <i>italics</i> and stuff</a>!</i></p>
|
||
!! end
|
||
|
||
!! article
|
||
''Pentecoste''
|
||
!! text
|
||
Dummy article to suppress redlinks in tests
|
||
!! end
|
||
|
||
## FIXME: Title part of filename is interpreted in php
|
||
!! test
|
||
Link with double quotes in title part (literal) and alternate part (interpreted)
|
||
!! config
|
||
wgParserEnableLegacyMediaDOM=false
|
||
!! wikitext
|
||
[[File:Denys_Savchenko_''Pentecoste''.jpg]]
|
||
|
||
[[''Pentecoste'']]
|
||
|
||
[[''Pentecoste''|Pentecoste]]
|
||
|
||
[[''Pentecoste''|''Pentecoste'']]
|
||
!! html/php
|
||
<p><span class="mw-default-size" typeof="mw:Error mw:File"><a href="/index.php?title=Special:Upload&wpDestFile=Denys_Savchenko_%27%27Pentecoste%27%27.jpg" class="new" title="File:Denys Savchenko ''Pentecoste''.jpg"><span class="mw-file-element mw-broken-media">File:Denys Savchenko <i>Pentecoste</i>.jpg</span></a></span>
|
||
</p><p><a href="/wiki/%27%27Pentecoste%27%27" title="''Pentecoste''">''Pentecoste''</a>
|
||
</p><p><a href="/wiki/%27%27Pentecoste%27%27" title="''Pentecoste''">Pentecoste</a>
|
||
</p><p><a href="/wiki/%27%27Pentecoste%27%27" title="''Pentecoste''"><i>Pentecoste</i></a>
|
||
</p>
|
||
!! html/parsoid
|
||
<p><span class="mw-default-size" typeof="mw:Error mw:File" data-parsoid='{"optList":[]}' data-mw='{"errors":[{"key":"apierror-filedoesnotexist","message":"This image does not exist."}]}'><a href="./Special:FilePath/Denys_Savchenko_''Pentecoste''.jpg"><span class="mw-file-element mw-broken-media" resource="./File:Denys_Savchenko_''Pentecoste''.jpg" data-parsoid='{"a":{"resource":"./File:Denys_Savchenko_''Pentecoste''.jpg"},"sa":{"resource":"File:Denys_Savchenko_''Pentecoste''.jpg"}}'>File:Denys Savchenko ''Pentecoste''.jpg</span></a></span></p>
|
||
|
||
<p><a rel="mw:WikiLink" href="./''Pentecoste''" title="''Pentecoste''" data-parsoid='{"stx":"simple","a":{"href":"./''Pentecoste''"},"sa":{"href":"''Pentecoste''"}}'>''Pentecoste''</a></p>
|
||
|
||
<p><a rel="mw:WikiLink" href="./''Pentecoste''" title="''Pentecoste''" data-parsoid='{"stx":"piped","a":{"href":"./''Pentecoste''"},"sa":{"href":"''Pentecoste''"}}'>Pentecoste</a></p>
|
||
|
||
<p><a rel="mw:WikiLink" href="./''Pentecoste''" title="''Pentecoste''" data-parsoid='{"stx":"piped","a":{"href":"./''Pentecoste''"},"sa":{"href":"''Pentecoste''"}}'><i>Pentecoste</i></a></p>
|
||
!! end
|
||
|
||
!! test
|
||
Plain link to URL
|
||
!! wikitext
|
||
[[http://www.example.com]]
|
||
!! html/php
|
||
<p>[<a rel="nofollow" class="external autonumber" href="http://www.example.com">[1]</a>]
|
||
</p>
|
||
!! html/parsoid
|
||
<p>[<a rel="mw:ExtLink" href="http://www.example.com" class="external autonumber"></a>]</p>
|
||
!! end
|
||
|
||
!! test
|
||
Plain link to URL with link text
|
||
!! wikitext
|
||
[[http://www.example.com Link text]]
|
||
!! html
|
||
<p>[<a rel="nofollow" class="external text" href="http://www.example.com">Link text</a>]
|
||
</p>
|
||
!! end
|
||
|
||
!! test
|
||
Plain link to URL containing special characters, with link text (see T213950).
|
||
!! wikitext
|
||
[[http://www.example.com/?q=%7Babc%7D Link text]]
|
||
!! html
|
||
<p>[<a rel="nofollow" class="external text" href="http://www.example.com/?q=%7Babc%7D">Link text</a>]
|
||
</p>
|
||
!! end
|
||
|
||
!! test
|
||
Plain link to protocol-relative URL
|
||
!! wikitext
|
||
[[//www.example.com]]
|
||
!! html/php
|
||
<p>[<a rel="nofollow" class="external autonumber" href="//www.example.com">[1]</a>]
|
||
</p>
|
||
!! html/parsoid
|
||
<p>[<a rel="mw:ExtLink" href="//www.example.com" class="external autonumber"></a>]</p>
|
||
!! end
|
||
|
||
!! test
|
||
Plain link to protocol-relative URL with link text
|
||
!! wikitext
|
||
[[//www.example.com Link text]]
|
||
!! html
|
||
<p>[<a rel="nofollow" class="external text" href="//www.example.com">Link text</a>]
|
||
</p>
|
||
!! end
|
||
|
||
!! test
|
||
Plain link to page with question mark in title
|
||
!! wikitext
|
||
[[A?b]]
|
||
|
||
[[A?b|Baz]]
|
||
!! html
|
||
<p><a href="/wiki/A%3Fb" title="A?b">A?b</a>
|
||
</p><p><a href="/wiki/A%3Fb" title="A?b">Baz</a>
|
||
</p>
|
||
!! end
|
||
|
||
# I'm fairly sure the expected result here is wrong.
|
||
# We want these to be URL links, not pseudo-pages with URLs for titles....
|
||
# However the current output is also pretty screwy.
|
||
#
|
||
# ----
|
||
# I'm changing it to match the current output--it arguably makes more
|
||
# sense in the light of the test above. Old expected result was:
|
||
#<p>Piped link to URL: <a href="/index.php?title=Http://www.example.com&action=edit" class="new">an example URL</a>
|
||
#</p>
|
||
# But I think this test is bordering on "garbage in, garbage out" anyway.
|
||
# -- wtm
|
||
!! test
|
||
Piped link to URL
|
||
!! wikitext
|
||
Piped link to URL: [[http://www.example.com|an example URL]]
|
||
!! html/php
|
||
<p>Piped link to URL: [<a rel="nofollow" class="external text" href="http://www.example.com%7Can">example URL</a>]
|
||
</p>
|
||
!! html/parsoid
|
||
<p>Piped link to URL: [<a rel="mw:ExtLink" href="http://www.example.com%7Can" class="external text" data-parsoid='{"a":{"href":"http://www.example.com%7Can"},"sa":{"href":"http://www.example.com|an"}}'>example URL</a>]</p>
|
||
!! end
|
||
|
||
!! article
|
||
Example
|
||
!! text
|
||
Dummy article to suppress redlinks in tests
|
||
!! end
|
||
|
||
!! test
|
||
Nested wikilink syntax in wikilink syntax that parses as wikilink in extlink
|
||
!! options
|
||
parsoid=wt2html
|
||
!! wikitext
|
||
[[http://example.com|[[Example]]]]
|
||
!! html/php
|
||
<p>[<a rel="nofollow" class="external text" href="http://example.com%7C"></a><a href="/wiki/Example" title="Example">Example</a>]
|
||
</p>
|
||
!! html/parsoid
|
||
<p>[<a rel="mw:ExtLink nofollow" href="http://example.com%7C" class="external autonumber" data-parsoid='{"a":{"href":"http://example.com%7C"},"sa":{"href":"http://example.com|"}}'></a><a rel="mw:WikiLink" href="./Example" title="Example" data-parsoid='{"stx":"simple","a":{"href":"./Example"},"sa":{"href":"Example"},"misnested":true}'>Example</a>]</p>
|
||
!! end
|
||
|
||
!! test
|
||
Plain link in template argument
|
||
!! options
|
||
parsoid=wt2html
|
||
!! wikitext
|
||
{{1x|[http://www.example.com |123]}}
|
||
|
||
{{1x|[[http://www.example.com |123]]}}
|
||
|
||
{{1x|[[http://www.example.com |123]}}
|
||
|
||
{{1x|[http://www.example.com |123]]}}
|
||
!! html/php
|
||
<p>[<a rel="nofollow" class="external free" href="http://www.example.com">http://www.example.com</a>
|
||
</p><p>[<a rel="nofollow" class="external text" href="http://www.example.com">|123</a>]
|
||
</p><p>{{1x|[<a rel="nofollow" class="external text" href="http://www.example.com">|123</a>}}
|
||
</p><p>[<a rel="nofollow" class="external free" href="http://www.example.com">http://www.example.com</a>
|
||
</p>
|
||
!! html/parsoid
|
||
<p><span about="#mwt1" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"1x","href":"./Template:1x"},"params":{"1":{"wt":"[http://www.example.com "},"2":{"wt":"123]"}},"i":0}}]}'>[</span><a about="#mwt1" rel="mw:ExtLink" href="http://www.example.com" class="external free">http://www.example.com</a><span about="#mwt1"> </span></p>
|
||
|
||
<p><span about="#mwt2" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"1x","href":"./Template:1x"},"params":{"1":{"wt":"[[http://www.example.com |123]]"}},"i":0}}]}'>[</span><a about="#mwt2" rel="mw:ExtLink" href="http://www.example.com" class="external text">|123</a><span about="#mwt2">]</span></p>
|
||
|
||
<p>{{1x|[<a rel="mw:ExtLink" href="http://www.example.com" class="external text">|123</a>}}</p>
|
||
|
||
<p><span about="#mwt3" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"1x","href":"./Template:1x"},"params":{"1":{"wt":"[http://www.example.com "},"2":{"wt":"123]]"}},"i":0}}]}'>[</span><a about="#mwt3" rel="mw:ExtLink" href="http://www.example.com" class="external free">http://www.example.com</a><span about="#mwt3"> </span></p>
|
||
!! end
|
||
|
||
!! test
|
||
T2002: [[page|http://url/]] should link to page, not http://url/
|
||
!! wikitext
|
||
[[Main Page|http://url/]]
|
||
!! html/php
|
||
<p><a href="/wiki/Main_Page" title="Main Page">http://url/</a>
|
||
</p>
|
||
!! html/parsoid
|
||
<p><a rel="mw:WikiLink" href="./Main_Page" title="Main Page">http://url/</a></p>
|
||
!! end
|
||
|
||
!! test
|
||
T2337: Escaped self-links should be bold
|
||
!! options
|
||
title=[[Bug462]]
|
||
!! wikitext
|
||
[[Bug462]] [[Bug462]]
|
||
!! html/php
|
||
<p><a class="mw-selflink selflink">Bug462</a> <a class="mw-selflink selflink">Bug462</a>
|
||
</p>
|
||
!! html/parsoid
|
||
<p><a rel="mw:WikiLink" href="./Bug462" class="mw-selflink selflink" data-parsoid='{"stx":"simple","a":{"href":"./Bug462"},"sa":{"href":"Bu&#103;462"}}'>Bug462</a> <a rel="mw:WikiLink" href="./Bug462" class="mw-selflink selflink" data-parsoid='{"stx":"simple","a":{"href":"./Bug462"},"sa":{"href":"Bug462"}}'>Bug462</a></p>
|
||
!! end
|
||
|
||
!! test
|
||
Self-link to section should not be bold
|
||
!! options
|
||
title=[[Main Page]]
|
||
!! wikitext
|
||
[[Main Page#section]]
|
||
!! html/php
|
||
<p><a class="mw-selflink-fragment" href="#section">Main Page#section</a>
|
||
</p>
|
||
!! html/parsoid
|
||
<p><a rel="mw:WikiLink" href="./Main_Page#section" class="mw-selflink-fragment" data-parsoid='{"stx":"simple","a":{"href":"./Main_Page#section"},"sa":{"href":"Main Page#section"}}'>Main Page#section</a></p>
|
||
!! end
|
||
|
||
|
||
!! test
|
||
Self-link hash fragment should be escaped
|
||
!! options
|
||
title=[[Main Page]]
|
||
!! wikitext
|
||
[[Main Page#section with spaces]]
|
||
!! html/php
|
||
<p><a class="mw-selflink-fragment" href="#section_with_spaces">Main Page#section with spaces</a>
|
||
</p>
|
||
!! html/parsoid
|
||
<p><a rel="mw:WikiLink" href="./Main_Page#section_with_spaces" class="mw-selflink-fragment" data-parsoid='{"stx":"simple","a":{"href":"./Main_Page#section_with_spaces"},"sa":{"href":"Main Page#section with spaces"}}'>Main Page#section with spaces</a></p>
|
||
!! end
|
||
|
||
!! article
|
||
00
|
||
!! text
|
||
This is 00.
|
||
!! endarticle
|
||
|
||
!!test
|
||
Self-link to numeric title
|
||
!!options
|
||
title=[[0]]
|
||
!! wikitext
|
||
[[0]]
|
||
!! html/php
|
||
<p><a class="mw-selflink selflink">0</a>
|
||
</p>
|
||
!! html/parsoid
|
||
<p><a rel="mw:WikiLink" href="./0" class="mw-selflink selflink" data-parsoid='{"stx":"simple","a":{"href":"./0"},"sa":{"href":"0"}}'>0</a></p>
|
||
!!end
|
||
|
||
!!test
|
||
Link to numeric-equivalent title
|
||
!!options
|
||
title=[[0]]
|
||
!! wikitext
|
||
[[00]]
|
||
!! html
|
||
<p><a href="/wiki/00" title="00">00</a>
|
||
</p>
|
||
!!end
|
||
|
||
!! test
|
||
<nowiki> inside a link
|
||
!! wikitext
|
||
[[Main<nowiki> Page</nowiki>]] [[Main Page|the main page <nowiki>[it's not very good]</nowiki>]]
|
||
!! html/php
|
||
<p>[[Main Page]] <a href="/wiki/Main_Page" title="Main Page">the main page [it's not very good]</a>
|
||
</p>
|
||
!! html/parsoid
|
||
<p>[[Main<span typeof="mw:Nowiki"> Page</span>]] <a rel="mw:WikiLink" href="./Main_Page" title="Main Page">the main page <span typeof="mw:Nowiki">[it's not very good]</span></a></p>
|
||
!! end
|
||
|
||
## Parsoid doesn't get this right and even fails wt2html because, when doing the
|
||
## normalization for comparison, the html serialization / re-parse doesn't
|
||
## roundtrip. This is T49963
|
||
!! test
|
||
<pre> inside a link
|
||
!! wikitext
|
||
[[Main<pre> Page</pre>]] [[Main Page|the main page <pre>[it's not very good]</pre>]]
|
||
!! html/php
|
||
<p>[[Main</p><pre> Page</pre><p>]] <a href="/wiki/Main_Page" title="Main Page">the main page </a></p><a href="/wiki/Main_Page" title="Main Page"><pre>[it's not very good]</pre></a>
|
||
!! html/parsoid
|
||
<p>[[Main</p><pre typeof="mw:Extension/pre" about="#mwt4" data-mw='{"name":"pre","attrs":{},"body":{"extsrc":" Page"}}'> Page</pre><p>]] <a rel="mw:WikiLink" href="./Main_Page" title="Main Page">the main page <pre typeof="mw:Extension/pre" about="#mwt6" data-mw='{"name":"pre","attrs":{},"body":{"extsrc":"[it's not very good]"}}'>[it's not very good]</pre></a></p>
|
||
!! end
|
||
|
||
!! test
|
||
Non-breaking spaces in title
|
||
!! wikitext
|
||
[[ Main Page ]]
|
||
!! html
|
||
<p><a href="/wiki/Main_Page" title="Main Page">  Main   Page  </a>
|
||
</p>
|
||
!!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
|
||
<p><a href="/wiki/Foo_bar_baz" title="Foo bar baz">x</a>
|
||
<a href="/wiki/Foo_bar_baz" title="Foo bar baz">x</a>
|
||
<a href="/wiki/Foo_bar_baz" title="Foo bar baz">x</a>
|
||
</p>
|
||
!! html/parsoid
|
||
<p><a rel="mw:WikiLink" href="./Foo_bar_baz" title="Foo bar baz">x</a>
|
||
<a rel="mw:WikiLink" href="./Foo_bar_baz" title="Foo bar baz">x</a>
|
||
<a rel="mw:WikiLink" href="./Foo_bar_baz" title="Foo bar baz">x</a>
|
||
</p>
|
||
!! end
|
||
|
||
!! test
|
||
Internal link with ca linktrail, surrounded by bold apostrophes (T29473 primary issue)
|
||
!! options
|
||
language=ca
|
||
!! wikitext
|
||
'''[[Main Page]]'''
|
||
!! html
|
||
<p><b><a href="/wiki/Main_Page" title="Main Page">Main Page</a></b>
|
||
</p>
|
||
!! end
|
||
|
||
!! test
|
||
Internal link with ca linktrail, surrounded by italic apostrophes (T29473 primary issue)
|
||
!! options
|
||
language=ca
|
||
!! wikitext
|
||
''[[Main Page]]''
|
||
!! html
|
||
<p><i><a href="/wiki/Main_Page" title="Main Page">Main Page</a></i>
|
||
</p>
|
||
!! end
|
||
|
||
!! test
|
||
Internal link with en linktrail: no apostrophes (T29473)
|
||
!! options
|
||
language=en
|
||
!! wikitext
|
||
[[Something]]'nice
|
||
!! html/php
|
||
<p><a href="/index.php?title=Something&action=edit&redlink=1" class="new" title="Something (page does not exist)">Something</a>'nice
|
||
</p>
|
||
!! html/parsoid
|
||
<p><a rel="mw:WikiLink" href="./Something?action=edit&redlink=1" title="Something" class="new" typeof="mw:LocalizedAttrs" data-parsoid='{"stx":"simple","a":{"href":"./Something"},"sa":{"href":"Something"}}' data-mw-i18n='{"title":{"lang":"x-page","key":"red-link-title","params":["Something"]}}'>Something</a>'nice</p>
|
||
!! end
|
||
|
||
!! test
|
||
Internal link with ca linktrail with apostrophes (T29473)
|
||
!! options
|
||
language=ca
|
||
!! wikitext
|
||
[[Something]]'nice
|
||
!! html/php
|
||
<p><a href="/index.php?title=Something&action=edit&redlink=1" class="new" title="Something (encara no existeix)">Something'nice</a>
|
||
</p>
|
||
!! html/parsoid
|
||
<p><a rel="mw:WikiLink" href="./Something?action=edit&redlink=1" title="Something" class="new" typeof="mw:LocalizedAttrs" data-parsoid='{"stx":"simple","a":{"href":"./Something"},"sa":{"href":"Something"},"tail":"'nice"}' data-mw-i18n='{"title":{"lang":"x-page","key":"red-link-title","params":["Something"]}}'>Something'nice</a></p>
|
||
!! end
|
||
|
||
!! test
|
||
Internal link with kaa linktrail with apostrophes (T29473)
|
||
!! options
|
||
language=kaa
|
||
!! wikitext
|
||
[[Something]]'nice
|
||
!! html/php
|
||
<p><a href="/index.php?title=Something&action=edit&redlink=1" class="new" title="Something (bet ele jaratılmaǵan)">Something'nice</a>
|
||
</p>
|
||
!! html/parsoid
|
||
<p><a rel="mw:WikiLink" href="./Something?action=edit&redlink=1" title="Something" class="new" typeof="mw:LocalizedAttrs" data-parsoid='{"stx":"simple","a":{"href":"./Something"},"sa":{"href":"Something"},"tail":"'nice"}' data-mw-i18n='{"title":{"lang":"x-page","key":"red-link-title","params":["Something"]}}'>Something'nice</a></p>
|
||
!! end
|
||
|
||
!! article
|
||
User:Foo/Test/63636:Bar
|
||
!! text
|
||
Dummy article to suppress redlinks in tests
|
||
!! end
|
||
|
||
!! test
|
||
Link with multiple ":" in a subpage-supporting namespace (T65636)
|
||
!! wikitext
|
||
[[User:Foo/Test/63636:Bar|Test]]
|
||
!! html/php
|
||
<p><a href="/wiki/User:Foo/Test/63636:Bar" title="User:Foo/Test/63636:Bar">Test</a>
|
||
</p>
|
||
!! html/parsoid
|
||
<p><a rel="mw:WikiLink" href="./User:Foo/Test/63636:Bar" title="User:Foo/Test/63636:Bar" data-parsoid='{"stx":"piped","a":{"href":"./User:Foo/Test/63636:Bar"},"sa":{"href":"User:Foo/Test/63636:Bar"}}'>Test</a></p>
|
||
!! end
|
||
|
||
## Mainly a check for Parsoid
|
||
!! test
|
||
Handle title parsing for subpages
|
||
!! options
|
||
title=[[/123123]]
|
||
subpage
|
||
!! wikitext
|
||
123
|
||
!! html/php
|
||
<p>123
|
||
</p>
|
||
!! html/parsoid
|
||
<p>123</p>
|
||
!! 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
|
||
<p><a href="/wiki/User:Test/123" title="User:Test/123">/123</a>
|
||
</p>
|
||
!! html/parsoid
|
||
<p><a rel="mw:WikiLink" href="./User:Test/123" title="User:Test/123" data-parsoid='{"stx":"simple","a":{"href":"./User:Test/123"},"sa":{"href":"/123"}}'>/123</a></p>
|
||
!! 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
|
||
<p>{{Bar%C3%A9}} {{/Bar%C3%A9}}
|
||
</p>
|
||
!! html/parsoid
|
||
<p>{{Bar%C3%A9}} {{/Bar%C3%A9}}</p>
|
||
!! end
|
||
|
||
!! test
|
||
Purely hash wikilink
|
||
!! options
|
||
title=[[User:Test/123]]
|
||
subpage
|
||
!! wikitext
|
||
[[#a|b]]
|
||
!! html/php
|
||
<p><a href="#a">b</a>
|
||
</p>
|
||
!! html/parsoid
|
||
<p><a rel="mw:WikiLink" href="./User:Test/123#a" class="mw-selflink-fragment" data-parsoid='{"stx":"piped","a":{"href":"./User:Test/123#a"},"sa":{"href":"#a"}}'>b</a></p>
|
||
!! end
|
||
|
||
!! test
|
||
Serialization of purely hash wikilink
|
||
!! options
|
||
title=[[User:Test/123]]
|
||
subpage
|
||
parsoid=html2wt
|
||
!! html/parsoid
|
||
<p><a href="#a">[[</a></p>
|
||
!! wikitext
|
||
[[#a|<nowiki>[[</nowiki>]]
|
||
!! html/php
|
||
<p><a href="#a">[[</a>
|
||
</p>
|
||
!! end
|
||
|
||
!! test
|
||
1. Interaction of linktrail and template encapsulation
|
||
!! wikitext
|
||
{{1x|[[Foo]]}}l
|
||
|
||
{{1x|[[Foo]]l}}
|
||
|
||
{{1x|[[Foo]]l}}s
|
||
|
||
{{1x|[[Foo]]<span>ls</span>}}
|
||
|
||
[[{{1x|Foo}}]]l
|
||
!! html/php
|
||
<p><a href="/wiki/Foo" title="Foo">Fool</a>
|
||
</p><p><a href="/wiki/Foo" title="Foo">Fool</a>
|
||
</p><p><a href="/wiki/Foo" title="Foo">Fools</a>
|
||
</p><p><a href="/wiki/Foo" title="Foo">Foo</a><span>ls</span>
|
||
</p><p><a href="/wiki/Foo" title="Foo">Fool</a>
|
||
</p>
|
||
!! html/parsoid
|
||
<p><a rel="mw:WikiLink" href="./Foo" title="Foo" about="#mwt2" typeof="mw:Transclusion" data-parsoid='{"stx":"simple","a":{"href":"./Foo"},"sa":{"href":"Foo"},"pi":[[{"k":"1"}]],"tail":"l"}' data-mw='{"parts":[{"template":{"target":{"wt":"1x","href":"./Template:1x"},"params":{"1":{"wt":"[[Foo]]"}},"i":0}},"l"]}'>Fool</a></p>
|
||
|
||
<p><a rel="mw:WikiLink" href="./Foo" title="Foo" about="#mwt1" typeof="mw:Transclusion" data-parsoid='{"stx":"simple","a":{"href":"./Foo"},"sa":{"href":"Foo"},"pi":[[{"k":"1"}]],"tail":"l"}' data-mw='{"parts":[{"template":{"target":{"wt":"1x","href":"./Template:1x"},"params":{"1":{"wt":"[[Foo]]l"}},"i":0}}]}'>Fool</a></p>
|
||
|
||
<p><a rel="mw:WikiLink" href="./Foo" title="Foo" about="#mwt3" typeof="mw:Transclusion" data-parsoid='{"stx":"simple","a":{"href":"./Foo"},"sa":{"href":"Foo"},"pi":[[{"k":"1"}]],"tail":"ls"}' data-mw='{"parts":[{"template":{"target":{"wt":"1x","href":"./Template:1x"},"params":{"1":{"wt":"[[Foo]]l"}},"i":0}},"s"]}'>Fools</a></p>
|
||
|
||
<p><a rel="mw:WikiLink" href="./Foo" title="Foo" about="#mwt4" typeof="mw:Transclusion" data-parsoid='{"stx":"simple","a":{"href":"./Foo"},"sa":{"href":"Foo"},"pi":[[{"k":"1"}]]}' data-mw='{"parts":[{"template":{"target":{"wt":"1x","href":"./Template:1x"},"params":{"1":{"wt":"[[Foo]]<span>ls</span>"}},"i":0}}]}'>Foo</a><span about="#mwt4">ls</span></p>
|
||
|
||
<p><a typeof="mw:ExpandedAttrs" about="#mwt6" rel="mw:WikiLink" href="./Foo" title="Foo" data-parsoid='{"stx":"simple","a":{"href":"./Foo"},"sa":{"href":"{{1x|Foo}}"},"tail":"l"}' data-mw='{"attribs":[[{"txt":"href"},{"html":"<span about=\"#mwt5\" typeof=\"mw:Transclusion\" data-parsoid='{\"pi\":[[{\"k\":\"1\"}]],\"dsr\":[85,95,null,null]}' data-mw='{\"parts\":[{\"template\":{\"target\":{\"wt\":\"1x\",\"href\":\"./Template:1x\"},\"params\":{\"1\":{\"wt\":\"Foo\"}},\"i\":0}}]}'>Foo</span>"}]]}'>Fool</a></p>
|
||
!! end
|
||
|
||
!! article
|
||
Fool
|
||
!! text
|
||
Dummy article to suppress redlinks in tests
|
||
!! end
|
||
|
||
!! test
|
||
2. Interaction of linktrail and template encapsulation
|
||
!! wikitext
|
||
{{1x|Some [[Fool]]}}s
|
||
!! html/php
|
||
<p>Some <a href="/wiki/Fool" title="Fool">Fools</a>
|
||
</p>
|
||
!! html/parsoid
|
||
<p><span about="#mwt1" typeof="mw:Transclusion" data-parsoid='{"pi":[[{"k":"1"}]]}' data-mw='{"parts":[{"template":{"target":{"wt":"1x","href":"./Template:1x"},"params":{"1":{"wt":"Some [[Fool]]"}},"i":0}},"s"]}'>Some </span><a rel="mw:WikiLink" href="./Fool" title="Fool" about="#mwt1" data-parsoid='{"stx":"simple","a":{"href":"./Fool"},"sa":{"href":"Fool"},"tail":"s"}'>Fools</a></p>
|
||
!! end
|
||
|
||
!! test
|
||
3. Interaction of linktrail and template encapsulation
|
||
!! wikitext
|
||
{{1x|Some [[Fool]]s are '''bold and foolish'''}}
|
||
!! html/php
|
||
<p>Some <a href="/wiki/Fool" title="Fool">Fools</a> are <b>bold and foolish</b>
|
||
</p>
|
||
!! html/parsoid
|
||
<p><span about="#mwt1" typeof="mw:Transclusion" data-parsoid='{"pi":[[{"k":"1"}]]}' data-mw='{"parts":[{"template":{"target":{"wt":"1x","href":"./Template:1x"},"params":{"1":{"wt":"Some [[Fool]]s are '''bold and foolish'''"}},"i":0}}]}'>Some </span><a rel="mw:WikiLink" href="./Fool" title="Fool" about="#mwt1">Fools</a><span about="#mwt1"> are </span><b about="#mwt1">bold and foolish</b></p>
|
||
!! end
|
||
|
||
!! article
|
||
Söfnuður
|
||
!! text
|
||
Test.
|
||
!! endarticle
|
||
|
||
!! test
|
||
Internal link with is link prefix
|
||
!! options
|
||
language=is
|
||
!! wikitext
|
||
Aðrir mótmælenda[[söfnuður|söfnuðir]] og
|
||
{{1x|mótmælenda[[söfnuður|söfnuðir]]}}
|
||
mótmæ{{1x|lenda[[söfnuður|söfnuðir]]}}
|
||
!! html/php
|
||
<p>Aðrir <a href="/wiki/S%C3%B6fnu%C3%B0ur" title="Söfnuður">mótmælendasöfnuðir</a> og
|
||
<a href="/wiki/S%C3%B6fnu%C3%B0ur" title="Söfnuður">mótmælendasöfnuðir</a>
|
||
<a href="/wiki/S%C3%B6fnu%C3%B0ur" title="Söfnuður">mótmælendasöfnuðir</a>
|
||
</p>
|
||
!! html/parsoid
|
||
<p>Aðrir <a rel="mw:WikiLink" href="./Söfnuður" title="Söfnuður" data-parsoid='{"stx":"piped","a":{"href":"./Söfnuður"},"sa":{"href":"söfnuður"},"prefix":"mótmælenda"}'>mótmælendasöfnuðir</a> og
|
||
<a rel="mw:WikiLink" href="./Söfnuður" title="Söfnuður" about="#mwt1" typeof="mw:Transclusion" data-parsoid='{"stx":"piped","a":{"href":"./Söfnuður"},"sa":{"href":"söfnuður"},"prefix":"mótmælenda"}' data-mw='{"parts":[{"template":{"target":{"wt":"1x","href":"./Snið:1x"},"params":{"1":{"wt":"mótmælenda[[söfnuður|söfnuðir]]"}},"i":0}}]}'>mótmælendasöfnuðir</a>
|
||
<a rel="mw:WikiLink" href="./Söfnuður" title="Söfnuður" about="#mwt2" typeof="mw:Transclusion" data-parsoid='{"stx":"piped","a":{"href":"./Söfnuður"},"sa":{"href":"söfnuður"},"prefix":"mótmælenda"}' data-mw='{"parts":["mótmæ",{"template":{"target":{"wt":"1x","href":"./Snið:1x"},"params":{"1":{"wt":"lenda[[söfnuður|söfnuðir]]"}},"i":0}}]}'>mótmælendasöfnuðir</a></p>
|
||
!! 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
|
||
<p><a href="/wiki/M%C3%B3tm%C3%A6lendatr%C3%BA" title="Mótmælendatrú">xxxar</a>
|
||
<a href="/wiki/M%C3%B3tm%C3%A6lendatr%C3%BA" title="Mótmælendatrú">mótmælendatrúar</a>
|
||
<a href="/wiki/S%C3%B6fnu%C3%B0ur" title="Söfnuður">mótmælendasöfnuður</a>
|
||
<a href="/wiki/S%C3%B6fnu%C3%B0ur" title="Söfnuður">mótmælendasöfnuðir</a>
|
||
<a href="/wiki/S%C3%B6fnu%C3%B0ur" title="Söfnuður">mótmælendasöfnuðirxxx</a>
|
||
</p>
|
||
!! end
|
||
|
||
!! test
|
||
Parsoid link trail escaping
|
||
!! options
|
||
parsoid=html2wt,html2html
|
||
!! html/parsoid
|
||
<p><a rel="mw:WikiLink" href="./Apple" title="Apple">apple</a>s</p>
|
||
!! wikitext
|
||
[[apple]]<nowiki/>s
|
||
!! end
|
||
|
||
!! test
|
||
Parsoid link prefix escaping
|
||
!! options
|
||
language=is
|
||
parsoid=html2wt,html2html
|
||
!! html/parsoid
|
||
<p>Aðrir mótmælenda<a rel="mw:WikiLink" href="./Söfnuður" title="Söfnuður">söfnuður</a></p>
|
||
!! wikitext
|
||
Aðrir mótmælenda<nowiki/>[[söfnuður]]
|
||
!! end
|
||
|
||
!! test
|
||
Parsoid link bracket escaping
|
||
!! options
|
||
parsoid=html2wt,html2html
|
||
!! html/parsoid
|
||
<p><a rel="mw:WikiLink" href="./Test" title="Test">Test</a></p>
|
||
<p>[<a rel="mw:WikiLink" href="./Test" title="Test">Test</a>]</p>
|
||
<p>[[<a rel="mw:WikiLink" href="./Test" title="Test">Test</a>]]</p>
|
||
<p>[[[<a rel="mw:WikiLink" href="./Test" title="Test">Test</a>]]]</p>
|
||
<p>[[[[<a rel="mw:WikiLink" href="./Test" title="Test">Test</a>]]]]</p>
|
||
<p>[[[[[<a rel="mw:WikiLink" href="./Test" title="Test">Test</a>]]]]]</p>
|
||
!! wikitext
|
||
[[Test]]
|
||
|
||
[<nowiki/>[[Test]]]
|
||
|
||
[[[[Test]]]]
|
||
|
||
[[[<nowiki/>[[Test]]]]]
|
||
|
||
[[[[[[Test]]]]]]
|
||
|
||
[[[[[<nowiki/>[[Test]]]]]]]
|
||
!! end
|
||
|
||
!! test
|
||
Parsoid-centric test: Whitespace in ext- and wiki-links should be preserved
|
||
!! wikitext
|
||
[[Foo| bar]]
|
||
|
||
[[Foo| ''bar'']]
|
||
|
||
[http://wp.org foo]
|
||
|
||
[http://wp.org ''foo'']
|
||
!! html
|
||
<p><a href="/wiki/Foo" title="Foo"> bar</a>
|
||
</p><p><a href="/wiki/Foo" title="Foo"> <i>bar</i></a>
|
||
</p><p><a rel="nofollow" class="external text" href="http://wp.org">foo</a>
|
||
</p><p><a rel="nofollow" class="external text" href="http://wp.org"><i>foo</i></a>
|
||
</p>
|
||
!! end
|
||
|
||
!! test
|
||
Parsoid: Scoped parsing should handle mixed transclusions and plain text
|
||
!! wikitext
|
||
[[Foo|{{1x|a}} b {{1x|c}}]]
|
||
!! html/parsoid
|
||
<p><a rel="mw:WikiLink" href="./Foo" title="Foo"><span about="#mwt2" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"1x","href":"./Template:1x"},"params":{"1":{"wt":"a"}},"i":0}}]}'>a</span> b <span about="#mwt3" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"1x","href":"./Template:1x"},"params":{"1":{"wt":"c"}},"i":0}}]}'>c</span></a></p>
|
||
!! end
|
||
|
||
!! test
|
||
Link with angle bracket after anchor
|
||
!! config
|
||
wgFragmentMode=[ "html5", "legacy" ]
|
||
!! wikitext
|
||
[[Foo#<bar>]]
|
||
!! html/php
|
||
<p><a href="/wiki/Foo#<bar>" title="Foo">Foo#<bar></a>
|
||
</p>
|
||
!! html/parsoid
|
||
<p><a rel="mw:WikiLink" href="./Foo#<bar>" title="Foo" data-parsoid='{"stx":"simple","a":{"href":"./Foo#<bar>"},"sa":{"href":"Foo#<bar>"}}'>Foo#<bar></a></p>
|
||
!! end
|
||
|
||
!! test
|
||
Link with angle bracket after anchor (legacy)
|
||
!! config
|
||
wgFragmentMode=[ "legacy" ]
|
||
!! wikitext
|
||
[[Foo#<bar>]]
|
||
!! html/php
|
||
<p><a href="/wiki/Foo#.3Cbar.3E" title="Foo">Foo#<bar></a>
|
||
</p>
|
||
!! end
|
||
|
||
!! article
|
||
Ho
|
||
!! text
|
||
Dummy article to suppress redlinks in tests
|
||
!! end
|
||
|
||
!! test
|
||
Wikilink in wikilink
|
||
!! wikitext
|
||
[[Hi|[[Ho]]]]
|
||
!! html/php
|
||
<p>[[Hi|<a href="/wiki/Ho" title="Ho">Ho</a>]]
|
||
</p>
|
||
!! html/parsoid
|
||
<p>[[Hi|<a rel="mw:WikiLink" href="./Ho" title="Ho" data-parsoid='{"stx":"simple","a":{"href":"./Ho"},"sa":{"href":"Ho"}}'>Ho</a>]]</p>
|
||
!! end
|
||
|
||
|
||
!! test
|
||
Parsoid-specific test: Wikilinks with should RT properly
|
||
!! options
|
||
language=ln
|
||
!! wikitext
|
||
[[WW II]]
|
||
!! html/php
|
||
<p><a href="/index.php?title=WW_II&action=edit&redlink=1" class="new" title="WW II (lonkásá ezalí tɛ̂)">WW II</a>
|
||
</p>
|
||
!! html/parsoid
|
||
<p><a rel="mw:WikiLink" href="./WW_II?action=edit&redlink=1" title="WW II" class="new" typeof="mw:LocalizedAttrs" data-parsoid='{"stx":"simple","a":{"href":"./WW_II"},"sa":{"href":"WW&nbsp;II"}}' data-mw-i18n='{"title":{"lang":"x-page","key":"red-link-title","params":["WW II"]}}'>WW II</a></p>
|
||
!! end
|
||
|
||
!! test
|
||
Parsoid T55221: Wikilinks should be properly entity-escaped
|
||
!! options
|
||
parsoid={ "modes": ["html2wt"], "suppressErrors": true }
|
||
!! html/parsoid
|
||
<p>He&nbsp;llo <a href="./Foo" rel="mw:WikiLink">He&nbsp;llo</a></p>
|
||
<p>He&nbsp;llo <a href="./He&nbsp;llo" rel="mw:WikiLink">He&nbsp;llo</a></p>
|
||
!! wikitext
|
||
He&nbsp;llo [[Foo|He&nbsp;llo]]
|
||
|
||
He&nbsp;llo He&nbsp;llo
|
||
!! html/php
|
||
<p>He&nbsp;llo <a href="/wiki/Foo" title="Foo">He&nbsp;llo</a>
|
||
</p><p>He&nbsp;llo He&nbsp;llo
|
||
</p>
|
||
!! end
|
||
|
||
!! article
|
||
16:30
|
||
!! text
|
||
Dummy article to suppress redlinks in tests
|
||
!! end
|
||
|
||
!! test
|
||
Wikilinks with : should roundtrip correctly, with and without redlinks
|
||
!! wikitext
|
||
[[16:30]]
|
||
[[18:30]]
|
||
!! html/parsoid
|
||
<p><a rel="mw:WikiLink" href="./16:30" title="16:30" data-parsoid='{"stx":"simple","a":{"href":"./16:30"},"sa":{"href":"16:30"}}'>16:30</a>
|
||
<a rel="mw:WikiLink" href="./18:30?action=edit&redlink=1" title="18:30" class="new" typeof="mw:LocalizedAttrs" data-parsoid='{"stx":"simple","a":{"href":"./18:30"},"sa":{"href":"18:30"}}' data-mw-i18n='{"title":{"lang":"x-page","key":"red-link-title","params":["18:30"]}}'>18:30</a></p>
|
||
!! 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
|
||
<p><a href="/index.php?title=Constructor&action=edit&redlink=1" class="new" title="Constructor (page does not exist)">constructor</a>
|
||
</p><p><a href="/index.php?title=Constructor:foo&action=edit&redlink=1" class="new" title="Constructor:foo (page does not exist)">constructor:foo</a>
|
||
</p>
|
||
!! html/parsoid
|
||
<p><a rel="mw:WikiLink" href="./Constructor?action=edit&redlink=1" title="Constructor" class="new" typeof="mw:LocalizedAttrs" data-parsoid='{"stx":"simple","a":{"href":"./Constructor"},"sa":{"href":"constructor"}}' data-mw-i18n='{"title":{"lang":"x-page","key":"red-link-title","params":["Constructor"]}}'>constructor</a></p>
|
||
|
||
<p><a rel="mw:WikiLink" href="./Constructor:foo?action=edit&redlink=1" title="Constructor:foo" class="new" typeof="mw:LocalizedAttrs" data-parsoid='{"stx":"simple","a":{"href":"./Constructor:foo"},"sa":{"href":"constructor:foo"}}' data-mw-i18n='{"title":{"lang":"x-page","key":"red-link-title","params":["Constructor:foo"]}}'>constructor:foo</a></p>
|
||
!! end
|
||
|
||
!! test
|
||
Template parameter named "constructor"
|
||
!! wikitext
|
||
{{1x| constructor = |hi}}
|
||
!! html/parsoid
|
||
<p><span about="#mwt1" typeof="mw:Transclusion" data-parsoid='{"pi":[[{"k":"constructor","named":true,"spc":[" "," ",""," "]},{"k":"1"}]]}' data-mw='{"parts":[{"template":{"target":{"wt":"1x","href":"./Template:1x"},"params":{"constructor":{"wt":""},"1":{"wt":"hi"}},"i":0}}]}'>hi</span></p>
|
||
!! end
|
||
|
||
##
|
||
## XHTML tidiness
|
||
###
|
||
|
||
!! test
|
||
<br> to <br />
|
||
!! wikitext
|
||
1<br>2<br />3
|
||
!! html
|
||
<p>1<br />2<br />3
|
||
</p>
|
||
!! end
|
||
|
||
!! test
|
||
Broken br tag sanitization
|
||
!! options
|
||
parsoid=wt2html,html2html
|
||
!! wikitext
|
||
</br>
|
||
!! html/php
|
||
<p><br />
|
||
</p>
|
||
!! html/parsoid
|
||
<p><br data-parsoid='{"stx":"html","noClose":true}'/></p>
|
||
!! end
|
||
|
||
# TODO: Fix html2html mode (T53055)!
|
||
!! test
|
||
Parsoid: Broken br tag recognition
|
||
!! options
|
||
parsoid=wt2html
|
||
!! wikitext
|
||
</br>
|
||
|
||
<br/ >
|
||
!! html
|
||
<p><br />
|
||
</p><p><br />
|
||
</p>
|
||
!! end
|
||
|
||
!! test
|
||
Incorrecly removing closing slashes from correctly formed XHTML
|
||
!! wikitext
|
||
<br style="clear:both;" />
|
||
!! html
|
||
<p><br style="clear:both;" />
|
||
</p>
|
||
!! end
|
||
|
||
!! test
|
||
Failing to transform badly formed HTML into correct XHTML
|
||
!! wikitext
|
||
<br style="clear: left;">
|
||
<br style="clear: right;">
|
||
<br style="clear: both;">
|
||
!! html
|
||
<p><br style="clear: left;" />
|
||
<br style="clear: right;" />
|
||
<br style="clear: both;" />
|
||
</p>
|
||
!!end
|
||
|
||
## Parsoid's behavior w/ self-closing HTML tags is now a bug;
|
||
## see T134423. Legacy Parser now implements proper HTML5 semantics.
|
||
!! test
|
||
Handling html with a div self-closing tag
|
||
!! wikitext
|
||
<div title />
|
||
<div title/>
|
||
<div title/ >
|
||
<div title=bar />
|
||
<div title=bar/>
|
||
<div title=bar/ >
|
||
!! html
|
||
<div title="">
|
||
<div title="">
|
||
<div title="">
|
||
<div title="bar">
|
||
<div title="bar">
|
||
<div title="bar/"></div></div></div></div></div></div>
|
||
!! end
|
||
|
||
!! test
|
||
Elements with solidus in various attribute positions
|
||
!! options
|
||
parsoid=wt2html,html2html
|
||
!! wikitext
|
||
<div cla/ss="123">ha</div>
|
||
|
||
<div / class="123">ha</div>
|
||
|
||
<div class= / "123">ha</div>
|
||
!! html/php
|
||
<div>ha</div>
|
||
<div class="123">ha</div>
|
||
<div class="/">ha</div>
|
||
!! html/parsoid
|
||
<div data-parsoid='{"stx":"html","a":{"cla":null,"ss":null},"sa":{"cla":"","ss":"123"}}'>ha</div>
|
||
|
||
<div class="123" data-parsoid='{"stx":"html"}'>ha</div>
|
||
|
||
<div class="/" data-parsoid='{"stx":"html","a":{"\"123\"":null},"sa":{"\"123\"":""}}'>ha</div>
|
||
!! end
|
||
|
||
!! test
|
||
Handling html with a br self-closing tag
|
||
!! wikitext
|
||
<br title />
|
||
<br title/>
|
||
<br title/ >
|
||
<br title=bar />
|
||
<br title=bar/>
|
||
<br title=bar/ >
|
||
!! html/php
|
||
<p><br title="" />
|
||
<br title="" />
|
||
<br title="" />
|
||
<br title="bar" />
|
||
<br title="bar" />
|
||
<br title="bar/" />
|
||
</p>
|
||
!! html/parsoid
|
||
<p><br title="" />
|
||
<br title="" />
|
||
<br title="" />
|
||
<br title="bar" />
|
||
<br title="bar" />
|
||
<br title="bar/" />
|
||
</p>
|
||
!! end
|
||
|
||
!! test
|
||
Quoted attributes without spaces
|
||
!! options
|
||
parsoid=wt2html
|
||
!! wikitext
|
||
<div class="foo"style="color:red">red</div>
|
||
!! html/php
|
||
<div class="foo" style="color:red">red</div>
|
||
!! html/parsoid
|
||
<div class="foo" style="color:red">red</div>
|
||
!! end
|
||
|
||
!! test
|
||
Horizontal ruler (should it add that extra space?)
|
||
!! wikitext
|
||
<hr>
|
||
<hr >
|
||
foo <hr
|
||
> bar
|
||
!! html/php
|
||
<hr />
|
||
<hr /><p>
|
||
foo </p><hr /><p> bar</p>
|
||
!! html/parsoid
|
||
<hr data-parsoid='{"stx":"html","noClose":true}'/>
|
||
<hr data-parsoid='{"stx":"html","noClose":true}'/><p>
|
||
foo </p><hr data-parsoid='{"stx":"html","noClose":true}'/><p> bar</p>
|
||
!! end
|
||
|
||
!! test
|
||
Horizontal ruler -- 4+ dashes render hr
|
||
!! wikitext
|
||
----
|
||
!! html
|
||
<hr />
|
||
!! end
|
||
|
||
!! test
|
||
Horizontal ruler -- eats additional dashes on the same line
|
||
!! wikitext
|
||
---------
|
||
!! html
|
||
<hr />
|
||
!! end
|
||
|
||
!! test
|
||
Horizontal ruler -- does not collapse dashes on consecutive lines
|
||
!! wikitext
|
||
----
|
||
----
|
||
!! html
|
||
<hr />
|
||
<hr />
|
||
!! end
|
||
|
||
!! test
|
||
Horizontal ruler -- <4 dashes render as plain text
|
||
!! wikitext
|
||
---
|
||
!! html
|
||
<p>---
|
||
</p>
|
||
!! end
|
||
|
||
!! test
|
||
Horizontal ruler -- Supports content following dashes on same line
|
||
!! wikitext
|
||
---- Foo
|
||
!! html/php
|
||
<hr /><p> Foo</p>
|
||
!! html/parsoid
|
||
<hr data-parsoid='{"lineContent":true}'/><p> Foo</p>
|
||
!! end
|
||
|
||
###
|
||
### Block-level elements
|
||
###
|
||
!! test
|
||
Common list
|
||
!! wikitext
|
||
*Common list
|
||
*item 2
|
||
*item 3
|
||
!! html
|
||
<ul><li>Common list</li>
|
||
<li>item 2</li>
|
||
<li>item 3</li></ul>
|
||
!! end
|
||
|
||
!! test
|
||
Numbered list
|
||
!! wikitext
|
||
#Numbered list
|
||
#item 2
|
||
#item 3
|
||
!! html
|
||
<ol><li>Numbered list</li>
|
||
<li>item 2</li>
|
||
<li>item 3</li></ol>
|
||
!! end
|
||
|
||
# the switch from level 3 to ordered should not introduce a newline between
|
||
!! test
|
||
Mixed list
|
||
!! wikitext
|
||
*Mixed list
|
||
*#with numbers
|
||
**and bullets
|
||
*#and numbers
|
||
*bullets again
|
||
**bullet level 2
|
||
***bullet level 3
|
||
***#Number on level 4
|
||
**bullet level 2
|
||
**#Number on level 3
|
||
**#Number on level 3
|
||
*#number level 2
|
||
*Level 1
|
||
***Level 3
|
||
#**Level 3, but ordered
|
||
!! html
|
||
<ul><li>Mixed list
|
||
<ol><li>with numbers</li></ol>
|
||
<ul><li>and bullets</li></ul>
|
||
<ol><li>and numbers</li></ol></li>
|
||
<li>bullets again
|
||
<ul><li>bullet level 2
|
||
<ul><li>bullet level 3
|
||
<ol><li>Number on level 4</li></ol></li></ul></li>
|
||
<li>bullet level 2
|
||
<ol><li>Number on level 3</li>
|
||
<li>Number on level 3</li></ol></li></ul>
|
||
<ol><li>number level 2</li></ol></li>
|
||
<li>Level 1
|
||
<ul><li><ul><li>Level 3</li></ul></li></ul></li></ul>
|
||
<ol><li><ul><li><ul><li>Level 3, but ordered</li></ul></li></ul></li></ol>
|
||
!! end
|
||
|
||
!! test
|
||
1. Nested mixed wikitext and html list
|
||
!! wikitext
|
||
*hi
|
||
*<ul><li>ho</li></ul>
|
||
*hi
|
||
**ho
|
||
!! html/php
|
||
<ul><li>hi</li>
|
||
<li><ul><li>ho</li></ul></li>
|
||
<li>hi
|
||
<ul><li>ho</li></ul></li></ul>
|
||
!! html/parsoid
|
||
<ul><li>hi</li>
|
||
<li><ul data-parsoid='{"stx":"html"}'><li data-parsoid='{"stx":"html"}'>ho</li></ul></li>
|
||
<li>hi
|
||
<ul><li>ho</li></ul></li></ul>
|
||
!! end
|
||
|
||
!! test
|
||
2. Nested mixed wikitext and html list (incompatible)
|
||
!! wikitext
|
||
;hi
|
||
:{{1x|<li>ho</li>}}
|
||
!! html/php
|
||
<dl><dt>hi</dt>
|
||
<dd><li>ho</li></dd></dl>
|
||
!! html/parsoid
|
||
<dl><dt>hi</dt>
|
||
<dd><li about="#mwt1" typeof="mw:Transclusion" data-parsoid='{"stx":"html","pi":[[{"k":"1"}]]}' data-mw='{"parts":[{"template":{"target":{"wt":"1x","href":"./Template:1x"},"params":{"1":{"wt":"<li>ho</li>"}},"i":0}}]}'>ho</li></dd></dl>
|
||
!! end
|
||
|
||
!! test
|
||
Nested lists 1
|
||
!! wikitext
|
||
*foo
|
||
**bar
|
||
!! html
|
||
<ul><li>foo
|
||
<ul><li>bar</li></ul></li></ul>
|
||
!! end
|
||
|
||
!! test
|
||
Nested lists 2
|
||
!! wikitext
|
||
**foo
|
||
*bar
|
||
!! html
|
||
<ul><li><ul><li>foo</li></ul></li>
|
||
<li>bar</li></ul>
|
||
!! end
|
||
|
||
!! test
|
||
Nested lists 3 (first element empty)
|
||
!! wikitext
|
||
*
|
||
**bar
|
||
!! html
|
||
<ul><li>
|
||
<ul><li>bar</li></ul></li></ul>
|
||
!! end
|
||
|
||
!! test
|
||
Nested lists 4 (first element empty)
|
||
!! wikitext
|
||
**
|
||
*bar
|
||
!! html
|
||
<ul><li><ul><li class="mw-empty-elt"></li></ul></li>
|
||
<li>bar</li></ul>
|
||
!! end
|
||
|
||
!! test
|
||
Nested lists 5 (both elements empty)
|
||
!! wikitext
|
||
**
|
||
*
|
||
!! html
|
||
<ul><li><ul><li class="mw-empty-elt"></li></ul></li>
|
||
<li class="mw-empty-elt"></li></ul>
|
||
!! end
|
||
|
||
!! test
|
||
Nested lists 6 (both elements empty)
|
||
!! wikitext
|
||
*
|
||
**
|
||
!! html
|
||
<ul><li>
|
||
<ul><li class="mw-empty-elt"></li></ul></li></ul>
|
||
!! end
|
||
|
||
!! test
|
||
Nested lists 7 (skip initial nesting levels)
|
||
!! wikitext
|
||
***foo
|
||
!! html
|
||
<ul><li><ul><li><ul><li>foo</li></ul></li></ul></li></ul>
|
||
!! end
|
||
|
||
!! test
|
||
Nested lists 8 (multiple nesting transitions)
|
||
!! wikitext
|
||
*foo
|
||
***bar
|
||
**baz
|
||
*boo
|
||
!! html
|
||
<ul><li>foo
|
||
<ul><li><ul><li>bar</li></ul></li>
|
||
<li>baz</li></ul></li>
|
||
<li>boo</li></ul>
|
||
!! end
|
||
|
||
!! test
|
||
Nested lists 9 (extension interaction)
|
||
!! wikitext
|
||
*<tag />
|
||
!! html/php
|
||
<ul><li><pre></pre></li></ul>
|
||
<p>NULL
|
||
array (
|
||
)
|
||
</p>
|
||
!! html/parsoid
|
||
<ul><li data-parsoid='{}'><pre typeof="mw:Extension/tag" about="#mwt2" data-parsoid='{"dsr":[1,8,7,0]}' data-mw='{"name":"tag","attrs":{}}'>NULL
|
||
array (
|
||
)
|
||
</pre></li></ul>
|
||
!! end
|
||
|
||
!! test
|
||
Nested lists 10 (list and span siblings: wt2wt regression)
|
||
!! wikitext
|
||
*a <span>x</span>
|
||
**b <span>y</span>
|
||
!! html/parsoid
|
||
<ul><li>a <span>x</span>
|
||
<ul><li>b <span>y</span></li></ul></li></ul>
|
||
!! end
|
||
|
||
!! test
|
||
Nested lists 11 (T262409: trailing whitespace & selser)
|
||
!! options
|
||
parsoid={
|
||
"modes": ["wt2html","selser"],
|
||
"changes": [
|
||
[ "ul > li > ul > li > ul > li", "after", "<li>b-new</li>" ]
|
||
]
|
||
}
|
||
!! wikitext
|
||
**a
|
||
***b
|
||
!! html/parsoid
|
||
<ul><li><ul><li>a
|
||
<ul><li>b</li></ul></li></ul></li></ul>
|
||
!! wikitext/edited
|
||
**a
|
||
***b
|
||
*** b-new
|
||
!! end
|
||
|
||
!! test
|
||
1. Lists and block-element interaction
|
||
!! options
|
||
parsoid=wt2html,selser
|
||
!! wikitext
|
||
*<div>a
|
||
*b
|
||
</div>ಕ
|
||
!! html/php
|
||
<ul><li><div>a</div></li>
|
||
<li>b</li></ul>
|
||
<p>ಕ</p>
|
||
!! html/parsoid
|
||
<ul><li><div data-parsoid='{"stx":"html","autoInsertedEnd":true}'>a</div></li>
|
||
<li>b</li></ul>
|
||
<p>ಕ</p>
|
||
!! end
|
||
|
||
!! test
|
||
2. Lists and block-element interaction
|
||
!! options
|
||
parsoid=wt2html,selser
|
||
!! wikitext
|
||
*{{1x|<div>a
|
||
*b
|
||
}}</div>ಕ
|
||
!! html/php
|
||
<ul><li><div>a</div></li>
|
||
<li>b</li></ul>
|
||
<p>ಕ</p>
|
||
!! html/parsoid
|
||
<ul about="#mwt1" typeof="mw:Transclusion" data-parsoid='{"firstWikitextNode":"UL","pi":[[{"k":"1"}]]}' data-mw='{"parts":["*",{"template":{"target":{"wt":"1x","href":"./Template:1x"},"params":{"1":{"wt":"<div>a\n*b\n"}},"i":0}}]}'><li><div>a</div></li>
|
||
<li>b</li></ul><span about="#mwt1">
|
||
</span><p>ಕ</p>
|
||
!! end
|
||
|
||
!! test
|
||
1. Lists with start-of-line-transparent tokens before bullets: Comments
|
||
!! wikitext
|
||
*foo
|
||
*<!--cmt-->bar
|
||
<!--cmt-->*baz
|
||
!! html
|
||
<ul><li>foo</li>
|
||
<li>bar</li>
|
||
<li>baz</li></ul>
|
||
!! html/parsoid
|
||
<ul><li>foo</li>
|
||
<li><!--cmt-->bar</li>
|
||
<!--cmt--><li>baz</li></ul>
|
||
!! end
|
||
|
||
# Parsoid handles this case differently from the legacy parser, as a side
|
||
# effect of handling SOL state in the tokenizer.
|
||
!! test
|
||
2. Lists with start-of-line-transparent tokens before bullets: Template close
|
||
!! wikitext
|
||
*foo {{1x|bar
|
||
}}*baz
|
||
!! html/php
|
||
<ul><li>foo bar</li>
|
||
<li>baz</li></ul>
|
||
!! html/parsoid
|
||
<ul about="#mwt1" typeof="mw:Transclusion" data-parsoid='{"firstWikitextNode":"UL","pi":[[{"k":"1"}]]}' data-mw='{"parts":["*foo ",{"template":{"target":{"wt":"1x","href":"./Template:1x"},"params":{"1":{"wt":"bar\n"}},"i":0}}]}'><li>foo bar</li><li about="#mwt1">
|
||
baz</li></ul>
|
||
!! end
|
||
|
||
!! test
|
||
List items are not parsed correctly following a <pre> block (T2785)
|
||
!! wikitext
|
||
*<pre>foo</pre>
|
||
*<pre>bar</pre>
|
||
*zar
|
||
!! html/php
|
||
<ul><li><pre>foo</pre></li>
|
||
<li><pre>bar</pre></li>
|
||
<li>zar</li></ul>
|
||
!! html/parsoid
|
||
<ul><li><pre typeof="mw:Extension/pre" about="#mwt2" data-mw='{"name":"pre","attrs":{},"body":{"extsrc":"foo"}}'>foo</pre></li>
|
||
<li><pre typeof="mw:Extension/pre" about="#mwt4" data-mw='{"name":"pre","attrs":{},"body":{"extsrc":"bar"}}'>bar</pre></li>
|
||
<li>zar</li></ul>
|
||
!! 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/php
|
||
<ul><li>item 1</li>
|
||
<li>item 2</li></ul>
|
||
<ul><li>item 0</li>
|
||
<li>item 1</li>
|
||
<li>item 2</li></ul>
|
||
<ul><li>item 0</li>
|
||
<li>notSOL</li>
|
||
<li>item 1</li>
|
||
<li>item 2</li></ul>
|
||
!! html/parsoid
|
||
<ul about="#mwt1" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"inner list","href":"./Template:Inner_list"},"params":{},"i":0}},"\n*item 2"]}'><li>item 1</li>
|
||
<li>item 2</li></ul>
|
||
|
||
<ul><li>item 0</li>
|
||
<li about="#mwt2" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"inner list","href":"./Template:Inner_list"},"params":{},"i":0}}]}'>item 1</li>
|
||
<li>item 2</li></ul>
|
||
|
||
<ul><li>item 0</li>
|
||
<li>notSOL</li><span about="#mwt3" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"inner list","href":"./Template:Inner_list"},"params":{},"i":0}}]}'>
|
||
</span><li about="#mwt3">item 1</li>
|
||
<li>item 2</li></ul>
|
||
!! end
|
||
|
||
!! test
|
||
List interrupted by empty line or heading
|
||
!! config
|
||
wgParserEnableLegacyHeadingDOM=false
|
||
!! wikitext
|
||
*foo
|
||
|
||
**bar
|
||
==A heading==
|
||
*Another list item
|
||
!! html
|
||
<ul><li>foo</li></ul>
|
||
<ul><li><ul><li>bar</li></ul></li></ul>
|
||
<div class="mw-heading mw-heading2"><h2 id="A_heading">A heading</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&action=edit&section=1" title="Edit section: A heading">edit</a><span class="mw-editsection-bracket">]</span></span></div>
|
||
<ul><li>Another list item</li></ul>
|
||
!! html/parsoid
|
||
<ul><li>foo</li></ul>
|
||
|
||
<ul><li><ul><li>bar</li></ul></li></ul>
|
||
<h2 id="A_heading">A heading</h2>
|
||
<ul><li>Another list item</li></ul>
|
||
!!end
|
||
|
||
!! test
|
||
Multiple list tags generated by templates
|
||
!! wikitext
|
||
{{1x|<li>}}a
|
||
{{1x|<li>}}b
|
||
{{1x|<li>}}c
|
||
!! html/php
|
||
<li>a
|
||
</li><li>b
|
||
</li><li>c</li>
|
||
!! html/parsoid
|
||
<li about="#mwt1" typeof="mw:Transclusion" data-parsoid='{"stx":"html","autoInsertedEnd":true,"pi":[[{"k":"1"}]]}' data-mw='{"parts":[{"template":{"target":{"wt":"1x","href":"./Template:1x"},"params":{"1":{"wt":"<li>"}},"i":0}},"a"]}'>a</li>
|
||
<li about="#mwt2" typeof="mw:Transclusion" data-parsoid='{"stx":"html","autoInsertedEnd":true,"pi":[[{"k":"1"}]]}' data-mw='{"parts":[{"template":{"target":{"wt":"1x","href":"./Template:1x"},"params":{"1":{"wt":"<li>"}},"i":0}},"b"]}'>b</li>
|
||
<li about="#mwt3" typeof="mw:Transclusion" data-parsoid='{"stx":"html","autoInsertedEnd":true,"pi":[[{"k":"1"}]]}' data-mw='{"parts":[{"template":{"target":{"wt":"1x","href":"./Template:1x"},"params":{"1":{"wt":"<li>"}},"i":0}},"c"]}'>c</li>
|
||
!! end
|
||
|
||
!! test
|
||
Multiple newlines in between HTML list items don't induce paragraph wrapping
|
||
!! wikitext
|
||
<ul>
|
||
<li>hi</li>
|
||
|
||
|
||
|
||
|
||
<li>ho</li>
|
||
</ul>
|
||
|
||
<dl>
|
||
<dt>hi</dt>
|
||
<dd>ho<div>123</div>
|
||
</dd>
|
||
|
||
|
||
</dl>
|
||
!! html/php
|
||
<ul>
|
||
<li>hi</li>
|
||
|
||
|
||
|
||
|
||
<li>ho</li>
|
||
</ul>
|
||
<dl>
|
||
<dt>hi</dt>
|
||
<dd>ho<div>123</div>
|
||
</dd>
|
||
|
||
|
||
</dl>
|
||
!! end
|
||
|
||
!!test
|
||
Single-comment whitespace lines dont break lists, and neither do multi-comment whitespace lines
|
||
!! wikitext
|
||
*a
|
||
<!--This line will NOT split the list-->
|
||
*b
|
||
<!--This line will NOT split the list either-->
|
||
*c
|
||
<!--foo--> <!----> <!--This line NOT split the list either-->
|
||
*d
|
||
!! html
|
||
<ul><li>a</li>
|
||
<li>b</li>
|
||
<li>c</li>
|
||
<li>d</li></ul>
|
||
!!end
|
||
|
||
!!test
|
||
Replacing whitespace with tabs still doesn't break the list (gerrit 78327)
|
||
!! wikitext
|
||
*a
|
||
<!--This line will NOT split the list-->
|
||
*b
|
||
<!--This line will NOT split the list either-->
|
||
*c
|
||
<!--foo--> <!----> <!--This line NOT split the list
|
||
either-->
|
||
*d
|
||
!! html
|
||
<ul><li>a</li>
|
||
<li>b</li>
|
||
<li>c</li>
|
||
<li>d</li></ul>
|
||
!!end
|
||
|
||
## FIXME: This test could possibly be renamed / simplified since this is
|
||
## no longer a hack and works as expected without any special handling.
|
||
!!test
|
||
Test the li-hack (a hack from Tidy days, but doesn't work as advertised with Remex)
|
||
!!options
|
||
parsoid=wt2html,wt2wt
|
||
!! wikitext
|
||
*foo
|
||
*<li>li-hack
|
||
**bar1
|
||
*{{1x|<li>templated li-hack}}
|
||
**bar2
|
||
*<!--foo--><li> unsupported li-hack with preceding comments
|
||
|
||
<ul>
|
||
<li><li>not a li-hack
|
||
</li>
|
||
</ul>
|
||
!! html/php
|
||
<ul><li>foo</li>
|
||
<li class="mw-empty-elt"></li><li>li-hack
|
||
<ul><li>bar1</li></ul></li>
|
||
<li class="mw-empty-elt"></li><li>templated li-hack
|
||
<ul><li>bar2</li></ul></li>
|
||
<li class="mw-empty-elt"></li><li> unsupported li-hack with preceding comments</li></ul>
|
||
<ul>
|
||
<li class="mw-empty-elt"></li><li>not a li-hack
|
||
</li>
|
||
</ul>
|
||
!! html/parsoid
|
||
<ul><li>foo</li>
|
||
<li class="mw-empty-elt"></li><li data-parsoid='{"stx":"html","autoInsertedEnd":true}'>li-hack
|
||
<ul><li>bar1</li></ul></li>
|
||
<li class="mw-empty-elt"></li><li about="#mwt1" typeof="mw:Transclusion" data-parsoid='{"stx":"html","autoInsertedEnd":true,"pi":[[{"k":"1"}]]}' data-mw='{"parts":[{"template":{"target":{"wt":"1x","href":"./Template:1x"},"params":{"1":{"wt":"<li>templated li-hack"}},"i":0}},"\n**bar2"]}'>templated li-hack
|
||
<ul><li>bar2</li></ul></li>
|
||
<li class="mw-empty-elt"><!--foo--></li><li data-parsoid='{"stx":"html","autoInsertedEnd":true}'> unsupported li-hack with preceding comments</li></ul>
|
||
|
||
<ul data-parsoid='{"stx":"html"}'>
|
||
<li class="mw-empty-elt" data-parsoid='{"stx":"html","autoInsertedEnd":true}'></li><li data-parsoid='{"stx":"html"}'>not a li-hack
|
||
</li>
|
||
</ul>
|
||
!! end
|
||
|
||
!! test
|
||
Parsoid: Make sure nested lists are serialized on their own line even if HTML contains no newlines
|
||
!! wikitext
|
||
#foo
|
||
##bar
|
||
|
||
*foo
|
||
**bar
|
||
|
||
:foo
|
||
::bar
|
||
!! html/php
|
||
<ol><li>foo
|
||
<ol><li>bar</li></ol></li></ol>
|
||
<ul><li>foo
|
||
<ul><li>bar</li></ul></li></ul>
|
||
<dl><dd>foo
|
||
<dl><dd>bar</dd></dl></dd></dl>
|
||
!! html/parsoid
|
||
<ol>
|
||
<li>foo<ol>
|
||
<li>bar</li>
|
||
</ol></li>
|
||
</ol><ul>
|
||
<li>foo<ul>
|
||
<li>bar</li>
|
||
</ul></li>
|
||
</ul><dl>
|
||
<dd>foo<dl>
|
||
<dd>bar</dd>
|
||
</dl></dd>
|
||
</dl>
|
||
!! end
|
||
|
||
!! test
|
||
Parsoid: Test of whitespace serialization with Templated bullets
|
||
!! options
|
||
parsoid=wt2html
|
||
!! wikitext
|
||
* {{bullet}}
|
||
!! html/php
|
||
<ul><li class="mw-empty-elt"></li>
|
||
<li>Bar</li></ul>
|
||
!! html/parsoid
|
||
<ul><li class="mw-empty-elt"></li><span about="#mwt1" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"bullet","href":"./Template:Bullet"},"params":{},"i":0}}]}'>
|
||
</span><li about="#mwt1">Bar</li></ul>
|
||
!! end
|
||
|
||
# ------------------------------------------------------------------------
|
||
# The next set of tests are about Parsoid's ability to handle badly nested
|
||
# tags (parse, minimize scope of fixup, and roundtrip back)
|
||
# ------------------------------------------------------------------------
|
||
|
||
!! test
|
||
Unbalanced closing block tags break a list
|
||
!! wikitext
|
||
<div>
|
||
*a</div><div>
|
||
*b</div>
|
||
!! html/php
|
||
<div>
|
||
<ul><li>a</li></ul></div><div>
|
||
<li>b</li></div>
|
||
!! html/parsoid
|
||
<div><ul>
|
||
<li>a</li>
|
||
</ul></div>
|
||
<div><ul>
|
||
<li>b</li>
|
||
</ul></div>
|
||
!! end
|
||
|
||
## We call this "wikitext block" because we're diverging a bit from the HTML5
|
||
## parsing spec. Remex output is because it doesn't need to generate the
|
||
## implied end tag for the list item when encountering the closing </p> but
|
||
## Parsoid's broader definition opts to. This can happen for a number of other
|
||
## tags but those aren't allowed literal tags in wikitext. There's also the
|
||
## opposite problem, where the wikitext blocks aren't a superset of the tags
|
||
## that generate implied ends in HTML5, but the missing ones again aren't
|
||
## allowed literal tags in wikitext.
|
||
!! test
|
||
Unbalanced closing wikitext block tags break a list
|
||
!! wikitext
|
||
<p>
|
||
*a</p><p>
|
||
*b</p>
|
||
!! html/php
|
||
<p class="mw-empty-elt">
|
||
</p><ul><li>a<p class="mw-empty-elt"></p><p class="mw-empty-elt"></p></li>
|
||
<li>b<p class="mw-empty-elt"></p></li></ul>
|
||
!! html/parsoid
|
||
<p class="mw-empty-elt" data-parsoid='{"stx":"html","autoInsertedEnd":true}'></p>
|
||
<ul><li>a</li></ul><p class="mw-empty-elt" data-parsoid='{"autoInsertedStart":true,"stx":"html"}'></p><p class="mw-empty-elt" data-parsoid='{"stx":"html","autoInsertedEnd":true}'></p>
|
||
<ul><li>b</li></ul><p class="mw-empty-elt" data-parsoid='{"autoInsertedStart":true,"stx":"html"}'></p>
|
||
!! end
|
||
|
||
!! test
|
||
Unbalanced closing non-block tags don't break a list
|
||
!! options
|
||
parsoid=wt2html,html2html
|
||
!! wikitext
|
||
<span>
|
||
*a</span><span>
|
||
*b</span>
|
||
!! html/php
|
||
<p><span>
|
||
</span></p>
|
||
<ul><li>a<span></span></li>
|
||
<li>b</li></ul>
|
||
!! html/parsoid
|
||
<p><span data-parsoid='{"stx":"html","autoInsertedEnd":true}'></span></p>
|
||
<ul><li>a<meta typeof="mw:Placeholder/StrippedTag" data-parsoid='{"src":"</span>","name":"span"}'/><span data-parsoid='{"stx":"html","autoInsertedEnd":true}'></span></li>
|
||
<li>b<meta typeof="mw:Placeholder/StrippedTag" data-parsoid='{"src":"</span>","name":"span"}'/></li></ul>
|
||
!! end
|
||
|
||
## The legacy parser output matches the HTML5 spec, the token is ignored.
|
||
## Parsoid's ListHandler doesn't track open elements outside of the list frame
|
||
## so the token induces an implied end to the list. Considering that Parsoid
|
||
## already diverges from the HTML5 spec in which tag names induce implied ends
|
||
## (see the discussion above about "wikitext block"), we accept this edge case
|
||
## as a known difference.
|
||
!! test
|
||
T368721: Closing block tags not on the stack of open elements in lists
|
||
!! wikitext
|
||
<!-- block tag -->
|
||
*a</div>b
|
||
|
||
<!-- wikitext block tag -->
|
||
*a</p>b
|
||
!! html/php
|
||
<ul><li>ab</li></ul>
|
||
<ul><li>a<p class="mw-empty-elt"></p>b</li></ul>
|
||
!! html/parsoid
|
||
<!-- block tag -->
|
||
<ul><li>a</li></ul><p>b</p>
|
||
|
||
<!-- wikitext block tag -->
|
||
<ul><li>a</li></ul><p class="mw-empty-elt" data-parsoid='{"autoInsertedStart":true,"stx":"html"}'></p><p>b</p>
|
||
!! end
|
||
|
||
# Parsoid does some post-dom-building cleanup
|
||
# which is why its output differs from Remex.
|
||
!! test
|
||
Unclosed formatting tags that straddle lists are closed and reopened
|
||
!! options
|
||
parsoid=wt2html,wt2wt,html2html
|
||
!! wikitext
|
||
#<s> a
|
||
#b </s>
|
||
!! html/php
|
||
<ol><li><s> a</s></li><s>
|
||
</s><li><s>b </s></li></ol>
|
||
!! html/parsoid
|
||
<ol><li><s> a</s></li>
|
||
<li><s>b </s></li></ol>
|
||
!! end
|
||
|
||
# Output is ugly because of all the misnested tag fixups.
|
||
!! test
|
||
1. List embedded in a formatting tag
|
||
!! wikitext
|
||
<small>
|
||
*foo
|
||
</small>
|
||
!! html/php
|
||
<p><small>
|
||
</small></p><small><ul><li>foo</li></ul></small><small></small><p><small></small>
|
||
</p>
|
||
!! html/parsoid
|
||
<p><small data-parsoid='{"stx":"html","autoInsertedEnd":true}'></small></p><small data-parsoid='{"stx":"html","autoInsertedEnd":true,"autoInsertedStart":true}'>
|
||
<ul><li data-parsoid='{}'>foo</li></ul></small>
|
||
<p><small data-parsoid='{"stx":"html","autoInsertedStart":true}'></small></p>
|
||
!! end
|
||
|
||
# Output is ugly because of all the misnested tag fixups.
|
||
!! test
|
||
2. List embedded in a formatting tag in a misnested way
|
||
!! wikitext
|
||
<small>
|
||
*a
|
||
*b</small>
|
||
!! html/php
|
||
<p><small>
|
||
</small></p><small></small><ul><small><li>a</li>
|
||
</small><li><small>b</small></li></ul>
|
||
!! html/parsoid
|
||
<p><small data-parsoid='{"stx":"html","autoInsertedEnd":true}'></small></p>
|
||
<ul><small data-parsoid='{"stx":"html","autoInsertedEnd":true,"autoInsertedStart":true}'><li>a</li></small>
|
||
<li><small data-parsoid='{"stx":"html","autoInsertedStart":true}'>b</small></li></ul>
|
||
!! end
|
||
|
||
# Output is ugly because of all the misnested tag fixups.
|
||
!! test
|
||
3. List embedded in a formatting tag in a misnested way
|
||
!! wikitext
|
||
<small>
|
||
|
||
** 123</small>
|
||
!! html/php
|
||
<p><small>
|
||
</small></p><small></small><ul><small></small><li><small></small><ul><small></small><li><small>123</small></li></ul></li></ul>
|
||
!! html/parsoid
|
||
<p><small data-parsoid='{"stx":"html","autoInsertedEnd":true}'></small></p>
|
||
|
||
<ul><li><ul><li data-parsoid='{}'><small data-parsoid='{"stx":"html","autoInsertedStart":true}'> 123</small></li></ul></li></ul>
|
||
!! end
|
||
|
||
!! test
|
||
Parsoid: unknown parser function (T314524)
|
||
!! wikitext
|
||
{{#tag:b|This is a known parser function}}
|
||
|
||
Now show the unknown parser functions for comparison.
|
||
|
||
{{#foo}}
|
||
|
||
{{#foo:bar|bat}}
|
||
!! html/php
|
||
<p><b>This is a known parser function</b>
|
||
</p><p>Now show the unknown parser functions for comparison.
|
||
</p><p>{{#foo}}
|
||
</p><p>{{#foo:bar|bat}}
|
||
</p>
|
||
!! html/parsoid+standalone
|
||
<p><b typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"#tag:b","function":"tag"},"params":{"1":{"wt":"This is a known parser function"}},"i":0}}]}'>This is a known parser function</b></p>
|
||
<p>Now show the unknown parser functions for comparison.</p>
|
||
<p><span typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"#foo","function":"foo"},"params":{},"i":0}}]}'>Parser function implementation for pf_foo missing in Parsoid.</span></p>
|
||
<p><span typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"#foo:bar","function":"foo"},"params":{"1":{"wt":"bat"}},"i":0}}]}'>Parser function implementation for pf_foo missing in Parsoid.</span></p>
|
||
!! html/parsoid+integrated
|
||
<p><b typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"#tag:b","function":"tag"},"params":{"1":{"wt":"This is a known parser function"}},"i":0}}]}'>This is a known parser function</b></p>
|
||
<p>Now show the unknown parser functions for comparison.</p>
|
||
<p><span typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"#foo","function":"foo"},"params":{},"i":0}}]}'>{{#foo}}</span></p>
|
||
<p><span typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"#foo:bar","function":"foo"},"params":{"1":{"wt":"bat"}},"i":0}}]}'>{{#foo:bar|bat}}</span></p>
|
||
!! end
|
||
|
||
# From plwiki:PLOS_ONE
|
||
!! test
|
||
Parsoid: Page property magic word with magic word contents
|
||
!! options
|
||
showtitle
|
||
!! config
|
||
wgAllowDisplayTitle=true
|
||
wgRestrictDisplayTitle=false
|
||
!! wikitext
|
||
{{DISPLAYTITLE:''{{PAGENAME}}''}}
|
||
!! metadata
|
||
<i>Parser test</i>
|
||
!! html/php
|
||
!! html/parsoid+integrated
|
||
<span about="#mwt3" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"DISPLAYTITLE:''{{PAGENAME}}''","function":"displaytitle"},"params":{},"i":0}}]}'></span>
|
||
!! 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.php in processSpecialMagicWord
|
||
!! test
|
||
Parsoid: Template-generated DISPLAYTITLE
|
||
!! wikitext
|
||
{{{{1x|DISPLAYTITLE}}:Foo}}
|
||
!! options
|
||
showtitle
|
||
!! config
|
||
wgAllowDisplayTitle=true
|
||
wgRestrictDisplayTitle=false
|
||
!! metadata
|
||
Foo
|
||
!! html/php
|
||
!! html/parsoid+integrated
|
||
<span about="#mwt1" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"{{1x|DISPLAYTITLE}}:Foo","function":"displaytitle"},"params":{},"i":0}}]}'></span>
|
||
!! end
|
||
|
||
# Can be removed when T335843 is addressed
|
||
!! test
|
||
Parsoid html2wt b/c check: Cached Parsoid HTML for DISPLAYTITLE should be handled properly
|
||
!! options
|
||
parsoid=html2wt
|
||
!! html/parsoid
|
||
<meta property='mw:PageProp/displaytitle' content='foo'/>
|
||
<meta property="mw:PageProp/displaytitle" content="Parser test" about="#mwt3" typeof="mw:ExpandedAttrs" data-parsoid='{"src":"{{DISPLAYTITLE:''{{PAGENAME}}''}}"}' data-mw='{"attribs":[[{"txt":"content"},{"html":"DISPLAYTITLE:<i data-parsoid='{\"dsr\":[15,31,2,2]}'><span about=\"#mwt1\" typeof=\"mw:Transclusion\" data-parsoid='{\"pi\":[[]],\"dsr\":[17,29,null,null]}' data-mw='{\"parts\":[{\"template\":{\"target\":{\"wt\":\"PAGENAME\",\"function\":\"pagename\"},\"params\":{},\"i\":0}}]}'>Parser test</span></i>"}]]}'/>
|
||
<meta property="mw:PageProp/displaytitle" content="Foo" about="#mwt1" typeof="mw:ExpandedAttrs" data-mw='{"attribs":[[{"txt":"content"},{"html":"<span about=\"#mwt1\" typeof=\"mw:Transclusion\" data-parsoid='{\"pi\":[[{\"k\":\"1\"}]],\"dsr\":[2,23,null,null]}' data-mw='{\"parts\":[{\"template\":{\"target\":{\"wt\":\"1x\",\"href\":\"./Template:1x\"},\"params\":{\"1\":{\"wt\":\"DISPLAYTITLE\"}},\"i\":0}}]}'>DISPLAYTITLE</span>:Foo"}]]}'/>
|
||
!! wikitext
|
||
{{DISPLAYTITLE:foo}}
|
||
{{DISPLAYTITLE:''{{PAGENAME}}''}}
|
||
{{{{1x|DISPLAYTITLE}}:Foo}}
|
||
!! end
|
||
|
||
!! test
|
||
Namespace 1 {{ns:1}}
|
||
!! wikitext
|
||
{{ns:1}}
|
||
!! html/php
|
||
<p>Talk
|
||
</p>
|
||
!! html/parsoid+integrated
|
||
<p><span about="#mwt1" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"ns:1","function":"ns"},"params":{},"i":0}}]}'>Talk</span></p>
|
||
!! end
|
||
|
||
!! test
|
||
Namespace 1 {{ns:01}}
|
||
!! wikitext
|
||
{{ns:01}}
|
||
!! html/php
|
||
<p>Talk
|
||
</p>
|
||
!! html/parsoid+integrated
|
||
<p><span about="#mwt1" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"ns:01","function":"ns"},"params":{},"i":0}}]}'>Talk</span></p>
|
||
!! end
|
||
|
||
!! test
|
||
Namespace 0 {{ns:0}} (T6783)
|
||
!! wikitext
|
||
{{ns:0}}
|
||
!! html/php
|
||
!! html/parsoid+integrated
|
||
<span about="#mwt1" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"ns:0","function":"ns"},"params":{},"i":0}}]}'></span>
|
||
!! end
|
||
|
||
!! test
|
||
Namespace 0 {{ns:00}} (T6783)
|
||
!! wikitext
|
||
{{ns:00}}
|
||
!! html/php
|
||
!! html/parsoid+integrated
|
||
<span about="#mwt1" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"ns:00","function":"ns"},"params":{},"i":0}}]}'></span>
|
||
!! end
|
||
|
||
!! test
|
||
Namespace -1 {{ns:-1}}
|
||
!! wikitext
|
||
{{ns:-1}}
|
||
!! html/php
|
||
<p>Special
|
||
</p>
|
||
!! html/parsoid+integrated
|
||
<p><span about="#mwt1" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"ns:-1","function":"ns"},"params":{},"i":0}}]}'>Special</span></p>
|
||
!! end
|
||
|
||
!! test
|
||
Namespace User {{ns:User}}
|
||
!! wikitext
|
||
{{ns:User}}
|
||
!! html
|
||
<p>User
|
||
</p>
|
||
!! end
|
||
|
||
!! test
|
||
Namespace User talk {{ns:User_talk}}
|
||
!! wikitext
|
||
{{ns:User_talk}}
|
||
!! html
|
||
<p>User talk
|
||
</p>
|
||
!! end
|
||
|
||
!! test
|
||
Namespace User talk {{ns:uSeR tAlK}}
|
||
!! wikitext
|
||
{{ns:uSeR tAlK}}
|
||
!! html
|
||
<p>User talk
|
||
</p>
|
||
!! end
|
||
|
||
!! test
|
||
Namespace File {{ns:File}}
|
||
!! wikitext
|
||
{{ns:File}}
|
||
!! html
|
||
<p>File
|
||
</p>
|
||
!! end
|
||
|
||
!! test
|
||
Namespace File {{ns:Image}}
|
||
!! wikitext
|
||
{{ns:Image}}
|
||
!! html
|
||
<p>File
|
||
</p>
|
||
!! end
|
||
|
||
!! test
|
||
Namespace (lang=de) Benutzer {{ns:User}}
|
||
!! options
|
||
language=de
|
||
!! wikitext
|
||
{{ns:User}}
|
||
!! html
|
||
<p>Benutzer
|
||
</p>
|
||
!! end
|
||
|
||
!! test
|
||
Namespace (lang=de) Benutzer Diskussion {{ns:3}}
|
||
!! options
|
||
language=de
|
||
!! wikitext
|
||
{{ns:3}}
|
||
!! html
|
||
<p>Benutzer Diskussion
|
||
</p>
|
||
!! end
|
||
|
||
!! test
|
||
Urlencode
|
||
!! wikitext
|
||
{{urlencode:hi world?!}}
|
||
{{urlencode:hi world?!|WIKI}}
|
||
{{urlencode:hi world?!|PATH}}
|
||
{{urlencode:hi world?!|QUERY}}
|
||
!! html/php
|
||
<p>hi+world%3F%21
|
||
hi_world%3F!
|
||
hi%20world%3F%21
|
||
hi+world%3F%21
|
||
</p>
|
||
!! end
|
||
|
||
!!test
|
||
__proto__ is treated as normal wikitext (T105997)
|
||
!!wikitext
|
||
__proto__
|
||
!!html
|
||
<p>__proto__
|
||
</p>
|
||
!!end
|
||
|
||
###
|
||
### Templates
|
||
####
|
||
|
||
!! test
|
||
Template titles with entities in them
|
||
!! wikitext
|
||
*{{Foo–bar}}
|
||
*{{Foo–bar}}
|
||
!! html/php
|
||
<ul><li>foo</li>
|
||
<li>foo</li></ul>
|
||
!! html/parsoid
|
||
<ul>
|
||
<li data-parsoid="{}"><span typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"Foo–bar","href":"./Template:Foo–bar"},"params":{},"i":0}}]}'>foo</span></li>
|
||
<li data-parsoid="{}"><span typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"Foo&ndash;bar","href":"./Template:Foo–bar"},"params":{},"i":0}}]}'>foo</span></li>
|
||
</ul>
|
||
!! end
|
||
|
||
!! test
|
||
Nonexistent template
|
||
!! wikitext
|
||
{{thistemplatedoesnotexist}}
|
||
!! html/php
|
||
<p><a href="/index.php?title=Template:Thistemplatedoesnotexist&action=edit&redlink=1" class="new" title="Template:Thistemplatedoesnotexist (page does not exist)">Template:Thistemplatedoesnotexist</a>
|
||
</p>
|
||
!! html/parsoid
|
||
<p><a rel="mw:WikiLink" href="./Template:Thistemplatedoesnotexist?action=edit&redlink=1" title="Template:Thistemplatedoesnotexist" about="#mwt1" typeof="mw:Transclusion mw:LocalizedAttrs" class="new" data-parsoid='{"stx":"simple","a":{"href":"./Template:Thistemplatedoesnotexist"},"sa":{"href":"Template:Thistemplatedoesnotexist"},"pi":[[]]}' data-mw='{"parts":[{"template":{"target":{"wt":"thistemplatedoesnotexist","href":"./Template:Thistemplatedoesnotexist"},"params":{},"i":0}}]}' data-mw-i18n='{"title":{"lang":"x-page","key":"red-link-title","params":["Template:Thistemplatedoesnotexist"]}}'>Template:Thistemplatedoesnotexist</a></p>
|
||
!! end
|
||
|
||
!! test
|
||
Template with invalid target containing tags
|
||
!! wikitext
|
||
{{a<b>b</b>|{{1x|foo}}|{{1x|a}}={{1x|b}}|a = b}}
|
||
!! html
|
||
<p>{{a<b>b</b>|foo|a=b|a = b}}
|
||
</p>
|
||
!! end
|
||
|
||
!! test
|
||
Template with invalid target containing unclosed tag
|
||
!! options
|
||
parsoid=wt2html
|
||
!! wikitext
|
||
{{a<b>|{{1x|foo}}|{{1x|a}}={{1x|b}}|a = b}}
|
||
!! html/php
|
||
<p>{{a<b>|foo|a=b|a = b}}
|
||
</b></p>
|
||
!! html/parsoid
|
||
<p>{{a<b data-parsoid='{"stx":"html","autoInsertedEnd":true}'>|<span about="#mwt2" typeof="mw:Transclusion" data-parsoid='{"pi":[[{"k":"1"}]]}' data-mw='{"parts":[{"template":{"target":{"wt":"1x","href":"./Template:1x"},"params":{"1":{"wt":"foo"}},"i":0}}]}'>foo</span>|<span about="#mwt3" typeof="mw:Transclusion" data-parsoid='{"pi":[[{"k":"1"}]]}' data-mw='{"parts":[{"template":{"target":{"wt":"1x","href":"./Template:1x"},"params":{"1":{"wt":"a"}},"i":0}}]}'>a</span>=<span about="#mwt4" typeof="mw:Transclusion" data-parsoid='{"pi":[[{"k":"1"}]]}' data-mw='{"parts":[{"template":{"target":{"wt":"1x","href":"./Template:1x"},"params":{"1":{"wt":"b"}},"i":0}}]}'>b</span>|a = b}}</b></p>
|
||
!! end
|
||
|
||
!! test
|
||
Template with invalid target containing wikilink
|
||
!! wikitext
|
||
{{[[Main Page]]}}
|
||
!! html/php
|
||
<p>{{<a href="/wiki/Main_Page" title="Main Page">Main Page</a>}}
|
||
</p>
|
||
!! html/parsoid
|
||
<p><span typeof="mw:Transclusion" about="#mwt1" data-mw='{"parts":[{"template":{"target":{"wt":"[[Main Page]]"},"params":{},"i":0}}]}'>{{</span><a rel="mw:WikiLink" href="./Main_Page" about="#mwt1">Main Page</a><span about="#mwt1">}}</span></p>
|
||
!! end
|
||
|
||
# The html2html output of this test is currently failing
|
||
# because the html2wt output is broken; see
|
||
# https://phabricator.wikimedia.org/T220018#5123777 for a discussion.
|
||
# Not (yet) including html2wt as a test mode because there are
|
||
# a couple of different correct ways this could be <nowiki>'ed.
|
||
!! test
|
||
Template with just whitespace in it, T70421
|
||
!! wikitext
|
||
{{1x|{{ }}}}
|
||
!! options
|
||
parsoid=wt2html,html2html
|
||
!! html/php
|
||
<p>{{ }}
|
||
</p>
|
||
!! html/parsoid
|
||
<p><span about="#mwt1" typeof="mw:Transclusion" data-parsoid='{"pi":[[{"k":"1"}]]}' data-mw='{"parts":[{"template":{"target":{"wt":"1x","href":"./Template:1x"},"params":{"1":{"wt":"{{ }}"}},"i":0}}]}'>{{ }}</span></p>
|
||
!! end
|
||
|
||
# This is currently the wikitext output of html2wt on the above test
|
||
# case; note that it is broken! Adding a <nowiki> around the closing
|
||
# brace changes how the open braces associate, breaking the outer
|
||
# {{1x}} template invocation. *However* this "broken" wikitext
|
||
# exposed a useful tokenizer bug (T221384) in how the broken_template
|
||
# rule was being backtracked into, so it's a useful test case even
|
||
# if/when the above test case gets its html2wt output fixed.
|
||
!! test
|
||
Template with just whitespace (bad template brace matching)
|
||
!! options
|
||
parsoid=wt2html
|
||
!! wikitext
|
||
{{1x|{{ }<nowiki>}</nowiki>}}
|
||
!! html/php
|
||
<p>{{1x|{{ }}}}
|
||
</p>
|
||
!! html/parsoid
|
||
<p>{{1x|{{ }<span typeof="mw:Nowiki">}</span>}}</p>
|
||
!! end
|
||
|
||
!! article
|
||
Template:test
|
||
!! text
|
||
This is a test template
|
||
!! endarticle
|
||
|
||
!! test
|
||
Simple template
|
||
!! wikitext
|
||
{{test}}
|
||
!! html
|
||
<p>This is a test template
|
||
</p>
|
||
!! end
|
||
|
||
!! test
|
||
Template with explicit namespace
|
||
!! wikitext
|
||
{{Template:test}}
|
||
!! html
|
||
<p>This is a test template
|
||
</p>
|
||
!! end
|
||
|
||
|
||
!! article
|
||
Template:paramtest
|
||
!! text
|
||
This is a test template with parameter {{{param}}}
|
||
!! endarticle
|
||
|
||
!! test
|
||
Template parameter
|
||
!! wikitext
|
||
{{paramtest|param=foo}}
|
||
!! html
|
||
<p>This is a test template with parameter foo
|
||
</p>
|
||
!! end
|
||
|
||
!! article
|
||
Template:paramtestnum
|
||
!! text
|
||
[[{{{1}}}|{{{2}}}]]
|
||
!! endarticle
|
||
|
||
!! test
|
||
Template unnamed parameter
|
||
!! wikitext
|
||
{{paramtestnum|Main Page|the main page}}
|
||
!! html
|
||
<p><a href="/wiki/Main_Page" title="Main Page">the main page</a>
|
||
</p>
|
||
!! end
|
||
|
||
!! article
|
||
Template:templatesimple
|
||
!! text
|
||
(test)
|
||
!! endarticle
|
||
|
||
!! article
|
||
Template:templateredirect
|
||
!! text
|
||
#redirect [[Template:templatesimple]]
|
||
!! endarticle
|
||
|
||
!! article
|
||
Template:templateasargtestnum
|
||
!! text
|
||
{{{{{1}}}}}
|
||
!! endarticle
|
||
|
||
!! article
|
||
Template:templateasargtest
|
||
!! text
|
||
{{template{{{templ}}}}}
|
||
!! endarticle
|
||
|
||
!! article
|
||
Template:templateasargtest2
|
||
!! text
|
||
{{{{{templ}}}}}
|
||
!! endarticle
|
||
|
||
!! test
|
||
Template with template name as unnamed argument
|
||
!! wikitext
|
||
{{templateasargtestnum|templatesimple}}
|
||
!! html
|
||
<p>(test)
|
||
</p>
|
||
!! end
|
||
|
||
!! test
|
||
Template with template name as argument
|
||
!! wikitext
|
||
{{templateasargtest|templ=simple}}
|
||
!! html
|
||
<p>(test)
|
||
</p>
|
||
!! end
|
||
|
||
!! test
|
||
Template with template name as argument (2)
|
||
!! wikitext
|
||
{{templateasargtest2|templ=templatesimple}}
|
||
!! html
|
||
<p>(test)
|
||
</p>
|
||
!! end
|
||
|
||
!! article
|
||
Template:templateasargtestdefault
|
||
!! text
|
||
{{{{{templ|templatesimple}}}}}
|
||
!! endarticle
|
||
|
||
!! article
|
||
Template:templa
|
||
!! text
|
||
'''templ'''
|
||
!! endarticle
|
||
|
||
!! test
|
||
Template with default value
|
||
!! wikitext
|
||
{{templateasargtestdefault}}
|
||
!! html
|
||
<p>(test)
|
||
</p>
|
||
!! end
|
||
|
||
!! test
|
||
Template with default value (value set)
|
||
!! wikitext
|
||
{{templateasargtestdefault|templ=templa}}
|
||
!! html
|
||
<p><b>templ</b>
|
||
</p>
|
||
!! end
|
||
|
||
!! test
|
||
Template redirect
|
||
!! wikitext
|
||
{{templateredirect}}
|
||
!! html/php
|
||
<p>(test)
|
||
</p>
|
||
!! html/parsoid+standalone
|
||
<link rel="mw:PageProp/redirect" href="./Template:Templatesimple" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"templateredirect","href":"./Template:Templateredirect"},"params":{},"i":0}}]}'/>
|
||
!! html/parsoid+integrated
|
||
<p><span typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"templateredirect","href":"./Template:Templateredirect"},"params":{},"i":0}}]}'>(test)</span></p>
|
||
!! end
|
||
|
||
!! test
|
||
Template with argument in separate line
|
||
!! wikitext
|
||
{{ templateasargtest |
|
||
templ = simple }}
|
||
!! html
|
||
<p>(test)
|
||
</p>
|
||
!! end
|
||
|
||
!! test
|
||
Template with complex template as argument
|
||
!! wikitext
|
||
{{paramtest|
|
||
param ={{ templateasargtest |
|
||
templ = simple }}}}
|
||
!! html
|
||
<p>This is a test template with parameter (test)
|
||
</p>
|
||
!! end
|
||
|
||
!! test
|
||
Templates with templated name
|
||
!! wikitext
|
||
{{{{1x|1x}}|foo}}
|
||
{{{{1x|inner list}} }}
|
||
!! html
|
||
<p>foo
|
||
</p>
|
||
<ul><li>item 1</li></ul>
|
||
!! html/parsoid
|
||
<p><span about="#mwt2" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"{{1x|1x}}","href":"./Template:1x"},"params":{"1":{"wt":"foo"}},"i":0}}]}'>foo</span></p>
|
||
<ul about="#mwt4" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"{{1x|inner list}} ","href":"./Template:Inner_list"},"params":{},"i":0}}]}'><li>item 1</li></ul>
|
||
!! end
|
||
|
||
## Regression test; the output here isn't really that interesting.
|
||
## wt2html only, since the bare {{ will get escaped when serializing
|
||
## needs investigation!
|
||
## In integrated mode, since the whole "{{...}}" is sent to core for
|
||
## processing, we wrap the output (unexpanded text) in a Transclusion.
|
||
!! test
|
||
Templates with templated name and top level template args
|
||
!! options
|
||
parsoid=wt2html
|
||
!! wikitext
|
||
{{1{{2{{{3}}}|4=5}}}}
|
||
!! html/php
|
||
<p>{{1{{2{{{3}}}|4=5}}}}
|
||
</p>
|
||
!! html/parsoid+standalone
|
||
<p>{{1{{2<span about="#mwt5" typeof="mw:Param" data-mw='{"parts":[{"templatearg":{"target":{"wt":"3"},"params":{},"i":0}}]}'>{{{3}}}</span>|4=5}}}}</p>
|
||
!! html/parsoid+integrated
|
||
<p>{{1<span typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"2{{{3}}}","href":"./Template:2"},"params":{"4":{"wt":"5"}},"i":0}}]}'>{{2{{{3}}}|4=5}}</span>}}</p>
|
||
!! end
|
||
|
||
## Regression test (T372669) that is only exercised in integrated mode.
|
||
## By adding {{1x|ignore-this[[Category:Foo]]}} to the 2nd param of the surround {{1x|1x}},
|
||
## it ensures that the output is discarded, but not if Parsoid eagerly processes the attribute.
|
||
!! test
|
||
T372669: While processing templates with templated names, other attributes shouldn't be processed
|
||
!! options
|
||
cat
|
||
parsoid=wt2html
|
||
!! wikitext
|
||
{{{{1x|1x}}|foo|{{1x|ignore-this[[Category:Foo]]}}}}
|
||
!! html/php
|
||
<p>foo
|
||
</p>
|
||
!! html/parsoid+integrated
|
||
<p><span about="#mwt1" typeof="mw:Transclusion" data-parsoid='{"pi":[[{"k":"1"},{"k":"2"}]]}' data-mw='{"parts":[{"template":{"target":{"wt":"{{1x|1x}}","href":"./Template:1x"},"params":{"1":{"wt":"foo"},"2":{"wt":"{{1x|ignore-this[[Category:Foo]]}}"}},"i":0}}]}'>foo</span></p>
|
||
!! metadata/php
|
||
!! metadata/parsoid+integrated
|
||
!! end
|
||
|
||
!! test
|
||
T372669: Template names from multiple templates
|
||
!! options
|
||
parsoid=wt2html
|
||
!! wikitext
|
||
{{{{1x|1}}{{1x|x}}|foo}}
|
||
!! html/php
|
||
<p>foo
|
||
</p>
|
||
!! html/parsoid
|
||
<p><span typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"{{1x|1}}{{1x|x}}","href":"./Template:1x"},"params":{"1":{"wt":"foo"}},"i":0}}]}'>foo</span></p>
|
||
!! end
|
||
|
||
## wt2html only, since the bare {{ will get escaped when serializing
|
||
!! test
|
||
Templates with invalid templated targets
|
||
!! options
|
||
parsoid=wt2html
|
||
!! wikitext
|
||
{{1x
|
||
{{1x|foo}}
|
||
}}
|
||
!! html/php
|
||
<p>{{1x
|
||
foo
|
||
}}
|
||
</p>
|
||
!! html/parsoid
|
||
<p>{{1x
|
||
<span about="#mwt3" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"1x","href":"./Template:1x"},"params":{"1":{"wt":"foo"}},"i":0}}]}'>foo</span>
|
||
}}</p>
|
||
!! 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
|
||
<p><a href="/wiki/Template:Complextemplate" title="Template:Complextemplate">link</a> This is a test template with parameter (test)
|
||
</p>
|
||
!! end
|
||
|
||
!! test
|
||
T2553: link with two variables in a piped link
|
||
!! wikitext
|
||
{|
|
||
|[[{{{1}}}|{{{2}}}]]
|
||
|}
|
||
!! html/php
|
||
<table>
|
||
<tbody><tr>
|
||
<td>[[{{{1}}}|{{{2}}}]]
|
||
</td></tr></tbody></table>
|
||
!! html/parsoid
|
||
<table>
|
||
<tbody><tr><td>[[<span about="#mwt5" typeof="mw:Param" data-mw='{"parts":[{"templatearg":{"target":{"wt":"1"},"params":{},"i":0}}]}'>{{{1}}}</span>|<span about="#mwt2" typeof="mw:Param" data-mw='{"parts":[{"templatearg":{"target":{"wt":"2"},"params":{},"i":0}}]}'>{{{2}}}</span>]]</td></tr>
|
||
</tbody></table>
|
||
!! end
|
||
|
||
!! article
|
||
One
|
||
!! text
|
||
Dummy article to suppress redlinks in tests
|
||
!! end
|
||
|
||
# See: T2553
|
||
!! test
|
||
Bail on table cell attribute parsing on wikilink
|
||
!! wikitext
|
||
{|
|
||
|testing [[one|two]] |three||four
|
||
|testing one two |three||four
|
||
|testing="[[one|two]]" |three||four
|
||
|}
|
||
!! html/php
|
||
<table>
|
||
<tbody><tr>
|
||
<td>testing <a href="/wiki/One" title="One">two</a> |three</td>
|
||
<td>four
|
||
</td>
|
||
<td>three</td>
|
||
<td>four
|
||
</td>
|
||
<td>testing="<a href="/wiki/One" title="One">two</a>" |three</td>
|
||
<td>four
|
||
</td></tr></tbody></table>
|
||
!! html/parsoid
|
||
<table>
|
||
<tbody><tr data-parsoid='{"autoInsertedStart":true}'><td>testing <a rel="mw:WikiLink" href="./One" title="One" data-parsoid='{"stx":"piped","a":{"href":"./One"},"sa":{"href":"one"}}'>two</a> |three</td><td data-parsoid='{"stx":"row"}'>four</td>
|
||
<td data-parsoid='{"a":{"testing":null,"one":null,"two":null},"sa":{"testing":"","one":"","two":""}}'>three</td><td data-parsoid='{"stx":"row"}'>four</td>
|
||
<td>testing="<a rel="mw:WikiLink" href="./One" title="One" data-parsoid='{"stx":"piped","a":{"href":"./One"},"sa":{"href":"one"}}'>two</a>" |three</td><td data-parsoid='{"stx":"row"}'>four</td></tr>
|
||
</tbody></table>
|
||
!! end
|
||
|
||
!! article
|
||
Three
|
||
!! text
|
||
Dummy article to suppress redlinks in tests
|
||
!! end
|
||
|
||
## We don't care about Parsoid's output here as much as whether
|
||
## attribute parsing breaks because of a wikilink.
|
||
## Parsoid's standalone mode doesn't have a compliant {{#tag}} implementation
|
||
!! test
|
||
Don't bail on table cell attribute parsing if wikilink is found in template arg
|
||
!! wikitext
|
||
{|
|
||
|Test {{#tag:spantag|One two "[[three]]" four}}
|
||
|}
|
||
!! html/parsoid+integrated
|
||
<table>
|
||
<tbody><tr data-parsoid='{"autoInsertedStart":true}'><td>Test <span typeof="mw:Extension/spantag mw:Transclusion" data-mw='{"name":"spantag","attrs":{},"body":{"extsrc":"One two \"[[three]]\" four"},"parts":[{"template":{"target":{"wt":"#tag:spantag","function":"tag"},"params":{"1":{"wt":"One two \"[[three]]\" four"}},"i":0}}]}'>One two "<a rel="mw:WikiLink" href="./Three" title="Three">three</a>" four</span></td></tr>
|
||
</tbody></table>
|
||
!! end
|
||
|
||
!! test
|
||
Magic variable as template parameter
|
||
!! wikitext
|
||
{{paramtest|param={{SITENAME}}}}
|
||
!! html
|
||
<p>This is a test template with parameter MediaWiki
|
||
</p>
|
||
!! end
|
||
|
||
!! article
|
||
Template:linktest
|
||
!! text
|
||
[[{{{param}}}|link]]
|
||
!! endarticle
|
||
|
||
!! test
|
||
Template parameter as link source
|
||
!! wikitext
|
||
{{linktest|param=Main Page}}
|
||
!! html
|
||
<p><a href="/wiki/Main_Page" title="Main Page">link</a>
|
||
</p>
|
||
!! end
|
||
|
||
!!article
|
||
Template:paramtest2
|
||
!! text
|
||
including another template, {{paramtest|param={{{arg}}}}}
|
||
!! endarticle
|
||
|
||
!! test
|
||
Template passing argument to another template
|
||
!! wikitext
|
||
{{paramtest2|arg='hmm'}}
|
||
!! html
|
||
<p>including another template, This is a test template with parameter 'hmm'
|
||
</p>
|
||
!! end
|
||
|
||
!! article
|
||
Template:Linktest2
|
||
!! text
|
||
Main Page
|
||
!! endarticle
|
||
|
||
!! test
|
||
Template as link source
|
||
!! wikitext
|
||
[[{{linktest2}}]]
|
||
|
||
[[{{linktest2}}|Main Page]]
|
||
|
||
[[{{linktest2}}]]Page
|
||
!! html
|
||
<p><a href="/wiki/Main_Page" title="Main Page">Main Page</a>
|
||
</p><p><a href="/wiki/Main_Page" title="Main Page">Main Page</a>
|
||
</p><p><a href="/wiki/Main_Page" title="Main Page">Main Page</a>Page
|
||
</p>
|
||
!! end
|
||
|
||
|
||
!! article
|
||
Template:loop1
|
||
!! text
|
||
{{loop2}}
|
||
!! endarticle
|
||
|
||
!! article
|
||
Template:loop2
|
||
!! text
|
||
{{loop1}}
|
||
!! endarticle
|
||
|
||
!! test
|
||
Template infinite loop
|
||
!! wikitext
|
||
{{loop1}}
|
||
!! html/php
|
||
<p><span class="error">Template loop detected: <a href="/wiki/Template:Loop1" title="Template:Loop1">Template:Loop1</a></span>
|
||
</p>
|
||
!! html/parsoid
|
||
<p><span class="error" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"loop1","href":"./Template:Loop1"},"params":{},"i":0}}]}'>Template loop detected: <a rel="mw:WikiLink" href="./Template:Loop1" title="Template:Loop1">Template:Loop1</a></span></p>
|
||
!! end
|
||
|
||
!! test
|
||
Template from main namespace
|
||
!! wikitext
|
||
{{:Main Page}}
|
||
!! html
|
||
<p>blah blah
|
||
</p>
|
||
!! end
|
||
|
||
!! test
|
||
Template from non-includable namespace
|
||
!! options
|
||
wgNonincludableNamespaces=10
|
||
!! wikitext
|
||
{{1x|uh oh!}}
|
||
!! html
|
||
<p><a href="/wiki/Template:1x" title="Template:1x">Template:1x</a>
|
||
</p>
|
||
!! html/parsoid+integrated
|
||
<p><a rel="mw:WikiLink" href="./Template:1x" title="Template:1x" about="#mwt1" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"1x","href":"./Template:1x"},"params":{"1":{"wt":"uh oh!"}},"i":0}}]}'>Template:1x</a></p>
|
||
!! 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/php
|
||
<p>foo
|
||
</p>
|
||
<table>
|
||
<tbody><tr>
|
||
<td>1</td>
|
||
<td>2
|
||
</td></tr>
|
||
<tr>
|
||
<td>3</td>
|
||
<td>4
|
||
</td></tr></tbody></table>
|
||
!! html/parsoid
|
||
<p>foo </p><span about="#mwt1" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"table","href":"./Template:Table"},"params":{},"i":0}}]}'>
|
||
</span><table about="#mwt1">
|
||
<tbody><tr><td>1</td><td>2</td></tr>
|
||
<tr>
|
||
<td>3</td><td>4</td></tr>
|
||
</tbody></table>
|
||
!! end
|
||
|
||
!! test
|
||
T2523: Template shouldn't eat newline (or add an extra one before table)
|
||
!! wikitext
|
||
foo
|
||
{{table}}
|
||
!! html
|
||
<p>foo
|
||
</p>
|
||
<table>
|
||
<tbody><tr>
|
||
<td>1</td>
|
||
<td>2
|
||
</td></tr>
|
||
<tr>
|
||
<td>3</td>
|
||
<td>4
|
||
</td></tr></tbody></table>
|
||
!! end
|
||
|
||
!! test
|
||
T2041: Template parameters shown as broken links
|
||
!! wikitext
|
||
{{{parameter}}}
|
||
!! html/php
|
||
<p>{{{parameter}}}
|
||
</p>
|
||
!! html/parsoid
|
||
<p about="#mwt1" typeof="mw:Param" data-mw='{"parts":[{"templatearg":{"target":{"wt":"parameter"},"params":{},"i":0}}]}'>{{{parameter}}}</p>
|
||
!! end
|
||
|
||
!! test
|
||
Unsubstituted template argument with newlines
|
||
!! wikitext
|
||
{{{testing
|
||
|
||
123}}}
|
||
!! html/php
|
||
<p>{{{testing
|
||
</p><p>123}}}
|
||
</p>
|
||
!! html/parsoid
|
||
<p about="#mwt1" typeof="mw:Param" data-mw='{"parts":[{"templatearg":{"target":{"wt":"testing\n\n123"},"params":{},"i":0}}]}'>{{{testing</p><span about="#mwt1">
|
||
|
||
</span><p about="#mwt1">123}}}</p>
|
||
!! end
|
||
|
||
!! test
|
||
Template with targets containing wikilinks
|
||
!! options
|
||
parsoid=wt2html
|
||
!! wikitext
|
||
{{[[foo]]}}
|
||
|
||
{{[[{{1x|foo}}]]}}
|
||
|
||
{{{{1x|[[foo}}]]}}
|
||
!! html/php
|
||
<p>{{<a href="/wiki/Foo" title="Foo">foo</a>}}
|
||
</p><p>{{<a href="/wiki/Foo" title="Foo">foo</a>}}
|
||
</p><p>{{[[foo}}]]
|
||
</p>
|
||
!! html/parsoid
|
||
<p>{{<a rel="mw:WikiLink" href="./Foo" title="Foo">foo</a>}}</p>
|
||
<p>{{<a typeof="mw:ExpandedAttrs" rel="mw:WikiLink" href="./Foo" title="Foo" data-mw='{"attribs":[[{"txt":"href"},{"html":"<span about=\"#mwt3\" typeof=\"mw:Transclusion\" data-parsoid='{\"pi\":[[{\"k\":\"1\"}]]}' data-mw='{\"parts\":[{\"template\":{\"target\":{\"wt\":\"1x\",\"href\":\"./Template:1x\"},\"params\":{\"1\":{\"wt\":\"foo\"}},\"i\":0}}]}'>foo</span>"}]]}'>foo</a>}}</p>
|
||
<p>{{<span typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"1x","href":"./Template:1x"},"params":{"1":{"wt":"[[foo}}]]"}},"i":0}}]}'>[[foo}}]]</span></p>
|
||
!! end
|
||
|
||
!! article
|
||
Template:''
|
||
!! text
|
||
bar
|
||
!! endarticle
|
||
|
||
!! test
|
||
Templates: Double quotes as template target
|
||
!! wikitext
|
||
foo {{''}} baz
|
||
!! html/php
|
||
<p>foo bar baz
|
||
</p>
|
||
!! html/parsoid
|
||
<p>foo <span about="#mwt1" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"''","href":"./Template:''"},"params":{},"i":0}}]}'>bar</span> baz
|
||
</p>
|
||
!! end
|
||
|
||
## This test is about making sure Parsoid's data-mw is well formed in the
|
||
## face of multiple templates with intersecting and overlapping ranges. The
|
||
## wikitext itself is wretched.
|
||
!! test
|
||
Templates with intersecting and overlapping ranges
|
||
!! wikitext
|
||
{|{{1x|1=class="foo"
|
||
<p>ha</p>}}
|
||
{|{{1x|1=class="bar"
|
||
<p>ho</p>}}
|
||
{{1x|{{!}}hi}}
|
||
|}
|
||
!! html/php
|
||
<p>ha</p><table class="foo">
|
||
|
||
</table><p>ho</p><table class="bar">
|
||
|
||
<tbody><tr>
|
||
<td>hi
|
||
</td></tr></tbody></table>
|
||
!! html/parsoid
|
||
<p about="#mwt1" typeof="mw:Transclusion" data-parsoid='{"stx":"html","pi":[[{"k":"1","named":true}],[{"k":"1","named":true}],[{"k":"1"}]],"firstWikitextNode":"TABLE"}' data-mw='{"parts":["{|",{"template":{"target":{"wt":"1x","href":"./Template:1x"},"params":{"1":{"wt":"class=\"foo\"\n<p>ha</p>"}},"i":0}},"\n","{|",{"template":{"target":{"wt":"1x","href":"./Template:1x"},"params":{"1":{"wt":"class=\"bar\"\n<p>ho</p>"}},"i":1}},"\n",{"template":{"target":{"wt":"1x","href":"./Template:1x"},"params":{"1":{"wt":"{{!}}hi"}},"i":2}},"\n|}"]}'>ha</p><table class="foo" about="#mwt1" typeof="mw:ExpandedAttrs" data-mw='{"attribs":[[{"txt":"class","html":"class=\"foo\"","uneditable":true},{"html":""}]]}'>
|
||
|
||
</table><p about="#mwt1">ho</p><table class="bar" about="#mwt1" typeof="mw:ExpandedAttrs" data-mw='{"attribs":[[{"txt":"class","html":"class=\"bar\"","uneditable":true},{"html":""}]]}'>
|
||
|
||
<tbody><tr><td>hi</td></tr>
|
||
</tbody></table>
|
||
!! end
|
||
|
||
!! article
|
||
Template:MSGNW test
|
||
!! text
|
||
''None'' of '''this''' should be
|
||
* interpreted
|
||
but rather passed unmodified
|
||
{{test}}
|
||
<gallery>
|
||
File:Foobar.jpg
|
||
</gallery>
|
||
<!-- comment -->
|
||
!! endarticle
|
||
|
||
# hmm, fix this or just deprecate msgnw and document its behavior?
|
||
!! test
|
||
msgnw keyword
|
||
!! wikitext
|
||
{{msgnw:MSGNW test}}
|
||
!! html/php
|
||
<p>''None'' of '''this''' should be
|
||
* interpreted
|
||
 but rather passed unmodified
|
||
{{test}}
|
||
<gallery>
|
||
File:Foobar.jpg
|
||
</gallery>
|
||
<!-- comment -->
|
||
</p>
|
||
!! end
|
||
|
||
!! test
|
||
int keyword
|
||
!! wikitext
|
||
{{int:new-messages|lots of money|not!}}
|
||
!! html/php
|
||
<p>You have lots of money (not!).
|
||
</p>
|
||
!! html/parsoid+integrated
|
||
<p><span about="#mwt1" typeof="mw:Transclusion" data-parsoid='{"pi":[[{"k":"1"},{"k":"2"}]]}' data-mw='{"parts":[{"template":{"target":{"wt":"int:new-messages","function":"int"},"params":{"1":{"wt":"lots of money"},"2":{"wt":"not!"}},"i":0}}]}'>You have lots of money (not!).</span></p>
|
||
!! end
|
||
|
||
!! test
|
||
int keyword - non-existing message
|
||
!! wikitext
|
||
{{int:var}}
|
||
!! html/php
|
||
<p>⧼var⧽
|
||
</p>
|
||
!! html/parsoid+integrated
|
||
<p><span about="#mwt1" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"int:var","function":"int"},"params":{},"i":0}}]}'>⧼var⧽</span></p>
|
||
!! end
|
||
|
||
!! article
|
||
Template:Includes
|
||
!! text
|
||
Foo<noinclude>zar</noinclude><includeonly>bar</includeonly>
|
||
!! endarticle
|
||
|
||
!! test
|
||
<includeonly> and <noinclude> being included
|
||
!! wikitext
|
||
{{Includes}}
|
||
!! html
|
||
<p>Foobar
|
||
</p>
|
||
!! end
|
||
|
||
!! article
|
||
Template:Includes2
|
||
!! text
|
||
<onlyinclude>Foo</onlyinclude>bar
|
||
!! endarticle
|
||
|
||
## In integrated mode, Parsoid won't see the <*include*>..</*include*> tags from the expanded template
|
||
!! test
|
||
<onlyinclude> being included
|
||
!! wikitext
|
||
{{Includes2}}
|
||
!! html/php
|
||
<p>Foo
|
||
</p>
|
||
!! html/parsoid+standalone
|
||
<p><meta typeof="mw:Transclusion mw:Includes/OnlyInclude" about="#mwt1" data-mw='{"parts":[{"template":{"target":{"wt":"Includes2","href":"./Template:Includes2"},"params":{},"i":0}}]}'/><span about="#mwt1">Foo</span><meta typeof="mw:Includes/OnlyInclude/End" about="#mwt1"/></p>
|
||
!! html/parsoid+integrated
|
||
<p><span typeof="mw:Transclusion" about="#mwt1" data-mw='{"parts":[{"template":{"target":{"wt":"Includes2","href":"./Template:Includes2"},"params":{},"i":0}}]}'>Foo</span></p>
|
||
!! end
|
||
|
||
|
||
!! article
|
||
Template:Includes3
|
||
!! text
|
||
<onlyinclude>Foo</onlyinclude>bar<includeonly>zar</includeonly>
|
||
!! endarticle
|
||
|
||
## In integrated mode, Parsoid won't see the <*include*>..</*include*> tags from the expanded template
|
||
!! test
|
||
<onlyinclude> and <includeonly> being included
|
||
!! wikitext
|
||
{{Includes3}}
|
||
!! html/php
|
||
<p>Foo
|
||
</p>
|
||
!! html/parsoid+standalone
|
||
<p><meta typeof="mw:Transclusion mw:Includes/OnlyInclude" about="#mwt1" data-mw='{"parts":[{"template":{"target":{"wt":"Includes3","href":"./Template:Includes3"},"params":{},"i":0}}]}'/><span about="#mwt1">Foo</span><meta typeof="mw:Includes/OnlyInclude/End" about="#mwt1"/></p>
|
||
!! html/parsoid+integrated
|
||
<p><span typeof="mw:Transclusion" about="#mwt1" data-mw='{"parts":[{"template":{"target":{"wt":"Includes3","href":"./Template:Includes3"},"params":{},"i":0}}]}'>Foo</span></p>
|
||
!! end
|
||
|
||
# FIXME: Parsoid's markup for this is quite ugly.
|
||
!! test
|
||
<includeonly> and <noinclude> on a page
|
||
!! wikitext
|
||
Foo<noinclude>zar</noinclude><includeonly>bar</includeonly>
|
||
!! html/php
|
||
<p>Foozar
|
||
</p>
|
||
!! html/parsoid
|
||
<p>Foo<meta typeof="mw:Includes/NoInclude" data-parsoid="{}"/>zar</p><meta typeof="mw:Includes/NoInclude/End" data-parsoid="{}"/><meta typeof="mw:Includes/IncludeOnly" data-mw='{"src":"<includeonly>bar</includeonly>"}' data-parsoid="{}"/><meta typeof="mw:Includes/IncludeOnly/End" data-parsoid="{}"/>
|
||
!! end
|
||
|
||
!! test
|
||
Un-closed <noinclude>
|
||
!! wikitext
|
||
<noinclude>
|
||
!! html/php
|
||
!! html/parsoid
|
||
<meta typeof="mw:Includes/NoInclude" data-parsoid='{"src":"<noinclude>"}'/>
|
||
!! end
|
||
|
||
!! test
|
||
Empty <noinclude>
|
||
!! wikitext
|
||
Hello<noinclude></noinclude>!
|
||
!! html/php
|
||
<p>Hello!
|
||
</p>
|
||
!! html/parsoid
|
||
<p>Hello<meta typeof="mw:Includes/NoInclude" data-parsoid='{"src":"<noinclude>"}'/><meta typeof="mw:Includes/NoInclude/End" data-parsoid='{"src":"</noinclude>"}'/>!</p>
|
||
!! end
|
||
|
||
!! test
|
||
Nested <noinclude>s
|
||
!! wikitext
|
||
<noinclude>
|
||
x
|
||
<noinclude>y</noinclude>
|
||
z
|
||
</noinclude>
|
||
!! html/php
|
||
<p>x
|
||
y
|
||
z
|
||
</p>
|
||
!! html/parsoid
|
||
<meta typeof="mw:Includes/NoInclude" data-parsoid='{"src":"<noinclude>"}'/>
|
||
<p>x
|
||
<meta typeof="mw:Includes/NoInclude" data-parsoid='{"src":"<noinclude>"}'/>y<meta typeof="mw:Includes/NoInclude/End" data-parsoid='{"src":"</noinclude>"}'/>
|
||
z</p>
|
||
<meta typeof="mw:Includes/NoInclude/End" data-parsoid='{"src":"</noinclude>"}'/>
|
||
!! end
|
||
|
||
!! test
|
||
<onlyinclude> on a page
|
||
!! wikitext
|
||
<onlyinclude>Foo</onlyinclude>bar
|
||
!! html
|
||
<p>Foobar
|
||
</p>
|
||
!! end
|
||
|
||
!! test
|
||
Un-closed <onlyinclude>
|
||
!! wikitext
|
||
<onlyinclude>
|
||
!! html
|
||
!! end
|
||
|
||
!! test
|
||
T236868: Un-closed <noinclude> caused bad SourceRange length
|
||
!! wikitext
|
||
{| <noinclude>
|
||
|- <noinclude>
|
||
| A
|
||
|-</noinclude>
|
||
|}
|
||
!! html/parsoid
|
||
<table about="#mwt2" typeof="mw:ExpandedAttrs" data-parsoid='{"a":{"<noinclude>\n|- <noinclude>\n| A\n|-</noinclude>":null},"sa":{"<noinclude>\n|- <noinclude>\n| A\n|-</noinclude>":""}}' data-mw='{"attribs":[[{"txt":" A","html":"<meta typeof=\"mw:Includes/NoInclude\" data-parsoid='{\"src\":\"&lt;noinclude>\",\"dsr\":[3,14,null,null]}'/>\n|- <meta typeof=\"mw:Includes/NoInclude\" data-parsoid='{\"src\":\"&lt;noinclude>\",\"dsr\":[18,29,null,null]}'/>\n| A\n|-<meta typeof=\"mw:Includes/NoInclude/End\" data-parsoid='{\"src\":\"&lt;/noinclude>\",\"dsr\":[36,48,null,null]}'/>"},{"html":""}]]}'>
|
||
</table>
|
||
!! end
|
||
|
||
!!test
|
||
Self-closed noinclude, includeonly, onlyinclude tags
|
||
!! wikitext
|
||
<noinclude />
|
||
<includeonly />
|
||
<onlyinclude />
|
||
!! html
|
||
<p><br />
|
||
</p>
|
||
!!end
|
||
|
||
!!test
|
||
Unbalanced includeonly and noinclude tags
|
||
!! wikitext
|
||
{|
|
||
|a</noinclude>
|
||
|b</noinclude></noinclude>
|
||
|c</noinclude></includeonly>
|
||
|d</includeonly></includeonly>
|
||
|}
|
||
!! html
|
||
<table>
|
||
<tbody><tr>
|
||
<td>a
|
||
</td>
|
||
<td>b
|
||
</td>
|
||
<td>c</includeonly>
|
||
</td>
|
||
<td>d</includeonly></includeonly>
|
||
</td></tr></tbody></table>
|
||
!!end
|
||
|
||
# We're more interested in the generation of <h2> when reading than in round-tripping these - the RT without the newline
|
||
# wouldn't be acceptable if "real" text were in the include tags, for instance.
|
||
!! test
|
||
includeonly / noinclude / onlyinclude and headers
|
||
!! options
|
||
parsoid = wt2html
|
||
!! config
|
||
wgParserEnableLegacyHeadingDOM=false
|
||
!! wikitext
|
||
<includeonly><!--hello1 --></includeonly>== test 1 == <includeonly><!--hello2 --></includeonly>
|
||
<noinclude><!--hello3 --></noinclude>== test 2 == <noinclude><!--hello4 --></noinclude>
|
||
<onlyinclude><!--hello5 --></onlyinclude>== test 3 == <onlyinclude><!--hello6 --></onlyinclude>
|
||
!! html/parsoid
|
||
<meta typeof="mw:Includes/IncludeOnly" data-mw='{"src":"<includeonly><!--hello1 --></includeonly>"}'/><meta typeof="mw:Includes/IncludeOnly/End" data-parsoid='{"src":""}'/><h2 id="test_1">test 1</h2> <meta typeof="mw:Includes/IncludeOnly" data-mw='{"src":"<includeonly><!--hello2 --></includeonly>"}'/><meta typeof="mw:Includes/IncludeOnly/End" data-parsoid='{"src":""}'/>
|
||
<meta typeof="mw:Includes/NoInclude" data-parsoid='{"src":"<noinclude>"}'/><!--hello3 --><meta typeof="mw:Includes/NoInclude/End" data-parsoid='{"src":"</noinclude>"}'/><h2 id="test_2">test 2</h2> <meta typeof="mw:Includes/NoInclude" data-parsoid='{"src":"<noinclude>"}'/><!--hello4 --><meta typeof="mw:Includes/NoInclude/End" data-parsoid='{"src":"</noinclude>"}'/>
|
||
<meta typeof="mw:Includes/OnlyInclude" data-parsoid='{"src":"<onlyinclude>"}'/><!--hello5 --><meta typeof="mw:Includes/OnlyInclude/End" data-parsoid='{"src":"</onlyinclude>"}'/><h2 id="test_3">test 3</h2> <meta typeof="mw:Includes/OnlyInclude" data-parsoid='{"src":"<onlyinclude>"}'/><!--hello6 --><meta typeof="mw:Includes/OnlyInclude/End" data-parsoid='{"src":"</onlyinclude>"}'/>
|
||
!! html/php
|
||
<div class="mw-heading mw-heading2"><h2 id="test_1">test 1</h2></div>
|
||
<div class="mw-heading mw-heading2"><h2 id="test_2">test 2</h2></div>
|
||
<div class="mw-heading mw-heading2"><h2 id="test_3">test 3</h2></div>
|
||
!! end
|
||
|
||
# Uses same input as the contents of [[Template:Includeonly section]]
|
||
!! test
|
||
T8563: Section extraction for section shown by <includeonly>
|
||
!! options
|
||
section=T-2
|
||
!! wikitext
|
||
<includeonly>
|
||
==Includeonly section==
|
||
</includeonly>
|
||
==Section T-2==
|
||
!! html
|
||
==Section T-2==
|
||
!! end
|
||
|
||
!! test
|
||
T8563: Section extraction for section suppressed by <includeonly>
|
||
!! options
|
||
section=1
|
||
!! wikitext
|
||
<includeonly>
|
||
==Includeonly section==
|
||
</includeonly>
|
||
==Section 1==
|
||
!! html
|
||
==Section 1==
|
||
!! end
|
||
|
||
!! test
|
||
Un-closed <includeonly>
|
||
!! wikitext
|
||
<includeonly>
|
||
!! html/php
|
||
!! html/parsoid
|
||
<meta typeof="mw:Includes/IncludeOnly" data-parsoid='{"src":"<includeonly>"}' data-mw='{"src":"<includeonly>"}'/>
|
||
!! end
|
||
|
||
## We used to, but no longer wt2wt this test since the default serializer
|
||
## will normalize the include directives to serialize on their own line.
|
||
## Selser will take care of preserving formatting in scenarios where they
|
||
## intermingled with other wikitext.
|
||
## This test also triggered T223411 during Parsoid-PHP porting.
|
||
!! test
|
||
Includes and comments at SOL
|
||
!! options
|
||
parsoid=wt2html,html2html
|
||
!! config
|
||
wgParserEnableLegacyHeadingDOM=false
|
||
!! wikitext
|
||
<!-- comment --><noinclude><!-- comment --></noinclude><!-- comment -->==hu==
|
||
|
||
<noinclude>
|
||
some
|
||
</noinclude>*stuff
|
||
*here
|
||
|
||
<noinclude>
|
||
some</noinclude>* stuff
|
||
* here
|
||
|
||
<includeonly>can have stuff</includeonly>===here===
|
||
|
||
__INDEX__== hi ==
|
||
!! html/php
|
||
<div class="mw-heading mw-heading2"><h2 id="hu">hu</h2></div>
|
||
<p>some
|
||
</p>
|
||
<ul><li>stuff</li>
|
||
<li>here</li></ul>
|
||
<p><br />
|
||
some* stuff
|
||
</p>
|
||
<ul><li>here</li></ul>
|
||
<div class="mw-heading mw-heading3"><h3 id="here">here</h3></div>
|
||
<div class="mw-heading mw-heading2"><h2 id="hi">hi</h2></div>
|
||
!! html/parsoid
|
||
<!-- comment --><meta typeof="mw:Includes/NoInclude" data-parsoid='{"src":"<noinclude>"}'/><!-- comment --><meta typeof="mw:Includes/NoInclude/End" data-parsoid='{"src":"</noinclude>"}'/><!-- comment --><h2 id="hu">hu</h2>
|
||
|
||
<meta typeof="mw:Includes/NoInclude" data-parsoid='{"src":"<noinclude>"}'/>
|
||
<p>some</p>
|
||
<meta typeof="mw:Includes/NoInclude/End" data-parsoid='{"src":"</noinclude>"}'/><ul><li>stuff</li>
|
||
<li>here</li></ul>
|
||
|
||
<meta typeof="mw:Includes/NoInclude" data-parsoid='{"src":"<noinclude>"}'/>
|
||
<p>some<meta typeof="mw:Includes/NoInclude/End" data-parsoid='{"src":"</noinclude>"}'/>* stuff</p>
|
||
<ul><li>here</li></ul>
|
||
|
||
<meta typeof="mw:Includes/IncludeOnly" data-parsoid='{"src":"<includeonly>can have stuff</includeonly>"}' data-mw='{"src":"<includeonly>can have stuff</includeonly>"}'/><meta typeof="mw:Includes/IncludeOnly/End" data-parsoid='{"src":""}'/><h3 id="here">here</h3>
|
||
|
||
<meta property="mw:PageProp/index"/><h2 id="hi">hi</h2>
|
||
!! end
|
||
|
||
# TODO: test with DOM fragment reuse!
|
||
!! test
|
||
Parsoid: DOM fragment reuse
|
||
!! options
|
||
parsoid=wt2wt,wt2html
|
||
!! wikitext
|
||
a{{1x|b<table></table>c}}d
|
||
|
||
a{{1x|b
|
||
<table></table>
|
||
c}}d
|
||
|
||
{{1x|a
|
||
|
||
<table></table>
|
||
|
||
b}}
|
||
!! html/php
|
||
<p>ab</p><table></table><p>cd
|
||
</p><p>ab
|
||
</p>
|
||
<table></table>
|
||
<p>cd
|
||
</p><p>a
|
||
</p>
|
||
<table></table>
|
||
<p>b
|
||
</p>
|
||
!! html/parsoid
|
||
<p about="#mwt1" typeof="mw:Transclusion" data-mw='{"parts":["a",{"template":{"target":{"wt":"1x","href":"./Template:1x"},"params":{"1":{"wt":"b<table></table>c"}},"i":0}},"d"]}' data-parsoid='{"pi":[[{"k":"1"}]]}'>ab</p><table about="#mwt1" data-parsoid='{"stx":"html"}'></table><p about="#mwt1">cd</p>
|
||
|
||
<p about="#mwt2" typeof="mw:Transclusion" data-mw='{"parts":["a",{"template":{"target":{"wt":"1x","href":"./Template:1x"},"params":{"1":{"wt":"b\n<table></table>\nc"}},"i":0}},"d"]}' data-parsoid='{"pi":[[{"k":"1"}]]}'>ab</p><span about="#mwt2">
|
||
</span><table about="#mwt2" data-parsoid='{"stx":"html"}'></table><span about="#mwt2">
|
||
</span><p about="#mwt2">cd</p>
|
||
|
||
<p about="#mwt3" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"1x","href":"./Template:1x"},"params":{"1":{"wt":"a\n\n<table></table>\n\nb"}},"i":0}}]}' data-parsoid='{"pi":[[{"k":"1"}]]}'>a</p><span about="#mwt3">
|
||
|
||
</span><table about="#mwt3" data-parsoid='{"stx":"html"}'></table><span about="#mwt3">
|
||
|
||
</span><p about="#mwt3">b</p>
|
||
!! end
|
||
|
||
!! test
|
||
Parsoid: Merge double tds (T52603)
|
||
!! wikitext
|
||
{|
|
||
|{{1x|{{!}} foo}}
|
||
|}
|
||
!! html/php
|
||
<table>
|
||
<tbody><tr>
|
||
<td>foo
|
||
</td></tr></tbody></table>
|
||
!! html/parsoid
|
||
<table><tbody>
|
||
<tr><td about="#mwt1" typeof="mw:Transclusion" data-mw='{"parts":["|",{"template":{"target":{"wt":"1x","href":"./Template:1x"},"params":{"1":{"wt":"{{!}} foo"}},"i":0}}]}'> foo</td></tr>
|
||
</tbody></table>
|
||
!! end
|
||
|
||
!! test
|
||
Parsoid: Merge double tds in nested transclusion content (T52603)
|
||
!! wikitext
|
||
{{1x|<div>}}
|
||
{|
|
||
|{{1x|{{!}} foo}}
|
||
|}
|
||
{{1x|</div>}}
|
||
!! html/php
|
||
<div>
|
||
<table>
|
||
<tbody><tr>
|
||
<td>foo
|
||
</td></tr></tbody></table>
|
||
</div>
|
||
!! html/parsoid
|
||
<div about="#mwt1" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"1x","href":"./Template:1x"},"params":{"1":{"wt":"<div>"}},"i":0}},"\n{|\n|",{"template":{"target":{"wt":"1x","href":"./Template:1x"},"params":{"1":{"wt":"{{!}} foo"}},"i":1}},"\n|}\n",{"template":{"target":{"wt":"1x","href":"./Template:1x"},"params":{"1":{"wt":"</div>"}},"i":2}}]}'>
|
||
<table><tbody>
|
||
<tr><td data-mw='{"parts":["|"]}'> foo</td></tr>
|
||
</tbody></table>
|
||
</div>
|
||
!! end
|
||
|
||
!! article
|
||
Template:Temp?
|
||
!! text
|
||
temp {{{1}}}
|
||
!! endarticle
|
||
|
||
!! test
|
||
Template name with question mark
|
||
!! options
|
||
parsoid={
|
||
"modes": [ "selser", "wt2html", "html2wt" ],
|
||
"changes": [
|
||
["span", "attr", "data-mw", "{\"parts\":[{\"template\":{\"target\":{\"wt\":\"temp?\",\"href\":\"./Template:Temp%3F\"},\"params\":{\"1\":{\"wt\":\"456\"}},\"i\":0}}]}"]
|
||
]
|
||
}
|
||
!! wikitext
|
||
{{temp?|123}}
|
||
!! wikitext/edited
|
||
{{temp?|456}}
|
||
!! html/php
|
||
<p>temp 123
|
||
</p>
|
||
!! html/parsoid
|
||
<p><span about="#mwt1" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"temp?","href":"./Template:Temp%3F"},"params":{"1":{"wt":"123"}},"i":0}}]}'>temp 123</span></p>
|
||
!! end
|
||
|
||
###
|
||
### <includeonly> and <noinclude> in attributes
|
||
###
|
||
!!test
|
||
0. includeonly around the entire attribute
|
||
!! wikitext
|
||
<span <includeonly>id="v1"</includeonly><noinclude>id="v2"</noinclude>>bar</span>
|
||
!! html
|
||
<p><span id="v2">bar</span>
|
||
</p>
|
||
!!end
|
||
|
||
!!test
|
||
1. includeonly in html attr key
|
||
!! wikitext
|
||
<span <noinclude>id</noinclude><includeonly>about</includeonly>="foo">bar</span>
|
||
!! html
|
||
<p><span id="foo">bar</span>
|
||
</p>
|
||
!!end
|
||
|
||
!!test
|
||
2. includeonly in html attr value
|
||
!! wikitext
|
||
<span id="<noinclude>v1</noinclude><includeonly>v2</includeonly>">bar</span>
|
||
<span id=<noinclude>"v1"</noinclude><includeonly>"v2"</includeonly>>bar</span>
|
||
!! html
|
||
<p><span id="v1">bar</span>
|
||
<span id="v1">bar</span>
|
||
</p>
|
||
!!end
|
||
|
||
!!test
|
||
3. includeonly in part of an attr value
|
||
!! wikitext
|
||
<span style="color:<noinclude>red</noinclude><includeonly>blue</includeonly>;">bar</span>
|
||
!! html
|
||
<p><span style="color:red;">bar</span>
|
||
</p>
|
||
!!end
|
||
|
||
!!test
|
||
4. includeonly in table attributes
|
||
!! wikitext
|
||
{|
|
||
|- <noinclude>
|
||
|-
|
||
|a
|
||
</noinclude>
|
||
|- <includeonly>
|
||
|-
|
||
|b
|
||
</includeonly>
|
||
|}
|
||
!! html
|
||
<table>
|
||
|
||
|
||
<tbody><tr>
|
||
<td>a
|
||
</td></tr>
|
||
</tbody></table>
|
||
!!end
|
||
|
||
###
|
||
### Token Stream Patcher tests
|
||
###
|
||
### These tests won't always pass wt2wt and other modes because
|
||
### on serialization, the table will be output on a new line.
|
||
### For now, we are prohibiting them, and using this to test selser.
|
||
###
|
||
|
||
!!test
|
||
1. Table tag in SOL posn. should get reparsed correctly with valid TSR
|
||
!!options
|
||
parsoid=wt2html,wt2wt
|
||
!!wikitext
|
||
{{1x|}}{| width = '100%'
|
||
|foo
|
||
|}
|
||
!!html/parsoid
|
||
<span typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"1x","href":"./Template:1x"},"params":{"1":{"wt":""}},"i":0}}]}'></span><table width="100%">
|
||
<tbody><tr><td>foo</td></tr>
|
||
</tbody></table>
|
||
!!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
|
||
<includeonly>a</includeonly>{| {{{b}}}
|
||
|c
|
||
|}
|
||
!!html/parsoid
|
||
<meta typeof="mw:Includes/IncludeOnly" data-parsoid='{"src":"<includeonly>a</includeonly>"}' data-mw='{"src":"<includeonly>a</includeonly>"}'/><meta typeof="mw:Includes/IncludeOnly/End" data-parsoid='{"src":""}'/><table about="#mwt2" typeof="mw:ExpandedAttrs" data-parsoid='{"a":{"{{{b}}}":null},"sa":{"{{{b}}}":""}}' data-mw='{"attribs":[[{"txt":"{{{b}}}","html":"<span about=\"#mwt1\" typeof=\"mw:Param\" data-parsoid='{\"pi\":[[]],\"dsr\":[31,38,null,null]}' data-mw='{\"parts\":[{\"templatearg\":{\"target\":{\"wt\":\"b\"},\"params\":{},\"i\":0}}]}'>{{{b}}}</span>"},{"html":""}]]}'>
|
||
<tbody><tr><td>c</td></tr>
|
||
</tbody></table>
|
||
!!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
|
||
<p>a
|
||
|+ not a caption
|
||
! not a table heading
|
||
|- not a table row
|
||
| not a table cell
|
||
| class="foo bar" | baz
|
||
b
|
||
|}
|
||
|-
|
||
c
|
||
</p>
|
||
!! end
|
||
|
||
!! test
|
||
Content after <tr> like wikitext should get fully processed
|
||
!! wikitext
|
||
x
|
||
|- [[Foo]] and {{1x|bar}}
|
||
y
|
||
!! html/php
|
||
<p>x
|
||
|- <a href="/wiki/Foo" title="Foo">Foo</a> and bar
|
||
y
|
||
</p>
|
||
!! html/parsoid
|
||
<p>x
|
||
|- <a rel="mw:WikiLink" href="./Foo" title="Foo" data-parsoid='{"stx":"simple","a":{"href":"./Foo"},"sa":{"href":"Foo"}}'>Foo</a> and <span about="#mwt3" typeof="mw:Transclusion" data-parsoid='{"pi":[[{"k":"1"}]]}' data-mw='{"parts":[{"template":{"target":{"wt":"1x","href":"./Template:1x"},"params":{"1":{"wt":"bar"}},"i":0}}]}'>bar</span>
|
||
y</p>
|
||
!! end
|
||
|
||
!! test
|
||
P-wrapping should not break after <td>s separated by newlines are converted back to pipes
|
||
!! wikitext
|
||
a
|
||
|b
|
||
|
||
|c
|
||
d
|
||
!! html/php
|
||
<p>a
|
||
|b
|
||
</p><p>|c
|
||
d
|
||
</p>
|
||
!! html/parsoid
|
||
<p>a
|
||
|b</p>
|
||
|
||
<p>|c
|
||
d</p>
|
||
!! end
|
||
|
||
!! test
|
||
Orphaned table row wikitext with templated table for an attribute should not duplicate table
|
||
!! wikitext
|
||
|-{{1x|
|
||
{{{!}}
|
||
{{!}}foo
|
||
{{!}}}
|
||
}}
|
||
!! html/php
|
||
<p>|-
|
||
</p>
|
||
<table>
|
||
<tbody><tr>
|
||
<td>foo
|
||
</td></tr></tbody></table>
|
||
!! html/parsoid
|
||
<p about="#mwt1" typeof="mw:Transclusion" data-parsoid='{"pi":[[{"k":"1"}]],"firstWikitextNode":"TR"}' data-mw='{"parts":["|-",{"template":{"target":{"wt":"1x","href":"./Template:1x"},"params":{"1":{"wt":"\n{{{!}}\n{{!}}foo\n{{!}}}\n"}},"i":0}}]}'>|-</p><span about="#mwt1">
|
||
</span><table about="#mwt1">
|
||
<tbody><tr><td>foo</td></tr>
|
||
</tbody></table><span about="#mwt1">
|
||
</span>
|
||
!! end
|
||
|
||
###
|
||
### Testing parsing of templates where a template arg
|
||
### has the same name as the template itself.
|
||
###
|
||
|
||
!! article
|
||
Template:quote
|
||
!! text
|
||
{{{quote|{{{1}}}}}}
|
||
!! endarticle
|
||
|
||
!! test
|
||
Templates: Template Name/Arg clash: 1. Use of positional param
|
||
!! wikitext
|
||
{{quote|foo}}
|
||
!! html/php
|
||
<p>foo
|
||
</p>
|
||
!! html/parsoid
|
||
<p><span about="#mwt1" typeof="mw:Transclusion" data-parsoid='{"pi":[[{"k":"1"}]]}' data-mw='{"parts":[{"template":{"target":{"wt":"quote","href":"./Template:Quote"},"params":{"1":{"wt":"foo"}},"i":0}}]}'>foo</span></p>
|
||
!! end
|
||
|
||
!! test
|
||
Templates: Template Name/Arg clash: 2. Use of named param
|
||
!! wikitext
|
||
{{quote|quote=foo}}
|
||
!! html/php
|
||
<p>foo
|
||
</p>
|
||
!! html/parsoid
|
||
<p><span about="#mwt1" typeof="mw:Transclusion" data-parsoid='{"pi":[[{"k":"1"}]]}' data-mw='{"parts":[{"template":{"target":{"wt":"quote","href":"./Template:Quote"},"params":{"quote":{"wt":"foo"}},"i":0}}]}'>foo</span></p>
|
||
!! end
|
||
|
||
###
|
||
### Parsoid-centric tests to stress Parsoid's ability to RT them unchanged
|
||
###
|
||
|
||
!!test
|
||
Templates: 1. Simple use
|
||
!! wikitext
|
||
{{1x|Foo}}
|
||
!! html
|
||
<p>Foo
|
||
</p>
|
||
!!end
|
||
|
||
!!test
|
||
Templates: 2. Inside a block tag
|
||
!! wikitext
|
||
<div>{{1x|Foo}}</div>
|
||
<blockquote>{{1x|Foo}}</blockquote>
|
||
!! html
|
||
<div>Foo</div>
|
||
<blockquote><p>Foo</p></blockquote>
|
||
!!end
|
||
|
||
!!test
|
||
Templates: P-wrapping: 1a. Templates on consecutive lines
|
||
!! wikitext
|
||
{{1x|Foo}}
|
||
{{1x|bar}}
|
||
!! html
|
||
<p>Foo
|
||
bar
|
||
</p>
|
||
!!end
|
||
|
||
!!test
|
||
Templates: P-wrapping: 1b. Templates on consecutive lines
|
||
!! wikitext
|
||
Foo
|
||
|
||
{{1x|bar}}
|
||
{{1x|baz}}
|
||
!! html
|
||
<p>Foo
|
||
</p><p>bar
|
||
baz
|
||
</p>
|
||
!!end
|
||
|
||
!!test
|
||
Templates: P-wrapping: 1c. Templates on consecutive lines
|
||
!! wikitext
|
||
{{1x|Foo}}
|
||
{{1x|bar}} <div>baz</div>
|
||
!! html
|
||
<p>Foo
|
||
</p><p>
|
||
bar </p><div>baz</div>
|
||
!! html/parsoid
|
||
<p><span about="#mwt1" typeof="mw:Transclusion" data-parsoid='{"pi":[[{"k":"1"}]]}' data-mw='{"parts":[{"template":{"target":{"wt":"1x","href":"./Template:1x"},"params":{"1":{"wt":"Foo"}},"i":0}}]}'>Foo</span></p>
|
||
<p about="#mwt2" typeof="mw:Transclusion" data-parsoid='{"pi":[[{"k":"1"}]]}' data-mw='{"parts":[{"template":{"target":{"wt":"1x","href":"./Template:1x"},"params":{"1":{"wt":"bar"}},"i":0}}]}'>bar</p> <div data-parsoid='{"stx":"html"}'>baz</div>
|
||
!! end
|
||
|
||
!! test
|
||
Templates: P-wrapping: 1d. Template preceded by comment-only line
|
||
!! wikitext
|
||
<!-- foo -->
|
||
{{1x|Bar}}
|
||
!! html/php
|
||
<p>Bar
|
||
</p>
|
||
!! html/parsoid
|
||
<!-- foo -->
|
||
|
||
<p><span about="#mwt223" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"1x","href":"./Template:1x"},"params":{"1":{"wt":"Bar"}},"i":0}}]}'>Bar</span></p>
|
||
!!end
|
||
|
||
!! test
|
||
Templates: Scopes should not be expanded unnecessarily
|
||
!! options
|
||
parsoid=wt2html,wt2wt
|
||
!! wikitext
|
||
{{1x|<div>a</div>}}b{{1x|
|
||
<div>c</div>}}
|
||
!! html/php
|
||
<div>a</div><p>b
|
||
</p><div>c</div>
|
||
!! html/parsoid
|
||
<div about="#mwt1" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"1x","href":"./Template:1x"},"params":{"1":{"wt":"<div>a</div>"}},"i":0}}]}'>a</div><p>b</p><span about="#mwt2" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"1x","href":"./Template:1x"},"params":{"1":{"wt":"\n<div>c</div>"}},"i":0}}]}'>
|
||
</span><div about="#mwt2">c</div>
|
||
!! end
|
||
|
||
!!test
|
||
Templates: Inline Text: 1. Multiple template uses
|
||
!! wikitext
|
||
{{1x|Foo}}bar{{1x|baz}}
|
||
!! html
|
||
<p>Foobarbaz
|
||
</p>
|
||
!!end
|
||
|
||
!!test
|
||
Templates: Inline Text: 2. Back-to-back template uses
|
||
!! wikitext
|
||
{{1x|Foo}}{{1x|bar}}
|
||
!! html
|
||
<p>Foobar
|
||
</p>
|
||
!!end
|
||
|
||
!!test
|
||
Templates: Block Tags: 1. Multiple template uses
|
||
!! wikitext
|
||
{{1x|<div>Foo</div>}}<div>bar</div>{{1x|<div>baz</div>}}
|
||
!! html
|
||
<div>Foo</div><div>bar</div><div>baz</div>
|
||
!!end
|
||
|
||
!!test
|
||
Templates: Block Tags: 2. Back-to-back template uses
|
||
!! wikitext
|
||
{{1x|<div>Foo</div>}}{{1x|<div>bar</div>}}
|
||
!! html
|
||
<div>Foo</div><div>bar</div>
|
||
!!end
|
||
|
||
## Parsoid drops empty elements in templates.
|
||
!! test
|
||
Templates: Correctly encapsulate templates producing </p> tag without a corresponding <p> tag
|
||
!! wikitext
|
||
{{1x|a
|
||
b</p>}}
|
||
!! html/php
|
||
<p>a
|
||
</p><p>
|
||
b</p><p class="mw-empty-elt"></p>
|
||
!! html/parsoid
|
||
<p about="#mwt1" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"1x","href":"./Template:1x"},"params":{"1":{"wt":"a\nb</p>"}},"i":0}}]}'>a</p><span about="#mwt1">
|
||
</span><p about="#mwt1">b</p>
|
||
!! end
|
||
|
||
!! test
|
||
Drop stripped tag markers, unless they have encapsulation info
|
||
!! wikitext
|
||
{{1x|<tr></tr>}}
|
||
!! html/php
|
||
|
||
!! html/parsoid
|
||
<meta typeof="mw:Transclusion mw:Placeholder/StrippedTag" about="#mwt1" data-mw='{"parts":[{"template":{"target":{"wt":"1x","href":"./Template:1x"},"params":{"1":{"wt":"<tr></tr>"}},"i":0}}]}'/>
|
||
!! end
|
||
|
||
!!test
|
||
Templates: Links: 1. Simple example
|
||
!! wikitext
|
||
{{1x|[[Foo|bar]]}}
|
||
!! html
|
||
<p><a href="/wiki/Foo" title="Foo">bar</a>
|
||
</p>
|
||
!!end
|
||
|
||
!!test
|
||
Templates: Links: 2. Generation of link href
|
||
!! wikitext
|
||
[[{{1x|Foo}}|bar]]
|
||
!! html
|
||
<p><a href="/wiki/Foo" title="Foo">bar</a>
|
||
</p>
|
||
!!end
|
||
|
||
!! article
|
||
Foobar
|
||
!! text
|
||
Dummy article to suppress redlinks in tests
|
||
!! end
|
||
|
||
!! article
|
||
Foobarbaz
|
||
!! text
|
||
Dummy article to suppress redlinks in tests
|
||
!! end
|
||
|
||
!!test
|
||
Templates: Links: 3. Generation of part of a link href
|
||
!! wikitext
|
||
[[Fo{{1x|o}}|bar]]
|
||
|
||
[[Foo{{1x|bar}}]]
|
||
|
||
[[Foo{{1x|bar}}baz]]
|
||
|
||
[[Foo{{1x|bar}}|bar]]
|
||
|
||
[[:Foo{{1x|bar}}]]
|
||
|
||
[[:Foo{{1x|bar}}|bar]]
|
||
!! html/php
|
||
<p><a href="/wiki/Foo" title="Foo">bar</a>
|
||
</p><p><a href="/wiki/Foobar" title="Foobar">Foobar</a>
|
||
</p><p><a href="/wiki/Foobarbaz" title="Foobarbaz">Foobarbaz</a>
|
||
</p><p><a href="/wiki/Foobar" title="Foobar">bar</a>
|
||
</p><p><a href="/wiki/Foobar" title="Foobar">Foobar</a>
|
||
</p><p><a href="/wiki/Foobar" title="Foobar">bar</a>
|
||
</p>
|
||
!! html/parsoid
|
||
<p><a typeof="mw:ExpandedAttrs" about="#mwt2" rel="mw:WikiLink" href="./Foo" title="Foo" data-parsoid='{"stx":"piped","a":{"href":"./Foo"},"sa":{"href":"Fo{{1x|o}}"}}' data-mw='{"attribs":[[{"txt":"href"},{"html":"Fo<span about=\"#mwt1\" typeof=\"mw:Transclusion\" data-parsoid='{\"pi\":[[{\"k\":\"1\"}]],\"dsr\":[4,12,null,null]}' data-mw='{\"parts\":[{\"template\":{\"target\":{\"wt\":\"1x\",\"href\":\"./Template:1x\"},\"params\":{\"1\":{\"wt\":\"o\"}},\"i\":0}}]}'>o</span>"}]]}'>bar</a></p>
|
||
|
||
<p><a typeof="mw:ExpandedAttrs" about="#mwt4" rel="mw:WikiLink" href="./Foobar" title="Foobar" data-parsoid='{"stx":"simple","a":{"href":"./Foobar"},"sa":{"href":"Foo{{1x|bar}}"}}' data-mw='{"attribs":[[{"txt":"href"},{"html":"Foo<span about=\"#mwt3\" typeof=\"mw:Transclusion\" data-parsoid='{\"pi\":[[{\"k\":\"1\"}]],\"dsr\":[25,35,null,null]}' data-mw='{\"parts\":[{\"template\":{\"target\":{\"wt\":\"1x\",\"href\":\"./Template:1x\"},\"params\":{\"1\":{\"wt\":\"bar\"}},\"i\":0}}]}'>bar</span>"}]]}'>Foobar</a></p>
|
||
|
||
<p><a typeof="mw:ExpandedAttrs" about="#mwt6" rel="mw:WikiLink" href="./Foobarbaz" title="Foobarbaz" data-parsoid='{"stx":"simple","a":{"href":"./Foobarbaz"},"sa":{"href":"Foo{{1x|bar}}baz"}}' data-mw='{"attribs":[[{"txt":"href"},{"html":"Foo<span about=\"#mwt5\" typeof=\"mw:Transclusion\" data-parsoid='{\"pi\":[[{\"k\":\"1\"}]],\"dsr\":[44,54,null,null]}' data-mw='{\"parts\":[{\"template\":{\"target\":{\"wt\":\"1x\",\"href\":\"./Template:1x\"},\"params\":{\"1\":{\"wt\":\"bar\"}},\"i\":0}}]}'>bar</span>baz"}]]}'>Foobarbaz</a></p>
|
||
|
||
<p><a typeof="mw:ExpandedAttrs" about="#mwt8" rel="mw:WikiLink" href="./Foobar" title="Foobar" data-parsoid='{"stx":"piped","a":{"href":"./Foobar"},"sa":{"href":"Foo{{1x|bar}}"}}' data-mw='{"attribs":[[{"txt":"href"},{"html":"Foo<span about=\"#mwt7\" typeof=\"mw:Transclusion\" data-parsoid='{\"pi\":[[{\"k\":\"1\"}]],\"dsr\":[66,76,null,null]}' data-mw='{\"parts\":[{\"template\":{\"target\":{\"wt\":\"1x\",\"href\":\"./Template:1x\"},\"params\":{\"1\":{\"wt\":\"bar\"}},\"i\":0}}]}'>bar</span>"}]]}'>bar</a></p>
|
||
|
||
<p><a typeof="mw:ExpandedAttrs" about="#mwt10" rel="mw:WikiLink" href="./Foobar" title="Foobar" data-parsoid='{"stx":"simple","a":{"href":"./Foobar"},"sa":{"href":":Foo{{1x|bar}}"}}' data-mw='{"attribs":[[{"txt":"href"},{"html":":Foo<span about=\"#mwt9\" typeof=\"mw:Transclusion\" data-parsoid='{\"pi\":[[{\"k\":\"1\"}]],\"dsr\":[90,100,null,null]}' data-mw='{\"parts\":[{\"template\":{\"target\":{\"wt\":\"1x\",\"href\":\"./Template:1x\"},\"params\":{\"1\":{\"wt\":\"bar\"}},\"i\":0}}]}'>bar</span>"}]]}'>Foobar</a></p>
|
||
|
||
<p><a typeof="mw:ExpandedAttrs" about="#mwt12" rel="mw:WikiLink" href="./Foobar" title="Foobar" data-parsoid='{"stx":"piped","a":{"href":"./Foobar"},"sa":{"href":":Foo{{1x|bar}}"}}' data-mw='{"attribs":[[{"txt":"href"},{"html":":Foo<span about=\"#mwt11\" typeof=\"mw:Transclusion\" data-parsoid='{\"pi\":[[{\"k\":\"1\"}]],\"dsr\":[110,120,null,null]}' data-mw='{\"parts\":[{\"template\":{\"target\":{\"wt\":\"1x\",\"href\":\"./Template:1x\"},\"params\":{\"1\":{\"wt\":\"bar\"}},\"i\":0}}]}'>bar</span>"}]]}'>bar</a></p>
|
||
!!end
|
||
|
||
!!test
|
||
Templates: Links: 4. Multiple templates generating link href
|
||
!! wikitext
|
||
[[{{1x|F}}{{1x|o}}ob{{1x|ar}}]]
|
||
!! html/php
|
||
<p><a href="/wiki/Foobar" title="Foobar">Foobar</a>
|
||
</p>
|
||
!! html/parsoid
|
||
<p><a typeof="mw:ExpandedAttrs" about="#mwt4" rel="mw:WikiLink" href="./Foobar" title="Foobar" data-parsoid='{"stx":"simple","a":{"href":"./Foobar"},"sa":{"href":"{{1x|F}}{{1x|o}}ob{{1x|ar}}"}}' data-mw='{"attribs":[[{"txt":"href"},{"html":"<span about=\"#mwt1\" typeof=\"mw:Transclusion\" data-parsoid='{\"pi\":[[{\"k\":\"1\"}]],\"dsr\":[2,10,null,null]}' data-mw='{\"parts\":[{\"template\":{\"target\":{\"wt\":\"1x\",\"href\":\"./Template:1x\"},\"params\":{\"1\":{\"wt\":\"F\"}},\"i\":0}}]}'>F</span><span about=\"#mwt2\" typeof=\"mw:Transclusion\" data-parsoid='{\"pi\":[[{\"k\":\"1\"}]],\"dsr\":[10,18,null,null]}' data-mw='{\"parts\":[{\"template\":{\"target\":{\"wt\":\"1x\",\"href\":\"./Template:1x\"},\"params\":{\"1\":{\"wt\":\"o\"}},\"i\":0}}]}'>o</span>ob<span about=\"#mwt3\" typeof=\"mw:Transclusion\" data-parsoid='{\"pi\":[[{\"k\":\"1\"}]],\"dsr\":[20,29,null,null]}' data-mw='{\"parts\":[{\"template\":{\"target\":{\"wt\":\"1x\",\"href\":\"./Template:1x\"},\"params\":{\"1\":{\"wt\":\"ar\"}},\"i\":0}}]}'>ar</span>"}]]}'>Foobar</a></p>
|
||
!!end
|
||
|
||
!!test
|
||
Templates: Links: 5. Generation of link text
|
||
!! wikitext
|
||
[[Foo|{{1x|bar}}]]
|
||
!! html
|
||
<p><a href="/wiki/Foo" title="Foo">bar</a>
|
||
</p>
|
||
!!end
|
||
|
||
!!test
|
||
Templates: Links: 5. Nested templates (only outermost template should be marked)
|
||
!! wikitext
|
||
{{1x|[[{{1x|Foo}}|bar]]}}
|
||
!! html
|
||
<p><a href="/wiki/Foo" title="Foo">bar</a>
|
||
</p>
|
||
!!end
|
||
|
||
!! test
|
||
File with template filename
|
||
!! wikitext
|
||
[[File:{{1x|Foobar.jpg}}]]
|
||
!! html/parsoid
|
||
<p><span class="mw-default-size" typeof="mw:File mw:ExpandedAttrs" data-mw='{"attribs":[[{"txt":"href"},{"html":"File:<span about=\"#mwt1\" typeof=\"mw:Transclusion\" data-parsoid='{\"pi\":[[{\"k\":\"1\"}]]}' data-mw='{\"parts\":[{\"template\":{\"target\":{\"wt\":\"1x\",\"href\":\"./Template:1x\"},\"params\":{\"1\":{\"wt\":\"Foobar.jpg\"}},\"i\":0}}]}'>Foobar.jpg</span>"}]]}'><a href="./File:Foobar.jpg" class="mw-file-description"><img resource="./File:Foobar.jpg" src="http://example.com/images/3/3a/Foobar.jpg" decoding="async" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="220" width="1941" data-parsoid='{"a":{"resource":"./File:Foobar.jpg","height":"220","width":"1941"},"sa":{"resource":"File:{{1x|Foobar.jpg}}"}}' class="mw-file-element"/></a></span></p>
|
||
!! end
|
||
|
||
!!test
|
||
Templates: HTML Tag: 1. Generation of HTML attr. key
|
||
!! wikitext
|
||
<div {{1x|style}}="color:red;">foo</div>
|
||
!! html
|
||
<div style="color:red;">foo</div>
|
||
!!end
|
||
|
||
!!test
|
||
Templates: HTML Tag: 2. Generation of HTML attr. value
|
||
!! wikitext
|
||
<div style={{1x|'color:red;'}}>foo</div>
|
||
!! html
|
||
<div style="color:red;">foo</div>
|
||
!!end
|
||
|
||
!!test
|
||
Templates: HTML Tag: 3. Generation of HTML attr key and value
|
||
!! wikitext
|
||
<div {{1x|style}}={{1x|'color:red;'}}>foo</div>
|
||
!! html
|
||
<div style="color:red;">foo</div>
|
||
!!end
|
||
|
||
!!test
|
||
Templates: HTML Tag: 4. Generation of starting piece of HTML attr value
|
||
!! wikitext
|
||
<div title="{{1x|This is a long title}} with just one piece templated">foo</div>
|
||
!! html
|
||
<div title="This is a long title with just one piece templated">foo</div>
|
||
!!end
|
||
|
||
!!test
|
||
Templates: HTML Tag: 5. Generation of middle piece of HTML attr value
|
||
!! wikitext
|
||
<div title="This is a long title with just {{1x|one piece}} templated">foo</div>
|
||
!! html
|
||
<div title="This is a long title with just one piece templated">foo</div>
|
||
!!end
|
||
|
||
!!test
|
||
Templates: HTML Tag: 6. Generation of end piece of HTML attr value
|
||
!! wikitext
|
||
<div title="This is a long title with just one piece {{1x|templated}}">foo</div>
|
||
!! html
|
||
<div title="This is a long title with just one piece templated">foo</div>
|
||
!!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
|
||
<div st{{1x|yle}}="color:red;">foo</div>
|
||
!! html
|
||
<div style="color:red;">foo</div>
|
||
!!end
|
||
|
||
!! test
|
||
Templates: HTML Tag: 8. Template-generated attribute (k=v)
|
||
!! wikitext
|
||
<div {{1x|1=id="v1"}}>bar</div>
|
||
!! html
|
||
<div id="v1">bar</div>
|
||
!!end
|
||
|
||
!! test
|
||
Templates: HTML Tag: 9. Multiple template-generated attributes
|
||
!! wikitext
|
||
<div {{1x|1=id="v1" title="foo"}}>bar</div>
|
||
!! html
|
||
<div id="v1" title="foo">bar</div>
|
||
!!end
|
||
|
||
!! test
|
||
Templates: Support for templates generating attributes and content
|
||
!! wikitext
|
||
{| {{mixed_attr_content_template}}
|
||
|-
|
||
|bar
|
||
|}
|
||
!! html/php
|
||
<table style="color:red;" title="T48811">
|
||
|
||
<tbody><tr>
|
||
<td>foo
|
||
</td></tr>
|
||
<tr>
|
||
<td>bar
|
||
</td></tr></tbody></table>
|
||
!! html/parsoid
|
||
<table style="color:red;" title="T48811" about="#mwt1" typeof="mw:Transclusion mw:ExpandedAttrs" data-mw='{"attribs":[[{"txt":"style","html":"style=\"color:red;\" title=\"T48811\"","uneditable":true},{"html":""}]],"parts":["{| ",{"template":{"target":{"wt":"mixed_attr_content_template","href":"./Template:Mixed_attr_content_template"},"params":{},"i":0}},"\n|-\n|bar\n|}"]}'>
|
||
<tbody><tr>
|
||
<td>foo</td></tr>
|
||
<tr>
|
||
<td>bar</td></tr>
|
||
</tbody></table>
|
||
!!end
|
||
|
||
!! test
|
||
Templates: Support for templates generating table attributes and content (with fostered categories)
|
||
!! wikitext
|
||
{| {{mixed_attr_content_template_2}}
|
||
|-
|
||
|bar
|
||
|}
|
||
!! html/php
|
||
<table style="color:red;" title="T249740">
|
||
<tbody><tr>
|
||
<td>foo
|
||
</td></tr>
|
||
<tr>
|
||
<td>bar
|
||
</td></tr></tbody></table>
|
||
!! html/parsoid
|
||
<link rel="mw:PageProp/Category" href="./Category:Fostered_Content" about="#mwt1" typeof="mw:Transclusion" data-parsoid='{"stx":"simple","a":{"href":"./Category:Fostered_Content"},"sa":{"href":"Category:Fostered Content"},"pi":[[]],"firstWikitextNode":"TABLE"}' data-mw='{"parts":["{| ",{"template":{"target":{"wt":"mixed_attr_content_template_2","href":"./Template:Mixed_attr_content_template_2"},"params":{},"i":0}},"\n|-\n|bar\n|}"]}'/><table style="color:red;" title="T249740" about="#mwt1" typeof="mw:ExpandedAttrs" data-mw='{"attribs":[[{"txt":"style","html":"style=\"color:red;\" title=\"T249740\"","uneditable":true},{"html":""}]]}'>
|
||
<tbody><tr>
|
||
|
||
<td>foo</td></tr>
|
||
<tr>
|
||
<td>bar</td></tr>
|
||
</tbody></table>
|
||
!!end
|
||
|
||
!! article
|
||
Template:attribute_from_template
|
||
!! text
|
||
class="123"
|
||
!! endarticle
|
||
|
||
!! test
|
||
Table cell with attribute before expanded attribute
|
||
!! wikitext
|
||
{|
|
||
| align="center" {{attribute_from_template}} |456
|
||
|}
|
||
!! html/parsoid
|
||
<table>
|
||
<tbody><tr><td align="center" class="123" about="#mwt2" typeof="mw:ExpandedAttrs" data-mw='{"attribs":[[{"txt":"class","html":"<span about=\"#mwt1\" typeof=\"mw:Transclusion\" data-parsoid='{\"pi\":[[]],\"dsr\":[20,47,null,null]}' data-mw='{\"parts\":[{\"template\":{\"target\":{\"wt\":\"attribute_from_template\",\"href\":\"./Template:Attribute_from_template\"},\"params\":{},\"i\":0}}]}'>class=\"123\"</span>"},{"html":""}]]}'>456</td></tr>
|
||
</tbody></table>
|
||
!! end
|
||
|
||
# In integrated mode, the {{=}} template is expanded before Parsoid sees it
|
||
!! test
|
||
1. Entities and nowikis inside templated attributes should be handled correctly
|
||
!! wikitext
|
||
<div {{1x|style{{=}}"background:#f9f9f9;"}}>foo</div>
|
||
!! html/php
|
||
<div style="background:#f9f9f9;">foo</div>
|
||
!! html/parsoid+standalone
|
||
<div style="background:#f9f9f9;" about="#mwt3" typeof="mw:ExpandedAttrs" data-parsoid='{"stx":"html"}' data-mw='{"attribs":[[{"txt":"style","html":"<span about=\"#mwt1\" typeof=\"mw:Transclusion\" data-parsoid='{\"pi\":[[{\"k\":\"1\"}]]}' data-mw='{\"parts\":[{\"template\":{\"target\":{\"wt\":\"1x\",\"href\":\"./Template:1x\"},\"params\":{\"1\":{\"wt\":\"style{{=}}\\\"background:&amp;#35;f9f9f9;\\\"\"}},\"i\":0}}]}'>style</span><span typeof=\"mw:Nowiki\" about=\"#mwt1\" data-parsoid=\"{}\">=</span><span about=\"#mwt1\" data-parsoid=\"{}\">\"background:</span><span typeof=\"mw:Entity\" about=\"#mwt1\" data-parsoid='{\"src\":\"&amp;#35;\",\"srcContent\":\"#\"}'>#</span><span about=\"#mwt1\" data-parsoid=\"{}\">f9f9f9;\"</span>"},{"html":""}]]}'>foo</div>
|
||
!! html/parsoid+integrated
|
||
<div style="background:#f9f9f9;" about="#mwt3" typeof="mw:ExpandedAttrs" data-parsoid='{"stx":"html"}' data-mw='{"attribs":[[{"txt":"style","html":"<span about=\"#mwt1\" typeof=\"mw:Transclusion\" data-parsoid='{\"pi\":[[{\"k\":\"1\"}]]}' data-mw='{\"parts\":[{\"template\":{\"target\":{\"wt\":\"1x\",\"href\":\"./Template:1x\"},\"params\":{\"1\":{\"wt\":\"style{{=}}\\\"background:&amp;#35;f9f9f9;\\\"\"}},\"i\":0}}]}'>style=\"background:</span><span typeof=\"mw:Entity\" about=\"#mwt1\" data-parsoid='{\"src\":\"&amp;#35;\",\"srcContent\":\"#\"}'>#</span><span about=\"#mwt1\" data-parsoid=\"{}\">f9f9f9;\"</span>"},{"html":""}]]}'>foo</div>
|
||
!! end
|
||
|
||
!! test
|
||
2. Entities and nowikis inside templated attributes should be handled correctly
|
||
!! wikitext
|
||
{|
|
||
|{{table_attribs_3}}
|
||
|}
|
||
!! html/php
|
||
<table>
|
||
<tbody><tr>
|
||
<td style="background:#f9f9f9;">Foo
|
||
</td></tr></tbody></table>
|
||
!! html/parsoid
|
||
<table>
|
||
<tbody><tr data-parsoid='{"autoInsertedStart":true}'><td style="background:#f9f9f9;" typeof="mw:Transclusion" about="#mwt1" data-mw='{"parts":["|",{"template":{"target":{"wt":"table_attribs_3","href":"./Template:Table_attribs_3"},"params":{},"i":0}}]}'>Foo</td></tr>
|
||
</tbody></table>
|
||
!! 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
|
||
<table>
|
||
<tbody><tr>
|
||
<td style="background:#f9f9f9;">Foo
|
||
</td></tr></tbody></table>
|
||
!! html/parsoid
|
||
<table about="#mwt1" typeof="mw:Transclusion" data-parsoid='{"pi":[[],[],[]]}' data-mw='{"parts":[{"template":{"target":{"wt":"tbl-start","href":"./Template:Tbl-start"},"params":{},"i":0}},"\n|",{"template":{"target":{"wt":"table_attribs_3","href":"./Template:Table_attribs_3"},"params":{},"i":1}},"\n",{"template":{"target":{"wt":"tbl-end","href":"./Template:Tbl-end"},"params":{},"i":2}}]}'>
|
||
<tbody><tr><td style="background:#f9f9f9;">Foo</td></tr>
|
||
</tbody></table>
|
||
!! end
|
||
|
||
# T107622
|
||
!! test
|
||
4. Entities and nowikis inside templated attributes should be handled correctly inside templated tables
|
||
!! wikitext
|
||
{|
|
||
|{{table_attribs_6}} hi
|
||
|}
|
||
!! html/php
|
||
<table>
|
||
<tbody><tr>
|
||
<td style="background: red;">hi
|
||
</td></tr></tbody></table>
|
||
!! html/parsoid
|
||
<table>
|
||
<tbody><tr><td style="background: red;" typeof="mw:Transclusion" about="#mwt1" data-mw='{"parts":["|",{"template":{"target":{"wt":"table_attribs_6","href":"./Template:Table_attribs_6"},"params":{},"i":0}}," hi"]}'> hi</td></tr>
|
||
</tbody></table>
|
||
!! end
|
||
|
||
!! test
|
||
Extension tag in templated tag attribute
|
||
!! wikitext
|
||
{{1x|1=
|
||
{{{!}} class="123" <nowiki />
|
||
{{!}} hi
|
||
{{!}}}
|
||
}}
|
||
!! html/php
|
||
<table class="123">
|
||
<tbody><tr>
|
||
<td>hi
|
||
</td></tr></tbody></table>
|
||
!! html/parsoid
|
||
<table class="123" about="#mwt2" typeof="mw:Transclusion mw:ExpandedAttrs" data-parsoid='{"startTagSrc":"{{{!}}","a":{"<nowiki />":null},"sa":{"<nowiki />":""},"pi":[[{"k":"1","named":true,"spc":["","","\n","\n"]}]]}' data-mw='{"attribs":[[{"txt":"","html":"<span typeof=\"mw:Nowiki\"></span>"},{"html":""}]],"parts":[{"template":{"target":{"wt":"1x","href":"./Template:1x"},"params":{"1":{"wt":"{{{!}} class=\"123\" <nowiki />\n{{!}} hi\n{{!}}}"}},"i":0}}]}'>
|
||
<tbody><tr><td>hi</td></tr>
|
||
</tbody></table>
|
||
!! end
|
||
|
||
!!test
|
||
Templates: HTML Tables: 1. Generating start of a HTML table
|
||
!! wikitext
|
||
{{1x|<table><tr><td>foo</td>}}</tr></table>
|
||
!! html
|
||
<table><tbody><tr><td>foo</td></tr></tbody></table>
|
||
!!end
|
||
|
||
!!test
|
||
Templates: HTML Tables: 2a. Generating middle of a HTML table
|
||
!! wikitext
|
||
<table><tr>{{1x|<td>foo</td>}}</tr></table>
|
||
!! html
|
||
<table><tbody><tr><td>foo</td></tr></tbody></table>
|
||
!!end
|
||
|
||
!!test
|
||
Templates: HTML Tables: 2b. Generating middle of a HTML table
|
||
!! wikitext
|
||
<table>{{1x|<tr><td>foo</td></tr>}}</table>
|
||
!! html
|
||
<table><tbody><tr><td>foo</td></tr></tbody></table>
|
||
!!end
|
||
|
||
!!test
|
||
Templates: HTML Tables: 3. Generating end of a HTML table
|
||
!! wikitext
|
||
<table><tr>{{1x|<td>foo</td></tr></table>}}
|
||
!! html
|
||
<table><tbody><tr><td>foo</td></tr></tbody></table>
|
||
!! end
|
||
|
||
!!test
|
||
Templates: HTML Tables: 4a. Generating a single tag of a HTML table
|
||
!! wikitext
|
||
{{1x|<table>}}<tr><td>foo</td></tr></table>
|
||
!! html
|
||
<table><tbody><tr><td>foo</td></tr></tbody></table>
|
||
!! end
|
||
|
||
!!test
|
||
Templates: HTML Tables: 4b. Generating a single tag of a HTML table
|
||
!! wikitext
|
||
<table>{{1x|<tr>}}<td>foo</td></tr></table>
|
||
!! html
|
||
<table><tbody><tr><td>foo</td></tr></tbody></table>
|
||
!! end
|
||
|
||
!!test
|
||
Templates: HTML Tables: 4c. Generating a single tag of a HTML table
|
||
!! wikitext
|
||
<table><tr>{{1x|<td>}}foo</td></tr></table>
|
||
!! html
|
||
<table><tbody><tr><td>foo</td></tr></tbody></table>
|
||
!! end
|
||
|
||
!!test
|
||
Templates: HTML Tables: 4d. Generating a single tag of a HTML table
|
||
!! wikitext
|
||
<table><tr><td>foo{{1x|</td>}}</tr></table>
|
||
!! html
|
||
<table><tbody><tr><td>foo</td></tr></tbody></table>
|
||
!! end
|
||
|
||
!!test
|
||
Templates: HTML Tables: 4e. Generating a single tag of a HTML table
|
||
!! wikitext
|
||
<table><tr><td>foo</td>{{1x|</tr>}}</table>
|
||
!! html
|
||
<table><tbody><tr><td>foo</td></tr></tbody></table>
|
||
!! end
|
||
|
||
!!test
|
||
Templates: HTML Tables: 4f. Generating a single tag of a HTML table
|
||
!! wikitext
|
||
<table><tr><td>foo</td></tr>{{1x|</table>}}
|
||
!! html
|
||
<table><tbody><tr><td>foo</td></tr></tbody></table>
|
||
!! end
|
||
|
||
!!test
|
||
Templates: HTML Tables: 5. Proper fostering of categories from inside
|
||
!!options
|
||
parsoid=wt2html,wt2wt
|
||
!! wikitext
|
||
<table>[[Category:foo1]]<tr><td>foo</td></tr></table>
|
||
<!--Two categories (T52330)-->
|
||
<table>[[Category:bar1]][[Category:bar2]]<tr><td>foo</td></tr></table>
|
||
!! html/php
|
||
<table><tbody><tr><td>foo</td></tr></tbody></table>
|
||
<table><tbody><tr><td>foo</td></tr></tbody></table>
|
||
!! html/parsoid
|
||
<link rel="mw:PageProp/Category" href="./Category:Foo1"><table><tbody><tr><td>foo</td></tr></tbody></table>
|
||
<!--Two categories (T52330)-->
|
||
<link rel="mw:PageProp/Category" href="./Category:Bar1"><link rel="mw:PageProp/Category" href="./Category:Bar2"><table><tbody><tr><td>foo</td></tr></tbody></table>
|
||
!!end
|
||
|
||
## Remex doesn't account for fostered content.
|
||
!! test
|
||
Templates: Wiki Tables: 1a. Fostering of entire template content
|
||
!! wikitext
|
||
{|
|
||
{{1x|a}}
|
||
|}
|
||
!! html/php
|
||
|
||
a
|
||
<table><tbody><tr><td></td></tr></tbody></table>
|
||
!! html/parsoid
|
||
<p about="#mwt2" typeof="mw:Transclusion" data-parsoid='{"fostered":true,"autoInsertedEnd":true,"autoInsertedStart":true,"firstWikitextNode":"TABLE","pi":[[{"k":"1"}]]}' data-mw='{"parts":["{|\n",{"template":{"target":{"wt":"1x","href":"./Template:1x"},"params":{"1":{"wt":"a"}},"i":0}},"\n|}"]}'>a</p><table about="#mwt2">
|
||
|
||
</table>
|
||
!! end
|
||
|
||
!!test
|
||
Templates: Wiki Tables: 1b. Fostering of entire template content
|
||
!! wikitext
|
||
{|
|
||
{{1x|<div>}}
|
||
foo
|
||
{{1x|</div>}}
|
||
|}
|
||
!! html/php
|
||
<div>
|
||
<p>foo
|
||
</p>
|
||
</div><table>
|
||
|
||
<tbody><tr><td></td></tr></tbody></table>
|
||
!! html/parsoid
|
||
<div about="#mwt3" typeof="mw:Transclusion" data-parsoid='{"stx":"html","fostered":true,"autoInsertedEnd":true,"firstWikitextNode":"TABLE","pi":[[{"k":"1"}],[{"k":"1"}]]}' data-mw='{"parts":["{|\n",{"template":{"target":{"wt":"1x","href":"./Template:1x"},"params":{"1":{"wt":"<div>"}},"i":0}},"\nfoo\n",{"template":{"target":{"wt":"1x","href":"./Template:1x"},"params":{"1":{"wt":"</div>"}},"i":1}},"\n|}"]}'>
|
||
<p>foo</p>
|
||
</div><table about="#mwt3">
|
||
|
||
</table>
|
||
!! end
|
||
|
||
## Remex doesn't account for fostered content.
|
||
!! test
|
||
Templates: Wiki Tables: 2. Fostering of partial template content
|
||
!! wikitext
|
||
{|
|
||
{{1x|a
|
||
<div>b</div>}}
|
||
|}
|
||
!! html/php
|
||
|
||
a
|
||
<div>b</div><table>
|
||
<tbody><tr><td></td></tr></tbody></table>
|
||
!! html/parsoid
|
||
<p about="#mwt2" typeof="mw:Transclusion" data-parsoid='{"fostered":true,"autoInsertedEnd":true,"autoInsertedStart":true,"firstWikitextNode":"TABLE","pi":[[{"k":"1"}]]}' data-mw='{"parts":["{|\n",{"template":{"target":{"wt":"1x","href":"./Template:1x"},"params":{"1":{"wt":"a\n<div>b</div>"}},"i":0}},"\n|}"]}'>a</p><div about="#mwt2">b</div><table about="#mwt2">
|
||
|
||
|
||
</table>
|
||
!! end
|
||
|
||
!!test
|
||
Templates: Wiki Tables: 3. td-content via multiple templates
|
||
!! wikitext
|
||
{|
|
||
{{1x|{{pipe}}a}}{{1x|b}}
|
||
|}
|
||
!! html
|
||
<table>
|
||
<tbody><tr>
|
||
<td>ab
|
||
</td></tr></tbody></table>
|
||
!! end
|
||
|
||
!!test
|
||
Templates: Wiki Tables: 4. Templated tags, no content
|
||
!! wikitext
|
||
{{tbl-start}}
|
||
{{tbl-end}}
|
||
!! html/php
|
||
<table>
|
||
<tbody><tr><td></td></tr></tbody></table>
|
||
!! html/parsoid
|
||
<table about="#mwt1" typeof="mw:Transclusion" data-parsoid='{"pi":[[],[]]}' data-mw='{"parts":[{"template":{"target":{"wt":"tbl-start","href":"./Template:Tbl-start"},"params":{},"i":0}},"\n",{"template":{"target":{"wt":"tbl-end","href":"./Template:Tbl-end"},"params":{},"i":1}}]}'>
|
||
</table>
|
||
!! end
|
||
|
||
!!test
|
||
Templates: Wiki Tables: 5. Templated tags, regular td-tags
|
||
!! wikitext
|
||
{{tbl-start}}
|
||
|foo
|
||
{{tbl-end}}
|
||
!! html
|
||
<table>
|
||
<tbody><tr>
|
||
<td>foo
|
||
</td></tr></tbody></table>
|
||
!! end
|
||
|
||
!!test
|
||
Templates: Wiki Tables: 6. Templated tags, templated td-tags
|
||
!! wikitext
|
||
{{tbl-start}}
|
||
{{!}}foo
|
||
{{tbl-end}}
|
||
!! html
|
||
<table>
|
||
<tbody><tr>
|
||
<td>foo
|
||
</td></tr></tbody></table>
|
||
!! end
|
||
|
||
!!article
|
||
Template:UnclosedTableEndsWithTR
|
||
!!text
|
||
{|
|
||
|-
|
||
!!endarticle
|
||
|
||
!! test
|
||
Templates: Wiki Tables: 8. Fosterable meta-tags should get fostered
|
||
!! wikitext
|
||
{{UnclosedTableEndsWithTR}}
|
||
<onlyinclude>
|
||
|foo
|
||
</onlyinclude>
|
||
|}
|
||
|
||
<noinclude>
|
||
{{UnclosedTableEndsWithTR}}
|
||
</noinclude>
|
||
|foo
|
||
|}
|
||
!! html/parsoid
|
||
<meta typeof="mw:Transclusion mw:Includes/OnlyInclude" about="#mwt1" data-mw='{"parts":[{"template":{"target":{"wt":"UnclosedTableEndsWithTR","href":"./Template:UnclosedTableEndsWithTR"},"params":{},"i":0}},"\n<onlyinclude>\n|foo\n</onlyinclude>\n|}"]}'/>
|
||
<table about="#mwt1">
|
||
<tbody><tr>
|
||
|
||
<td>foo
|
||
<meta typeof="mw:Includes/OnlyInclude/End"/></td></tr>
|
||
</tbody></table>
|
||
|
||
<meta typeof="mw:Includes/NoInclude" data-parsoid='{"src":"<noinclude>"}'/>
|
||
<meta about="#mwt2" typeof="mw:Transclusion mw:Includes/NoInclude/End" data-mw='{"parts":[{"template":{"target":{"wt":"UnclosedTableEndsWithTR","href":"./Template:UnclosedTableEndsWithTR"},"params":{},"i":0}},"\n</noinclude>\n|foo\n|}"]}'/> <table about="#mwt2">
|
||
<tbody><tr>
|
||
|
||
<td>foo</td></tr>
|
||
</tbody></table>
|
||
!! end
|
||
|
||
## Parsoid standalone mode seems to drop nonexisting templates
|
||
!! test
|
||
Templates: Lists: Multi-line list-items via templates
|
||
!! wikitext
|
||
*{{1x|a {{nonexistent|
|
||
unused}}}}
|
||
*{{1x|b {{nonexistent|
|
||
unused}}}}
|
||
!! html/php
|
||
<ul><li>a <a href="/index.php?title=Template:Nonexistent&action=edit&redlink=1" class="new" title="Template:Nonexistent (page does not exist)">Template:Nonexistent</a></li>
|
||
<li>b <a href="/index.php?title=Template:Nonexistent&action=edit&redlink=1" class="new" title="Template:Nonexistent (page does not exist)">Template:Nonexistent</a></li></ul>
|
||
!! html/parsoid
|
||
<ul><li><span about="#mwt1" typeof="mw:Transclusion" data-parsoid='{"pi":[[{"k":"1"}]]}' data-mw='{"parts":[{"template":{"target":{"wt":"1x","href":"./Template:1x"},"params":{"1":{"wt":"a {{nonexistent|\nunused}}"}},"i":0}}]}'>a </span><a rel="mw:WikiLink" href="./Template:Nonexistent?action=edit&redlink=1" title="Template:Nonexistent" about="#mwt1" class="new" typeof="mw:LocalizedAttrs" data-parsoid='{"stx":"simple","a":{"href":"./Template:Nonexistent"},"sa":{"href":"Template:Nonexistent"}}' data-mw-i18n='{"title":{"lang":"x-page","key":"red-link-title","params":["Template:Nonexistent"]}}'>Template:Nonexistent</a></li>
|
||
<li><span about="#mwt3" typeof="mw:Transclusion" data-parsoid='{"pi":[[{"k":"1"}]]}' data-mw='{"parts":[{"template":{"target":{"wt":"1x","href":"./Template:1x"},"params":{"1":{"wt":"b {{nonexistent|\nunused}}"}},"i":0}}]}'>b </span><a rel="mw:WikiLink" href="./Template:Nonexistent?action=edit&redlink=1" title="Template:Nonexistent" about="#mwt3" class="new" typeof="mw:LocalizedAttrs" data-parsoid='{"stx":"simple","a":{"href":"./Template:Nonexistent"},"sa":{"href":"Template:Nonexistent"}}' data-mw-i18n='{"title":{"lang":"x-page","key":"red-link-title","params":["Template:Nonexistent"]}}'>Template:Nonexistent</a></li></ul>
|
||
!! end
|
||
|
||
!!test
|
||
Templates: Ugly nesting: 1. Quotes opened/closed across templates (1x)
|
||
!! wikitext
|
||
{{1x|''a}}{{1x|b''c''d}}{{1x|''e}}
|
||
!! html
|
||
<p><i>ab</i>c<i>d</i>e
|
||
</p>
|
||
!!end
|
||
|
||
## Legacy parser generates misnested html
|
||
!! test
|
||
Templates: Ugly nesting: 2. Quotes opened/closed across templates (1x_with_span)
|
||
!! wikitext
|
||
{{1x_with_span|''a}}{{1x_with_span|b''c''d}}{{1x_with_span|''e}}
|
||
!! html/parsoid
|
||
<p><span about="#mwt1" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"1x_with_span","href":"./Template:1x_with_span"},"params":{"1":{"wt":"''a"}},"i":0}}]}'><i>a</i></span><i about="#mwt2" typeof="mw:Transclusion" data-parsoid='{"autoInsertedStart":true,"pi":[[{"k":"1"}],[{"k":"1"}]]}' data-mw='{"parts":[{"template":{"target":{"wt":"1x_with_span","href":"./Template:1x_with_span"},"params":{"1":{"wt":"b''c''d"}},"i":0}},{"template":{"target":{"wt":"1x_with_span","href":"./Template:1x_with_span"},"params":{"1":{"wt":"''e"}},"i":1}}]}'><span>b</span></i><span about="#mwt2">c</span><i about="#mwt2">d<span></span></i><span about="#mwt2">e</span></p>
|
||
!! end
|
||
|
||
## Legacy parser generates misnested html; Parsoid html2wt mode adds newlines between {{1x}}s
|
||
!! test
|
||
Templates: Ugly nesting: 3. Quotes opened/closed across templates (1x_with_div)
|
||
!! options
|
||
parsoid=wt2html,wt2wt
|
||
!! wikitext
|
||
{{1x_with_div|''a}}{{1x_with_div|b''c''d}}{{1x_with_div|''e}}
|
||
!! html/php
|
||
<div><i>a</i></div><div><i>b</i>c<i>d</i></div><div>e</div>
|
||
!! html/parsoid
|
||
<div about="#mwt1" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"1x_with_div","href":"./Template:1x_with_div"},"params":{"1":{"wt":"''a"}},"i":0}}]}'><i>a</i></div>
|
||
<div about="#mwt2" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"1x_with_div","href":"./Template:1x_with_div"},"params":{"1":{"wt":"b''c''d"}},"i":0}}]}'><i>b</i>c<i>d</i></div>
|
||
<div about="#mwt3" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"1x_with_div","href":"./Template:1x_with_div"},"params":{"1":{"wt":"''e"}},"i":0}}]}'>e</div>
|
||
!! end
|
||
|
||
!! test
|
||
Templates: Ugly nesting: 4. Divs opened/closed across templates
|
||
!! wikitext
|
||
a<div>b{{1x|c</div>d}}e
|
||
!! html
|
||
<p>a</p><div>bc</div><p>de</p>
|
||
!! end
|
||
|
||
!! test
|
||
Templates: Ugly templates: 3. newline-only template parameter
|
||
!! wikitext
|
||
foo {{1x|
|
||
}}
|
||
!! html
|
||
<p>foo
|
||
</p>
|
||
!! end
|
||
|
||
# This looks like a bug: a single newline triggers p/br for some reason.
|
||
!! test
|
||
Templates: Ugly templates: 4. newline-only template parameter inconsistency
|
||
!! wikitext
|
||
{{1x|
|
||
}}
|
||
!! html
|
||
<p><br />
|
||
</p>
|
||
!! end
|
||
|
||
# T66017 -- ugly wikitext with fostered content generates two template ranges that
|
||
# have a true overlap (T1-start - T2-start - T1-end - T2-end).
|
||
!! test
|
||
Templates: Ugly templates: 5. Template encapsulation test: Non-trivial overlap of template ranges is properly handled
|
||
!! wikitext
|
||
{{1x|<table>}}
|
||
{{1x|<div>foo}}
|
||
{{1x|</table>}}
|
||
!! html/parsoid
|
||
<div about="#mwt1" typeof="mw:Transclusion" data-parsoid='{"stx":"html","autoInsertedEnd":true,"pi":[[{"k":"1"}],[{"k":"1"}],[{"k":"1"}]]}' data-mw='{"parts":[{"template":{"target":{"wt":"1x","href":"./Template:1x"},"params":{"1":{"wt":"<table>"}},"i":0}},"\n",{"template":{"target":{"wt":"1x","href":"./Template:1x"},"params":{"1":{"wt":"<div>foo"}},"i":1}},"\n",{"template":{"target":{"wt":"1x","href":"./Template:1x"},"params":{"1":{"wt":"</table>"}},"i":2}}]}'>foo</div><span about="#mwt1">
|
||
</span><table about="#mwt1">
|
||
</table>
|
||
!! end
|
||
|
||
# T66017 -- ugly wikitext with fostered content generates two template ranges
|
||
# that are "identical" and generate nesting cycles in the algorithm
|
||
!! test
|
||
Templates: Ugly templates: 6. Template encapsulation test: Cyclical nesting of template ranges is properly handled
|
||
!! wikitext
|
||
{{1x|<table><tr><td><table>}}
|
||
{{1x|<div>}}
|
||
{{1x|</div>}}
|
||
!! html/parsoid
|
||
<table about="#mwt1" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"1x","href":"./Template:1x"},"params":{"1":{"wt":"<table><tr><td><table>"}},"i":0}},"\n",{"template":{"target":{"wt":"1x","href":"./Template:1x"},"params":{"1":{"wt":"<div>"}},"i":1}},"\n",{"template":{"target":{"wt":"1x","href":"./Template:1x"},"params":{"1":{"wt":"</div>"}},"i":2}}]}' data-parsoid='{"stx":"html","autoInsertedEnd":true,"pi":[[{"k":"1"}],[{"k":"1"}],[{"k":"1"}]]}'><tbody><tr data-parsoid='{"stx":"html"}'><td data-parsoid='{"stx":"html"}'><div data-parsoid='{"stx":"html"}'>
|
||
</div><table about="#mwt1" data-parsoid='{"stx":"html"}'>
|
||
</table></td></tr></tbody></table>
|
||
!! end
|
||
|
||
!! test
|
||
Templates: Parameters substituted at the top-level
|
||
!! wikitext
|
||
{{{foo|''who'' {{1x|me}}? '''never!'''}}}
|
||
|
||
{{{foo|bar|baz}}}
|
||
!! html/php
|
||
<p><i>who</i> me? <b>never!</b>
|
||
</p><p>bar
|
||
</p>
|
||
!! html/parsoid
|
||
<p about="#mwt2" typeof="mw:Param" data-mw='{"parts":[{"templatearg":{"target":{"wt":"foo"},"params":{"1":{"wt":"''who'' {{1x|me}}? '''never!'''"}},"i":0}}]}'><i>who</i> me? <b>never!</b></p>
|
||
|
||
<p about="#mwt3" typeof="mw:Param" data-mw='{"parts":[{"templatearg":{"target":{"wt":"foo"},"params":{"1":{"wt":"bar"},"2":{"wt":"baz"}},"i":0}}]}'>bar</p>
|
||
!! end
|
||
|
||
!! test
|
||
Templates: Param with empty arg in the final position
|
||
!! wikitext
|
||
{{{hi|}}}
|
||
!! html/parsoid
|
||
<span about="#mwt1" typeof="mw:Param" data-mw='{"parts":[{"templatearg":{"target":{"wt":"hi"},"params":{"1":{"wt":""}},"i":0}}]}'></span>
|
||
!! end
|
||
|
||
!! test
|
||
Compound transclusion with template and top level templatearg
|
||
!! wikitext
|
||
{{1x|<table>}}
|
||
{{{top|<td>123</td>}}}
|
||
</table>
|
||
!! html/php
|
||
<table>
|
||
<tbody><tr><td>123</td>
|
||
</tr></tbody></table>
|
||
!! html/parsoid
|
||
<table about="#mwt1" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"1x","href":"./Template:1x"},"params":{"1":{"wt":"<table>"}},"i":0}},"\n",{"templatearg":{"target":{"wt":"top"},"params":{"1":{"wt":"<td>123</td>"}},"i":1}},"\n</table>"]}'>
|
||
<tbody><tr><td>123</td></tr>
|
||
</tbody></table>
|
||
!! end
|
||
|
||
!!test
|
||
Parser Functions: 1. Simple example
|
||
!! wikitext
|
||
{{uc:foo}}
|
||
!! html
|
||
<p>FOO
|
||
</p>
|
||
!!end
|
||
|
||
!!test
|
||
Parser Functions: 2. Nested use (only outermost should be marked up)
|
||
!! wikitext
|
||
{{uc:{{lc:FOO}}}}
|
||
!! html
|
||
<p>FOO
|
||
</p>
|
||
!!end
|
||
|
||
## Note that the templates inside the extension tag are not wrapped
|
||
## and that the extsrc attributes in integrated mode are missing
|
||
## the nested template (FIXME!)
|
||
!! test
|
||
Template nested in extension tag in template
|
||
!! options
|
||
title=[[Main Page]]
|
||
language=zh
|
||
!! wikitext
|
||
{{1x|hi<span>[[ho|{{1x|hi}}]]</span>}}
|
||
{{1x|hi<spantag>[[ho|{{1x|hi}}]]</spantag>}}
|
||
{{1x|hi<spantag>[http://test.com?q={{1x|ho}}]</spantag>}}
|
||
{{1x|hi<spantag>-{ho|{{1x|hi}}}-</spantag>}}
|
||
!! html/php
|
||
<p>hi<span><a href="/wiki/Ho" title="Ho">hi</a></span>
|
||
hi<span><a href="/wiki/Ho" title="Ho">hi</a></span>
|
||
hi<span><a rel="nofollow" class="external autonumber" href="http://test.com?q=ho">[1]</a></span>
|
||
hi<span>hi</span>
|
||
</p>
|
||
!! html/parsoid
|
||
<p><span about="#mwt1" typeof="mw:Transclusion" data-parsoid='{"pi":[[{"k":"1"}]]}' data-mw='{"parts":[{"template":{"target":{"wt":"1x","href":"./Template:1x"},"params":{"1":{"wt":"hi<span>[[ho|{{1x|hi}}]]</span>"}},"i":0}}]}'>hi</span><span about="#mwt1" data-parsoid='{"stx":"html"}'><a rel="mw:WikiLink" href="./Ho" title="Ho">hi</a></span>
|
||
<span about="#mwt2" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"1x","href":"./Template:1x"},"params":{"1":{"wt":"hi<spantag>[[ho|{{1x|hi}}]]</spantag>"}},"i":0}}]}'>hi</span><span about="#mwt2" typeof="mw:Extension/spantag" data-mw='{"name":"spantag","attrs":{},"body":{"extsrc":"[[ho|{{1x|hi}}]]"}}'><a rel="mw:WikiLink" href="./Ho" title="Ho">hi</a></span>
|
||
<span about="#mwt3" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"1x","href":"./Template:1x"},"params":{"1":{"wt":"hi<spantag>[http://test.com?q={{1x|ho}}]</spantag>"}},"i":0}}]}'>hi</span><span about="#mwt3" typeof="mw:Extension/spantag" data-mw='{"name":"spantag","attrs":{},"body":{"extsrc":"[http://test.com?q={{1x|ho}}]"}}'><a rel="mw:ExtLink" href="http://test.com?q=ho" class="external autonumber"></a></span>
|
||
<span about="#mwt4" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"1x","href":"./Template:1x"},"params":{"1":{"wt":"hi<spantag>-{ho|{{1x|hi}}}-</spantag>"}},"i":0}}]}'>hi</span><span about="#mwt4" typeof="mw:Extension/spantag" data-mw='{"name":"spantag","attrs":{},"body":{"extsrc":"-{ho|{{1x|hi}}}-"}}'><span typeof="mw:LanguageVariant" data-mw-variant='{"filter":{"l":["ho"],"t":"hi"}}'></span></span></p>
|
||
!! end
|
||
|
||
!! test
|
||
ParserTest <spantag> tag, using data-mw.body serialization shortcut
|
||
!! wikitext
|
||
Hello <spantag>'''world'''!</spantag>
|
||
!! html/php
|
||
<p>Hello <span><b>world</b>!</span>
|
||
</p>
|
||
!! html/parsoid
|
||
<p>Hello <span typeof="mw:Extension/spantag" data-mw='{"name":"spantag","attrs":{},"body":{"extsrc":"'''world'''!"}}'><b>world</b>!</span></p>
|
||
!! end
|
||
|
||
!! test
|
||
ParserTest <spantag> tag, without data-mw.body serialization shortcut
|
||
!! options
|
||
parsoid=html2wt
|
||
!! wikitext
|
||
Hello <spantag>'''world'''!</spantag>
|
||
!! html/php
|
||
<p>Hello <span><b>world</b>!</span>
|
||
</p>
|
||
!! html/parsoid
|
||
<p>Hello <span typeof="mw:Extension/spantag" data-mw='{"name":"spantag","attrs":{}}'><b>world</b>!</span></p>
|
||
!! end
|
||
|
||
!! test
|
||
Parsoid: Recognize nowiki with odd capitalization
|
||
!! options
|
||
parsoid=wt2html
|
||
!! wikitext
|
||
<noWikI ><div>[[foo]]</Nowiki >
|
||
!! html/php
|
||
<p><div>[[foo]]
|
||
</p>
|
||
!! html/parsoid
|
||
<p><span typeof="mw:Nowiki"><div>[[foo]]</span></p>
|
||
!! end
|
||
|
||
|
||
!! test
|
||
Parsoid: Escape nowiki with trailing space in tags
|
||
!! options
|
||
parsoid=html2wt
|
||
!! html/parsoid
|
||
<p><nowiki > foo </nowiki ></p>
|
||
<p>a<nowiki />b</p>
|
||
<p>c<nowiki/ >d</p>
|
||
!! wikitext
|
||
<nowiki > foo </nowiki >
|
||
|
||
a<nowiki />b
|
||
|
||
c<nowiki/ >d
|
||
!! end
|
||
|
||
!! test
|
||
Parsoid: Escape weird noWikI capitalizations
|
||
!! options
|
||
parsoid=html2wt
|
||
!! html/parsoid
|
||
<p><noWikI > foo </NoWikI ></p>
|
||
!! 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: <noinclude> in transcluded template (T6926)
|
||
!! options
|
||
msg
|
||
!! wikitext
|
||
{{Includes}}
|
||
!! html/php
|
||
Foobar
|
||
!! html/parsoid
|
||
<p><span about="#mwt1" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"Includes","href":"./Template:Includes"},"params":{},"i":0}}]}'>Foobar</span></p>
|
||
!! end
|
||
|
||
!! test
|
||
message transform: <onlyinclude> in transcluded template (T6926)
|
||
!! options
|
||
msg
|
||
!! wikitext
|
||
{{Includes2}}
|
||
!! html/php
|
||
Foo
|
||
!! html/parsoid+standalone
|
||
<p><meta typeof="mw:Transclusion mw:Includes/OnlyInclude" about="#mwt1" data-mw='{"parts":[{"template":{"target":{"wt":"Includes2","href":"./Template:Includes2"},"params":{},"i":0}}]}'/><span about="#mwt1">Foo</span><meta typeof="mw:Includes/OnlyInclude/End" about="#mwt1"/></p>
|
||
!! html/parsoid+integrated
|
||
<p><span about="#mwt1" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"Includes2","href":"./Template:Includes2"},"params":{},"i":0}}]}'>Foo</span></p>
|
||
!! end
|
||
|
||
!! test
|
||
{{#special:}} page name, known
|
||
!! options
|
||
msg
|
||
!! wikitext
|
||
{{#special:Recentchanges}}
|
||
!! html/php
|
||
Special:RecentChanges
|
||
!! html/parsoid
|
||
<p><span about="#mwt1" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"#special:Recentchanges","function":"special"},"params":{},"i":0}}]}'>Special:RecentChanges</span></p>
|
||
!! end
|
||
|
||
!! test
|
||
{{#special:}} page name with subpage, known
|
||
!! options
|
||
msg
|
||
!! wikitext
|
||
{{#special:Recentchanges/param}}
|
||
!! html/php
|
||
Special:RecentChanges/param
|
||
!! html/parsoid+integrated
|
||
<p><span about="#mwt1" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"#special:Recentchanges/param","function":"special"},"params":{},"i":0}}]}'>Special:RecentChanges/param</span></p>
|
||
!! end
|
||
|
||
!! test
|
||
{{#special:}} page name, unknown
|
||
!! options
|
||
msg
|
||
!! wikitext
|
||
{{#special:foobar nonexistent}}
|
||
!! html/php
|
||
Special:Foobar nonexistent
|
||
!! html/parsoid+integrated
|
||
<p><span about="#mwt1" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"#special:foobar nonexistent","function":"special"},"params":{},"i":0}}]}'>Special:Foobar nonexistent</span></p>
|
||
!! end
|
||
|
||
!! test
|
||
{{#speciale:}} page name, known
|
||
!! options
|
||
msg
|
||
!! wikitext
|
||
{{#speciale:Recentchanges}}
|
||
!! html/php
|
||
Special:RecentChanges
|
||
!! html/parsoid+integrated
|
||
<p><span about="#mwt1" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"#speciale:Recentchanges","function":"speciale"},"params":{},"i":0}}]}'>Special:RecentChanges</span></p>
|
||
!! end
|
||
|
||
!! test
|
||
{{#speciale:}} page name with subpage, known
|
||
!! options
|
||
msg
|
||
!! wikitext
|
||
{{#speciale:Recentchanges/param}}
|
||
!! html/php
|
||
Special:RecentChanges/param
|
||
!! html/parsoid+integrated
|
||
<p><span about="#mwt1" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"#speciale:Recentchanges/param","function":"speciale"},"params":{},"i":0}}]}'>Special:RecentChanges/param</span></p>
|
||
!! end
|
||
|
||
!! test
|
||
{{#speciale:}} page name, unknown
|
||
!! options
|
||
msg
|
||
!! wikitext
|
||
{{#speciale:foobar nonexistent}}
|
||
!! html/php
|
||
Special:Foobar_nonexistent
|
||
!! html/parsoid+integrated
|
||
<p><span about="#mwt1" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"#speciale:foobar nonexistent","function":"speciale"},"params":{},"i":0}}]}'>Special:Foobar_nonexistent</span></p>
|
||
!! end
|
||
|
||
###
|
||
### Subpages
|
||
###
|
||
|
||
!! article
|
||
Subpage test/subpage
|
||
!! text
|
||
foo
|
||
!! endarticle
|
||
|
||
!! test
|
||
Subpage link
|
||
!! options
|
||
subpage title=[[Subpage test]]
|
||
!! wikitext
|
||
[[/subpage]]
|
||
!! html
|
||
<p><a href="/wiki/Subpage_test/subpage" title="Subpage test/subpage">/subpage</a>
|
||
</p>
|
||
!! end
|
||
|
||
!! test
|
||
Subpage noslash link
|
||
!! options
|
||
subpage title=[[Subpage test]]
|
||
!! wikitext
|
||
[[/subpage/]]
|
||
!! html
|
||
<p><a href="/wiki/Subpage_test/subpage" title="Subpage test/subpage">subpage</a>
|
||
</p>
|
||
!! 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
|
||
<p><a href="/wiki/Subpage_test/1/2/subpage" title="Subpage test/1/2/subpage">subpage</a>
|
||
</p><p><a href="/wiki/Subpage_test/1/2/subpage" title="Subpage test/1/2/subpage">Subpage test/1/2/subpage</a>
|
||
</p>
|
||
!! html/parsoid
|
||
<p><a rel="mw:WikiLink" href="./Subpage_test/1/2/subpage" title="Subpage test/1/2/subpage">subpage</a></p>
|
||
<p><a rel="mw:WikiLink" href="./Subpage_test/1/2/subpage" title="Subpage test/1/2/subpage">Subpage test/1/2/subpage</a></p>
|
||
!! end
|
||
|
||
!! test
|
||
Parsoid: dot-slash prefixed wikilinks
|
||
!! wikitext
|
||
[[./foo]]
|
||
|
||
[[././bar]]
|
||
|
||
[[././baz/]]
|
||
!! html/php
|
||
<p>[[./foo]]
|
||
</p><p>[[././bar]]
|
||
</p><p>[[././baz/]]
|
||
</p>
|
||
!! html/parsoid
|
||
<p>[[./foo]]
|
||
</p><p>[[././bar]]
|
||
</p><p>[[././baz/]]
|
||
</p>
|
||
!! end
|
||
|
||
!! test
|
||
Render invalid page names as plain text (T53090)
|
||
!! wikitext
|
||
[[./../foo|bar]]
|
||
[[foo<6F>|bar]]
|
||
[[foo/.|bar]]
|
||
[[foo/..|bar]]
|
||
[[foo~~~bar]]
|
||
[[foo>bar]]
|
||
[[foo[bar]]
|
||
[[.]]
|
||
[[..]]
|
||
[[foo././bar]]
|
||
[[foo[http://example.com]xyz]]
|
||
|
||
[[{{1x|./../foo}}|bar]]
|
||
[[{{1x|foo/.}}|bar]]
|
||
[[{{1x|foo/..}}|bar]]
|
||
[[{{1x|foo~~~~bar}}]]
|
||
[[{{1x|foo>bar}}]]
|
||
[[{{1x|foo././bar}}]]
|
||
[[{{1x|foo{bar}}]]
|
||
[[{{1x|foo}bar}}]]
|
||
[[{{1x|foo[bar}}]]
|
||
[[{{1x|foo]bar}}]]
|
||
[[{{1x|foo<bar}}]]
|
||
!!html/php
|
||
<p>[[./../foo|bar]]
|
||
[[foo<6F>|bar]]
|
||
[[foo/.|bar]]
|
||
[[foo/..|bar]]
|
||
[[foo~~~bar]]
|
||
[[foo>bar]]
|
||
[[foo[bar]]
|
||
[[.]]
|
||
[[..]]
|
||
[[foo././bar]]
|
||
[[foo<a rel="nofollow" class="external autonumber" href="http://example.com">[1]</a>xyz]]
|
||
</p><p>[[./../foo|bar]]
|
||
[[foo/.|bar]]
|
||
[[foo/..|bar]]
|
||
[[foo~~~~bar]]
|
||
[[foo>bar]]
|
||
[[foo././bar]]
|
||
[[foo{bar]]
|
||
[[foo}bar]]
|
||
[[foo[bar]]
|
||
[[foo]bar]]
|
||
[[foo<bar]]
|
||
</p>
|
||
!!html/parsoid
|
||
<p>[[./../foo|bar]]
|
||
[[foo<6F>|bar]]
|
||
[[foo/.|bar]]
|
||
[[foo/..|bar]]
|
||
[[foo~~~bar]]
|
||
[[foo>bar]]
|
||
[[foo[bar]]
|
||
[[.]]
|
||
[[..]]
|
||
[[foo././bar]]
|
||
[[foo<a rel="mw:ExtLink" href="http://example.com" class="external autonumber"></a>xyz]]</p>
|
||
|
||
<p>[[<span typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"1x","href":"./Template:1x"},"params":{"1":{"wt":"./../foo"}},"i":0}}]}'>./../foo</span>|bar]]
|
||
[[<span typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"1x","href":"./Template:1x"},"params":{"1":{"wt":"foo/."}},"i":0}}]}'>foo/.</span>|bar]]
|
||
[[<span typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"1x","href":"./Template:1x"},"params":{"1":{"wt":"foo/.."}},"i":0}}]}'>foo/..</span>|bar]]
|
||
[[<span typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"1x","href":"./Template:1x"},"params":{"1":{"wt":"foo~~~~bar"}},"i":0}}]}'>foo~~~~bar</span>]]
|
||
[[<span typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"1x","href":"./Template:1x"},"params":{"1":{"wt":"foo>bar"}},"i":0}}]}'>foo>bar</span>]]
|
||
[[<span typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"1x","href":"./Template:1x"},"params":{"1":{"wt":"foo././bar"}},"i":0}}]}'>foo././bar</span>]]
|
||
[[<span typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"1x","href":"./Template:1x"},"params":{"1":{"wt":"foo{bar"}},"i":0}}]}'>foo{bar</span>]]
|
||
[[<span typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"1x","href":"./Template:1x"},"params":{"1":{"wt":"foo}bar"}},"i":0}}]}'>foo}bar</span>]]
|
||
[[<span typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"1x","href":"./Template:1x"},"params":{"1":{"wt":"foo[bar"}},"i":0}}]}'>foo[bar</span>]]
|
||
[[<span typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"1x","href":"./Template:1x"},"params":{"1":{"wt":"foo]bar"}},"i":0}}]}'>foo]bar</span>]]
|
||
[[<span typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"1x","href":"./Template:1x"},"params":{"1":{"wt":"foo<bar"}},"i":0}}]}'>foo<bar</span>]]</p>
|
||
!!end
|
||
|
||
!! test
|
||
Disabled subpages
|
||
!! wikitext
|
||
[[/subpage]]
|
||
!! html/php
|
||
<p><a href="/index.php?title=/subpage&action=edit&redlink=1" class="new" title="/subpage (page does not exist)">/subpage</a>
|
||
</p>
|
||
!! html/parsoid
|
||
<p><a rel="mw:WikiLink" href=".//subpage?action=edit&redlink=1" title="/subpage" class="new" typeof="mw:LocalizedAttrs" data-parsoid='{"stx":"simple","a":{"href":".//subpage"},"sa":{"href":"/subpage"}}' data-mw-i18n='{"title":{"lang":"x-page","key":"red-link-title","params":["/subpage"]}}'>/subpage</a></p>
|
||
!! end
|
||
|
||
!! test
|
||
T2561: {{/Subpage}}
|
||
!! options
|
||
subpage title=[[Page]]
|
||
!! wikitext
|
||
{{/Subpage}}
|
||
!! html/php
|
||
<p><a href="/index.php?title=Page/Subpage&action=edit&redlink=1" class="new" title="Page/Subpage (page does not exist)">Page/Subpage</a>
|
||
</p>
|
||
!! html/parsoid
|
||
<p><a rel="mw:WikiLink" href="./Page/Subpage?action=edit&redlink=1" title="Page/Subpage" about="#mwt1" typeof="mw:Transclusion mw:LocalizedAttrs" class="new" data-parsoid='{"stx":"simple","a":{"href":"./Page/Subpage"},"sa":{"href":"Page/Subpage"},"pi":[[]]}' data-mw='{"parts":[{"template":{"target":{"wt":"/Subpage","href":"./Page/Subpage"},"params":{},"i":0}}]}' data-mw-i18n='{"title":{"lang":"x-page","key":"red-link-title","params":["Page/Subpage"]}}'>Page/Subpage</a></p>
|
||
!! end
|
||
|
||
!! test
|
||
Subpage with namespaces
|
||
!! options
|
||
subpage title=[[Subpage test/1/2/3/4]]
|
||
!! wikitext
|
||
[[User:../subpage]]
|
||
[[meatball:../subpage]]
|
||
!! html
|
||
<p>[[User:../subpage]]
|
||
[[meatball:../subpage]]
|
||
</p>
|
||
!! end
|
||
|
||
!! test
|
||
T335847: Resolve forward slash title
|
||
!! options
|
||
subpage title=[[/]]
|
||
!! config
|
||
wgParserEnableLegacyHeadingDOM=false
|
||
!! wikitext
|
||
===123===
|
||
!! html/php
|
||
<div class="mw-heading mw-heading3"><h3 id="123">123</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=/&action=edit&section=1" title="Edit section: 123">edit</a><span class="mw-editsection-bracket">]</span></span></div>
|
||
!! html/parsoid
|
||
<h3 id="123" data-parsoid="{}">123</h3>
|
||
!! end
|
||
|
||
## The next two tests capture an inconsistency between relative link parsing on
|
||
## the "/" page in the legacy parser. Parsoid's output seems preferable.
|
||
|
||
!! test
|
||
T335847: Resolve subpage of control title
|
||
!! options
|
||
subpage title=[[Asdf]]
|
||
!! wikitext
|
||
[[../Hi]]
|
||
!! html/php
|
||
<p>[[../Hi]]
|
||
</p>
|
||
!! html/parsoid
|
||
<p>[[../Hi]]</p>
|
||
!! end
|
||
|
||
!! test
|
||
T335847: Resolve subpage of forward slash title
|
||
!! options
|
||
subpage title=[[/]]
|
||
!! wikitext
|
||
[[../Hi]]
|
||
!! html/php
|
||
<p><a href="/index.php?title=/Hi&action=edit&redlink=1" class="new" title="/Hi (page does not exist)">/Hi</a>
|
||
</p>
|
||
!! html/parsoid
|
||
<p>[[../Hi]]</p>
|
||
!! end
|
||
|
||
###
|
||
### Categories
|
||
###
|
||
!! article
|
||
Category:MediaWiki User's Guide
|
||
!! text
|
||
blah
|
||
!! endarticle
|
||
|
||
!! test
|
||
Link to category
|
||
!! options
|
||
cat
|
||
!! wikitext
|
||
[[:Category:MediaWiki User's Guide]]
|
||
!! metadata
|
||
!! html
|
||
<p><a href="/wiki/Category:MediaWiki_User%27s_Guide" title="Category:MediaWiki User's Guide">Category:MediaWiki User's Guide</a>
|
||
</p>
|
||
!! end
|
||
|
||
!! test
|
||
Simple category
|
||
!! options
|
||
cat
|
||
!! metadata
|
||
cat=MediaWiki_User's_Guide sort=
|
||
!! wikitext
|
||
[[Category:MediaWiki User's Guide]]
|
||
!! html/php
|
||
!! html/parsoid
|
||
<link rel="mw:PageProp/Category" href="./Category:MediaWiki_User's_Guide" data-parsoid='{"stx":"simple","a":{"href":"./Category:MediaWiki_User's_Guide"},"sa":{"href":"Category:MediaWiki User's Guide"}}'/>
|
||
!! end
|
||
|
||
!! test
|
||
Simple category with whitespace as sort key
|
||
!! options
|
||
cat
|
||
!! metadata
|
||
cat=Foo sort=
|
||
!! wikitext
|
||
[[Category:Foo| ]]
|
||
!! html/php
|
||
!! html/parsoid
|
||
<link rel="mw:PageProp/Category" href="./Category:Foo#%20" data-parsoid='{"stx":"simple","a":{"href":"./Category:Foo#%20"},"sa":{"href":"Category:Foo#%20"}}'/>
|
||
!! end
|
||
|
||
!! test
|
||
PAGESINCATEGORY invalid title fatal (r33546 fix)
|
||
!! wikitext
|
||
{{PAGESINCATEGORY:<bogus>}}
|
||
!! html
|
||
<p>0
|
||
</p>
|
||
!! end
|
||
|
||
!! test
|
||
Category with different sort key
|
||
!! options
|
||
cat
|
||
!! metadata
|
||
cat=MediaWiki_User's_Guide sort=Foo
|
||
!! wikitext
|
||
[[Category:MediaWiki User's Guide|Foo]]
|
||
!! html/php
|
||
!! html/parsoid
|
||
<link rel="mw:PageProp/Category" href="./Category:MediaWiki_User's_Guide#Foo" data-parsoid='{"stx":"piped","a":{"href":"./Category:MediaWiki_User's_Guide"},"sa":{"href":"Category:MediaWiki User's Guide"}}'/>
|
||
!! end
|
||
|
||
!! test
|
||
Category with identical sort key
|
||
!! options
|
||
cat
|
||
!! metadata
|
||
cat=MediaWiki_User's_Guide sort=MediaWiki User's Guide
|
||
!! wikitext
|
||
[[Category:MediaWiki User's Guide|MediaWiki User's Guide]]
|
||
!! html/php
|
||
!! html/parsoid
|
||
<link rel="mw:PageProp/Category" href="./Category:MediaWiki_User's_Guide#MediaWiki%20User's%20Guide" data-parsoid='{"stx":"piped","a":{"href":"./Category:MediaWiki_User's_Guide"},"sa":{"href":"Category:MediaWiki User's Guide"}}'/>
|
||
!! end
|
||
|
||
!! test
|
||
Category with identical sort key, except underscores
|
||
!! options
|
||
cat
|
||
!! metadata
|
||
cat=MediaWiki_User's_Guide sort=MediaWiki_User's_Guide
|
||
!! wikitext
|
||
[[Category:MediaWiki User's Guide|MediaWiki_User's_Guide]]
|
||
!! html/php
|
||
!! html/parsoid
|
||
<link rel="mw:PageProp/Category" href="./Category:MediaWiki_User's_Guide#MediaWiki_User's_Guide" data-parsoid='{"stx":"piped","a":{"href":"./Category:MediaWiki_User's_Guide"},"sa":{"href":"Category:MediaWiki User's Guide"}}'/>
|
||
!! end
|
||
|
||
!! test
|
||
Category with newline in sort key
|
||
!! options
|
||
cat
|
||
parsoid=wt2html,html2html
|
||
!! wikitext
|
||
[[Category:Wikidata:Tools|
|
||
*]]
|
||
!! metadata
|
||
cat=Wikidata:Tools sort=
|
||
*
|
||
!! html/php
|
||
!! html/parsoid
|
||
<link rel="mw:PageProp/Category" href="./Category:Wikidata:Tools#*"/>
|
||
!! end
|
||
|
||
!! test
|
||
Category with template-generated sort key
|
||
!! options
|
||
cat
|
||
!! metadata
|
||
cat=MediaWiki_User's_Guide sort=MediaWiki Foo Guide
|
||
!! wikitext
|
||
[[Category:MediaWiki User's Guide|MediaWiki {{1x|Foo}} Guide]]
|
||
!! html/php
|
||
!! html/parsoid
|
||
<link rel="mw:PageProp/Category" href="./Category:MediaWiki_User's_Guide#MediaWiki%20Foo%20Guide" typeof="mw:ExpandedAttrs" data-mw='{"attribs":[[{"txt":"mw:sortKey"},{"html":"MediaWiki <span typeof=\"mw:Transclusion\" data-mw='{\"parts\":[{\"template\":{\"target\":{\"wt\":\"1x\",\"href\":\"./Template:1x\"},\"params\":{\"1\":{\"wt\":\"Foo\"}},\"i\":0}}]}'>Foo</span> Guide"}]]}'/>
|
||
!! end
|
||
|
||
## We used to, but no longer wt2wt this test since the default serializer
|
||
## will normalize all categories to serialize on their own line.
|
||
## This wikitext usage is going to be fairly uncommon in production and
|
||
## selser will take care of preserving formatting in those scenarios.
|
||
!! test
|
||
Category / paragraph interactions
|
||
!! options
|
||
parsoid=wt2html
|
||
!! wikitext
|
||
Foo [[Category:Baz]] Bar
|
||
|
||
Foo [[Category:Baz]]
|
||
Bar
|
||
|
||
Foo
|
||
[[Category:Baz]]
|
||
Bar
|
||
|
||
Foo
|
||
[[Category:Baz]] Bar
|
||
|
||
Foo
|
||
[[Category:Baz]]
|
||
[[Category:Baz]]
|
||
[[Category:Baz]]
|
||
Bar
|
||
|
||
[[Category:Baz]]
|
||
[[Category:Baz]]
|
||
[[Category:Baz]]
|
||
|
||
[[Category:Baz]]
|
||
{{1x|[[Category:Baz]]}}
|
||
[[Category:Baz]]
|
||
!! html/php
|
||
<p>Foo Bar
|
||
</p><p>Foo
|
||
Bar
|
||
</p><p>Foo
|
||
Bar
|
||
</p><p>Foo Bar
|
||
</p><p>Foo
|
||
Bar
|
||
</p>
|
||
!! html/parsoid
|
||
<p>Foo <link rel="mw:PageProp/Category" href="./Category:Baz"/> Bar</p>
|
||
<p>Foo <link rel="mw:PageProp/Category" href="./Category:Baz"/> Bar</p>
|
||
<p>Foo <link rel="mw:PageProp/Category" href="./Category:Baz"/> Bar</p>
|
||
<p>Foo <link rel="mw:PageProp/Category" href="./Category:Baz"/> Bar</p>
|
||
<p>Foo <link rel="mw:PageProp/Category" href="./Category:Baz"/> <link rel="mw:PageProp/Category" href="./Category:Baz"/> <link rel="mw:PageProp/Category" href="./Category:Baz"/> Bar</p>
|
||
<link rel="mw:PageProp/Category" href="./Category:Baz"/> <link rel="mw:PageProp/Category" href="./Category:Baz"/> <link rel="mw:PageProp/Category" href="./Category:Baz"/> <link rel="mw:PageProp/Category" href="./Category:Baz"/> <link rel="mw:PageProp/Category" href="./Category:Baz" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"1x","href":"./Template:1x"},"params":{"1":{"wt":"[[Category:Baz]]"}},"i":0}}]}'/>
|
||
<link rel="mw:PageProp/Category" href="./Category:Baz"/>
|
||
!! 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 / non-newline whitespace interactions (T359886)
|
||
!! options
|
||
parsoid=wt2html
|
||
!! wikitext
|
||
* Foo[[Category:Foo]]Bar
|
||
* Foo[[Category:Foo]] Bar
|
||
* Foo [[Category:Foo]]Bar
|
||
* Foo [[Category:Foo]] Bar
|
||
|
||
* Foo[[Category:Foo]][[Category:Bar]]Bar
|
||
* Foo[[Category:Foo]][[Category:Bar]] Bar
|
||
* Foo[[Category:Foo]] [[Category:Bar]]Bar
|
||
* Foo[[Category:Foo]] [[Category:Bar]] Bar
|
||
* Foo [[Category:Foo]][[Category:Bar]]Bar
|
||
* Foo [[Category:Foo]][[Category:Bar]] Bar
|
||
* Foo [[Category:Foo]] [[Category:Bar]]Bar
|
||
* Foo [[Category:Foo]] [[Category:Bar]] Bar
|
||
!! html/php
|
||
<ul><li>FooBar</li>
|
||
<li>Foo Bar</li>
|
||
<li>Foo Bar</li>
|
||
<li>Foo Bar</li></ul>
|
||
<ul><li>FooBar</li>
|
||
<li>Foo Bar</li>
|
||
<li>Foo Bar</li>
|
||
<li>Foo Bar</li>
|
||
<li>Foo Bar</li>
|
||
<li>Foo Bar</li>
|
||
<li>Foo Bar</li>
|
||
<li>Foo Bar</li></ul>
|
||
!! html/parsoid
|
||
<ul>
|
||
<li>Foo<link rel="mw:PageProp/Category" href="./Category:Foo"/>Bar</li>
|
||
<li>Foo<link rel="mw:PageProp/Category" href="./Category:Foo"/> Bar</li>
|
||
<li>Foo <link rel="mw:PageProp/Category" href="./Category:Foo"/>Bar</li>
|
||
<li>Foo <link rel="mw:PageProp/Category" href="./Category:Foo"/> Bar</li>
|
||
</ul>
|
||
<ul>
|
||
<li>Foo<link rel="mw:PageProp/Category" href="./Category:Foo"/><link rel="mw:PageProp/Category" href="./Category:Bar"/>Bar</li>
|
||
<li>Foo<link rel="mw:PageProp/Category" href="./Category:Foo"/><link rel="mw:PageProp/Category" href="./Category:Bar"/> Bar</li>
|
||
<li>Foo<link rel="mw:PageProp/Category" href="./Category:Foo"/> <link rel="mw:PageProp/Category" href="./Category:Bar"/>Bar</li>
|
||
<li>Foo<link rel="mw:PageProp/Category" href="./Category:Foo"/> <link rel="mw:PageProp/Category" href="./Category:Bar"/> Bar</li>
|
||
<li>Foo <link rel="mw:PageProp/Category" href="./Category:Foo"/><link rel="mw:PageProp/Category" href="./Category:Bar"/>Bar</li>
|
||
<li>Foo <link rel="mw:PageProp/Category" href="./Category:Foo"/><link rel="mw:PageProp/Category" href="./Category:Bar"/> Bar</li>
|
||
<li>Foo <link rel="mw:PageProp/Category" href="./Category:Foo"/> <link rel="mw:PageProp/Category" href="./Category:Bar"/>Bar</li>
|
||
<li>Foo <link rel="mw:PageProp/Category" href="./Category:Foo"/> <link rel="mw:PageProp/Category" href="./Category:Bar"/> Bar</li>
|
||
</ul>
|
||
!! end
|
||
|
||
## Same as the above test, but with equally-invisible interlanguage links
|
||
!! test
|
||
Language link / non-newline whitespace interactions (T359886)
|
||
!! options
|
||
parsoid=wt2html
|
||
!! wikitext
|
||
* Foo[[es:Foo]]Bar
|
||
* Foo[[es:Foo]] Bar
|
||
* Foo [[es:Foo]]Bar
|
||
* Foo [[es:Foo]] Bar
|
||
|
||
* Foo[[es:Foo]][[es:Bar]]Bar
|
||
* Foo[[es:Foo]][[es:Bar]] Bar
|
||
* Foo[[es:Foo]] [[es:Bar]]Bar
|
||
* Foo[[es:Foo]] [[es:Bar]] Bar
|
||
* Foo [[es:Foo]][[es:Bar]]Bar
|
||
* Foo [[es:Foo]][[es:Bar]] Bar
|
||
* Foo [[es:Foo]] [[es:Bar]]Bar
|
||
* Foo [[es:Foo]] [[es:Bar]] Bar
|
||
!! html/php
|
||
<ul><li>FooBar</li>
|
||
<li>Foo Bar</li>
|
||
<li>Foo Bar</li>
|
||
<li>Foo Bar</li></ul>
|
||
<ul><li>FooBar</li>
|
||
<li>Foo Bar</li>
|
||
<li>Foo Bar</li>
|
||
<li>Foo Bar</li>
|
||
<li>Foo Bar</li>
|
||
<li>Foo Bar</li>
|
||
<li>Foo Bar</li>
|
||
<li>Foo Bar</li></ul>
|
||
!! html/parsoid
|
||
<ul>
|
||
<li>Foo<link rel="mw:PageProp/Language" href="http://es.wikipedia.org/wiki/Foo"/>Bar</li>
|
||
<li>Foo<link rel="mw:PageProp/Language" href="http://es.wikipedia.org/wiki/Foo"/> Bar</li>
|
||
<li>Foo <link rel="mw:PageProp/Language" href="http://es.wikipedia.org/wiki/Foo"/>Bar</li>
|
||
<li>Foo <link rel="mw:PageProp/Language" href="http://es.wikipedia.org/wiki/Foo"/> Bar</li>
|
||
</ul>
|
||
<ul>
|
||
<li>Foo<link rel="mw:PageProp/Language" href="http://es.wikipedia.org/wiki/Foo"/><link rel="mw:PageProp/Language" href="http://es.wikipedia.org/wiki/Bar"/>Bar</li>
|
||
<li>Foo<link rel="mw:PageProp/Language" href="http://es.wikipedia.org/wiki/Foo"/><link rel="mw:PageProp/Language" href="http://es.wikipedia.org/wiki/Bar"/> Bar</li>
|
||
<li>Foo<link rel="mw:PageProp/Language" href="http://es.wikipedia.org/wiki/Foo"/> <link rel="mw:PageProp/Language" href="http://es.wikipedia.org/wiki/Bar"/>Bar</li>
|
||
<li>Foo<link rel="mw:PageProp/Language" href="http://es.wikipedia.org/wiki/Foo"/> <link rel="mw:PageProp/Language" href="http://es.wikipedia.org/wiki/Bar"/> Bar</li>
|
||
<li>Foo <link rel="mw:PageProp/Language" href="http://es.wikipedia.org/wiki/Foo"/><link rel="mw:PageProp/Language" href="http://es.wikipedia.org/wiki/Bar"/>Bar</li>
|
||
<li>Foo <link rel="mw:PageProp/Language" href="http://es.wikipedia.org/wiki/Foo"/><link rel="mw:PageProp/Language" href="http://es.wikipedia.org/wiki/Bar"/> Bar</li>
|
||
<li>Foo <link rel="mw:PageProp/Language" href="http://es.wikipedia.org/wiki/Foo"/> <link rel="mw:PageProp/Language" href="http://es.wikipedia.org/wiki/Bar"/>Bar</li>
|
||
<li>Foo <link rel="mw:PageProp/Language" href="http://es.wikipedia.org/wiki/Foo"/> <link rel="mw:PageProp/Language" href="http://es.wikipedia.org/wiki/Bar"/> Bar</li>
|
||
</ul>
|
||
!! 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. cats/langlinks and newlines: All preceding newlines should be suppressed (courtesy T2087)
|
||
!! options
|
||
parsoid=wt2html
|
||
!! wikitext
|
||
This
|
||
|
||
[[Category:Foo]] and this
|
||
[[es:Foo]] and this should be part of same paragraph (not an indent-pre)
|
||
|
||
{{1x|[[Category:Foo]] and so should this!}}
|
||
{{1x|[[es:Foo]] and this!}}
|
||
!! html/php
|
||
<p>This and this and this should be part of same paragraph (not an indent-pre) and so should this! and this!
|
||
</p>
|
||
!! html/parsoid
|
||
<p>This
|
||
|
||
<link rel="mw:PageProp/Category" href="./Category:Foo" /> and this
|
||
<link rel="mw:PageProp/Language" href="http://es.wikipedia.org/wiki/Foo" /> and this should be part of same paragraph (not an indent-pre)
|
||
|
||
<link rel="mw:PageProp/Category" href="./Category:Foo" about="#mwt1" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"1x","href":"./Template:1x"},"params":{"1":{"wt":"[[Category:Foo]] and so should this!"}},"i":0}}]}'/><span about="#mwt1"> and so should this!</span>
|
||
<link rel="mw:PageProp/Language" href="http://es.wikipedia.org/wiki/Foo" about="#mwt2" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"1x","href":"./Template:1x"},"params":{"1":{"wt":"[[es:Foo]] and this!"}},"i":0}}]}'/><span about="#mwt2"> and this!</span></p>
|
||
!! 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. cats/langlinks and newlines: All preceding newlines should be suppressed (courtesy T2087)
|
||
!! options
|
||
parsoid=wt2html
|
||
!! wikitext
|
||
* This
|
||
|
||
[[Category:Foo]] and this
|
||
[[es:Foo]] and this should be part of the same list item
|
||
* So should this
|
||
|
||
{{1x|[[Category:Foo]] and this}}
|
||
{{1x|[[es:Foo]] and this should be part of the same list item}}
|
||
!! html/php
|
||
<ul><li>This and this and this should be part of the same list item</li>
|
||
<li>So should this and this and this should be part of the same list item</li></ul>
|
||
!! html/parsoid
|
||
<ul><li>This
|
||
|
||
<link rel="mw:PageProp/Category" href="./Category:Foo" /> and this
|
||
<link rel="mw:PageProp/Language" href="http://es.wikipedia.org/wiki/Foo" /> and this should be part of the same list item</li>
|
||
<li>So should this
|
||
|
||
<link rel="mw:PageProp/Category" href="./Category:Foo" about="#mwt1" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"1x","href":"./Template:1x"},"params":{"1":{"wt":"[[Category:Foo]] and this"}},"i":0}}]}'/><span about="#mwt1"> and this</span>
|
||
<link rel="mw:PageProp/Language" href="http://es.wikipedia.org/wiki/Foo" about="#mwt2" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"1x","href":"./Template:1x"},"params":{"1":{"wt":"[[es:Foo]] and this should be part of the same list item"}},"i":0}}]}'/><span about="#mwt2"> and this should be part of the same list item</span></li></ul>
|
||
!! 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. cats/langlinks and newlines: newline suppression for last list item should RT properly
|
||
!! wikitext
|
||
*a
|
||
*b
|
||
|
||
[[Category:Foo]]
|
||
|
||
[[Category:Bar]]
|
||
[[Category:Baz]]
|
||
[[es:Foo]]
|
||
|
||
:c
|
||
|
||
[[Category:C]]
|
||
|
||
;d
|
||
|
||
[[Category:D]]
|
||
[[es:Bar]]
|
||
!! html/parsoid
|
||
<ul><li>a</li>
|
||
<li>b</li></ul>
|
||
|
||
<link rel="mw:PageProp/Category" href="./Category:Foo" />
|
||
|
||
<link rel="mw:PageProp/Category" href="./Category:Bar" />
|
||
<link rel="mw:PageProp/Category" href="./Category:Baz" />
|
||
<link rel="mw:PageProp/Language" href="http://es.wikipedia.org/wiki/Foo" />
|
||
|
||
<dl><dd>c</dd></dl>
|
||
|
||
<link rel="mw:PageProp/Category" href="./Category:C" />
|
||
|
||
<dl><dt>d</dt></dl>
|
||
|
||
<link rel="mw:PageProp/Category" href="./Category:D" />
|
||
<link rel="mw:PageProp/Language" href="http://es.wikipedia.org/wiki/Bar" />
|
||
!! end
|
||
|
||
!! test
|
||
4. cats/langlinks: newline suppression for last list item should RT properly
|
||
!! wikitext
|
||
*a
|
||
****b
|
||
|
||
[[Category:Foo]]
|
||
[[es:Foo]]
|
||
!! html/parsoid
|
||
<ul><li>a
|
||
<ul><li><ul><li><ul><li>b</li></ul></li></ul></li></ul></li></ul>
|
||
|
||
<link rel="mw:PageProp/Category" href="./Category:Foo" />
|
||
<link rel="mw:PageProp/Language" href="http://es.wikipedia.org/wiki/Foo" />
|
||
!! end
|
||
|
||
## only wt2html for this to make sure the algo only applies to the rightmost path
|
||
!! test
|
||
5. cats/langlinks: migrateTrailingSolTransparentLinks dom pass should only run on the rightmost path of nested lists
|
||
!! options
|
||
parsoid=wt2html
|
||
!! wikitext
|
||
*a
|
||
**b
|
||
[[Category:Foo]]
|
||
*c
|
||
**d
|
||
[[Category:Foo]]
|
||
[[es:Foo]]
|
||
!! html/parsoid
|
||
<ul><li>a
|
||
<ul><li>b
|
||
<link rel="mw:PageProp/Category" href="./Category:Foo" /></li></ul></li>
|
||
<li>c
|
||
<ul><li>d</li></ul></li></ul>
|
||
<link rel="mw:PageProp/Category" href="./Category:Foo" />
|
||
<link rel="mw:PageProp/Language" href="http://es.wikipedia.org/wiki/Foo" />
|
||
!! 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. cats/langlinks: migrateTrailingSolTransparentLinks dom pass should not migrate them when not preceded by newlines
|
||
!! options
|
||
parsoid=wt2html
|
||
!! wikitext
|
||
*a [[Category:Foo]]
|
||
*b [[es:Foo]]
|
||
!! html/parsoid
|
||
<ul><li>a<link rel="mw:PageProp/Category" href="./Category:Foo" /></li>
|
||
<li>b<link rel="mw:PageProp/Language" href="http://es.wikipedia.org/wiki/Foo" /></li></ul>
|
||
!! 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. cats/langlinks: migrateTrailingSolTransparentLinks dom pass should leave template content alone
|
||
!! wikitext
|
||
*{{1x|a
|
||
[[Category:Foo]]
|
||
[[es:Foo]]}}
|
||
!! html/parsoid
|
||
<ul><li><span about="#mwt1" typeof="mw:Transclusion" data-parsoid='{"pi":[[{"k":"1"}]]}' data-mw='{"parts":[{"template":{"target":{"wt":"1x","href":"./Template:1x"},"params":{"1":{"wt":"a\n[[Category:Foo]]\n[[es:Foo]]"}},"i":0}}]}'>a
|
||
</span><link rel="mw:PageProp/Category" href="./Category:Foo" about="#mwt1" /><span about="#mwt1">
|
||
</span><link rel="mw:PageProp/Language" href="http://es.wikipedia.org/wiki/Foo" about="#mwt1"/></li></ul>
|
||
!! end
|
||
|
||
!! test
|
||
8. cats/langlinks: migrateTrailingSolTransparentLinks dom pass should not get tripped by intervening templates
|
||
!! wikitext
|
||
*a
|
||
|
||
{{1x|[[Category:Foo]]
|
||
[[Category:Bar]]}}
|
||
[[Category:Baz]]
|
||
[[es:Baz]]
|
||
!! html/parsoid
|
||
<ul><li>a</li></ul>
|
||
|
||
<link rel="mw:PageProp/Category" href="./Category:Foo" about="#mwt1" typeof="mw:Transclusion" data-parsoid='{"stx":"simple","a":{"href":"./Category:Foo"},"sa":{"href":"Category:Foo"},"pi":[[{"k":"1"}]]}' data-mw='{"parts":[{"template":{"target":{"wt":"1x","href":"./Template:1x"},"params":{"1":{"wt":"[[Category:Foo]]\n[[Category:Bar]]"}},"i":0}}]}'/><span about="#mwt1">
|
||
</span><link rel="mw:PageProp/Category" href="./Category:Bar" about="#mwt1" data-parsoid='{"stx":"simple","a":{"href":"./Category:Bar"},"sa":{"href":"Category:Bar"}}'/>
|
||
<link rel="mw:PageProp/Category" href="./Category:Baz" data-parsoid='{"stx":"simple","a":{"href":"./Category:Baz"},"sa":{"href":"Category:Baz"}}'/>
|
||
<link rel="mw:PageProp/Language" href="http://es.wikipedia.org/wiki/Baz" />
|
||
!! end
|
||
|
||
!! test
|
||
cats/langlinks: migrateTrailingSolTransparentLinks dom pass should not get tripped by comments and whitespace
|
||
!! wikitext
|
||
*a
|
||
|
||
[[Category:Bar]]<!--boo1--> <!--boo2-->
|
||
[[Category:Baz]]<!--boo3--> <!--boo4-->
|
||
[[es:Foo]]<!--boo5--> <!--boo6-->
|
||
!! html/parsoid
|
||
<ul><li>a</li></ul>
|
||
|
||
<link rel="mw:PageProp/Category" href="./Category:Bar" /><!--boo1--> <!--boo2-->
|
||
<link rel="mw:PageProp/Category" href="./Category:Baz" /><!--boo3--> <!--boo4-->
|
||
<link rel="mw:PageProp/Language" href="http://es.wikipedia.org/wiki/Foo" /><!--boo5--> <!--boo6-->
|
||
!! end
|
||
|
||
!! test
|
||
Categories and newlines: should behave properly with linkprefix (T87753)
|
||
!! options
|
||
language=ar
|
||
!! wikitext
|
||
foo bar
|
||
foo bar
|
||
[[تصنيف:Foo]]
|
||
[[تصنيف:Bar]]
|
||
!! html/php
|
||
<p>foo bar
|
||
foo bar
|
||
</p>
|
||
!! html/parsoid
|
||
<p>foo bar
|
||
foo bar</p>
|
||
<link rel="mw:PageProp/Category" href="./تصنيف:Foo"/>
|
||
<link rel="mw:PageProp/Category" href="./تصنيف:Bar"/>
|
||
!! end
|
||
|
||
!! test
|
||
No regressions on internal links following category (T174639)
|
||
!! options
|
||
parsoid=wt2html,html2html
|
||
!! wikitext
|
||
[[Category:Foo]]<div>a
|
||
|
||
[[Foo]]</div>
|
||
!! html/php
|
||
<div>a
|
||
<a href="/wiki/Foo" title="Foo">Foo</a></div>
|
||
!! html/parsoid
|
||
<link rel="mw:PageProp/Category" href="./Category:Foo"/><div>a
|
||
|
||
<a rel="mw:WikiLink" href="./Foo" title="Foo">Foo</a></div>
|
||
!! end
|
||
|
||
# Note that Parsoid differs slightly from PHP due to T175421
|
||
!! test
|
||
11. Special case where only newlines separate links (T175416)
|
||
!! options
|
||
parsoid=wt2html,html2html
|
||
!! wikitext
|
||
[[Category:Foo]]
|
||
|
||
[[Foo]][[es:Alimento]]
|
||
|
||
[[Foo]]
|
||
!! html/php
|
||
<p><br />
|
||
<a href="/wiki/Foo" title="Foo">Foo</a>
|
||
</p><p><a href="/wiki/Foo" title="Foo">Foo</a>
|
||
</p>
|
||
!! html/parsoid
|
||
<link rel="mw:PageProp/Category" href="./Category:Foo"/>
|
||
|
||
<p><a rel="mw:WikiLink" href="./Foo" title="Foo">Foo</a></p><link rel="mw:PageProp/Language" href="http://es.wikipedia.org/wiki/Alimento"/>
|
||
|
||
<p><a rel="mw:WikiLink" href="./Foo" title="Foo">Foo</a></p>
|
||
!! end
|
||
|
||
!! test
|
||
Category links with multiple namespaces
|
||
!! wikitext
|
||
[[Category:Project:Foo]]
|
||
!! html/parsoid
|
||
<link rel="mw:PageProp/Category" href="./Category:Project:Foo" />
|
||
!! end
|
||
|
||
!! test
|
||
Parsoid: Serialize link to category page with colon escape
|
||
!! wikitext
|
||
[[:Category:Foo]]
|
||
[[:Category:Foo|Bar]]
|
||
!! html/php
|
||
<p><a href="/index.php?title=Category:Foo&action=edit&redlink=1" class="new" title="Category:Foo (page does not exist)">Category:Foo</a>
|
||
<a href="/index.php?title=Category:Foo&action=edit&redlink=1" class="new" title="Category:Foo (page does not exist)">Bar</a>
|
||
</p>
|
||
!! html/parsoid
|
||
<p><a rel="mw:WikiLink" href="./Category:Foo?action=edit&redlink=1" title="Category:Foo" class="new" typeof="mw:LocalizedAttrs" data-parsoid='{"stx":"simple","a":{"href":"./Category:Foo"},"sa":{"href":":Category:Foo"}}' data-mw-i18n='{"title":{"lang":"x-page","key":"red-link-title","params":["Category:Foo"]}}'>Category:Foo</a>
|
||
<a rel="mw:WikiLink" href="./Category:Foo?action=edit&redlink=1" title="Category:Foo" class="new" typeof="mw:LocalizedAttrs" data-parsoid='{"stx":"piped","a":{"href":"./Category:Foo"},"sa":{"href":":Category:Foo"}}' data-mw-i18n='{"title":{"lang":"x-page","key":"red-link-title","params":["Category:Foo"]}}'>Bar</a></p>
|
||
!! 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
|
||
<p>xy
|
||
</p>
|
||
!! html/parsoid
|
||
<p>x<link rel="mw:PageProp/Category" href="./Flokkur:Foo" data-parsoid=""/>y</p>
|
||
!! end
|
||
|
||
!! test
|
||
Link prefix/suffixes aren't applied to language links
|
||
!! options
|
||
parsoid=wt2html
|
||
language=is
|
||
!! wikitext
|
||
x[[es:Foo]]y
|
||
!! html/php
|
||
<p>xy
|
||
</p>
|
||
!! html/parsoid
|
||
<p>x<link rel="mw:PageProp/Language" href="http://es.wikipedia.org/wiki/Foo" data-parsoid=""/>y</p>
|
||
!! end
|
||
|
||
!! test
|
||
Parsoid: Serialize link to file page with colon escape
|
||
!! wikitext
|
||
|
||
[[:File:Foo.png]]
|
||
[[:File:Foo.png|Bar]]
|
||
!! html/php
|
||
<p><a href="/index.php?title=File:Foo.png&action=edit&redlink=1" class="new" title="File:Foo.png (page does not exist)">File:Foo.png</a>
|
||
<a href="/index.php?title=File:Foo.png&action=edit&redlink=1" class="new" title="File:Foo.png (page does not exist)">Bar</a>
|
||
</p>
|
||
!! html/parsoid
|
||
|
||
<p><a rel="mw:WikiLink" href="./File:Foo.png?action=edit&redlink=1" title="File:Foo.png" class="new" typeof="mw:LocalizedAttrs" data-parsoid='{"stx":"simple","a":{"href":"./File:Foo.png"},"sa":{"href":":File:Foo.png"}}' data-mw-i18n='{"title":{"lang":"x-page","key":"red-link-title","params":["File:Foo.png"]}}'>File:Foo.png</a>
|
||
<a rel="mw:WikiLink" href="./File:Foo.png?action=edit&redlink=1" title="File:Foo.png" class="new" typeof="mw:LocalizedAttrs" data-parsoid='{"stx":"piped","a":{"href":"./File:Foo.png"},"sa":{"href":":File:Foo.png"}}' data-mw-i18n='{"title":{"lang":"x-page","key":"red-link-title","params":["File:Foo.png"]}}'>Bar</a></p>
|
||
!! end
|
||
|
||
!! test
|
||
Parsoid: Serialize a genuine category link without colon escape
|
||
!! wikitext
|
||
[[Category:Foo]]
|
||
[[Category:Foo|Bar]]
|
||
!! html/php
|
||
!! html/parsoid
|
||
<link rel="mw:PageProp/Category" href="./Category:Foo">
|
||
<link rel="mw:PageProp/Category" href="./Category:Foo#Bar">
|
||
!! end
|
||
|
||
!! test
|
||
Normalize hrefs properly before testing for invalid link targets (T72894)
|
||
!! options
|
||
parsoid=html2wt
|
||
!! html/parsoid
|
||
<link rel="mw:PageProp/Category" href="./Category:Toxine_bactérienne"/>
|
||
!! wikitext
|
||
[[Category:Toxine bactérienne]]
|
||
!! end
|
||
|
||
!! article
|
||
Template:emptytemplate
|
||
!! text
|
||
!! endarticle
|
||
|
||
!! test
|
||
Empty templates should be handled properly without being redlinked
|
||
!! options
|
||
parsoid=wt2html
|
||
!! wikitext
|
||
{{emptytemplate}}
|
||
!! html/php
|
||
!! html/parsoid
|
||
<span about="#mwt1" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"emptytemplate","href":"./Template:Emptytemplate"},"params":{},"i":0}}]}'></span>
|
||
!! end
|
||
|
||
!! test
|
||
Parsoid: Defaultsort
|
||
!! wikitext
|
||
{{DEFAULTSORT:Foo}}
|
||
!! html/parsoid+integrated
|
||
<span about="#mwt1" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"DEFAULTSORT:Foo","function":"defaultsort"},"params":{},"i":0}}]}'></span>
|
||
!! end
|
||
|
||
!! test
|
||
Parsoid: Defaultsort variations (T236846)
|
||
!! wikitext
|
||
{{DEFAULTSORT}}
|
||
|
||
{{DEFAULTSORT:}}
|
||
{{DEFAULTSORT:DOGGIE}}
|
||
!! html/php
|
||
<p><a href="/index.php?title=Template:DEFAULTSORT&action=edit&redlink=1" class="new" title="Template:DEFAULTSORT (page does not exist)">Template:DEFAULTSORT</a>
|
||
</p><p><br />
|
||
</p>
|
||
!! html/parsoid+integrated
|
||
<p><a rel="mw:WikiLink" href="./Template:DEFAULTSORT?action=edit&redlink=1" title="Template:DEFAULTSORT" about="#mwt1" typeof="mw:Transclusion mw:LocalizedAttrs" class="new" data-parsoid='{"stx":"simple","a":{"href":"./Template:DEFAULTSORT"},"sa":{"href":"Template:DEFAULTSORT"},"pi":[[]]}' data-mw='{"parts":[{"template":{"target":{"wt":"DEFAULTSORT","href":"./Template:DEFAULTSORT"},"params":{},"i":0}}]}' data-mw-i18n='{"title":{"lang":"x-page","key":"red-link-title","params":["Template:DEFAULTSORT"]}}'>Template:DEFAULTSORT</a></p>
|
||
|
||
<span about="#mwt1" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"DEFAULTSORT:","function":"defaultsort"},"params":{},"i":0}}]}'></span>
|
||
<span about="#mwt2" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"DEFAULTSORT:DOGGIE","function":"defaultsort"},"params":{},"i":0}}]}'></span>
|
||
!! end
|
||
|
||
# Can be removed when T335843 is addressed
|
||
!! test
|
||
Parsoid html2wt b/c check: Defaultsort with key content being added (T236846)
|
||
!! options
|
||
parsoid=html2wt
|
||
!! html/parsoid
|
||
<meta property="mw:PageProp/categorydefaultsort" content="BIRD" data-parsoid='{"src":"{{DEFAULTSORT}}"}'/>
|
||
!! wikitext
|
||
{{DEFAULTSORT:BIRD}}
|
||
!! end
|
||
|
||
# NOTE: mw:ExpandedAttrs is not the best typeof here. mw:Transclusion is better.
|
||
# But, this is a limitation of our representation and is documented in
|
||
# TemplateHandler.php in processSpecialMagicWord
|
||
!! test
|
||
Parsoid: Defaultsort (template-generated)
|
||
!! wikitext
|
||
{{{{1x|DEFAULTSORT}}:Foo}}
|
||
!! html/parsoid+integrated
|
||
<span about="#mwt3" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"{{1x|DEFAULTSORT}}:Foo","function":"defaultsort"},"params":{},"i":0}}]}'></span>
|
||
!! end
|
||
|
||
!! test
|
||
{{defaultsort}} should be location-independent (T353530)
|
||
!! options
|
||
cat
|
||
!! wikitext
|
||
[[Category:Foo]]
|
||
{{DEFAULTSORT:Bar}}
|
||
[[Category:Bat]]
|
||
!! metadata
|
||
cat=Foo sort=Bar
|
||
cat=Bat sort=Bar
|
||
!! end
|
||
|
||
###
|
||
### Inter-language links
|
||
###
|
||
!! test
|
||
Interlanguage links
|
||
!! options
|
||
ill
|
||
!! wikitext
|
||
[[es:Alimento]]
|
||
[[fr:Nourriture]]
|
||
[[zh:食品]]
|
||
!! metadata
|
||
ill=es:Alimento
|
||
ill=fr:Nourriture
|
||
ill=zh:食品
|
||
!! html/php
|
||
!! html/parsoid
|
||
<link rel="mw:PageProp/Language" href="http://es.wikipedia.org/wiki/Alimento"/>
|
||
<link rel="mw:PageProp/Language" href="http://fr.wikipedia.org/wiki/Nourriture"/>
|
||
<link rel="mw:PageProp/Language" href="http://zh.wikipedia.org/wiki/食品"/>
|
||
!! end
|
||
|
||
# Integrated-mode parsoid behavior will match other modes after
|
||
# I82a05a51d94782ebb9fa87ff889ca0f633b3e15c is merged in core.
|
||
!! test
|
||
Duplicate interlanguage links (T26502)
|
||
!! options
|
||
ill
|
||
!! wikitext
|
||
[[es:1]]
|
||
[[es:2]]
|
||
[[fr:1]]
|
||
[[fr:2]]
|
||
!! metadata
|
||
ill=es:1
|
||
ill=fr:1
|
||
!! html/php
|
||
!! html/parsoid
|
||
<link rel="mw:PageProp/Language" href="http://es.wikipedia.org/wiki/1"/>
|
||
<link rel="mw:PageProp/Language" href="http://es.wikipedia.org/wiki/2"/>
|
||
<link rel="mw:PageProp/Language" href="http://fr.wikipedia.org/wiki/1"/>
|
||
<link rel="mw:PageProp/Language" href="http://fr.wikipedia.org/wiki/2"/>
|
||
!! end
|
||
|
||
!! test
|
||
Single-line or multiline-comments can follow headings
|
||
!! options
|
||
parsoid=wt2html,wt2wt
|
||
!! config
|
||
wgParserEnableLegacyHeadingDOM=false
|
||
!! wikitext
|
||
==foo==<!---->
|
||
==bar==<!--c1-->
|
||
==baz==<!--
|
||
c2
|
||
c3-->
|
||
!! html/php
|
||
<div class="mw-heading mw-heading2"><h2 id="foo">foo</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&action=edit&section=1" title="Edit section: foo">edit</a><span class="mw-editsection-bracket">]</span></span></div>
|
||
<div class="mw-heading mw-heading2"><h2 id="bar">bar</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&action=edit&section=2" title="Edit section: bar">edit</a><span class="mw-editsection-bracket">]</span></span></div>
|
||
<div class="mw-heading mw-heading2"><h2 id="baz">baz</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&action=edit&section=3" title="Edit section: baz">edit</a><span class="mw-editsection-bracket">]</span></span></div>
|
||
!! html/parsoid
|
||
<h2 id="foo">foo</h2><!---->
|
||
<h2 id="bar">bar</h2><!--c1-->
|
||
<h2 id="baz">baz</h2><!--
|
||
c2
|
||
c3-->
|
||
!! end
|
||
|
||
!! test
|
||
T3186 news: in the middle of text
|
||
!! wikitext
|
||
http://en.wikinews.org/wiki/Wikinews:Workplace
|
||
!! html
|
||
<p><a rel="nofollow" class="external free" href="http://en.wikinews.org/wiki/Wikinews:Workplace">http://en.wikinews.org/wiki/Wikinews:Workplace</a>
|
||
</p>
|
||
!!end
|
||
|
||
|
||
!! test
|
||
Namespaced link must have a title
|
||
!! wikitext
|
||
[[Project:]]
|
||
!! html
|
||
<p>[[Project:]]
|
||
</p>
|
||
!!end
|
||
|
||
!! test
|
||
Namespaced link must have a title (bad fragment version)
|
||
!! wikitext
|
||
[[Project:#fragment]]
|
||
!! html
|
||
<p>[[Project:#fragment]]
|
||
</p>
|
||
!!end
|
||
|
||
|
||
###
|
||
### HTML tags and HTML attributes
|
||
###
|
||
|
||
!! test
|
||
div with no attributes
|
||
!! wikitext
|
||
<div>HTML rocks</div>
|
||
!! html
|
||
<div>HTML rocks</div>
|
||
!! end
|
||
|
||
!! test
|
||
div with double-quoted attribute
|
||
!! wikitext
|
||
<div id="rock">HTML rocks</div>
|
||
!! html
|
||
<div id="rock">HTML rocks</div>
|
||
!! end
|
||
|
||
!! test
|
||
div with single-quoted attribute
|
||
!! wikitext
|
||
<div id='rock'>HTML rocks</div>
|
||
!! html
|
||
<div id="rock">HTML rocks</div>
|
||
!! end
|
||
|
||
!! test
|
||
div with unquoted attribute
|
||
!! wikitext
|
||
<div id=rock>HTML rocks</div>
|
||
!! html
|
||
<div id="rock">HTML rocks</div>
|
||
!! end
|
||
|
||
!! test
|
||
div with illegal double attributes
|
||
!! wikitext
|
||
<div id="a" id="b">HTML rocks</div>
|
||
!! html
|
||
<div id="b">HTML rocks</div>
|
||
!! end
|
||
|
||
!! test
|
||
div with empty attribute value, space before equals
|
||
!! options
|
||
parsoid=wt2html,html2html
|
||
!! wikitext
|
||
<div class =>HTML rocks</div>
|
||
!! html/php
|
||
<div class="">HTML rocks</div>
|
||
!! html/parsoid
|
||
<div class="" data-parsoid='{"stx":"html"}'>HTML rocks</div>
|
||
!! end
|
||
|
||
!! test
|
||
div with multiple empty attribute values
|
||
!! config
|
||
wgFragmentMode=[ "html5", "legacy" ]
|
||
!! options
|
||
parsoid=wt2html,html2html
|
||
!! wikitext
|
||
<div id= title=>HTML rocks</div>
|
||
!! html/php
|
||
<div id="title=">HTML rocks</div>
|
||
!! html/parsoid
|
||
<div id="title=" data-parsoid='{"stx":"html"}'>HTML rocks</div>
|
||
!! end
|
||
|
||
# FIXME Parsoid doesn't actually match PHP here.
|
||
!! test
|
||
Extension tag in attribute value
|
||
!! options
|
||
wgRawHtml=1
|
||
!! wikitext
|
||
<span title="<html><div>123</div></html>">ok</span>
|
||
!! html/php
|
||
<p><span title="<div>123</div>">ok</span>
|
||
</p>
|
||
!! html/parsoid
|
||
<p><span title="123" about="#mwt4" typeof="mw:ExpandedAttrs" data-parsoid='{"stx":"html","a":{"title":"123"},"sa":{"title":"<html><div>123</div></html>"}}' data-mw='{"attribs":[[{"txt":"title"},{"html":"<div typeof=\"mw:Extension/html\" about=\"#mwt3\" data-parsoid='{\"dsr\":[13,40,2,2]}' data-mw='{\"name\":\"html\",\"attrs\":{},\"body\":{\"extsrc\":\"&lt;div>123&lt;/div>\"}}'>123</div>"}]]}'>ok</span></p>
|
||
!! end
|
||
|
||
!! test
|
||
table with multiple empty attribute values
|
||
!! options
|
||
parsoid=wt2html,html2html
|
||
!! wikitext
|
||
{| title= id=
|
||
|hi
|
||
|}
|
||
!! html/php
|
||
<table title="id=">
|
||
<tbody><tr>
|
||
<td>hi
|
||
</td></tr></tbody></table>
|
||
!! html/parsoid
|
||
<table title="id=">
|
||
<tbody><tr><td>hi</td></tr>
|
||
</tbody></table>
|
||
!! end
|
||
|
||
!! test
|
||
div with braces in attribute value
|
||
!! wikitext
|
||
<div title="{}">Foo</div>
|
||
!! html/php
|
||
<div title="{}">Foo</div>
|
||
!! html/parsoid
|
||
<div title="{}">Foo</div>
|
||
!! end
|
||
|
||
!! test
|
||
div with empty attribute value, no space before equals
|
||
!! options
|
||
parsoid=wt2html,html2html
|
||
!! wikitext
|
||
<div class=>HTML rocks</div>
|
||
!! html/php
|
||
<div class="">HTML rocks</div>
|
||
!! html/parsoid
|
||
<div class="">HTML rocks</div>
|
||
!! end
|
||
|
||
!! test
|
||
HTML multiple attributes correction
|
||
!! wikitext
|
||
<p class="error" class="awesome">Awesome!</p>
|
||
!! html
|
||
<p class="awesome">Awesome!</p>
|
||
!! end
|
||
|
||
!! test
|
||
Table multiple attributes correction
|
||
!! wikitext
|
||
{|
|
||
!+ class="error" class="awesome"|status
|
||
|}
|
||
!! html
|
||
<table>
|
||
<tbody><tr>
|
||
<th class="awesome">status
|
||
</th></tr></tbody></table>
|
||
!! end
|
||
|
||
!! test
|
||
DIV IN UPPERCASE
|
||
!! wikitext
|
||
<DIV ID="x">HTML ROCKS</DIV>
|
||
!! html
|
||
<div id="x">HTML ROCKS</div>
|
||
!! end
|
||
|
||
!! test
|
||
Non-ASCII pseudo-tags are rendered as text
|
||
!! wikitext
|
||
<khyô>
|
||
!! html
|
||
<p><khyô>
|
||
</p>
|
||
!! end
|
||
|
||
!! test
|
||
Pseudo-tag with URL 'name' renders as url link
|
||
!! wikitext
|
||
<http://example.com/>
|
||
!! html
|
||
<p><<a rel="nofollow" class="external free" href="http://example.com/">http://example.com/</a>>
|
||
</p>
|
||
!! end
|
||
|
||
!! test
|
||
text with amp in the middle of nowhere
|
||
!! wikitext
|
||
Remember AT&T?
|
||
!! html
|
||
<p>Remember AT&T?
|
||
</p>
|
||
!! end
|
||
|
||
!! test
|
||
text with character entity: eacute
|
||
!! wikitext
|
||
I always thought é was a cute letter.
|
||
!! html
|
||
<p>I always thought é was a cute letter.
|
||
</p>
|
||
!! end
|
||
|
||
!! test
|
||
text with entity-escaped character entity-like string: eacute
|
||
!! wikitext
|
||
I always thought &eacute; was a cute letter.
|
||
!! html
|
||
<p>I always thought &eacute; was a cute letter.
|
||
</p>
|
||
!! end
|
||
|
||
!! test
|
||
text with undefined character entity: xacute
|
||
!! wikitext
|
||
I always thought &xacute; was a cute letter.
|
||
!! html
|
||
<p>I always thought &xacute; was a cute letter.
|
||
</p>
|
||
!! end
|
||
|
||
!! test
|
||
Text with HTML5 semicolon-less entity (should not decode)
|
||
!! wikitext
|
||
&amp;
|
||
!! html/php
|
||
<p>&ampamp;
|
||
</p>
|
||
!! html/parsoid
|
||
<p>&ampamp;</p>
|
||
!! end
|
||
|
||
!! test
|
||
HTML5 tags
|
||
!! wikitext
|
||
<data value="5">five</data>
|
||
<time datetime="2000-01-01T00:00Z">The new millenium started</time>
|
||
<mark>This highlighted text</mark>
|
||
!! html
|
||
<p><data value="5">five</data>
|
||
<time datetime="2000-01-01T00:00Z">The new millenium started</time>
|
||
<mark>This highlighted text</mark>
|
||
</p>
|
||
!! end
|
||
|
||
!! test
|
||
HTML tag with leading space is parsed as text
|
||
!! wikitext
|
||
< div>foo< /div>
|
||
!! html
|
||
<p>< div>foo< /div>
|
||
</p>
|
||
!! end
|
||
|
||
## FIXME: The untrimmed attribute in Parsoid is T205737
|
||
!! test
|
||
Element with broken attribute syntax
|
||
!! options
|
||
parsoid=wt2html
|
||
!! wikitext
|
||
<div style=" style="123">hi</div>
|
||
<div =>ho</div>
|
||
!! html/php
|
||
<div style="style=">hi</div>
|
||
<div>ho</div>
|
||
!! html/parsoid
|
||
<div style=" style=" data-parsoid='{"stx":"html","a":{"123\"":null},"sa":{"123\"":""}}'>hi</div>
|
||
<div data-parsoid='{"stx":"html","a":{"=":null},"sa":{"=":""}}'>ho</div>
|
||
!! 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 <b> in
|
||
# the test case, instead of <small>
|
||
!! test
|
||
Ensure that HTML adoption agency algorithm is properly implemented.
|
||
!! wikitext
|
||
<small>X<small>Y</small>Z</small>
|
||
!! html
|
||
<p><small>X<small>Y</small>Z</small>
|
||
</p>
|
||
!! end
|
||
|
||
# This was T43545 in the PHP parser.
|
||
!! test
|
||
Nesting of <kbd>
|
||
!! wikitext
|
||
<kbd>X<kbd>Y</kbd>Z</kbd>
|
||
!! html
|
||
<p><kbd>X<kbd>Y</kbd>Z</kbd>
|
||
</p>
|
||
!! end
|
||
|
||
# The following cases were T53081 in the PHP parser.
|
||
# Note that there are some other nestable tags (b, i, etc) which are
|
||
# not covered; see T53081 for discussion.
|
||
|
||
!! test
|
||
Nesting of <em>
|
||
!! wikitext
|
||
<em>X<em>Y</em>Z</em>
|
||
!! html
|
||
<p><em>X<em>Y</em>Z</em>
|
||
</p>
|
||
!! end
|
||
|
||
!! test
|
||
Nesting of <strong>
|
||
!! wikitext
|
||
<strong>X<strong>Y</strong>Z</strong>
|
||
!! html
|
||
<p><strong>X<strong>Y</strong>Z</strong>
|
||
</p>
|
||
!! end
|
||
|
||
!! test
|
||
Nesting of <q>
|
||
!! wikitext
|
||
<q>X<q>Y</q>Z</q>
|
||
!! html
|
||
<p><q>X<q>Y</q>Z</q>
|
||
</p>
|
||
!! end
|
||
|
||
!! test
|
||
Nesting of <ruby>
|
||
!! wikitext
|
||
<ruby>X<ruby>Y</ruby>Z</ruby>
|
||
!! html
|
||
<p><ruby>X<ruby>Y</ruby>Z</ruby>
|
||
</p>
|
||
!! end
|
||
|
||
!! test
|
||
Nesting of <bdo>
|
||
!! wikitext
|
||
<bdo>X<bdo>Y</bdo>Z</bdo>
|
||
!! html
|
||
<p><bdo>X<bdo>Y</bdo>Z</bdo>
|
||
</p>
|
||
!! end
|
||
|
||
|
||
###
|
||
### Media links
|
||
###
|
||
|
||
!! test
|
||
Media link
|
||
!! wikitext
|
||
[[Media:Foobar.jpg]]
|
||
[[Media:Video.ogv]]
|
||
[[:Media:Video.ogv]]
|
||
!! html/php
|
||
<p><a href="http://example.com/images/3/3a/Foobar.jpg" class="internal" title="Foobar.jpg">Media:Foobar.jpg</a>
|
||
<a href="http://example.com/images/0/00/Video.ogv" class="internal" title="Video.ogv">Media:Video.ogv</a>
|
||
<a href="http://example.com/images/0/00/Video.ogv" class="internal" title="Video.ogv">Media:Video.ogv</a>
|
||
</p>
|
||
!! html/parsoid
|
||
<p><a rel="mw:MediaLink" href="http://example.com/images/3/3a/Foobar.jpg" resource="./Media:Foobar.jpg" title="Foobar.jpg">Media:Foobar.jpg</a>
|
||
<a rel="mw:MediaLink" href="http://example.com/images/0/00/Video.ogv" resource="./Media:Video.ogv" title="Video.ogv">Media:Video.ogv</a>
|
||
<a rel="mw:MediaLink" href="http://example.com/images/0/00/Video.ogv" resource="./Media:Video.ogv" title="Video.ogv" data-parsoid='{"a":{"resource":"./Media:Video.ogv"},"sa":{"resource":":Media:Video.ogv"}}'>Media:Video.ogv</a></p>
|
||
!! end
|
||
|
||
!! test
|
||
Media link with text
|
||
!! wikitext
|
||
[[Media:Foobar.jpg|A neat file to look at]]
|
||
!! html/php
|
||
<p><a href="http://example.com/images/3/3a/Foobar.jpg" class="internal" title="Foobar.jpg">A neat file to look at</a>
|
||
</p>
|
||
!! html/parsoid
|
||
<p><a rel="mw:MediaLink" href="http://example.com/images/3/3a/Foobar.jpg" resource="./Media:Foobar.jpg" title="Foobar.jpg">A neat file to look at</a></p>
|
||
!! end
|
||
|
||
# This won't pass in standalone mode because we don't have redirect handling in our mock data access.
|
||
# Not sure if it is worth dealing with it.
|
||
!! test
|
||
Media link redirect
|
||
!! wikitext
|
||
[[Media:Redirect to foobar.jpg]]
|
||
!! html/php
|
||
<p><a href="http://example.com/images/3/3a/Foobar.jpg" class="internal" title="Foobar.jpg">Media:Redirect to foobar.jpg</a>
|
||
</p>
|
||
!! html/parsoid+integrated
|
||
<p><a rel="mw:MediaLink" href="http://example.com/images/3/3a/Foobar.jpg" resource="./Media:Foobar.jpg" title="Foobar.jpg">Media:Redirect to foobar.jpg</a></p>
|
||
!! end
|
||
|
||
!! test
|
||
Localized media link
|
||
!! options
|
||
language=is
|
||
!! wikitext
|
||
[[Miðill:Foobar.jpg]]
|
||
|
||
[[Miðill:Foobar.jpg|Icelandic]]
|
||
!! html/php
|
||
<p><a href="http://example.com/images/3/3a/Foobar.jpg" class="internal" title="Foobar.jpg">Miðill:Foobar.jpg</a>
|
||
</p><p><a href="http://example.com/images/3/3a/Foobar.jpg" class="internal" title="Foobar.jpg">Icelandic</a>
|
||
</p>
|
||
!! html/parsoid
|
||
<p><a rel="mw:MediaLink" href="http://example.com/images/3/3a/Foobar.jpg" resource="./Miðill:Foobar.jpg" title="Foobar.jpg">Miðill:Foobar.jpg</a></p>
|
||
<p><a rel="mw:MediaLink" href="http://example.com/images/3/3a/Foobar.jpg" resource="./Miðill:Foobar.jpg" title="Foobar.jpg">Icelandic</a></p>
|
||
!! end
|
||
|
||
# FIXME: this is still bad HTML tag nesting
|
||
# FIXME: doBlockLevels won't wrap this in a paragraph because it contains a div
|
||
# Parsoid & Remex fix the p-wrapping since they operate on the DOM.
|
||
!! test
|
||
Media link with nasty text
|
||
!! options
|
||
parsoid=wt2html,html2html
|
||
!! wikitext
|
||
[[Media:Foobar.jpg|Safe Link<div style=display:none>" onmouseover="alert(document.cookie)" onfoo="</div>]]
|
||
!! html/php
|
||
<p><a href="http://example.com/images/3/3a/Foobar.jpg" class="internal" title="Foobar.jpg">Safe Link</a></p><a href="http://example.com/images/3/3a/Foobar.jpg" class="internal" title="Foobar.jpg"><div style="display:none">" onmouseover="alert(document.cookie)" onfoo="</div></a>
|
||
!! html/parsoid
|
||
<p><a rel="mw:MediaLink" href="http://example.com/images/3/3a/Foobar.jpg" resource="./Media:Foobar.jpg" title="Foobar.jpg">Safe Link</a></p><a rel="mw:MediaLink" href="http://example.com/images/3/3a/Foobar.jpg" resource="./Media:Foobar.jpg" title="Foobar.jpg"><div style="display:none" data-parsoid='{"stx":"html"}'>" onmouseover="alert(document.cookie)" onfoo="</div></a>
|
||
!! end
|
||
|
||
!! test
|
||
Media link from missing resource (parsoid-only)
|
||
!! options
|
||
parsoid=html2wt
|
||
!! html/parsoid
|
||
<a rel="mw:MediaLink" href="http://example.com/images/3/3a/Foobar.jpg">Bat!</a>
|
||
!! wikitext
|
||
[[Media:Foobar.jpg|Bat!]]
|
||
!! end
|
||
|
||
!! test
|
||
Media link from missing resource, localized (parsoid-only)
|
||
!! options
|
||
parsoid=html2wt
|
||
language=is
|
||
!! html/parsoid
|
||
<a rel="mw:MediaLink" href="http://example.com/images/3/3a/Foobar.jpg">Bat!</a>
|
||
!! wikitext
|
||
[[Miðill:Foobar.jpg|Bat!]]
|
||
!! end
|
||
|
||
# This is a test to ensure we don't crash or choke when given
|
||
# old cached 1.7.0 HTML for media links; we don't require that the
|
||
# result be "valid" because wt2wt was completely broken in 1.7.0
|
||
!! test
|
||
Media link from old 1.7.0 DOM spec (crash test, parsoid-only) T198511
|
||
!! options
|
||
parsoid=html2wt
|
||
!! html/parsoid
|
||
<p>This is what Parsoid would emit (and we still handle this HTML fine):</p>
|
||
<p><a rel="mw:MediaLink" href="http://example.com/images/3/3a/Foobar.jpg" title="Foobar.jpg">A neat file to look at</a></p>
|
||
<p>But VisualEditor would mangle the rel attribute, and give us back this:</p>
|
||
<p><a rel="mw:ExtLink" href="http://example.com/images/3/3a/Foobar.jpg" title="Foobar.jpg">A neat file to look at</a></p>
|
||
<p>But at least we don't crash when trying to handle the mangled HTML!</p>
|
||
!! wikitext
|
||
This is what Parsoid would emit (and we still handle this HTML fine):
|
||
|
||
[[Media:Foobar.jpg|A neat file to look at]]
|
||
|
||
But VisualEditor would mangle the rel attribute, and give us back this:
|
||
|
||
[http://example.com/images/3/3a/Foobar.jpg A neat file to look at]
|
||
|
||
But at least we don't crash when trying to handle the mangled HTML!
|
||
!! end
|
||
|
||
!! test
|
||
Media link to nonexistent file (T3702)
|
||
!! wikitext
|
||
[[Media:No such.jpg]]
|
||
[[Media:No_such file.jpg]]
|
||
!! html/php
|
||
<p><a href="/index.php?title=Special:Upload&wpDestFile=No_such.jpg" class="new" title="No such.jpg">Media:No such.jpg</a>
|
||
<a href="/index.php?title=Special:Upload&wpDestFile=No_such_file.jpg" class="new" title="No such file.jpg">Media:No_such file.jpg</a>
|
||
</p>
|
||
!! html/parsoid
|
||
<p><a rel="mw:MediaLink" href="./Special:FilePath/No_such.jpg" resource="./Media:No_such.jpg" title="No such.jpg" typeof="mw:Error" data-mw='{"errors":[{"key":"apierror-filedoesnotexist","message":"This image does not exist."}]}' data-parsoid='{"a":{"resource":"./Media:No_such.jpg"},"sa":{"resource":"Media:No such.jpg"}}'>Media:No such.jpg</a>
|
||
<a rel="mw:MediaLink" href="./Special:FilePath/No_such_file.jpg" resource="./Media:No_such_file.jpg" title="No such file.jpg" typeof="mw:Error" data-mw='{"errors":[{"key":"apierror-filedoesnotexist","message":"This image does not exist."}]}' data-parsoid='{"a":{"resource":"./Media:No_such_file.jpg"},"sa":{"resource":"Media:No_such file.jpg"}}'>Media:No_such file.jpg</a></p>
|
||
!! end
|
||
|
||
!! test
|
||
Media link with nested wikilinks
|
||
!! config
|
||
wgParserEnableLegacyMediaDOM=false
|
||
!! wikitext
|
||
[[Media:Foobar.jpg|[[Test]]]]
|
||
[[Media:Foobar.jpg|[[File:Foobar.jpg]]]]
|
||
!! html/php
|
||
<p>[[Media:Foobar.jpg|<a href="/wiki/Test" title="Test">Test</a>]]
|
||
[[Media:Foobar.jpg|<span class="mw-default-size" typeof="mw:File"><a href="/wiki/File:Foobar.jpg" class="mw-file-description"><img src="http://example.com/images/3/3a/Foobar.jpg" decoding="async" width="1941" height="220" class="mw-file-element" /></a></span>]]
|
||
</p>
|
||
!! html/parsoid
|
||
<p>[[Media:Foobar.jpg|<a rel="mw:WikiLink" href="./Test" title="Test" data-parsoid='{"stx":"simple","a":{"href":"./Test"},"sa":{"href":"Test"}}'>Test</a>]]
|
||
[[Media:Foobar.jpg|<span class="mw-default-size" typeof="mw:File" data-parsoid='{"optList":[]}'><a href="./File:Foobar.jpg" class="mw-file-description"><img resource="./File:Foobar.jpg" src="http://example.com/images/3/3a/Foobar.jpg" decoding="async" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="220" width="1941" data-parsoid='{"a":{"resource":"./File:Foobar.jpg","height":"220","width":"1941"},"sa":{"resource":"File:Foobar.jpg"}}' class="mw-file-element"/></a></span>]]</p>
|
||
!! end
|
||
|
||
!! test
|
||
Media link with multiple options
|
||
!! wikitext
|
||
[[Media:Foobar.jpg|123|345]]
|
||
!! html/php
|
||
<p><a href="http://example.com/images/3/3a/Foobar.jpg" class="internal" title="Foobar.jpg">123|345</a>
|
||
</p>
|
||
!! html/parsoid
|
||
<p><a rel="mw:MediaLink" href="http://example.com/images/3/3a/Foobar.jpg" resource="./Media:Foobar.jpg" title="Foobar.jpg">123|345</a></p>
|
||
!! end
|
||
|
||
!! test
|
||
Character reference normalization in link text (T3938)
|
||
!! wikitext
|
||
[[Main Page|this&that]]
|
||
!! html
|
||
<p><a href="/wiki/Main_Page" title="Main Page">this&that</a>
|
||
</p>
|
||
!! end
|
||
|
||
!! article
|
||
אַ
|
||
!! text
|
||
Test for unicode normalization
|
||
|
||
The page's name is U+05d0 U+05b7, with non-canonical form U+FB2E
|
||
!! endarticle
|
||
|
||
# Parsoid has a regression here (T258858) note the incorrect redlink as well
|
||
!! test
|
||
(T21451) Links should refer to the normalized form.
|
||
!! wikitext
|
||
[[אַ]]
|
||
[[אַ]]
|
||
[[אַ]]
|
||
[[אַ]]
|
||
[[אַ]]
|
||
!! html/php
|
||
<p><a href="/wiki/%D7%90%D6%B7" title="אַ">אַ</a>
|
||
<a href="/wiki/%D7%90%D6%B7" title="אַ">אַ</a>
|
||
<a href="/wiki/%D7%90%D6%B7" title="אַ">אַ</a>
|
||
<a href="/wiki/%D7%90%D6%B7" title="אַ">אַ</a>
|
||
<a href="/wiki/%D7%90%D6%B7" title="אַ">אַ</a>
|
||
</p>
|
||
!! html/parsoid
|
||
<p><a rel="mw:WikiLink" href="./אַ?action=edit&redlink=1" title="אַ" class="new" typeof="mw:LocalizedAttrs" data-parsoid='{"stx":"simple","a":{"href":"./אַ"},"sa":{"href":"&#xFB2E;"}}' data-mw-i18n='{"title":{"lang":"x-page","key":"red-link-title","params":["אַ"]}}'>אַ</a>
|
||
<a rel="mw:WikiLink" href="./אַ" title="אַ" data-parsoid='{"stx":"simple","a":{"href":"./אַ"},"sa":{"href":"&#x5d0;&#x5b7;"}}'>אַ</a>
|
||
<a rel="mw:WikiLink" href="./אַ" title="אַ" data-parsoid='{"stx":"simple","a":{"href":"./אַ"},"sa":{"href":"&#x5d0;ַ"}}'>אַ</a>
|
||
<a rel="mw:WikiLink" href="./אַ" title="אַ" data-parsoid='{"stx":"simple","a":{"href":"./אַ"},"sa":{"href":"א&#x5b7;"}}'>אַ</a>
|
||
<a rel="mw:WikiLink" href="./אַ" title="אַ" data-parsoid='{"stx":"simple","a":{"href":"./אַ"},"sa":{"href":"אַ"}}'>אַ</a></p>
|
||
!! end
|
||
|
||
!! test
|
||
Empty attribute crash test (T4067)
|
||
!! wikitext
|
||
<font color="">foo</font>
|
||
!! html
|
||
<p><font color="">foo</font>
|
||
</p>
|
||
!! end
|
||
|
||
!! test
|
||
Empty attribute crash test single-quotes (T4067)
|
||
!! wikitext
|
||
<font color=''>foo</font>
|
||
!! html
|
||
<p><font color="">foo</font>
|
||
</p>
|
||
!! end
|
||
|
||
!! test
|
||
Attribute test: equals, then nothing
|
||
!! options
|
||
parsoid=wt2html,html2html
|
||
!! wikitext
|
||
<font color=>foo</font>
|
||
!! html/php
|
||
<p><font color="">foo</font>
|
||
</p>
|
||
!! html/parsoid
|
||
<p><font color="" data-parsoid='{"stx":"html"}'>foo</font></p>
|
||
!! end
|
||
|
||
!! test
|
||
Attribute test: unquoted value
|
||
!! options
|
||
parsoid=wt2html,html2html
|
||
!! wikitext
|
||
<font color=x>foo</font>
|
||
!! html/php
|
||
<p><font color="x">foo</font>
|
||
</p>
|
||
!! html/parsoid
|
||
<p><font color="x" data-parsoid='{"stx":"html"}'>foo</font></p>
|
||
!! end
|
||
|
||
!! test
|
||
Attribute test: unquoted but illegal value (hash)
|
||
!! wikitext
|
||
<font color=#x>foo</font>
|
||
!! html
|
||
<p><font color="#x">foo</font>
|
||
</p>
|
||
!! 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
|
||
<font color>foo</font>
|
||
!! html/php
|
||
<p><font color="">foo</font>
|
||
</p>
|
||
!! html/parsoid
|
||
<p><font color="">foo</font></p>
|
||
!! end
|
||
|
||
!! test
|
||
T4095: link with three closing brackets
|
||
!! wikitext
|
||
[[Main Page]]]
|
||
!! html/php
|
||
<p><a href="/wiki/Main_Page" title="Main Page">Main Page</a>]
|
||
</p>
|
||
!! html/parsoid
|
||
<p><a rel="mw:WikiLink" href="./Main_Page" title="Main Page">Main Page</a>]</p>
|
||
!! end
|
||
|
||
!! test
|
||
T4095: link with pipe and three closing brackets
|
||
!! wikitext
|
||
[[Main Page|link]]]
|
||
!! html/php
|
||
<p><a href="/wiki/Main_Page" title="Main Page">link</a>]
|
||
</p>
|
||
!! html/parsoid
|
||
<p><a rel="mw:WikiLink" href="./Main_Page" title="Main Page">link</a>]</p>
|
||
!! end
|
||
|
||
!! test
|
||
T4095: link with pipe and three closing brackets, version 2
|
||
!! wikitext
|
||
[[Main Page|[http://example.com/]]]
|
||
!! html/php
|
||
<p><a href="/wiki/Main_Page" title="Main Page">[http://example.com/]</a>
|
||
</p>
|
||
!! html/parsoid
|
||
<p><a rel="mw:WikiLink" href="./Main_Page" title="Main Page">[http://example.com/]</a></p>
|
||
!! end
|
||
|
||
|
||
###
|
||
### Safety
|
||
###
|
||
|
||
!! article
|
||
Template:Dangerous attribute
|
||
!! text
|
||
" onmouseover="alert(document.cookie)
|
||
!! endarticle
|
||
|
||
!! article
|
||
Template:Dangerous style attribute
|
||
!! text
|
||
border-size: expression(alert(document.cookie))
|
||
!! endarticle
|
||
|
||
!! article
|
||
Template:Div style
|
||
!! text
|
||
<div style="float: right; {{{1}}}">Magic div</div>
|
||
!! endarticle
|
||
|
||
!! test
|
||
T4304: HTML attribute safety (safe template; regression T4309)
|
||
!! wikitext
|
||
<div title="{{test}}"></div>
|
||
!! html/php
|
||
<div title="This is a test template"></div>
|
||
!! html/parsoid
|
||
<div title="This is a test template" about="#mwt2" typeof="mw:ExpandedAttrs" data-parsoid='{"stx":"html","a":{"title":"This is a test template"},"sa":{"title":"{{test}}"}}' data-mw='{"attribs":[[{"txt":"title"},{"html":"<span about=\"#mwt1\" typeof=\"mw:Transclusion\" data-parsoid='{\"pi\":[[]],\"dsr\":[12,20,null,null]}' data-mw='{\"parts\":[{\"template\":{\"target\":{\"wt\":\"test\",\"href\":\"./Template:Test\"},\"params\":{},\"i\":0}}]}'>This is a test template</span>"}]]}'></div>
|
||
!! end
|
||
|
||
# Parsoid has enough context to handle this case
|
||
!! test
|
||
T4304: HTML attribute safety (dangerous template; 2309)
|
||
!! wikitext
|
||
<div title="{{dangerous attribute}}"></div>
|
||
!! html/php
|
||
<div title=""></div>
|
||
!! html/parsoid
|
||
<div title='" onmouseover="alert(document.cookie)' about="#mwt2" typeof="mw:ExpandedAttrs" data-parsoid='{"stx":"html","a":{"title":"\" onmouseover=\"alert(document.cookie)"},"sa":{"title":"{{dangerous attribute}}"}}' data-mw='{"attribs":[[{"txt":"title"},{"html":"<span about=\"#mwt1\" typeof=\"mw:Transclusion\" data-parsoid='{\"pi\":[[]],\"dsr\":[12,35,null,null]}' data-mw='{\"parts\":[{\"template\":{\"target\":{\"wt\":\"dangerous attribute\",\"href\":\"./Template:Dangerous_attribute\"},\"params\":{},\"i\":0}}]}'>\" onmouseover=\"alert(document.cookie)</span>"}]]}'></div>
|
||
!! end
|
||
|
||
!! test
|
||
T4304: HTML attribute safety (dangerous style template; 2309)
|
||
!! wikitext
|
||
<div style="{{dangerous style attribute}}"></div>
|
||
!! html/php
|
||
<div style="/* insecure input */"></div>
|
||
!! html/parsoid
|
||
<div style="/* insecure input */" about="#mwt2" typeof="mw:ExpandedAttrs" data-parsoid='{"stx":"html","a":{"style":"/* insecure input */"},"sa":{"style":"{{dangerous style attribute}}"}}' data-mw='{"attribs":[[{"txt":"style"},{"html":"<span about=\"#mwt1\" typeof=\"mw:Transclusion\" data-parsoid='{\"pi\":[[]],\"dsr\":[12,41,null,null]}' data-mw='{\"parts\":[{\"template\":{\"target\":{\"wt\":\"dangerous style attribute\",\"href\":\"./Template:Dangerous_style_attribute\"},\"params\":{},\"i\":0}}]}'>border-size: expression(alert(document.cookie))</span>"}]]}'></div>
|
||
!! end
|
||
|
||
!! test
|
||
T4304: HTML attribute safety (safe parameter; 2309)
|
||
!! wikitext
|
||
{{div style|width: 200px}}
|
||
!! html/php
|
||
<div style="float: right; width: 200px">Magic div</div>
|
||
!! html/parsoid
|
||
<div style="float: right; width: 200px" about="#mwt1" typeof="mw:Transclusion" data-parsoid='{"stx":"html","a":{"style":"float: right; width: 200px"},"sa":{"style":"float: right; {{{1}}}"},"pi":[[{"k":"1"}]]}' data-mw='{"parts":[{"template":{"target":{"wt":"div style","href":"./Template:Div_style"},"params":{"1":{"wt":"width: 200px"}},"i":0}}]}'>Magic div</div>
|
||
!! end
|
||
|
||
!! test
|
||
T4304: HTML attribute safety (unsafe parameter; 2309)
|
||
!! wikitext
|
||
{{div style|width: expression(alert(document.cookie))}}
|
||
!! html/php
|
||
<div style="/* insecure input */">Magic div</div>
|
||
!! html/parsoid
|
||
<div style="/* insecure input */" about="#mwt1" typeof="mw:Transclusion" data-parsoid='{"stx":"html","a":{"style":"/* insecure input */"},"sa":{"style":"float: right; {{{1}}}"},"pi":[[{"k":"1"}]]}' data-mw='{"parts":[{"template":{"target":{"wt":"div style","href":"./Template:Div_style"},"params":{"1":{"wt":"width: expression(alert(document.cookie))"}},"i":0}}]}'>Magic div</div>
|
||
!! end
|
||
|
||
!! test
|
||
T4304: HTML attribute safety (unsafe breakout parameter; 2309)
|
||
!! wikitext
|
||
{{div style|"><script>alert(document.cookie)</script>}}
|
||
!! html/php
|
||
<div style="float: right;"><script>alert(document.cookie)</script>">Magic div</div>
|
||
!! html/parsoid+integrated
|
||
<div style="float: right; " about="#mwt1" typeof="mw:Transclusion" data-parsoid='{"stx":"html","pi":[[{"k":"1"}]]}' data-mw='{"parts":[{"template":{"target":{"wt":"div style","href":"./Template:Div_style"},"params":{"1":{"wt":"\"><script>alert(document.cookie)</script>"}},"i":0}}]}'><script>alert(document.cookie)</script>">Magic div</div>
|
||
!! end
|
||
|
||
!! test
|
||
T4304: HTML attribute safety (unsafe breakout parameter 2; 2309)
|
||
!! wikitext
|
||
{{div style|" ><script>alert(document.cookie)</script>}}
|
||
!! html/php
|
||
<div style="float: right;"><script>alert(document.cookie)</script>">Magic div</div>
|
||
!! html/parsoid+integrated
|
||
<div style="float: right; " about="#mwt1" typeof="mw:Transclusion" data-parsoid='{"stx":"html","pi":[[{"k":"1"}]]}' data-mw='{"parts":[{"template":{"target":{"wt":"div style","href":"./Template:Div_style"},"params":{"1":{"wt":"\" ><script>alert(document.cookie)</script>"}},"i":0}}]}'><script>alert(document.cookie)</script>">Magic div</div>
|
||
!! end
|
||
|
||
!! test
|
||
T4304: HTML attribute safety (link)
|
||
!! wikitext
|
||
<div title="[[Main Page]]"></div>
|
||
!! html/php
|
||
<div title="[[Main Page]]"></div>
|
||
!! html/parsoid
|
||
<div title="[[Main Page]]"></div>
|
||
!! end
|
||
|
||
!! test
|
||
T4304: HTML attribute safety (italics)
|
||
!! wikitext
|
||
<div title="''foobar''"></div>
|
||
!! html
|
||
<div title="''foobar''"></div>
|
||
!! end
|
||
|
||
!! test
|
||
T4304: HTML attribute safety (bold)
|
||
!! wikitext
|
||
<div title="'''foobar'''"></div>
|
||
!! html
|
||
<div title="'''foobar'''"></div>
|
||
!! end
|
||
|
||
!! test
|
||
T4304: HTML attribute safety (web link)
|
||
!! wikitext
|
||
<div title="http://example.com/"></div>
|
||
!! html
|
||
<div title="http://example.com/"></div>
|
||
!! end
|
||
|
||
!! test
|
||
T4304: HTML attribute safety (named web link)
|
||
!! wikitext
|
||
<div title="[http://example.com/ link]"></div>
|
||
!! html/php
|
||
<div title="[http://example.com/ link]"></div>
|
||
!! html/parsoid
|
||
<div title="[http://example.com/ link]"></div>
|
||
!! end
|
||
|
||
!! test
|
||
T5244: HTML attribute safety (extension; safe)
|
||
!! wikitext
|
||
<div style="<nowiki>background:blue</nowiki>"></div>
|
||
!! html/php
|
||
<div style="background:blue"></div>
|
||
!! html/parsoid
|
||
<div style="background:blue" about="#mwt3" typeof="mw:ExpandedAttrs" data-parsoid='{"stx":"html","a":{"style":"background:blue"},"sa":{"style":"<nowiki>background:blue</nowiki>"}}' data-mw='{"attribs":[[{"txt":"style"},{"html":"<span typeof=\"mw:Nowiki\" data-parsoid='{\"dsr\":[12,44,8,9]}'>background:blue</span>"}]]}'></div>
|
||
!! end
|
||
|
||
!! test
|
||
T5244: HTML attribute safety (extension; unsafe)
|
||
!! wikitext
|
||
<div style="<nowiki>border-left:expression(alert(document.cookie))</nowiki>"></div>
|
||
!! html/php
|
||
<div style="/* insecure input */"></div>
|
||
!! html/parsoid
|
||
<div style="/* insecure input */" about="#mwt3" typeof="mw:ExpandedAttrs" data-parsoid='{"stx":"html","a":{"style":"/* insecure input */"},"sa":{"style":"<nowiki>border-left:expression(alert(document.cookie))</nowiki>"}}' data-mw='{"attribs":[[{"txt":"style"},{"html":"<span typeof=\"mw:Nowiki\" data-parsoid='{\"dsr\":[12,75,8,9]}'>border-left:expression(alert(document.cookie))</span>"}]]}'></div>
|
||
!! end
|
||
|
||
# More MSIE fun discovered by Tom Gilder
|
||
|
||
!! test
|
||
MSIE CSS safety test: spurious slash
|
||
!! wikitext
|
||
<div style="background-image:u\rl(javascript:alert('boo'))">evil</div>
|
||
!! html/php
|
||
<div style="/* insecure input */">evil</div>
|
||
!! html/parsoid
|
||
<div style="/* insecure input */" data-parsoid='{"stx":"html","a":{"style":"/* insecure input */"},"sa":{"style":"background-image:u\\rl(javascript:alert('boo'))"}}'>evil</div>
|
||
!! end
|
||
|
||
!! test
|
||
MSIE CSS safety test: hex code
|
||
!! wikitext
|
||
<div style="background-image:u\72l(javascript:alert('boo'))">evil</div>
|
||
!! html/php
|
||
<div style="/* insecure input */">evil</div>
|
||
!! html/parsoid
|
||
<div style="/* insecure input */" data-parsoid='{"stx":"html","a":{"style":"/* insecure input */"},"sa":{"style":"background-image:u\\72l(javascript:alert('boo'))"}}'>evil</div>
|
||
!! end
|
||
|
||
!! test
|
||
MSIE CSS safety test: comment in url
|
||
!! wikitext
|
||
<div style="background-image:u/**/rl(javascript:alert('boo'))">evil</div>
|
||
!! html/php
|
||
<div style="background-image:u rl(javascript:alert('boo'))">evil</div>
|
||
!! html/parsoid
|
||
<div style="background-image:u rl(javascript:alert('boo'))" data-parsoid='{"stx":"html","a":{"style":"background-image:u rl(javascript:alert('boo'))"},"sa":{"style":"background-image:u/**/rl(javascript:alert('boo'))"}}'>evil</div>
|
||
!! end
|
||
|
||
!! test
|
||
MSIE CSS safety test: comment in expression
|
||
!! wikitext
|
||
<div style="background-image:expres/**/sion(alert('boo4'))">evil4</div>
|
||
!! html/php
|
||
<div style="background-image:expres sion(alert('boo4'))">evil4</div>
|
||
!! html/parsoid
|
||
<div style="background-image:expres sion(alert('boo4'))" data-parsoid='{"stx":"html","a":{"style":"background-image:expres sion(alert('boo4'))"},"sa":{"style":"background-image:expres/**/sion(alert('boo4'))"}}'>evil4</div>
|
||
!! end
|
||
|
||
!! test
|
||
CSS safety test (all browsers): vertical tab (T57332 / CVE-2013-4567)
|
||
!! wikitext
|
||
<p style="font-size: 100px; background-image:url\b(https://www.google.com/images/srpr/logo6w.png)">A</p>
|
||
!! html/php
|
||
<p style="/* invalid control char */">A</p>
|
||
!! html/parsoid
|
||
<p style="/* invalid control char */" data-parsoid='{"stx":"html","a":{"style":"/* invalid control char */"},"sa":{"style":"font-size: 100px; background-image:url\\b(https://www.google.com/images/srpr/logo6w.png)"}}'>A</p>
|
||
!! end
|
||
|
||
!! test
|
||
Opera -o-link CSS
|
||
!! options
|
||
parsoid=wt2html,html2html
|
||
!! wikitext
|
||
<div
|
||
title="data:text/html,<img src=1 onerror=alert(1)>"
|
||
style="-o-link:attr(title);-o-link-source:current">X</div>
|
||
!! html/php
|
||
<div title="data:text/html,<img src=1 onerror=alert(1)>" style="/* insecure input */">X</div>
|
||
!! html/parsoid
|
||
<div title="data:text/html,<img src=1 onerror=alert(1)>" style="/* insecure input */" data-parsoid='{"stx":"html","a":{"title":"data:text/html,<img src=1 onerror=alert(1)>","style":"/* insecure input */"},"sa":{"title":"&#100;&#97;&#116;&#97;&#58;&#116;&#101;&#120;&#116;&#47;&#104;&#116;&#109;&#108;&#44;&#60;&#105;&#109;&#103;&#32;&#115;&#114;&#99;&#61;&#49;&#32;&#111;&#110;&#101;&#114;&#114;&#111;&#114;&#61;&#97;&#108;&#101;&#114;&#116;&#40;&#49;&#41;&#62;","style":"-o-link:attr(title);-o-link-source:current"}}'>X</div>
|
||
!! end
|
||
|
||
!! test
|
||
Table attribute legitimate extension
|
||
!! wikitext
|
||
{|
|
||
!+ style="<nowiki>color:blue</nowiki>"|status
|
||
|}
|
||
!! html
|
||
<table>
|
||
<tbody><tr>
|
||
<th style="color:blue">status
|
||
</th></tr></tbody></table>
|
||
!! end
|
||
|
||
!! test
|
||
Table attribute safety
|
||
!! wikitext
|
||
{|
|
||
!+ style="<nowiki>border-width:expression(0+alert(document.cookie))</nowiki>"|status
|
||
|}
|
||
!! html
|
||
<table>
|
||
<tbody><tr>
|
||
<th style="/* insecure input */">status
|
||
</th></tr></tbody></table>
|
||
!! end
|
||
|
||
!! test
|
||
CSS line continuation 1
|
||
!! wikitext
|
||
<div style="background-image: u\ rl(test.jpg);"></div>
|
||
!! html
|
||
<div style="/* insecure input */"></div>
|
||
!! end
|
||
|
||
!! test
|
||
CSS line continuation 2
|
||
!! wikitext
|
||
<div style="background-image: u\ rl(test.jpg); "></div>
|
||
!! html
|
||
<div style="/* invalid control char */"></div>
|
||
!! end
|
||
|
||
!! test
|
||
Allow aria attributes
|
||
!! config
|
||
wgFragmentMode=[ "legacy" ]
|
||
!! wikitext
|
||
<span aria-describedby="id1" aria-flowto="id2" aria-hidden="true" aria-label="id3" aria-labelledby="id4" aria-level="3" aria-owns="id5">foo</span>
|
||
<span aria-bogus="stripped">bar</span>
|
||
!! html/php
|
||
<p><span aria-describedby="id1" aria-flowto="id2" aria-hidden="true" aria-label="id3" aria-labelledby="id4" aria-level="3" aria-owns="id5">foo</span>
|
||
<span>bar</span>
|
||
</p>
|
||
!! html/parsoid
|
||
<p><span aria-describedby="id1" aria-flowto="id2" aria-hidden="true" aria-label="id3" aria-labelledby="id4" aria-level="3" aria-owns="id5">foo</span>
|
||
<span data-parsoid='{"stx":"html","a":{"aria-bogus":null},"sa":{"aria-bogus":"stripped"}}'>bar</span></p>
|
||
!! end
|
||
|
||
!! test
|
||
Expansion of multi-line templates in attribute values (T8255)
|
||
!! wikitext
|
||
<div style="background: {{1x|#00FF00}}">-</div>
|
||
!! html/php
|
||
<div style="background: #00FF00">-</div>
|
||
!! html/parsoid+integrated
|
||
<div style="background:
|
||
#00FF00" about="#mwt2" typeof="mw:ExpandedAttrs" data-parsoid='{"stx":"html","a":{"style":"background: \n#00FF00"},"sa":{"style":"background: {{1x|#00FF00}}"}}' data-mw='{"attribs":[[{"txt":"style"},{"html":"background: <span about=\"#mwt1\" typeof=\"mw:Transclusion\" data-parsoid='{\"pi\":[[{\"k\":\"1\"}]],\"dsr\":[24,38,null,null]}' data-mw='{\"parts\":[{\"template\":{\"target\":{\"wt\":\"1x\",\"href\":\"./Template:1x\"},\"params\":{\"1\":{\"wt\":\"#00FF00\"}},\"i\":0}}]}'>\n#00FF00</span>"}]]}'>-</div>
|
||
!! end
|
||
|
||
### FIXME ptsync 2024-02-21: "multi-line" part of these tests appears to
|
||
### have been lost at some point.
|
||
|
||
### FIXME ptsync 2024-02-21: {{#if}} is not defined for core tests, so
|
||
### this test should use a different parser function (maybe {{lc}}); marked
|
||
### html/php+disabled for now.
|
||
|
||
!! test
|
||
Expansion of multi-line parser-functions in attribute values (T8255)
|
||
!! wikitext
|
||
<div style="background: {{#if:1|#00FF00|#FF00FF}}">-</div>
|
||
!! html/php+disabled
|
||
<div style="background: #00FF00">-</div>
|
||
!! html/parsoid+integrated
|
||
<div style="background:
|
||
#00FF00" about="#mwt2" typeof="mw:ExpandedAttrs" data-parsoid='{"stx":"html","a":{"style":"background: \n#00FF00"},"sa":{"style":"background: {{#if:1|#00FF00|#FF00FF}}"}}' data-mw='{"attribs":[[{"txt":"style"},{"html":"background: <span about=\"#mwt1\" typeof=\"mw:Transclusion\" data-parsoid='{\"pi\":[[{\"k\":\"1\"},{\"k\":\"2\"}]],\"dsr\":[24,49,null,null]}' data-mw='{\"parts\":[{\"template\":{\"target\":{\"wt\":\"#if:1\",\"function\":\"if\"},\"params\":{\"1\":{\"wt\":\"#00FF00\"},\"2\":{\"wt\":\"#FF00FF\"}},\"i\":0}}]}'>\n#00FF00</span>"}]]}'>-</div>
|
||
!! end
|
||
|
||
!! test
|
||
Expansion of multi-line templates in attribute values (T8255 check)
|
||
!! wikitext
|
||
<div style="background:
|
||
#00FF00">-</div>
|
||
!! html/php
|
||
<div style="background: #00FF00">-</div>
|
||
!! html/parsoid
|
||
<div style="background:
|
||
#00FF00">-</div>
|
||
!! end
|
||
|
||
!! test
|
||
Expansion of multi-line templates in attribute values (T8255 check 2)
|
||
!! wikitext
|
||
<div style="background: #00FF00">-</div>
|
||
!! html
|
||
<div style="background: #00FF00">-</div>
|
||
!! end
|
||
|
||
# BlockLevelPass suppresses P-wrapping for tags whose names begin with
|
||
# `mw:`. We'll somewhat arbitrarily chose `mw:editsection` to
|
||
# represent this class of tags for testing purposes.
|
||
!! test
|
||
Tags which are hidden from tidiers cannot pass through the Sanitizer
|
||
!! options
|
||
parsoid=wt2html,html2html
|
||
!! wikitext
|
||
<mw:editsection><script>alert();</script></mw:editsection>
|
||
|
||
<meta property="mw:PageProp/toc" />
|
||
!! html/php
|
||
<p><mw:editsection><script>alert();</script></mw:editsection>
|
||
</p><p><meta property="mw:PageProp/toc" />
|
||
</p>
|
||
!! html/parsoid
|
||
<p><mw:editsection><script>alert();</script></mw:editsection></p>
|
||
|
||
<p><meta property="mw:PageProp/toc" /></p>
|
||
!! end
|
||
|
||
###
|
||
### Parser hooks (see tests/parser/ParserTestParserHook.php for the <tag> extension)
|
||
###
|
||
|
||
!! test
|
||
Parser hook: empty input
|
||
!! wikitext
|
||
<tag></tag>
|
||
!! html/php
|
||
<pre>''
|
||
array (
|
||
)
|
||
</pre>
|
||
!! html/parsoid
|
||
<pre typeof="mw:Extension/tag" data-mw='{"name":"tag","attrs":{},"body":{"extsrc":""}}' about="#mwt2">''
|
||
array (
|
||
)</pre>
|
||
!! end
|
||
|
||
## Don't expect parsoid to rt this form.
|
||
!! test
|
||
Parser hook: empty input using terminated empty elements
|
||
!! options
|
||
parsoid=wt2html,html2html
|
||
!! wikitext
|
||
<tag/>
|
||
!! html/php
|
||
<pre>NULL
|
||
array (
|
||
)
|
||
</pre>
|
||
!! html/parsoid
|
||
<pre typeof="mw:Extension/tag" about="#mwt3" data-mw='{"name":"tag","attrs":{}}'>NULL
|
||
array (
|
||
)
|
||
</pre>
|
||
!! end
|
||
|
||
!! test
|
||
Parser hook: empty input using terminated empty elements (space before)
|
||
!! wikitext
|
||
<tag />
|
||
!! html/php
|
||
<pre>NULL
|
||
array (
|
||
)
|
||
</pre>
|
||
!! html/parsoid
|
||
<pre typeof="mw:Extension/tag" about="#mwt3" data-mw='{"name":"tag","attrs":{}}'>NULL
|
||
array (
|
||
)
|
||
</pre>
|
||
!! end
|
||
|
||
!! test
|
||
Parser hook: basic input
|
||
!! wikitext
|
||
<tag>input</tag>
|
||
!! html/php
|
||
<pre>'input'
|
||
array (
|
||
)
|
||
</pre>
|
||
!! html/parsoid
|
||
<pre typeof="mw:Extension/tag" data-mw='{"name":"tag","attrs":{},"body":{"extsrc":"input"}}' about="#mwt2">'input'
|
||
array (
|
||
)</pre>
|
||
!! end
|
||
|
||
## Don't expect parsoid to rt this form.
|
||
!! test
|
||
Parser hook: case insensitive
|
||
!! options
|
||
parsoid=wt2html,html2html
|
||
!! wikitext
|
||
<TAG>input</TAG>
|
||
!! html/php
|
||
<pre>'input'
|
||
array (
|
||
)
|
||
</pre>
|
||
!! html/parsoid
|
||
<pre typeof="mw:Extension/tag" about="#mwt3" data-mw='{"name":"tag","attrs":{},"body":{"extsrc":"input"}}'>'input'
|
||
array (
|
||
)
|
||
</pre>
|
||
!! end
|
||
|
||
## Don't expect parsoid to rt this form.
|
||
!! test
|
||
Parser hook: case insensitive, redux
|
||
!! options
|
||
parsoid=wt2html,html2html
|
||
!! wikitext
|
||
<TaG>input</TAg>
|
||
!! html/php
|
||
<pre>'input'
|
||
array (
|
||
)
|
||
</pre>
|
||
!! html/parsoid
|
||
<pre typeof="mw:Extension/tag" about="#mwt3" data-mw='{"name":"tag","attrs":{},"body":{"extsrc":"input"}}'>'input'
|
||
array (
|
||
)
|
||
</pre>
|
||
!! end
|
||
|
||
!! test
|
||
Parser hook: nested tags
|
||
!! options
|
||
parsoid=wt2html
|
||
!! wikitext
|
||
<tag><tag></tag></tag>
|
||
!! html/php
|
||
<pre>'<tag>'
|
||
array (
|
||
)
|
||
</tag></pre><p></tag></p>
|
||
!! html/parsoid
|
||
<pre typeof="mw:Extension/tag" about="#mwt3" data-mw='{"name":"tag","attrs":{},"body":{"extsrc":"<tag>"}}'>'<tag>'
|
||
array (
|
||
)
|
||
</tag></pre><p></tag></p>
|
||
!! end
|
||
|
||
!! test
|
||
Parser hook: basic arguments
|
||
!! wikitext
|
||
<tag width="200" height="100" depth="50" square=""></tag>
|
||
!! html/php
|
||
<pre>''
|
||
array (
|
||
'width' => '200',
|
||
'height' => '100',
|
||
'depth' => '50',
|
||
'square' => '',
|
||
)
|
||
</pre>
|
||
!! html/parsoid
|
||
<pre typeof="mw:Extension/tag" about="#mwt3" data-mw='{"name":"tag","attrs":{"width":"200","height":"100","depth":"50","square":""},"body":{"extsrc":""}}'>''
|
||
array (
|
||
'width' => '200',
|
||
'height' => '100',
|
||
'depth' => '50',
|
||
'square' => '',
|
||
)
|
||
</pre>
|
||
!! end
|
||
|
||
## Don't expect parsoid to rt this form.
|
||
!! test
|
||
Parser hook: basic arguments, variations
|
||
!! options
|
||
parsoid=wt2html,html2html
|
||
!! wikitext
|
||
<tag width=200 height = "100" depth = '50' square></tag>
|
||
!! html/php
|
||
<pre>''
|
||
array (
|
||
'width' => '200',
|
||
'height' => '100',
|
||
'depth' => '50',
|
||
'square' => '',
|
||
)
|
||
</pre>
|
||
!! html/parsoid
|
||
<pre typeof="mw:Extension/tag" about="#mwt3" data-mw='{"name":"tag","attrs":{"width":"200","height":"100","depth":"50","square":""},"body":{"extsrc":""}}'>''
|
||
array (
|
||
'width' => '200',
|
||
'height' => '100',
|
||
'depth' => '50',
|
||
'square' => '',
|
||
)
|
||
</pre>
|
||
!! end
|
||
|
||
!! test
|
||
Parser hook: argument containing a forward slash (T7344)
|
||
!! wikitext
|
||
<tag filename="/tmp/bla"></tag>
|
||
!! html/php
|
||
<pre>''
|
||
array (
|
||
'filename' => '/tmp/bla',
|
||
)
|
||
</pre>
|
||
!! html/parsoid
|
||
<pre typeof="mw:Extension/tag" about="#mwt3" data-mw='{"name":"tag","attrs":{"filename":"/tmp/bla"},"body":{"extsrc":""}}'>''
|
||
array (
|
||
'filename' => '/tmp/bla',
|
||
)
|
||
</pre>
|
||
!! end
|
||
|
||
## Don't expect parsoid to rt this form.
|
||
!! test
|
||
Parser hook: empty input using terminated empty elements (T4374)
|
||
!! options
|
||
parsoid=wt2html,html2html
|
||
!! wikitext
|
||
<tag foo=bar/>text
|
||
!! html/php
|
||
<pre>NULL
|
||
array (
|
||
'foo' => 'bar',
|
||
)
|
||
</pre><p>text</p>
|
||
!! html/parsoid
|
||
<pre typeof="mw:Extension/tag" about="#mwt3" data-mw='{"name":"tag","attrs":{"foo":"bar"}}'>NULL
|
||
array (
|
||
'foo' => 'bar',
|
||
)
|
||
</pre><p>text</p>
|
||
!! end
|
||
|
||
## </tag> 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
|
||
<tag width=200 height = "100" depth = '50' square/>
|
||
other stuff
|
||
</tag>
|
||
!! html/php
|
||
<pre>NULL
|
||
array (
|
||
'width' => '200',
|
||
'height' => '100',
|
||
'depth' => '50',
|
||
'square' => '',
|
||
)
|
||
</pre>
|
||
<p>other stuff
|
||
</tag>
|
||
</p>
|
||
!! html/parsoid
|
||
<pre typeof="mw:Extension/tag" about="#mwt3" data-mw='{"name":"tag","attrs":{"width":"200","height":"100","depth":"50","square":""}}'>NULL
|
||
array (
|
||
'width' => '200',
|
||
'height' => '100',
|
||
'depth' => '50',
|
||
'square' => '',
|
||
)
|
||
</pre>
|
||
<p>other stuff
|
||
</tag></p>
|
||
!! end
|
||
|
||
## Don't expect parsoid to rt this form.
|
||
!! test
|
||
Parser hook: Don't allow unclosed extension tags
|
||
!! options
|
||
parsoid=wt2html
|
||
!! wikitext
|
||
test <tag>123
|
||
|
||
this is a '''test'''
|
||
!! html/php
|
||
<p>test <tag>123
|
||
</p><p>this is a <b>test</b>
|
||
</p>
|
||
!! html/parsoid
|
||
<p>test <tag>123</p>
|
||
|
||
<p>this is a <b>test</b></p>
|
||
!! end
|
||
|
||
!! test
|
||
Parser hook: horizontal rule inside extension tag that outputs <pre>
|
||
!! wikitext
|
||
<tag>
|
||
Hello
|
||
<hr/>
|
||
Goodbye
|
||
</tag>
|
||
!! html/php
|
||
<pre>'
|
||
Hello
|
||
<hr />
|
||
Goodbye
|
||
'
|
||
array (
|
||
)
|
||
</pre>
|
||
!! end
|
||
|
||
###
|
||
### (see tests/parser/ParserTestParserHook.php for the <statictag> extension)
|
||
###
|
||
|
||
!! test
|
||
Parser hook: static parser hook not inside a comment
|
||
!! wikitext
|
||
<statictag>hello, world</statictag>
|
||
|
||
<statictag action="flush" />
|
||
!! html/php
|
||
<p><br />
|
||
hello, world
|
||
</p>
|
||
!! html/parsoid
|
||
<p><span typeof="mw:Extension/statictag" data-mw='{"name":"statictag","attrs":{},"body":{"extsrc":"hello, world"}}' about="#mwt2"></span></p>
|
||
<p><span typeof="mw:Extension/statictag" data-mw='{"name":"statictag","attrs":{"action":"flush"}}' about="#mwt4">hello, world</span></p>
|
||
!! end
|
||
|
||
!! test
|
||
Parser hook: static parser hook inside a comment
|
||
!! wikitext
|
||
<!-- <statictag>hello, world</statictag> -->
|
||
<statictag action="flush" />
|
||
!! html/php
|
||
<p><br />
|
||
</p>
|
||
!! html/parsoid
|
||
<!-- <statictag>hello, world</statictag> -->
|
||
<p><span typeof='mw:Extension/statictag' data-mw='{"name":"statictag","attrs":{"action":"flush"}}' data-parsoid='{}' about='#mwt2'></span></p>
|
||
!! end
|
||
|
||
# Nested template calls; this case was broken by Parser.php rev 1.506,
|
||
# since reverted.
|
||
|
||
!! article
|
||
Template:One-parameter
|
||
!! text
|
||
(My parameter is: {{{1}}})
|
||
!! endarticle
|
||
|
||
!! article
|
||
Template:Map-one-parameter
|
||
!! text
|
||
{{{{{1}}}|{{{2}}}}}
|
||
!! endarticle
|
||
|
||
!! test
|
||
Nested template calls
|
||
!! wikitext
|
||
{{Map-one-parameter|One-parameter|param}}
|
||
!! html
|
||
<p>(My parameter is: param)
|
||
</p>
|
||
!! end
|
||
|
||
|
||
###
|
||
### Sanitizer
|
||
###
|
||
|
||
!! test
|
||
Sanitizer: Closing of open tags
|
||
!! wikitext
|
||
<s></s><table></table>
|
||
!! html/php
|
||
<p><s></s></p><table></table>
|
||
!! html/parsoid
|
||
<p><s data-parsoid='{"stx":"html"}'></s></p><table data-parsoid='{"stx":"html"}'></table>
|
||
!! end
|
||
|
||
# Legacy parser adds an extra newline (seen as a space) which Parsoid does not
|
||
!! test
|
||
Sanitizer: Closing of open but not closed tags
|
||
!! wikitext
|
||
<s>foo
|
||
!! html/php
|
||
<p><s>foo
|
||
</s></p>
|
||
!! html/parsoid
|
||
<p><s data-parsoid='{"stx":"html","autoInsertedEnd":true}'>foo</s></p>
|
||
!! end
|
||
|
||
!! test
|
||
Sanitizer: Closing of closed but not open tags
|
||
!! options
|
||
parsoid=wt2html
|
||
!! wikitext
|
||
</s>
|
||
!! html
|
||
<p class="mw-empty-elt">
|
||
</p>
|
||
!! end
|
||
|
||
!! test
|
||
Sanitizer: Closing of closed but not open table tags
|
||
!! options
|
||
parsoid=wt2html
|
||
!! wikitext
|
||
Table not started</td></tr></table>
|
||
!! html
|
||
<p>Table not started</p>
|
||
!! end
|
||
|
||
!! test
|
||
Sanitizer: Escaping of spaces, multibyte characters, colons & other stuff in id=""
|
||
!! options
|
||
title=[[Main Page]]
|
||
!! config
|
||
wgFragmentMode=[ "html5", "legacy" ]
|
||
!! wikitext
|
||
<span id="æ: v">byte</span>[[#æ: v|backlink]]
|
||
!! html/php
|
||
<p><span id="æ:_v">byte</span><a href="#æ:_v">backlink</a>
|
||
</p>
|
||
!! html/parsoid
|
||
<p><span id="æ:_v" data-parsoid='{"stx":"html","a":{"id":"æ:_v"},"sa":{"id":"æ: v"}}'>byte</span><a rel="mw:WikiLink" href="./Main_Page#æ:_v" class="mw-selflink-fragment" data-parsoid='{"stx":"piped","a":{"href":"./Main_Page#æ:_v"},"sa":{"href":"#æ: v"}}'>backlink</a></p>
|
||
!! end
|
||
|
||
!! test
|
||
Sanitizer: Escaping of spaces, multibyte characters, colons & other stuff in id="" (legacy)
|
||
!! config
|
||
wgFragmentMode=[ "legacy" ]
|
||
!! wikitext
|
||
<span id="æ: v">byte</span>[[#æ: v|backlink]]
|
||
!! html/php
|
||
<p><span id=".C3.A6:_v">byte</span><a href="#.C3.A6:_v">backlink</a>
|
||
</p>
|
||
!! 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
|
||
<br id="" /><br id="a space" />
|
||
!! 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
|
||
<br id="foo" /><br id="foo" />
|
||
!! html
|
||
Something need to be done. foo-2 ?
|
||
!! end
|
||
|
||
!! test
|
||
Sanitizer: Validating that <meta> and <link> work, but only for Microdata
|
||
!! wikitext
|
||
<div itemscope>
|
||
<meta itemprop="hello" content="world">
|
||
<meta http-equiv="refresh" content="5">
|
||
<meta itemprop="hello" http-equiv="refresh" content="5">
|
||
<link itemprop="hello" href="{{SERVER}}">
|
||
<link rel="stylesheet" href="{{SERVER}}">
|
||
<link rel="stylesheet" itemprop="hello" href="{{SERVER}}">
|
||
</div>
|
||
!! html
|
||
<div itemscope="">
|
||
<p> <meta itemprop="hello" content="world" />
|
||
<meta http-equiv="refresh" content="5">
|
||
<meta itemprop="hello" content="5" />
|
||
<link itemprop="hello" href="http://example.org" />
|
||
<link rel="stylesheet" href="<a rel="nofollow" class="external free" href="http://example.org">http://example.org</a>">
|
||
<link itemprop="hello" href="http://example.org" />
|
||
</p>
|
||
</div>
|
||
!! end
|
||
|
||
!! test
|
||
Sanitizer: Strip comments from CSS attributes
|
||
!! options
|
||
parsoid=wt2html,wt2wt
|
||
!! wikitext
|
||
<span style="margin:/*negate mbox-text padding */-0.125em -0.45em; /*rainbow*/rgba(255, 0, 0, 0.3)">2013</span>
|
||
!! html/php
|
||
<p><span style="margin: -0.125em -0.45em; rgba(255, 0, 0, 0.3)">2013</span>
|
||
</p>
|
||
!! html/parsoid
|
||
<p><span style="margin: -0.125em -0.45em; rgba(255, 0, 0, 0.3)">2013</span></p>
|
||
!! end
|
||
|
||
!! test
|
||
Sanitizer: Avoid unnecessary percent encoded characters in interwiki links
|
||
!! wikitext
|
||
[[meatball:Soft"Security]]
|
||
!! html/php
|
||
<p><a href="http://www.usemod.com/cgi-bin/mb.pl?Soft%22Security" class="extiw" title="meatball:Soft"Security">meatball:Soft"Security</a>
|
||
</p>
|
||
!! html/parsoid
|
||
<p><a rel="mw:WikiLink/Interwiki" href='http://www.usemod.com/cgi-bin/mb.pl?Soft"Security' title='meatball:Soft"Security' class="extiw">meatball:Soft"Security</a></p>
|
||
!! end
|
||
|
||
!! test
|
||
Sanitizer: angle brackets are invalid, even in interwiki links (T182338)
|
||
!! wikitext
|
||
[[meatball:Foo<Bar]]
|
||
[[meatball:Foo>Bar]]
|
||
[[meatball:Foo<bar]]
|
||
[[meatball:Foo>bar]]
|
||
!! html/php
|
||
<p>[[meatball:Foo<Bar]]
|
||
[[meatball:Foo>Bar]]
|
||
[[meatball:Foo<bar]]
|
||
[[meatball:Foo>bar]]
|
||
</p>
|
||
!! html/parsoid
|
||
<p>[[meatball:Foo<Bar]]
|
||
[[meatball:Foo>Bar]]
|
||
[[meatball:Foo<span typeof="mw:Entity" data-parsoid='{"src":"&lt;","srcContent":"<"}'><</span>bar]]
|
||
[[meatball:Foo<span typeof="mw:Entity" data-parsoid='{"src":"&gt;","srcContent":">"}'>></span>bar]]</p>
|
||
!! end
|
||
|
||
!! test
|
||
Self closed html pairs (T7487)
|
||
!! wikitext
|
||
<center><font id="bug" />Centered text</center>
|
||
<div><font id="bug2" />In div text</div>
|
||
!! html
|
||
<center><font id="bug">Centered text</font></center><font id="bug"><div><font id="bug2">In div text</font></div></font>
|
||
!! end
|
||
|
||
!! test
|
||
Punctuation: nbsp before exclamation
|
||
!! wikitext
|
||
C'est grave !
|
||
!! html/php
|
||
<p>C'est grave !
|
||
</p>
|
||
!! html/parsoid
|
||
<p>C'est grave<span typeof="mw:DisplaySpace"> </span>!</p>
|
||
!! end
|
||
|
||
!! test
|
||
Punctuation: CSS !important (T13874)
|
||
!! wikitext
|
||
<div style="width:50% !important">important</div>
|
||
!! html
|
||
<div style="width:50% !important">important</div>
|
||
!! end
|
||
|
||
!! test
|
||
Punctuation: CSS ! important (T13874; with space after)
|
||
!! wikitext
|
||
<div style="width:50% ! important">important</div>
|
||
!! html
|
||
<div style="width:50% ! important">important</div>
|
||
!! end
|
||
|
||
!! test
|
||
HTML bullet list, closed tags (T7497)
|
||
!! wikitext
|
||
<ul>
|
||
<li>One</li>
|
||
<li>Two</li>
|
||
</ul>
|
||
!! html/php
|
||
<ul>
|
||
<li>One</li>
|
||
<li>Two</li>
|
||
</ul>
|
||
!! html/parsoid
|
||
<ul data-parsoid='{"stx":"html"}'>
|
||
<li data-parsoid='{"stx":"html"}'>One</li>
|
||
<li data-parsoid='{"stx":"html"}'>Two</li>
|
||
</ul>
|
||
!! end
|
||
|
||
!! test
|
||
HTML bullet list, unclosed tags (T7497)
|
||
!! wikitext
|
||
<ul>
|
||
<li>One
|
||
<li>Two
|
||
</ul>
|
||
!! html/php
|
||
<ul>
|
||
<li>One
|
||
</li><li>Two
|
||
</li></ul>
|
||
!! html/parsoid
|
||
<ul data-parsoid='{"stx":"html"}'>
|
||
<li data-parsoid='{"stx":"html","autoInsertedEnd":true}'>One</li>
|
||
<li data-parsoid='{"stx":"html","autoInsertedEnd":true}'>Two</li>
|
||
</ul>
|
||
!! end
|
||
|
||
!! test
|
||
HTML ordered list, closed tags (T7497)
|
||
!! wikitext
|
||
<ol>
|
||
<li>One</li>
|
||
<li>Two</li>
|
||
</ol>
|
||
!! html/php
|
||
<ol>
|
||
<li>One</li>
|
||
<li>Two</li>
|
||
</ol>
|
||
!! html/parsoid
|
||
<ol data-parsoid='{"stx":"html"}'>
|
||
<li data-parsoid='{"stx":"html"}'>One</li>
|
||
<li data-parsoid='{"stx":"html"}'>Two</li>
|
||
</ol>
|
||
!! end
|
||
|
||
!! test
|
||
HTML ordered list, unclosed tags (T7497)
|
||
!! options
|
||
!! wikitext
|
||
<ol>
|
||
<li>One
|
||
<li>Two
|
||
</ol>
|
||
!! html/php
|
||
<ol>
|
||
<li>One
|
||
</li><li>Two
|
||
</li></ol>
|
||
!! html/parsoid
|
||
<ol data-parsoid='{"stx":"html"}'>
|
||
<li data-parsoid='{"stx":"html","autoInsertedEnd":true}'>One</li>
|
||
<li data-parsoid='{"stx":"html","autoInsertedEnd":true}'>Two</li>
|
||
</ol>
|
||
!! end
|
||
|
||
!! test
|
||
HTML nested bullet list, closed tags (T7497)
|
||
!! wikitext
|
||
<ul>
|
||
<li>One</li>
|
||
<li>Two:
|
||
<ul>
|
||
<li>Sub-one</li>
|
||
<li>Sub-two</li>
|
||
</ul>
|
||
</li>
|
||
</ul>
|
||
!! html/php
|
||
<ul>
|
||
<li>One</li>
|
||
<li>Two:
|
||
<ul>
|
||
<li>Sub-one</li>
|
||
<li>Sub-two</li>
|
||
</ul>
|
||
</li>
|
||
</ul>
|
||
!! html/parsoid
|
||
<ul data-parsoid='{"stx":"html"}'>
|
||
<li data-parsoid='{"stx":"html"}'>One</li>
|
||
<li data-parsoid='{"stx":"html"}'>Two:
|
||
<ul data-parsoid='{"stx":"html"}'>
|
||
<li data-parsoid='{"stx":"html"}'>Sub-one</li>
|
||
<li data-parsoid='{"stx":"html"}'>Sub-two</li>
|
||
</ul>
|
||
</li>
|
||
</ul>
|
||
!! end
|
||
|
||
!! test
|
||
HTML nested bullet list, open tags (T7497)
|
||
!! wikitext
|
||
<ul>
|
||
<li>One
|
||
<li>Two:
|
||
<ul>
|
||
<li>Sub-one
|
||
<li>Sub-two
|
||
</ul>
|
||
</ul>
|
||
!! html
|
||
<ul>
|
||
<li>One
|
||
</li><li>Two:
|
||
<ul>
|
||
<li>Sub-one
|
||
</li><li>Sub-two
|
||
</li></ul>
|
||
</li></ul>
|
||
!! end
|
||
|
||
!! test
|
||
HTML nested ordered list, closed tags (T7497)
|
||
!! wikitext
|
||
<ol>
|
||
<li>One</li>
|
||
<li>Two:
|
||
<ol>
|
||
<li>Sub-one</li>
|
||
<li>Sub-two</li>
|
||
</ol>
|
||
</li>
|
||
</ol>
|
||
!! html
|
||
<ol>
|
||
<li>One</li>
|
||
<li>Two:
|
||
<ol>
|
||
<li>Sub-one</li>
|
||
<li>Sub-two</li>
|
||
</ol>
|
||
</li>
|
||
</ol>
|
||
!! end
|
||
|
||
!! test
|
||
HTML nested ordered list, open tags (T7497)
|
||
!! wikitext
|
||
<ol>
|
||
<li>One
|
||
<li>Two:
|
||
<ol>
|
||
<li>Sub-one
|
||
<li>Sub-two
|
||
</ol>
|
||
</ol>
|
||
!! html/php
|
||
<ol>
|
||
<li>One
|
||
</li><li>Two:
|
||
<ol>
|
||
<li>Sub-one
|
||
</li><li>Sub-two
|
||
</li></ol>
|
||
</li></ol>
|
||
!! html/parsoid
|
||
<ol>
|
||
<li>One
|
||
</li>
|
||
<li>Two:
|
||
<ol>
|
||
<li>Sub-one
|
||
</li>
|
||
<li>Sub-two
|
||
</li>
|
||
</ol>
|
||
</li>
|
||
</ol>
|
||
!! end
|
||
|
||
!! test
|
||
HTML ordered list item with parameters oddity
|
||
!! wikitext
|
||
<ol><li id="fragment">One</li>
|
||
</ol>
|
||
!! html
|
||
<ol><li id="fragment">One</li>
|
||
</ol>
|
||
!! 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
|
||
<p><a rel="nofollow" class="external autonumber" href="http://first/">[1]</a> <a rel="nofollow" class="external autonumber" href="http://second">[2]</a> <a rel="nofollow" class="external autonumber" href="ftp://ftp">[3]</a>
|
||
</p><p><a rel="nofollow" class="external free" href="ftp://inlineftp">ftp://inlineftp</a>
|
||
</p><p><a rel="nofollow" class="external text" href="mailto:enclosed@mail.tld">With target</a>
|
||
</p><p><a rel="nofollow" class="external autonumber" href="mailto:enclosed@mail.tld">[4]</a>
|
||
</p><p><a rel="nofollow" class="external free" href="mailto:inline@mail.tld">mailto:inline@mail.tld</a>
|
||
</p>
|
||
!! html/parsoid
|
||
<p><a rel="mw:ExtLink" href="http://first/" class="external autonumber"></a> <a rel="mw:ExtLink" href="http://second" class="external autonumber"></a> <a rel="mw:ExtLink" href="ftp://ftp" class="external autonumber"></a></p>
|
||
<p><a rel="mw:ExtLink" href="ftp://inlineftp" class="external free">ftp://inlineftp</a></p>
|
||
<p><a rel="mw:ExtLink" href="mailto:enclosed@mail.tld" class="external text">With target</a></p>
|
||
<p><a rel="mw:ExtLink" href="mailto:enclosed@mail.tld" class="external autonumber"></a></p>
|
||
<p><a rel="mw:ExtLink" href="mailto:inline@mail.tld" class="external free">mailto:inline@mail.tld</a></p>
|
||
!! end
|
||
|
||
|
||
#
|
||
# Security and HTML correctness
|
||
# From Nick Jenkins' fuzz testing
|
||
#
|
||
|
||
!! test
|
||
Fuzz testing: Parser13
|
||
!! wikitext
|
||
{|
|
||
| http://a|
|
||
!! html
|
||
<table>
|
||
<tbody><tr>
|
||
<td>
|
||
</td>
|
||
</tr>
|
||
</tbody></table>
|
||
!! end
|
||
|
||
# Known to produce bogus xml (extra </td>)
|
||
# Don't add the html/php section since it generates broken HTML
|
||
!! test
|
||
Fuzz testing: Parser16
|
||
!! wikitext
|
||
{|
|
||
!https://||||||
|
||
!! html
|
||
<table>
|
||
<tbody><tr>
|
||
<th>https://</th>
|
||
<th></th>
|
||
<th></th>
|
||
<th>
|
||
|
||
</th></tr>
|
||
</tbody></table>
|
||
!! end
|
||
|
||
!! test
|
||
Fuzz testing: Parser21
|
||
!! wikitext
|
||
{|
|
||
!irc://{{ftp://a" onmouseover="alert('hello world');"
|
||
|
|
||
!! html
|
||
<table>
|
||
<tbody><tr>
|
||
<th><a rel="nofollow" class="external free" href="irc://{{ftp://a">irc://{{ftp://a</a>" onmouseover="alert('hello world');"
|
||
</th>
|
||
<td>
|
||
</td>
|
||
</tr>
|
||
</tbody></table>
|
||
!! end
|
||
|
||
!! test
|
||
Fuzz testing: Parser22
|
||
!! wikitext
|
||
http://===r:::https://b
|
||
|
||
{|
|
||
!! html/php
|
||
<p><a rel="nofollow" class="external free" href="http://===r:::https://b">http://===r:::https://b</a>
|
||
</p>
|
||
<table>
|
||
<tbody><tr><td></td></tr>
|
||
</tbody></table>
|
||
!! html/parsoid
|
||
<p><a rel="mw:ExtLink" href="http://===r:::https://b" class="external free" data-parsoid='{"stx":"url"}'>http://===r:::https://b</a></p>
|
||
|
||
<table data-parsoid='{"autoInsertedEnd":true}'></table>
|
||
!! end
|
||
|
||
# The above 'Parser24' fuzz test exposed a tokenizer bug (T221384);
|
||
# this is a minimized version of the above test to catch regressions.
|
||
!! test
|
||
Fuzz testing: Parser24 (minimized)
|
||
!! options
|
||
parsoid=wt2html
|
||
!! wikitext
|
||
{{<u {{{{[[Sx-->}}
|
||
!! html/php
|
||
<p>{{<u>}}
|
||
</u></p>
|
||
!! html/parsoid
|
||
<p>{{<u data-parsoid='{"stx":"html","a":{"{{{{[[Sx--":null},"sa":{"{{{{[[Sx--":""},"autoInsertedEnd":true}'>}}</u></p>
|
||
!! end
|
||
|
||
## Remex doesn't account for fostered content.
|
||
## Known to produce bad XML for now
|
||
!! test
|
||
Fuzz testing: Parser24
|
||
!! options
|
||
parsoid=wt2html
|
||
!! wikitext
|
||
{|
|
||
{{{|
|
||
<u CLASS=
|
||
| {{{{SSSll!!!!!!!VVVV)]]][[Special:*xxxxxxx--><noinclude>}}}} >
|
||
<br style="onmouseover='alert(document.cookie);' " />
|
||
|
||
MOVE YOUR MOUSE CURSOR OVER THIS TEXT
|
||
|
|
||
!! html/php
|
||
|
||
{{{|
|
||
<u class="|">}}}} >
|
||
<br style="onmouseover='alert(document.cookie);'" />
|
||
|
||
MOVE YOUR MOUSE CURSOR OVER THIS TEXT
|
||
</u><table><tbody><tr>
|
||
<td>
|
||
</td>
|
||
</tr>
|
||
</tbody></table>
|
||
!! html/parsoid
|
||
<p data-parsoid='{"fostered":true,"autoInsertedEnd":true,"autoInsertedStart":true}'>
|
||
{{{|
|
||
<u class="|" data-parsoid='{"stx":"html","a":{"{{{{SSSll!!!!!!!VVVV)]]][[Special:*xxxxxxx--":null},"sa":{"{{{{SSSll!!!!!!!VVVV)]]][[Special:*xxxxxxx--":""},"autoInsertedEnd":true}'><meta typeof="mw:Includes/NoInclude" data-parsoid='{"src":"<noinclude>"}'/>}}}} >
|
||
<br style="onmouseover='alert(document.cookie);' " data-parsoid='{"stx":"html","selfClose":true}'/>
|
||
|
||
MOVE YOUR MOUSE CURSOR OVER THIS TEXT</u></p>
|
||
<table data-parsoid='{"autoInsertedEnd":true}'><tbody><tr data-parsoid='{"autoInsertedStart":true}'><td></td></tr></tbody></table>
|
||
!! end
|
||
|
||
# Note: the current result listed for this is not what the original one was,
|
||
# but the original bug was JavaScript injection, which is fixed in any case.
|
||
# It's not clear that the original result listed was any more correct than the
|
||
# current one. Original result:
|
||
# <p>{{{|
|
||
# </p>
|
||
# <li class="||">
|
||
# }}}blah" onmouseover="alert('hello world');" align="left"<b>MOVE MOUSE CURSOR OVER HERE</b>
|
||
!!test
|
||
Fuzz testing: Parser25 (T8055)
|
||
!! wikitext
|
||
{{{
|
||
|
|
||
<LI CLASS=||
|
||
>
|
||
}}}blah" onmouseover="alert('hello world');" align="left"'''MOVE MOUSE CURSOR OVER HERE
|
||
!! html/php
|
||
<p><LI CLASS=blah" onmouseover="alert('hello world');" align="left"<b>MOVE MOUSE CURSOR OVER HERE</b>
|
||
</p>
|
||
!! html/parsoid
|
||
<span about="#mwt1" typeof="mw:Param" data-parsoid='{"pi":[[{"k":"1"},{"k":"2"},{"k":"3"}]]}' data-mw='{"parts":[{"templatearg":{"target":{"wt":"\n"},"params":{"1":{"wt":" \n<LI CLASS="},"2":{"wt":""},"3":{"wt":"\n >\n"}},"i":0}},"blah\" onmouseover=\"alert('hello world');\" align=\"left\"'''MOVE MOUSE CURSOR OVER HERE"]}'>
|
||
</span><p about="#mwt1"><LI CLASS=blah" onmouseover="alert('hello world');" align="left"<b>MOVE MOUSE CURSOR OVER HERE</b></p>
|
||
!! end
|
||
|
||
!!test
|
||
Fuzz testing: URL adjacent extension (with space, clean)
|
||
!! wikitext
|
||
http://example.com <nowiki>junk</nowiki>
|
||
!! html/php
|
||
<p><a rel="nofollow" class="external free" href="http://example.com">http://example.com</a> junk
|
||
</p>
|
||
!! html/parsoid
|
||
<p><a rel="mw:ExtLink" href="http://example.com" class="external free" data-parsoid='{"stx":"url"}'>http://example.com</a> <span typeof="mw:Nowiki">junk</span></p>
|
||
!! end
|
||
|
||
!!test
|
||
Fuzz testing: URL adjacent extension (no space, dirty; nowiki)
|
||
!! wikitext
|
||
http://example.com<nowiki>junk</nowiki>
|
||
!! html/php
|
||
<p><a rel="nofollow" class="external free" href="http://example.com">http://example.com</a>junk
|
||
</p>
|
||
!! html/parsoid
|
||
<p><a rel="mw:ExtLink" href="http://example.com" class="external free" data-parsoid='{"stx":"url"}'>http://example.com</a><span typeof="mw:Nowiki">junk</span></p>
|
||
!! end
|
||
|
||
!! test
|
||
Fuzz testing: URL adjacent extension (no space, dirty; pre)
|
||
!! wikitext
|
||
http://example.com<pre>junk</pre>
|
||
!! html/php
|
||
<p><a rel="nofollow" class="external free" href="http://example.com">http://example.com</a></p><pre>junk</pre>
|
||
!! html/parsoid
|
||
<p><a rel="mw:ExtLink" href="http://example.com" class="external free" data-parsoid='{"stx":"url"}'>http://example.com</a></p><pre typeof="mw:Extension/pre" about="#mwt2" data-mw='{"name":"pre","attrs":{},"body":{"extsrc":"junk"}}'>junk</pre>
|
||
!! end
|
||
|
||
# Parsoid will emit the newline literally in wt2wt; see next test case.
|
||
!! test
|
||
Fuzz testing: encoded newline in generated HTML replacements (T8577)
|
||
!! options
|
||
parsoid=wt2html
|
||
!! wikitext
|
||
<pre dir=" "></pre>
|
||
!! html/php
|
||
<pre dir=" "></pre>
|
||
!! html/parsoid
|
||
<pre dir="
|
||
" typeof="mw:Extension/pre" about="#mwt2" data-mw='{"name":"pre","attrs":{"dir":""},"body":{"extsrc":""}}'></pre>
|
||
!! end
|
||
|
||
!! test
|
||
Fuzz testing: encoded newline in generated HTML replacements, html2wt (T8577)
|
||
!! options
|
||
parsoid=html2wt
|
||
!! html/parsoid
|
||
<pre typeof="mw:Extension/pre" about="#mwt2" dir="
|
||
" data-mw='{"name":"pre","attrs":{"dir":"\n"},"body":{"extsrc":""}}'></pre>
|
||
!! wikitext
|
||
<pre dir="
|
||
"></pre>
|
||
!! html/php
|
||
<pre dir=""></pre>
|
||
!! end
|
||
|
||
!! test
|
||
Templates in extension attributes are not expanded
|
||
!! wikitext
|
||
<pre dir="{{1x|ltr}}"></pre>
|
||
!! html/php
|
||
<pre dir="{{1x|ltr}}"></pre>
|
||
!! html/parsoid
|
||
<pre dir="{{1x|ltr}}" typeof="mw:Extension/pre" about="#mwt2" data-mw='{"name":"pre","attrs":{"dir":"{{1x|ltr}}"},"body":{"extsrc":""}}'></pre>
|
||
!! end
|
||
|
||
!! test
|
||
Parsing optional HTML elements (T8171)
|
||
!! options
|
||
!! wikitext
|
||
<table>
|
||
<tr>
|
||
<td> Some tabular data</td>
|
||
<td> More tabular data ...
|
||
<td> And yet som tabular data</td>
|
||
</tr>
|
||
</table>
|
||
!! html
|
||
<table>
|
||
<tbody><tr>
|
||
<td> Some tabular data</td>
|
||
<td> More tabular data ...
|
||
</td><td> And yet som tabular data</td>
|
||
</tr>
|
||
</tbody></table>
|
||
!! end
|
||
|
||
!! test
|
||
Correct handling of <td>, <tr> (T8171)
|
||
!! options
|
||
!! wikitext
|
||
<table>
|
||
<tr>
|
||
<td> Some tabular data</td>
|
||
<td> More tabular data ...</td>
|
||
<td> And yet som tabular data</td>
|
||
</tr>
|
||
</table>
|
||
!! html
|
||
<table>
|
||
<tbody><tr>
|
||
<td> Some tabular data</td>
|
||
<td> More tabular data ...</td>
|
||
<td> And yet som tabular data</td>
|
||
</tr>
|
||
</tbody></table>
|
||
!! end
|
||
|
||
|
||
!! test
|
||
Parsing crashing regression (fr:JavaScript)
|
||
!! wikitext
|
||
</body></x>
|
||
!! html
|
||
<p></body></x>
|
||
</p>
|
||
!! end
|
||
|
||
!! test
|
||
Inline wiki vs wiki block nesting
|
||
!! wikitext
|
||
'''Bold paragraph
|
||
|
||
New wiki paragraph
|
||
!! html
|
||
<p><b>Bold paragraph</b>
|
||
</p><p>New wiki paragraph
|
||
</p>
|
||
!! end
|
||
|
||
# FIXME: The current php output is documented
|
||
# and desired output is the parsoid target.
|
||
!! test
|
||
Inline HTML vs wiki block nesting
|
||
!! wikitext
|
||
<b>Bold paragraph
|
||
|
||
New wiki paragraph
|
||
!! html/php
|
||
<p><b>Bold paragraph
|
||
</b></p><p><b>New wiki paragraph
|
||
</b></p>
|
||
!! html/parsoid
|
||
<p><b>Bold paragraph</b>
|
||
</p><p>New wiki paragraph
|
||
</p>
|
||
!! end
|
||
|
||
# Original result was this:
|
||
# <p><b>bold</b><b>bold<i>bolditalics</i></b>
|
||
# </p>
|
||
# While that might be marginally more intuitive, maybe, the six-apostrophe
|
||
# construct is clearly pathological and the result stated here (which is what
|
||
# the parser actually does) is about as reasonable as anything.
|
||
!!test
|
||
Mixing markup for italics and bold
|
||
!! options
|
||
!! wikitext
|
||
'''bold''''''bold''bolditalics'''''
|
||
!! html
|
||
<p>'<i>bold'</i><b>bold<i>bolditalics</i></b>
|
||
</p>
|
||
!! end
|
||
|
||
|
||
!! article
|
||
Xyzzyx
|
||
!! text
|
||
Article for special page transclusion test
|
||
!! endarticle
|
||
|
||
!! test
|
||
Special page transclusion
|
||
!! wikitext
|
||
{{Special:Prefixindex/Xyzzyx}}
|
||
!! html/php
|
||
<ul class="mw-prefixindex-list"><li><a href="/wiki/Xyzzyx" title="Xyzzyx">Xyzzyx</a></li>
|
||
</ul>
|
||
!! html/parsoid+integrated
|
||
<ul class="mw-prefixindex-list" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"Special:Prefixindex/Xyzzyx","href":"./Special:PrefixIndex/Xyzzyx"},"params":{},"i":0}}]}'>
|
||
<li><a href="/wiki/Xyzzyx" title="Xyzzyx">Xyzzyx</a></li>
|
||
</ul>
|
||
!! end
|
||
|
||
!! test
|
||
Special page transclusion twice (T7021)
|
||
!! wikitext
|
||
{{Special:Prefixindex/Xyzzyx}}
|
||
{{Special:Prefixindex/Xyzzyx}}
|
||
!! html/php
|
||
<ul class="mw-prefixindex-list"><li><a href="/wiki/Xyzzyx" title="Xyzzyx">Xyzzyx</a></li>
|
||
</ul>
|
||
<ul class="mw-prefixindex-list"><li><a href="/wiki/Xyzzyx" title="Xyzzyx">Xyzzyx</a></li>
|
||
</ul>
|
||
!! html/parsoid+integrated
|
||
<ul class="mw-prefixindex-list" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"Special:Prefixindex/Xyzzyx","href":"./Special:PrefixIndex/Xyzzyx"},"params":{},"i":0}}]}'>
|
||
<li><a href="/wiki/Xyzzyx" title="Xyzzyx">Xyzzyx</a></li>
|
||
</ul>
|
||
<ul class="mw-prefixindex-list" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"Special:Prefixindex/Xyzzyx","href":"./Special:PrefixIndex/Xyzzyx"},"params":{},"i":0}}]}'>
|
||
<li><a href="/wiki/Xyzzyx" title="Xyzzyx">Xyzzyx</a></li>
|
||
</ul>
|
||
!! end
|
||
|
||
!! test
|
||
Transclusion of default MediaWiki message
|
||
!! wikitext
|
||
{{MediaWiki:Mainpage}}
|
||
!! html/php
|
||
<p>Main Page
|
||
</p>
|
||
!! html/parsoid+integrated
|
||
<p><span about="#mwt1" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"MediaWiki:Mainpage","href":"./MediaWiki:Mainpage"},"params":{},"i":0}}]}'>Main Page</span></p>
|
||
!! end
|
||
|
||
!! test
|
||
Transclusion of nonexistent MediaWiki message
|
||
!! wikitext
|
||
{{MediaWiki:Mainpagexxx}}
|
||
!! html/php
|
||
<p><a href="/index.php?title=MediaWiki:Mainpagexxx&action=edit&redlink=1" class="new" title="MediaWiki:Mainpagexxx (page does not exist)">MediaWiki:Mainpagexxx</a>
|
||
</p>
|
||
!! html/parsoid
|
||
<p><a rel="mw:WikiLink" href="./MediaWiki:Mainpagexxx?action=edit&redlink=1" title="MediaWiki:Mainpagexxx" about="#mwt1" typeof="mw:Transclusion mw:LocalizedAttrs" class="new" data-parsoid='{"stx":"simple","a":{"href":"./MediaWiki:Mainpagexxx"},"sa":{"href":"MediaWiki:Mainpagexxx"},"pi":[[]]}' data-mw='{"parts":[{"template":{"target":{"wt":"MediaWiki:Mainpagexxx","href":"./MediaWiki:Mainpagexxx"},"params":{},"i":0}}]}' data-mw-i18n='{"title":{"lang":"x-page","key":"red-link-title","params":["MediaWiki:Mainpagexxx"]}}'>MediaWiki:Mainpagexxx</a></p>
|
||
!! end
|
||
|
||
!! test
|
||
Transclusion of MediaWiki message with underscore
|
||
!! wikitext
|
||
{{MediaWiki:history_short}}
|
||
!! html/php
|
||
<p>History
|
||
</p>
|
||
!! html/parsoid+integrated
|
||
<p><span about="#mwt1" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"MediaWiki:history_short","href":"./MediaWiki:History_short"},"params":{},"i":0}}]}'>History</span></p>
|
||
!! end
|
||
|
||
!! test
|
||
Transclusion of MediaWiki message with space
|
||
!! wikitext
|
||
{{MediaWiki:history short}}
|
||
!! html/php
|
||
<p>History
|
||
</p>
|
||
!! html/parsoid+integrated
|
||
<p><span about="#mwt1" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"MediaWiki:history short","href":"./MediaWiki:History_short"},"params":{},"i":0}}]}'>History</span></p>
|
||
!! end
|
||
|
||
!! test
|
||
Invalid header with following text
|
||
!! wikitext
|
||
= x = y
|
||
!! html
|
||
<p>= x = y
|
||
</p>
|
||
!! 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 <nowiki> heading (section 1)
|
||
!! options
|
||
section=1
|
||
!! wikitext
|
||
==a==
|
||
==bogus== <nowiki>not a legal section</nowiki>
|
||
==b==
|
||
!! html/php
|
||
==a==
|
||
==bogus== <nowiki>not a legal section</nowiki>
|
||
!! end
|
||
|
||
!! test
|
||
Section extraction test with bogus <nowiki> heading (section 2)
|
||
!! options
|
||
section=2
|
||
!! wikitext
|
||
==a==
|
||
==bogus== <nowiki>not a legal section</nowiki>
|
||
==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
|
||
<h2>unmarked</h2>
|
||
unmarked
|
||
==1==
|
||
one
|
||
==2==
|
||
two
|
||
!! html/php
|
||
==1==
|
||
one
|
||
!! end
|
||
|
||
!! test
|
||
Section extraction, mixed wiki and html (section 2)
|
||
!! options
|
||
section=2
|
||
!! wikitext
|
||
<h2>unmarked</h2>
|
||
unmarked
|
||
==1==
|
||
one
|
||
==2==
|
||
two
|
||
!! html/php
|
||
==2==
|
||
two
|
||
!! end
|
||
|
||
|
||
# Formerly testing for T5342
|
||
!! test
|
||
Section extraction, heading surrounded by <noinclude>
|
||
!! options
|
||
section=1
|
||
!! wikitext
|
||
<noinclude>==unmarked==</noinclude>
|
||
==marked==
|
||
!! html/php
|
||
==marked==
|
||
!!end
|
||
|
||
# Test behavior of T21910
|
||
!! test
|
||
Sectiion with all-equals
|
||
!! options
|
||
section=2
|
||
!! wikitext
|
||
===
|
||
The line above must have a trailing space
|
||
=== <!--
|
||
--> <!-- -->
|
||
But just in case it doesn't...
|
||
!! html/php
|
||
=== <!--
|
||
--> <!-- -->
|
||
But just in case it doesn't...
|
||
!! end
|
||
|
||
!! test
|
||
Section replacement test (section 0)
|
||
!! options
|
||
replace=0,"xxx"
|
||
!! wikitext
|
||
start
|
||
==a==
|
||
===aa===
|
||
====aaa====
|
||
==b==
|
||
===ba===
|
||
===bb===
|
||
====bba====
|
||
===bc===
|
||
==c==
|
||
===ca===
|
||
!! html/php
|
||
xxx
|
||
|
||
==a==
|
||
===aa===
|
||
====aaa====
|
||
==b==
|
||
===ba===
|
||
===bb===
|
||
====bba====
|
||
===bc===
|
||
==c==
|
||
===ca===
|
||
!! end
|
||
|
||
!! test
|
||
Section replacement test (section 1)
|
||
!! options
|
||
replace=1,"xxx"
|
||
!! wikitext
|
||
start
|
||
==a==
|
||
===aa===
|
||
====aaa====
|
||
==b==
|
||
===ba===
|
||
===bb===
|
||
====bba====
|
||
===bc===
|
||
==c==
|
||
===ca===
|
||
!! html/php
|
||
start
|
||
xxx
|
||
|
||
==b==
|
||
===ba===
|
||
===bb===
|
||
====bba====
|
||
===bc===
|
||
==c==
|
||
===ca===
|
||
!! end
|
||
|
||
!! test
|
||
Section replacement test (section 2)
|
||
!! options
|
||
replace=2,"xxx"
|
||
!! wikitext
|
||
start
|
||
==a==
|
||
===aa===
|
||
====aaa====
|
||
==b==
|
||
===ba===
|
||
===bb===
|
||
====bba====
|
||
===bc===
|
||
==c==
|
||
===ca===
|
||
!! html/php
|
||
start
|
||
==a==
|
||
xxx
|
||
|
||
==b==
|
||
===ba===
|
||
===bb===
|
||
====bba====
|
||
===bc===
|
||
==c==
|
||
===ca===
|
||
!! end
|
||
|
||
!! test
|
||
Section replacement test (section 3)
|
||
!! options
|
||
replace=3,"xxx"
|
||
!! wikitext
|
||
start
|
||
==a==
|
||
===aa===
|
||
====aaa====
|
||
==b==
|
||
===ba===
|
||
===bb===
|
||
====bba====
|
||
===bc===
|
||
==c==
|
||
===ca===
|
||
!! html/php
|
||
start
|
||
==a==
|
||
===aa===
|
||
xxx
|
||
|
||
==b==
|
||
===ba===
|
||
===bb===
|
||
====bba====
|
||
===bc===
|
||
==c==
|
||
===ca===
|
||
!! end
|
||
|
||
!! test
|
||
Section replacement test (section 4)
|
||
!! options
|
||
replace=4,"xxx"
|
||
!! wikitext
|
||
start
|
||
==a==
|
||
===aa===
|
||
====aaa====
|
||
==b==
|
||
===ba===
|
||
===bb===
|
||
====bba====
|
||
===bc===
|
||
==c==
|
||
===ca===
|
||
!! html/php
|
||
start
|
||
==a==
|
||
===aa===
|
||
====aaa====
|
||
xxx
|
||
|
||
==c==
|
||
===ca===
|
||
!! end
|
||
|
||
!! test
|
||
Section replacement test (section 5)
|
||
!! options
|
||
replace=5,"xxx"
|
||
!! wikitext
|
||
start
|
||
==a==
|
||
===aa===
|
||
====aaa====
|
||
==b==
|
||
===ba===
|
||
===bb===
|
||
====bba====
|
||
===bc===
|
||
==c==
|
||
===ca===
|
||
!! html/php
|
||
start
|
||
==a==
|
||
===aa===
|
||
====aaa====
|
||
==b==
|
||
xxx
|
||
|
||
===bb===
|
||
====bba====
|
||
===bc===
|
||
==c==
|
||
===ca===
|
||
!! end
|
||
|
||
!! test
|
||
Section replacement test (section 6)
|
||
!! options
|
||
replace=6,"xxx"
|
||
!! wikitext
|
||
start
|
||
==a==
|
||
===aa===
|
||
====aaa====
|
||
==b==
|
||
===ba===
|
||
===bb===
|
||
====bba====
|
||
===bc===
|
||
==c==
|
||
===ca===
|
||
!! html/php
|
||
start
|
||
==a==
|
||
===aa===
|
||
====aaa====
|
||
==b==
|
||
===ba===
|
||
xxx
|
||
|
||
===bc===
|
||
==c==
|
||
===ca===
|
||
!! end
|
||
|
||
!! test
|
||
Section replacement test (section 7)
|
||
!! options
|
||
replace=7,"xxx"
|
||
!! wikitext
|
||
start
|
||
==a==
|
||
===aa===
|
||
====aaa====
|
||
==b==
|
||
===ba===
|
||
===bb===
|
||
====bba====
|
||
===bc===
|
||
==c==
|
||
===ca===
|
||
!! html/php
|
||
start
|
||
==a==
|
||
===aa===
|
||
====aaa====
|
||
==b==
|
||
===ba===
|
||
===bb===
|
||
xxx
|
||
|
||
===bc===
|
||
==c==
|
||
===ca===
|
||
!! end
|
||
|
||
!! test
|
||
Section replacement test (section 8)
|
||
!! options
|
||
replace=8,"xxx"
|
||
!! wikitext
|
||
start
|
||
==a==
|
||
===aa===
|
||
====aaa====
|
||
==b==
|
||
===ba===
|
||
===bb===
|
||
====bba====
|
||
===bc===
|
||
==c==
|
||
===ca===
|
||
!! html/php
|
||
start
|
||
==a==
|
||
===aa===
|
||
====aaa====
|
||
==b==
|
||
===ba===
|
||
===bb===
|
||
====bba====
|
||
xxx
|
||
|
||
==c==
|
||
===ca===
|
||
!!end
|
||
|
||
!! test
|
||
Section replacement test (section 9)
|
||
!! options
|
||
replace=9,"xxx"
|
||
!! wikitext
|
||
start
|
||
==a==
|
||
===aa===
|
||
====aaa====
|
||
==b==
|
||
===ba===
|
||
===bb===
|
||
====bba====
|
||
===bc===
|
||
==c==
|
||
===ca===
|
||
!! html/php
|
||
start
|
||
==a==
|
||
===aa===
|
||
====aaa====
|
||
==b==
|
||
===ba===
|
||
===bb===
|
||
====bba====
|
||
===bc===
|
||
xxx
|
||
!! end
|
||
|
||
!! test
|
||
Section replacement test (section 10)
|
||
!! options
|
||
replace=10,"xxx"
|
||
!! wikitext
|
||
start
|
||
==a==
|
||
===aa===
|
||
====aaa====
|
||
==b==
|
||
===ba===
|
||
===bb===
|
||
====bba====
|
||
===bc===
|
||
==c==
|
||
===ca===
|
||
!! html/php
|
||
start
|
||
==a==
|
||
===aa===
|
||
====aaa====
|
||
==b==
|
||
===ba===
|
||
===bb===
|
||
====bba====
|
||
===bc===
|
||
==c==
|
||
xxx
|
||
!! end
|
||
|
||
!! test
|
||
Section replacement test with initial whitespace (T15728)
|
||
!! options
|
||
replace=2,"xxx"
|
||
!! wikitext
|
||
Preformatted initial line
|
||
==a==
|
||
===a===
|
||
!! html/php
|
||
Preformatted initial line
|
||
==a==
|
||
xxx
|
||
!! end
|
||
|
||
|
||
!! test
|
||
Section extraction, heading followed by pre with 20 spaces (T8398)
|
||
!! options
|
||
section=1
|
||
!! wikitext
|
||
==a==
|
||
a
|
||
!! html/php
|
||
==a==
|
||
a
|
||
!! end
|
||
|
||
!! test
|
||
Section extraction, heading followed by pre with 19 spaces (T8398 check)
|
||
!! options
|
||
section=1
|
||
!! wikitext
|
||
==a==
|
||
a
|
||
!! html/php
|
||
==a==
|
||
a
|
||
!! end
|
||
|
||
|
||
!! test
|
||
Section extraction, <pre> around bogus header (T12309)
|
||
!! options
|
||
section=2
|
||
!! wikitext
|
||
== Section One ==
|
||
<pre>
|
||
=======
|
||
</pre>
|
||
|
||
== Section Two ==
|
||
stuff
|
||
!! html/php
|
||
== Section Two ==
|
||
stuff
|
||
!! end
|
||
|
||
!! test
|
||
Section replacement, <pre> around bogus header (T12309)
|
||
!! options
|
||
replace=2,"xxx"
|
||
!! wikitext
|
||
== Section One ==
|
||
<pre>
|
||
=======
|
||
</pre>
|
||
|
||
== Section Two ==
|
||
stuff
|
||
!! html/php
|
||
== Section One ==
|
||
<pre>
|
||
=======
|
||
</pre>
|
||
|
||
xxx
|
||
!! end
|
||
|
||
!! test
|
||
Handling of 
 in URLs
|
||
!! wikitext
|
||
*irc://
a
|
||
!! html/php
|
||
<ul><li><a rel="nofollow" class="external free" href="irc://%0Aa">irc://%0Aa</a></li></ul>
|
||
!! html/parsoid
|
||
<ul><li><a rel="mw:ExtLink" href="irc://%0Aa" class="external free" data-parsoid='{"stx":"url","a":{"href":"irc://%0Aa"},"sa":{"href":"irc://&#x0A;a"}}'>irc://%0Aa</a></li></ul>
|
||
!! end
|
||
|
||
!! test
|
||
Handling of %0A in URLs
|
||
!! wikitext
|
||
*irc://%0Aa
|
||
!! html/php
|
||
<ul><li><a rel="nofollow" class="external free" href="irc://%0Aa">irc://%0Aa</a></li></ul>
|
||
!! html/parsoid
|
||
<ul><li><a rel="mw:ExtLink" href="irc://%0Aa" class="external free">irc://%0Aa</a></li></ul>
|
||
!! 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
|
||
<p><b><i></i></b></p>
|
||
!! end
|
||
|
||
# same html as previous, but wikitext adjusted to match parsoid html2wt
|
||
# note that wt2html will put the <i> before the <b>
|
||
!! test
|
||
5 quotes, code coverage +1 line (1)
|
||
!! options
|
||
parsoid=html2wt
|
||
!! html/parsoid
|
||
<p><b><i></i></b></p>
|
||
!! wikitext
|
||
!! end
|
||
|
||
# same as previous, just swapping the <i> and <b>
|
||
!! test
|
||
5 quotes, code coverage +1 line (2)
|
||
!! options
|
||
parsoid=html2wt
|
||
!! html/parsoid
|
||
<p><i><b></b></i></p>
|
||
!! wikitext
|
||
!! end
|
||
|
||
!! test
|
||
Special:Search page linking.
|
||
!! wikitext
|
||
{{Special:search}}
|
||
!! html/php
|
||
<p><a href="/wiki/Special:Search" title="Special:Search">Special:Search</a>
|
||
</p>
|
||
!! html/parsoid+integrated
|
||
<p><a href="/wiki/Special:Search" title="Special:Search" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"Special:search","href":"./Special:Search"},"params":{},"i":0}}]}'>Special:Search</a></p>
|
||
!! 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
|
||
<p>| 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
|
||
</p>
|
||
!! html/parsoid
|
||
<p><span about="#mwt1" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"!","function":"!"},"params":{},"i":0}}]}'>|</span> is a magic word there and <span about="#mwt2" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"!","function":"!"},"params":{},"i":0}}]}'>|</span> is still a magic word here
|
||
| is not a magic word here but <span about="#mwt3" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"!","function":"!"},"params":{},"i":0}}]}'>|</span> is still a magic word here</p>
|
||
!! end
|
||
|
||
!! test
|
||
Single {{!}} in table cell
|
||
!! wikitext
|
||
{|
|
||
| colspan="1" |foo {{!}} bar
|
||
|}
|
||
!! html/php
|
||
<table>
|
||
<tbody><tr>
|
||
<td colspan="1">foo | bar
|
||
</td></tr></tbody></table>
|
||
!! html/parsoid
|
||
<table>
|
||
<tbody><tr><td colspan="1">foo <span about="#mwt2" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"!","function":"!"},"params":{},"i":0}}]}'>|</span> bar</td></tr>
|
||
</tbody></table>
|
||
!! end
|
||
|
||
!! article
|
||
Template:T290526
|
||
!! text
|
||
Main Page{{!}}Something else
|
||
!! endarticle
|
||
|
||
!! test
|
||
Using {{!}} in wikilinks (T290526)
|
||
!! wikitext
|
||
[[Main Page{{!}}Something else]]
|
||
|
||
[[{{T290526}}]]
|
||
!! html
|
||
<p><a href="/wiki/Main_Page" title="Main Page">Something else</a>
|
||
</p><p><a href="/wiki/Main_Page" title="Main Page">Something else</a>
|
||
</p>
|
||
!! end
|
||
|
||
!! test
|
||
Using {{!}} in template arguments (T290526)
|
||
!! wikitext
|
||
{{1x|Main Page{{!}}Something else}}
|
||
|
||
{{1x|{{T290526}}}}
|
||
!! html/php
|
||
<p>Main Page|Something else
|
||
</p><p>Main Page|Something else
|
||
</p>
|
||
!! html/parsoid
|
||
<p><span about="#mwt1" typeof="mw:Transclusion" data-parsoid='{"pi":[[{"k":"1"}]]}' data-mw='{"parts":[{"template":{"target":{"wt":"1x","href":"./Template:1x"},"params":{"1":{"wt":"Main Page{{!}}Something else"}},"i":0}}]}'>Main Page|Something else</span></p>
|
||
|
||
<p><span about="#mwt3" typeof="mw:Transclusion" data-parsoid='{"pi":[[{"k":"1"}]]}' data-mw='{"parts":[{"template":{"target":{"wt":"1x","href":"./Template:1x"},"params":{"1":{"wt":"{{T290526}}"}},"i":0}}]}'>Main Page|Something else</span></p>
|
||
!! end
|
||
|
||
# wt2wt,html2wt,html2html modes will add <nowiki> around the {{ }} in
|
||
# the last line
|
||
!! test
|
||
Using {{!}} in template arguments, part 2 (T290526)
|
||
!! options
|
||
parsoid=wt2html
|
||
!! wikitext
|
||
{{ Main Page|Something else }}
|
||
|
||
{{ {{T290526}} }}
|
||
!! html/php
|
||
<p><a href="/index.php?title=Template:Main_Page&action=edit&redlink=1" class="new" title="Template:Main Page (page does not exist)">Template:Main Page</a>
|
||
</p><p>{{ Main Page|Something else }}
|
||
</p>
|
||
!! html/parsoid
|
||
<p><a rel="mw:WikiLink" href="./Template:Main_Page?action=edit&redlink=1" title="Template:Main Page" about="#mwt1" typeof="mw:Transclusion mw:LocalizedAttrs" class="new" data-parsoid='{"stx":"simple","a":{"href":"./Template:Main_Page"},"sa":{"href":"Template:Main_Page"},"pi":[[{"k":"1"}]]}' data-mw='{"parts":[{"template":{"target":{"wt":"Main Page","href":"./Template:Main_Page"},"params":{"1":{"wt":"Something else "}},"i":0}}]}' data-mw-i18n='{"title":{"lang":"x-page","key":"red-link-title","params":["Template:Main Page"]}}'>Template:Main_Page</a></p>
|
||
|
||
<p>{{ <span about="#mwt5" typeof="mw:Transclusion" data-parsoid='{"pi":[[]]}' data-mw='{"parts":[{"template":{"target":{"wt":"T290526","href":"./Template:T290526"},"params":{},"i":0}}]}'>Main Page|Something else</span> }}</p>
|
||
!! 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/php
|
||
<ul><li>Parser test</li>
|
||
<li>Parser_test</li>
|
||
<li>Parser test</li>
|
||
<li>Parser_test</li>
|
||
<li>Parser test</li>
|
||
<li>Parser_test</li>
|
||
<li>Parser test</li>
|
||
<li>Parser_test</li>
|
||
<li>Parser test</li>
|
||
<li>Parser_test</li>
|
||
<li>Talk:Parser test</li>
|
||
<li>Talk:Parser_test</li>
|
||
<li>Parser test</li>
|
||
<li>Parser_test</li>
|
||
<li class="mw-empty-elt"></li>
|
||
<li class="mw-empty-elt"></li>
|
||
<li>0</li>
|
||
<li>Talk</li>
|
||
<li>Talk</li>
|
||
<li class="mw-empty-elt"></li>
|
||
<li class="mw-empty-elt"></li>
|
||
<li><a href="/index.php?title=Template:Dynamic&action=edit&redlink=1" class="new" title="Template:Dynamic (page does not exist)">Template:Dynamic</a></li></ul>
|
||
!! html/parsoid
|
||
<ul><li><span about="#mwt1" typeof="mw:Transclusion" data-parsoid='{"pi":[[]]}' data-mw='{"parts":[{"template":{"target":{"wt":"PAGENAME","function":"pagename"},"params":{},"i":0}}]}'>Parser test</span></li>
|
||
<li><span about="#mwt2" typeof="mw:Transclusion" data-parsoid='{"pi":[[]]}' data-mw='{"parts":[{"template":{"target":{"wt":"PAGENAMEE","function":"pagenamee"},"params":{},"i":0}}]}'></span></li>
|
||
<li><span about="#mwt3" typeof="mw:Transclusion" data-parsoid='{"pi":[[]]}' data-mw='{"parts":[{"template":{"target":{"wt":"FULLPAGENAME","function":"fullpagename"},"params":{},"i":0}}]}'>Parser test</span></li>
|
||
<li><span about="#mwt4" typeof="mw:Transclusion" data-parsoid='{"pi":[[]]}' data-mw='{"parts":[{"template":{"target":{"wt":"FULLPAGENAMEE","function":"fullpagenamee"},"params":{},"i":0}}]}'>Parser test</span></li>
|
||
<li><span about="#mwt5" typeof="mw:Transclusion" data-parsoid='{"pi":[[]]}' data-mw='{"parts":[{"template":{"target":{"wt":"BASEPAGENAME","function":"basepagename"},"params":{},"i":0}}]}'>Parser function implementation for pf_basepagename missing in Parsoid.</span></li>
|
||
<li><span about="#mwt6" typeof="mw:Transclusion" data-parsoid='{"pi":[[]]}' data-mw='{"parts":[{"template":{"target":{"wt":"BASEPAGENAMEE","function":"basepagenamee"},"params":{},"i":0}}]}'>Parser function implementation for pf_basepagenamee missing in Parsoid.</span></li>
|
||
<li><span about="#mwt7" typeof="mw:Transclusion" data-parsoid='{"pi":[[]]}' data-mw='{"parts":[{"template":{"target":{"wt":"SUBPAGENAME","function":"subpagename"},"params":{},"i":0}}]}'>Parser function implementation for pf_subpagename missing in Parsoid.</span></li>
|
||
<li><span about="#mwt8" typeof="mw:Transclusion" data-parsoid='{"pi":[[]]}' data-mw='{"parts":[{"template":{"target":{"wt":"SUBPAGENAMEE","function":"subpagenamee"},"params":{},"i":0}}]}'>Parser function implementation for pf_subpagenamee missing in Parsoid.</span></li>
|
||
<li><span about="#mwt9" typeof="mw:Transclusion" data-parsoid='{"pi":[[]]}' data-mw='{"parts":[{"template":{"target":{"wt":"ROOTPAGENAME","function":"rootpagename"},"params":{},"i":0}}]}'>Parser function implementation for pf_rootpagename missing in Parsoid.</span></li>
|
||
<li><span about="#mwt10" typeof="mw:Transclusion" data-parsoid='{"pi":[[]]}' data-mw='{"parts":[{"template":{"target":{"wt":"ROOTPAGENAMEE","function":"rootpagenamee"},"params":{},"i":0}}]}'>Parser function implementation for pf_rootpagenamee missing in Parsoid.</span></li>
|
||
<li><span about="#mwt11" typeof="mw:Transclusion" data-parsoid='{"pi":[[]]}' data-mw='{"parts":[{"template":{"target":{"wt":"TALKPAGENAME","function":"talkpagename"},"params":{},"i":0}}]}'>Parser test</span></li>
|
||
<li><span about="#mwt12" typeof="mw:Transclusion" data-parsoid='{"pi":[[]]}' data-mw='{"parts":[{"template":{"target":{"wt":"TALKPAGENAMEE","function":"talkpagenamee"},"params":{},"i":0}}]}'>Parser function implementation for pf_talkpagenamee missing in Parsoid.</span></li>
|
||
<li><span about="#mwt13" typeof="mw:Transclusion" data-parsoid='{"pi":[[]]}' data-mw='{"parts":[{"template":{"target":{"wt":"SUBJECTPAGENAME","function":"subjectpagename"},"params":{},"i":0}}]}'>Parser function implementation for pf_subjectpagename missing in Parsoid.</span></li>
|
||
<li><span about="#mwt14" typeof="mw:Transclusion" data-parsoid='{"pi":[[]]}' data-mw='{"parts":[{"template":{"target":{"wt":"SUBJECTPAGENAMEE","function":"subjectpagenamee"},"params":{},"i":0}}]}'>Parser function implementation for pf_subjectpagenamee missing in Parsoid.</span></li>
|
||
<li><span about="#mwt15" typeof="mw:Transclusion" data-parsoid='{"pi":[[]]}' data-mw='{"parts":[{"template":{"target":{"wt":"NAMESPACEE","function":"namespacee"},"params":{},"i":0}}]}'>Main</span></li>
|
||
<li><span about="#mwt16" typeof="mw:Transclusion" data-parsoid='{"pi":[[]]}' data-mw='{"parts":[{"template":{"target":{"wt":"NAMESPACE","function":"namespace"},"params":{},"i":0}}]}'>Main</span></li>
|
||
<li><span about="#mwt17" typeof="mw:Transclusion" data-parsoid='{"pi":[[]]}' data-mw='{"parts":[{"template":{"target":{"wt":"NAMESPACENUMBER","function":"namespacenumber"},"params":{},"i":0}}]}'>0</span></li>
|
||
<li><span about="#mwt18" typeof="mw:Transclusion" data-parsoid='{"pi":[[]]}' data-mw='{"parts":[{"template":{"target":{"wt":"TALKSPACE","function":"talkspace"},"params":{},"i":0}}]}'>Talk</span></li>
|
||
<li><span about="#mwt19" typeof="mw:Transclusion" data-parsoid='{"pi":[[]]}' data-mw='{"parts":[{"template":{"target":{"wt":"TALKSPACEE","function":"talkspacee"},"params":{},"i":0}}]}'>Parser function implementation for pf_talkspacee missing in Parsoid.</span></li>
|
||
<li><span about="#mwt20" typeof="mw:Transclusion" data-parsoid='{"pi":[[]]}' data-mw='{"parts":[{"template":{"target":{"wt":"SUBJECTSPACE","function":"subjectspace"},"params":{},"i":0}}]}'>Main</span></li>
|
||
<li><span about="#mwt21" typeof="mw:Transclusion" data-parsoid='{"pi":[[]]}' data-mw='{"parts":[{"template":{"target":{"wt":"SUBJECTSPACEE","function":"subjectspacee"},"params":{},"i":0}}]}'>Parser function implementation for pf_subjectspacee missing in Parsoid.</span></li>
|
||
<li><a rel="mw:WikiLink" href="./Template:Dynamic?action=edit&redlink=1" title="Template:Dynamic" about="#mwt22" typeof="mw:Transclusion mw:LocalizedAttrs" class="new" data-parsoid='{"stx":"simple","a":{"href":"./Template:Dynamic"},"sa":{"href":"Template:Dynamic"},"pi":[[{"k":"1"},{"k":"2"},{"k":"3"},{"k":"4"},{"k":"5"},{"k":"6"},{"k":"7"}]]}' data-mw='{"parts":[{"template":{"target":{"wt":"Dynamic","href":"./Template:Dynamic"},"params":{"1":{"wt":"{{NUMBEROFUSERS}}"},"2":{"wt":"{{NUMBEROFPAGES}}"},"3":{"wt":"{{CURRENTVERSION}}"},"4":{"wt":"{{CONTENTLANGUAGE}}"},"5":{"wt":"{{DIRECTIONMARK}}"},"6":{"wt":"{{CURRENTTIMESTAMP}}"},"7":{"wt":"{{NUMBEROFARTICLES}}"}},"i":0}}]}' data-mw-i18n='{"title":{"lang":"x-page","key":"red-link-title","params":["Template:Dynamic"]}}'>Template:Dynamic</a></li></ul>
|
||
!! html/parsoid+integrated
|
||
<ul><li><span about="#mwt1" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"PAGENAME","function":"pagename"},"params":{},"i":0}}]}'>Parser test</span></li>
|
||
<li><span about="#mwt2" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"PAGENAMEE","function":"pagenamee"},"params":{},"i":0}}]}'>Parser_test</span></li>
|
||
<li><span about="#mwt3" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"FULLPAGENAME","function":"fullpagename"},"params":{},"i":0}}]}'>Parser test</span></li>
|
||
<li><span about="#mwt4" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"FULLPAGENAMEE","function":"fullpagenamee"},"params":{},"i":0}}]}'>Parser_test</span></li>
|
||
<li><span about="#mwt5" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"BASEPAGENAME","function":"basepagename"},"params":{},"i":0}}]}'>Parser test</span></li>
|
||
<li><span about="#mwt6" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"BASEPAGENAMEE","function":"basepagenamee"},"params":{},"i":0}}]}'>Parser_test</span></li>
|
||
<li><span about="#mwt7" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"SUBPAGENAME","function":"subpagename"},"params":{},"i":0}}]}'>Parser test</span></li>
|
||
<li><span about="#mwt8" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"SUBPAGENAMEE","function":"subpagenamee"},"params":{},"i":0}}]}'>Parser_test</span></li>
|
||
<li><span about="#mwt9" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"ROOTPAGENAME","function":"rootpagename"},"params":{},"i":0}}]}'>Parser test</span></li>
|
||
<li><span about="#mwt10" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"ROOTPAGENAMEE","function":"rootpagenamee"},"params":{},"i":0}}]}'>Parser_test</span></li>
|
||
<li><span about="#mwt11" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"TALKPAGENAME","function":"talkpagename"},"params":{},"i":0}}]}'>Talk:Parser test</span></li>
|
||
<li><span about="#mwt12" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"TALKPAGENAMEE","function":"talkpagenamee"},"params":{},"i":0}}]}'>Talk:Parser_test</span></li>
|
||
<li><span about="#mwt13" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"SUBJECTPAGENAME","function":"subjectpagename"},"params":{},"i":0}}]}'>Parser test</span></li>
|
||
<li><span about="#mwt14" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"SUBJECTPAGENAMEE","function":"subjectpagenamee"},"params":{},"i":0}}]}'>Parser_test</span></li>
|
||
<li><span about="#mwt15" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"NAMESPACEE","function":"namespacee"},"params":{},"i":0}}]}'></span></li>
|
||
<li><span about="#mwt16" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"NAMESPACE","function":"namespace"},"params":{},"i":0}}]}'></span></li>
|
||
<li><span about="#mwt17" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"NAMESPACENUMBER","function":"namespacenumber"},"params":{},"i":0}}]}'>0</span></li>
|
||
<li><span about="#mwt18" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"TALKSPACE","function":"talkspace"},"params":{},"i":0}}]}'>Talk</span></li>
|
||
<li><span about="#mwt19" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"TALKSPACEE","function":"talkspacee"},"params":{},"i":0}}]}'>Talk</span></li>
|
||
<li><span about="#mwt20" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"SUBJECTSPACE","function":"subjectspace"},"params":{},"i":0}}]}'></span></li>
|
||
<li><span about="#mwt21" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"SUBJECTSPACEE","function":"subjectspacee"},"params":{},"i":0}}]}'></span></li>
|
||
<li><a rel="mw:WikiLink" href="./Template:Dynamic?action=edit&redlink=1" title="Template:Dynamic" about="#mwt22" typeof="mw:Transclusion mw:LocalizedAttrs" class="new" data-parsoid='{"stx":"simple","a":{"href":"./Template:Dynamic"},"sa":{"href":":Template:Dynamic"},"pi":[[{"k":"1"},{"k":"2"},{"k":"3"},{"k":"4"},{"k":"5"},{"k":"6"},{"k":"7"}]]}' data-mw='{"parts":[{"template":{"target":{"wt":"Dynamic","href":"./Template:Dynamic"},"params":{"1":{"wt":"{{NUMBEROFUSERS}}"},"2":{"wt":"{{NUMBEROFPAGES}}"},"3":{"wt":"{{CURRENTVERSION}}"},"4":{"wt":"{{CONTENTLANGUAGE}}"},"5":{"wt":"{{DIRECTIONMARK}}"},"6":{"wt":"{{CURRENTTIMESTAMP}}"},"7":{"wt":"{{NUMBEROFARTICLES}}"}},"i":0}}]}' data-mw-i18n='{"title":{"lang":"x-page","key":"red-link-title","params":["Template:Dynamic"]}}'>Template:Dynamic</a></li></ul>
|
||
!! end
|
||
### Note: Above tests excludes the "{{NUMBEROFADMINS}}" magic word because it generates a MySQL error when included.
|
||
|
||
!! test
|
||
HTML Hex character encoding (spells the word "JavaScript")
|
||
!! options
|
||
parsoid=wt2html,wt2wt,html2html
|
||
!! wikitext
|
||
JavaScript
|
||
!! html/php
|
||
<p>JavaScript
|
||
</p>
|
||
!! html/parsoid
|
||
<p><span typeof="mw:Entity">J</span><span typeof="mw:Entity">a</span><span typeof="mw:Entity">v</span><span typeof="mw:Entity">a</span><span typeof="mw:Entity">S</span><span typeof="mw:Entity">c</span><span typeof="mw:Entity">r</span><span typeof="mw:Entity">i</span><span typeof="mw:Entity">p</span><span typeof="mw:Entity">t</span></p>
|
||
!! end
|
||
|
||
!! test
|
||
HTML Hex character encoding bogus encoding (T28437 regression check)
|
||
!! wikitext
|
||
&#xsee;&#XSEE;
|
||
!! html
|
||
<p>&#xsee;&#XSEE;
|
||
</p>
|
||
!! end
|
||
|
||
!! test
|
||
HTML Hex character encoding mixed case
|
||
!! options
|
||
parsoid=wt2html,wt2wt,html2html
|
||
!! wikitext
|
||
îî
|
||
!! html/php
|
||
<p>îî
|
||
</p>
|
||
!! html/parsoid
|
||
<p><span typeof="mw:Entity">î</span><span typeof="mw:Entity">î</span></p>
|
||
!! end
|
||
|
||
# See: https://www.w3.org/TR/html5/syntax.html#character-references
|
||
# Note that U+000C (form feed) is not a valid XML character, so
|
||
# it is banned even though allowed in HTML5.
|
||
# Note there are also weird legacy numeric entities which are mapped
|
||
# elsewhere; see T113194
|
||
!! test
|
||
Illegal character references (T106578, T113194)
|
||
!! options
|
||
parsoid={ "modes": ["wt2html","html2html"], "normalizePhp": true }
|
||
!! wikitext
|
||
; Null: �
|
||
; FF: 
|
||
; CR: 
|
||
; Control (low): 
|
||
; Control (high):  Ÿ
|
||
; Unsupported legacy: € ‚ ƒ – Ÿ
|
||
; Surrogate: ��
|
||
; Invalid characters:  
|
||
; This is an okay astral character: 💩
|
||
; This is an okay multi-codepoint HTML5 entity: ∾̳
|
||
; This are valid wikitext-specific entities: &רלמ; &رلم;
|
||
; Highest valid characters: 􏿽  
|
||
!! html
|
||
<dl><dt>Null</dt>
|
||
<dd>&#00;</dd>
|
||
<dt>FF</dt>
|
||
<dd>&#xC;</dd>
|
||
<dt>CR</dt>
|
||
<dd>&#xD;</dd>
|
||
<dt>Control (low)</dt>
|
||
<dd>&#8;</dd>
|
||
<dt>Control (high)</dt>
|
||
<dd>&#x7F; &#x9F;</dd>
|
||
<dt>Unsupported legacy</dt>
|
||
<dd>&#128; &#130; &#131; &#150; &#159;</dd>
|
||
<dt>Surrogate</dt>
|
||
<dd>&#xD83D;&#xDCA9;</dd>
|
||
<dt>Invalid characters</dt>
|
||
<dd>&#xfffe; &#xffff;</dd>
|
||
<dt>This is an okay astral character</dt>
|
||
<dd>💩</dd>
|
||
<dt>This is an okay multi-codepoint HTML5 entity</dt>
|
||
<dd>∾̳</dd>
|
||
<dt>This are valid wikitext-specific entities</dt>
|
||
<dd>‏ ‏</dd>
|
||
<dt>Highest valid characters</dt>
|
||
<dd>􏿽  </dd></dl>
|
||
!! end
|
||
|
||
!! test
|
||
Another italics / bold test
|
||
!! options
|
||
parsoid=wt2html
|
||
!! wikitext
|
||
''' ''x'
|
||
!! html/*
|
||
<pre>'<i> </i>x'
|
||
</pre>
|
||
!! end
|
||
|
||
!! test
|
||
dt/dd/dl test
|
||
!! wikitext
|
||
:;;;::
|
||
!! html
|
||
<dl><dd><dl><dt><dl><dt><dl><dt><dl><dd><dl><dd></dd></dl></dd></dl></dt></dl></dt></dl></dt></dl></dd></dl>
|
||
!! end
|
||
|
||
!! test
|
||
[Before] HTML without raw HTML enabled ($wgRawHtml==false)
|
||
!! wikitext
|
||
<html><script>alert(1);</script></html>
|
||
!! html
|
||
<p><html><script>alert(1);</script></html>
|
||
</p>
|
||
!! end
|
||
|
||
!! test
|
||
HTML with raw HTML ($wgRawHtml==true)
|
||
!! options
|
||
wgRawHtml=1
|
||
!! wikitext
|
||
<html><script>alert(1);</script></html>
|
||
!! html/php
|
||
<p><script>alert(1);</script>
|
||
</p>
|
||
!! html/parsoid
|
||
<p><script typeof="mw:Extension/html" about="#mwt3" data-mw='{"name":"html","attrs":{},"body":{"extsrc":"<script>alert(1);</script>"}}'>alert(1);</script></p>
|
||
!! end
|
||
|
||
!! test
|
||
Empty tag w/ raw HTML ($wgRawHtml==true)
|
||
!! options
|
||
wgRawHtml=1
|
||
!! wikitext
|
||
<html />
|
||
!! html/php
|
||
<p class="mw-empty-elt">
|
||
</p>
|
||
!! html/parsoid
|
||
<p><link typeof="mw:Extension/html" about="#mwt2" data-mw='{"name":"html","attrs":{}}'/></p>
|
||
!! end
|
||
|
||
|
||
!! article
|
||
Subpage test
|
||
!! text
|
||
subpage
|
||
!! end
|
||
|
||
!! article
|
||
Subpage test/L1
|
||
!! text
|
||
subpage l1
|
||
!! end
|
||
|
||
!! article
|
||
Subpage test/L1/L2
|
||
!! text
|
||
subpage l2
|
||
!! end
|
||
|
||
!! test
|
||
Parents of subpages, one level up
|
||
!! options
|
||
subpage title=[[Subpage test/L1/L2/L3]]
|
||
!! wikitext
|
||
[[../|L2]]
|
||
!! html/php
|
||
<p><a href="/wiki/Subpage_test/L1/L2" title="Subpage test/L1/L2">L2</a>
|
||
</p>
|
||
!! html/parsoid
|
||
<p><a rel="mw:WikiLink" href="./Subpage_test/L1/L2" title="Subpage test/L1/L2" data-parsoid='{"stx":"piped","a":{"href":"./Subpage_test/L1/L2"},"sa":{"href":"../"}}'>L2</a></p>
|
||
!! end
|
||
|
||
!! test
|
||
Parents of subpages, one level up, not named
|
||
!! options
|
||
subpage title=[[Subpage test/L1/L2/L3]]
|
||
!! wikitext
|
||
[[../]]
|
||
!! html/php
|
||
<p><a href="/wiki/Subpage_test/L1/L2" title="Subpage test/L1/L2">Subpage test/L1/L2</a>
|
||
</p>
|
||
!! html/parsoid
|
||
<p><a rel="mw:WikiLink" href="./Subpage_test/L1/L2" title="Subpage test/L1/L2" data-parsoid='{"stx":"simple","a":{"href":"./Subpage_test/L1/L2"},"sa":{"href":"../"}}'>Subpage test/L1/L2</a></p>
|
||
!! end
|
||
|
||
!! test
|
||
Parents of subpages, two levels up
|
||
!! options
|
||
subpage title=[[Subpage test/L1/L2/L3]]
|
||
!! wikitext
|
||
[[../../|L1]]2
|
||
|
||
[[../../|L1]]l
|
||
!! html/php
|
||
<p><a href="/wiki/Subpage_test/L1" title="Subpage test/L1">L1</a>2
|
||
</p><p><a href="/wiki/Subpage_test/L1" title="Subpage test/L1">L1l</a>
|
||
</p>
|
||
!! html/parsoid
|
||
<p><a rel="mw:WikiLink" href="./Subpage_test/L1" title="Subpage test/L1" data-parsoid='{"stx":"piped","a":{"href":"./Subpage_test/L1"},"sa":{"href":"../../"}}'>L1</a>2</p>
|
||
|
||
<p><a rel="mw:WikiLink" href="./Subpage_test/L1" title="Subpage test/L1" data-parsoid='{"stx":"piped","a":{"href":"./Subpage_test/L1"},"sa":{"href":"../../"},"tail":"l"}'>L1l</a></p>
|
||
!! end
|
||
|
||
!! test
|
||
Parents of subpages, two levels up, without trailing slash or name.
|
||
!! options
|
||
subpage title=[[Subpage test/L1/L2/L3]]
|
||
!! wikitext
|
||
[[../..]]
|
||
!! html
|
||
<p>[[../..]]
|
||
</p>
|
||
!! end
|
||
|
||
!! test
|
||
Parents of subpages, two levels up, with lots of extra trailing slashes.
|
||
!! options
|
||
subpage title=[[Subpage test/L1/L2/L3]]
|
||
!! wikitext
|
||
[[../../////]]
|
||
!! html/php
|
||
<p><a href="/wiki/Subpage_test/L1" title="Subpage test/L1">Subpage test/L1</a>
|
||
</p>
|
||
!! html/parsoid
|
||
<p><a rel="mw:WikiLink" href="./Subpage_test/L1" title="Subpage test/L1" data-parsoid='{"stx":"simple","a":{"href":"./Subpage_test/L1"},"sa":{"href":"../../////"}}'>Subpage test/L1</a></p>
|
||
!! end
|
||
|
||
!! article
|
||
Subpage test/L1/L2/L3Sibling
|
||
!! text
|
||
Sibling article
|
||
!! endarticle
|
||
|
||
!! test
|
||
Transclusion of a sibling page (one level up)
|
||
!! options
|
||
subpage title=[[Subpage test/L1/L2/L3]]
|
||
!! wikitext
|
||
{{../L3Sibling}}
|
||
!! html
|
||
<p>Sibling article
|
||
</p>
|
||
!! end
|
||
|
||
!! test
|
||
Transclusion of a child page
|
||
!! options
|
||
subpage title=[[Subpage test/L1/L2]]
|
||
!! wikitext
|
||
{{/L3Sibling}}
|
||
!! html
|
||
<p>Sibling article
|
||
</p>
|
||
!! end
|
||
|
||
# This is wt2html only in Parsoid because we add <nowiki>
|
||
# 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
|
||
<p>{{../../../../More than parent}}
|
||
</p>
|
||
!! html/parsoid
|
||
<p>{{../../../../More than parent}}</p>
|
||
!! end
|
||
|
||
!! test
|
||
Definition list code coverage
|
||
!! options
|
||
parsoid=wt2html,html2html
|
||
!! wikitext
|
||
;title :def
|
||
;title :def
|
||
;title:def
|
||
!! html/php
|
||
<dl><dt>title</dt>
|
||
<dd>def</dd>
|
||
<dt>title</dt>
|
||
<dd>def</dd>
|
||
<dt>title</dt>
|
||
<dd>def</dd></dl>
|
||
!! html/parsoid
|
||
<dl><dt>title </dt><dd>def</dd>
|
||
<dt>title </dt><dd>def</dd>
|
||
<dt>title</dt><dd>def</dd></dl>
|
||
!! end
|
||
|
||
!! test
|
||
Don't fall for the self-closing div
|
||
!! wikitext
|
||
<div>hello world</div/>
|
||
!! html
|
||
<div>hello world</div>
|
||
!! end
|
||
|
||
!! test
|
||
MSGNW magic word
|
||
!! wikitext
|
||
{{MSGNW:msg}}
|
||
!! html/php
|
||
<p>[[:Template:Msg]]
|
||
</p>
|
||
!! end
|
||
|
||
!! test
|
||
RAW magic word
|
||
!! wikitext
|
||
{{RAW:QUERTY}}
|
||
!! html/php
|
||
<p><a href="/index.php?title=Template:QUERTY&action=edit&redlink=1" class="new" title="Template:QUERTY (page does not exist)">Template:QUERTY</a>
|
||
</p>
|
||
!! html/parsoid+integrated
|
||
<p><a rel="mw:WikiLink" href="./Template:QUERTY?action=edit&redlink=1" title="Template:QUERTY" typeof="mw:Transclusion mw:LocalizedAttrs" class="new" data-mw='{"parts":[{"template":{"target":{"wt":"RAW:QUERTY","href":"./Template:RAW:QUERTY"},"params":{},"i":0}}]}' data-mw-i18n='{"title":{"lang":"x-page","key":"red-link-title","params":["Template:QUERTY"]}}'>Template:QUERTY</a></p>
|
||
!! end
|
||
|
||
# This isn't needed for XHTML conformance, but would be handy as a fallback security measure
|
||
!! test
|
||
Always escape literal '>' in output, not just after '<'
|
||
!! wikitext
|
||
><>
|
||
!! html
|
||
<p>><>
|
||
</p>
|
||
!! end
|
||
|
||
!! test
|
||
Template caching
|
||
!! wikitext
|
||
{{Test}}
|
||
{{Test}}
|
||
!! html
|
||
<p>This is a test template
|
||
This is a test template
|
||
</p>
|
||
!! end
|
||
|
||
!! test
|
||
anchorencode
|
||
!! config
|
||
wgFragmentMode=[ "html5", "legacy" ]
|
||
!! wikitext
|
||
{{anchorencode:foo bar©#%n}}
|
||
!! html/php
|
||
<p>foo_bar©#%n
|
||
</p>
|
||
!! html/parsoid
|
||
<p><span about="#mwt1" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"anchorencode:foo bar©#%n","function":"anchorencode"},"params":{},"i":0}}]}'>foo_bar©#%n</span></p>
|
||
!! end
|
||
|
||
!! test
|
||
anchorencode (legacy)
|
||
!! config
|
||
wgFragmentMode=[ "legacy" ]
|
||
!! wikitext
|
||
{{anchorencode:foo bar©#%n}}
|
||
!! html/php
|
||
<p>foo_bar.C2.A9.23.25n
|
||
</p>
|
||
!! end
|
||
|
||
!! test
|
||
anchorencode trims spaces
|
||
!! config
|
||
wgFragmentMode=[ "html5", "legacy" ]
|
||
!! wikitext
|
||
{{anchorencode: __pretty__please__}}
|
||
!! html/php
|
||
<p>pretty_please
|
||
</p>
|
||
!! html/parsoid
|
||
<p><span about="#mwt1" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"anchorencode: __pretty__please__","function":"anchorencode"},"params":{},"i":0}}]}'>pretty_please</span></p>
|
||
!! end
|
||
|
||
!! test
|
||
anchorencode deals with links
|
||
!! config
|
||
wgFragmentMode=[ "html5", "legacy" ]
|
||
!! wikitext
|
||
{{anchorencode: [[hello|world]] [[hi]]}}
|
||
!! html/php
|
||
<p>world_hi
|
||
</p>
|
||
!! html/parsoid
|
||
<p><span about="#mwt1" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"anchorencode: [[hello|world]] [[hi]]","function":"anchorencode"},"params":{},"i":0}}]}'>world_hi</span></p>
|
||
!! end
|
||
|
||
!! test
|
||
anchorencode deals with templates
|
||
!! config
|
||
wgFragmentMode=[ "html5", "legacy" ]
|
||
!! wikitext
|
||
{{anchorencode: {{Foo}} x}}
|
||
!! html/php
|
||
<p>FOO_x
|
||
</p>
|
||
!! html/parsoid
|
||
<p><span about="#mwt2" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"anchorencode: {{Foo}} x","function":"anchorencode"},"params":{},"i":0}}]}'>FOO_x</span></p>
|
||
!! end
|
||
|
||
!! test
|
||
anchorencode encodes like the TOC generator: (T20431)
|
||
!! config
|
||
wgFragmentMode=[ "html5", "legacy" ]
|
||
wgParserEnableLegacyHeadingDOM=false
|
||
!! wikitext
|
||
===_ +:.3A%3A _ &&]] x===
|
||
{{anchorencode: _ +:.3A%3A _ &&]] x}}
|
||
|
||
__NOEDITSECTION__
|
||
!! html/php
|
||
<div class="mw-heading mw-heading3"><h3 id="+:.3A%3A_&&]]_x"><span id=".2B:.3A.253A_.26.26.5D.5D_x"></span>_ +:.3A%3A _ &&]] x</h3></div>
|
||
<p>+:.3A%253A_&&]]_x
|
||
</p><p><br />
|
||
</p>
|
||
!! html/parsoid+standalone
|
||
<h3 id="+:.3A%3A_&&]]_x"><span id=".2B:.3A.253A_.26.26.5D.5D_x" typeof="mw:FallbackId"></span>_ +:.3A%3A _ &<span typeof="mw:Entity" data-parsoid='{"src":"&amp;","srcContent":"&"}'>&</span>]] x</h3>
|
||
<p><span about="#mwt1" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"anchorencode: _ +:.3A%3A _ &&amp;]] x","function":"anchorencode"},"params":{},"i":0}}]}'>+:.3A%253A_&&</span><span typeof="mw:Entity" about="#mwt1">]</span><span typeof="mw:Entity" about="#mwt1">]</span><span about="#mwt1">_x</span></p>
|
||
<meta property="mw:PageProp/noeditsection"/>
|
||
!! html/parsoid+integrated
|
||
<h3 id="+:.3A%3A_&&]]_x"><span id=".2B:.3A.253A_.26.26.5D.5D_x" typeof="mw:FallbackId"></span>_ +:.3A%3A _ &<span typeof="mw:Entity" data-parsoid='{"src":"&amp;","srcContent":"&"}'>&</span>]] x</h3>
|
||
<p><span about="#mwt1" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"anchorencode: _ +:.3A%3A _ &&amp;]] x","function":"anchorencode"},"params":{},"i":0}}]}'>+:.3A%253A_</span><span typeof="mw:Entity" about="#mwt1">&</span><span typeof="mw:Entity" about="#mwt1">&</span><span typeof="mw:Entity" about="#mwt1">]</span><span typeof="mw:Entity" about="#mwt1">]</span><span about="#mwt1">_x</span></p>
|
||
<meta property="mw:PageProp/noeditsection"/>
|
||
!! end
|
||
|
||
!! test
|
||
anchorencode encodes like the TOC generator: (T20431) (legacy)
|
||
!! config
|
||
wgFragmentMode=[ "legacy" ]
|
||
wgParserEnableLegacyHeadingDOM=false
|
||
!! wikitext
|
||
===_ +:.3A%3A&&]]===
|
||
{{anchorencode: _ +:.3A%3A&&]] }}
|
||
__NOEDITSECTION__
|
||
!! html/php
|
||
<div class="mw-heading mw-heading3"><h3 id=".2B:.3A.253A.26.26.5D.5D">_ +:.3A%3A&&]]</h3></div>
|
||
<p>.2B:.3A.253A.26.26.5D.5D
|
||
</p>
|
||
!! end
|
||
|
||
!! test
|
||
T8200: blockquotes and paragraph formatting
|
||
!! wikitext
|
||
<blockquote>
|
||
foo
|
||
</blockquote>
|
||
|
||
bar
|
||
|
||
baz
|
||
!! html
|
||
<blockquote>
|
||
<p>foo
|
||
</p>
|
||
</blockquote>
|
||
<p>bar
|
||
</p>
|
||
<pre>baz
|
||
</pre>
|
||
!! end
|
||
|
||
!! test
|
||
T10293: Use of center tag ruins paragraph formatting
|
||
!! wikitext
|
||
<center>
|
||
foo
|
||
</center>
|
||
|
||
bar
|
||
|
||
baz
|
||
!! html
|
||
<center>
|
||
<p>foo
|
||
</p>
|
||
</center>
|
||
<p>bar
|
||
</p>
|
||
<pre>baz
|
||
</pre>
|
||
!! end
|
||
|
||
!!test
|
||
Parsing of overlapping (improperly nested) inline html tags
|
||
!! wikitext
|
||
<span><s>x</span></s>
|
||
!! html
|
||
<p><span><s>x</s></span>
|
||
</p>
|
||
!!end
|
||
|
||
!! test
|
||
T2529: Uncovered bullet
|
||
!! wikitext
|
||
*Foo {{bullet}}
|
||
!! html/php
|
||
<ul><li>Foo</li>
|
||
<li>Bar</li></ul>
|
||
!! html/parsoid
|
||
<ul><li>Foo</li><span about="#mwt1" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"bullet","href":"./Template:Bullet"},"params":{},"i":0}}]}'>
|
||
</span><li about="#mwt1">Bar</li></ul>
|
||
!! end
|
||
|
||
!! test
|
||
T2529: Uncovered bullet in a deeply nested list
|
||
!! wikitext
|
||
*******Foo {{bullet}}
|
||
!! html/php
|
||
<ul><li><ul><li><ul><li><ul><li><ul><li><ul><li><ul><li>Foo</li></ul></li></ul></li></ul></li></ul></li></ul></li></ul></li>
|
||
<li>Bar</li></ul>
|
||
!! html/parsoid
|
||
<ul><li><ul><li><ul><li><ul><li><ul><li><ul><li><ul><li>Foo</li></ul></li></ul></li></ul></li></ul></li></ul></li></ul></li><span about="#mwt1" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"bullet","href":"./Template:Bullet"},"params":{},"i":0}}]}'>
|
||
</span><li about="#mwt1">Bar</li></ul>
|
||
!! end
|
||
|
||
!! test
|
||
T2529: Uncovered table already at line-start
|
||
!! wikitext
|
||
x
|
||
|
||
{{table}}
|
||
y
|
||
!! html/php
|
||
<p>x
|
||
</p>
|
||
<table>
|
||
<tbody><tr>
|
||
<td>1</td>
|
||
<td>2
|
||
</td></tr>
|
||
<tr>
|
||
<td>3</td>
|
||
<td>4
|
||
</td></tr></tbody></table>
|
||
<p>y
|
||
</p>
|
||
!! html/parsoid
|
||
<p>x</p>
|
||
|
||
<table about="#mwt1" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"table","href":"./Template:Table"},"params":{},"i":0}}]}'>
|
||
<tbody><tr><td>1</td><td>2</td></tr>
|
||
<tr>
|
||
<td>3</td><td>4</td></tr>
|
||
</tbody></table>
|
||
<p>y</p>
|
||
!! end
|
||
|
||
!! test
|
||
T2529: Uncovered bullet in parser function result
|
||
!! wikitext
|
||
*Foo{{lc:{{bullet}} }}
|
||
!! html/php
|
||
<ul><li>Foo</li>
|
||
<li>bar</li></ul>
|
||
!! html/parsoid+integrated
|
||
<ul><li>Foo</li><span about="#mwt1" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"lc:{{bullet}} ","function":"lc"},"params":{},"i":0}}]}'>
|
||
</span><li about="#mwt1">bar</li></ul>
|
||
!! end
|
||
|
||
!! test
|
||
T7678: Double-parsed template argument
|
||
!! wikitext
|
||
{{lc:{{{1}}}|hello}}
|
||
!! html
|
||
<p>{{{1}}}
|
||
</p>
|
||
!! end
|
||
|
||
## wt2html only, since the bare {{ will get escaped when serializing
|
||
!! test
|
||
T7678: Double-parsed template invocation
|
||
!! options
|
||
parsoid=wt2html
|
||
!! wikitext
|
||
{{lc:{{paramtest {{!}} param = hello }} }}
|
||
!! html/php
|
||
<p>{{paramtest | param = hello }}
|
||
</p>
|
||
!! html/parsoid+integrated
|
||
<p><span about="#mwt4" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"lc:{{paramtest {{!}} param = hello }} ","function":"lc"},"params":{},"i":0}}]}'>{{paramtest | param = hello }}</span></p>
|
||
!! 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
|
||
<p>Ěščř
|
||
Ěščř
|
||
ěščř
|
||
ěščř
|
||
ěščř
|
||
ěščř
|
||
ĚŠČŘ
|
||
ĚŠČŘ
|
||
</p>
|
||
!! end
|
||
|
||
!! test
|
||
Paragraphs inside divs (no extra line breaks)
|
||
!! wikitext
|
||
<div>Line one
|
||
|
||
Line two</div>
|
||
!! html
|
||
<div>Line one
|
||
Line two</div>
|
||
!! end
|
||
|
||
!! test
|
||
Paragraphs inside divs (extra line break on open)
|
||
!! wikitext
|
||
<div>
|
||
Line one
|
||
|
||
Line two</div>
|
||
!! html
|
||
<div>
|
||
<p>Line one
|
||
</p>
|
||
Line two</div>
|
||
!! end
|
||
|
||
!! test
|
||
Paragraphs inside divs (extra line break on close)
|
||
!! wikitext
|
||
<div>Line one
|
||
|
||
Line two
|
||
</div>
|
||
!! html
|
||
<div>Line one
|
||
<p>Line two
|
||
</p>
|
||
</div>
|
||
!! end
|
||
|
||
!! test
|
||
Paragraphs inside divs (extra line break on open and close)
|
||
!! wikitext
|
||
<div>
|
||
Line one
|
||
|
||
Line two
|
||
</div>
|
||
!! html
|
||
<div>
|
||
<p>Line one
|
||
</p><p>Line two
|
||
</p>
|
||
</div>
|
||
!! end
|
||
|
||
# doBlockLevels screws up this output and Remex cleans up as much as it can.
|
||
!! test
|
||
Nesting tags, paragraphs on lines which begin with <div>
|
||
!! wikitext
|
||
<div></div><strong>A
|
||
B</strong>
|
||
!! html/php
|
||
<div></div><p><strong>A
|
||
</strong></p><strong></strong><p><strong>B</strong>
|
||
</p>
|
||
!! html/parsoid
|
||
<div data-parsoid='{"stx":"html"}'></div><p><strong data-parsoid='{"stx":"html","autoInsertedEnd":true}'>A</strong></p>
|
||
<p><strong data-parsoid='{"stx":"html","autoInsertedStart":true}'>B</strong></p>
|
||
!! end
|
||
|
||
# T8200: <blockquote> should behave like <div> with respect to line breaks
|
||
!! test
|
||
T8200: paragraphs inside blockquotes (no extra line breaks)
|
||
!! wikitext
|
||
<blockquote>Line one
|
||
|
||
Line two</blockquote>
|
||
!! html
|
||
<blockquote><p>Line one
|
||
Line two</p></blockquote>
|
||
!! end
|
||
|
||
!! test
|
||
T8200: paragraphs inside blockquotes (extra line break on open)
|
||
!! wikitext
|
||
<blockquote>
|
||
Line one
|
||
|
||
Line two</blockquote>
|
||
!! html
|
||
<blockquote>
|
||
<p>Line one
|
||
</p><p>
|
||
Line two</p></blockquote>
|
||
!! end
|
||
|
||
!! test
|
||
T8200: paragraphs inside blockquotes (extra line break on close)
|
||
!! wikitext
|
||
<blockquote>Line one
|
||
|
||
Line two
|
||
</blockquote>
|
||
!! html
|
||
<blockquote><p>Line one
|
||
</p><p>Line two
|
||
</p>
|
||
</blockquote>
|
||
!! end
|
||
|
||
!! test
|
||
T8200: paragraphs inside blockquotes (extra line break on open and close)
|
||
!! wikitext
|
||
<blockquote>
|
||
Line one
|
||
|
||
Line two
|
||
</blockquote>
|
||
!! html
|
||
<blockquote>
|
||
<p>Line one
|
||
</p><p>Line two
|
||
</p>
|
||
</blockquote>
|
||
!! end
|
||
|
||
## This is a corner case interaction between the paragraph wrapping in the
|
||
## php parser's BlockLevelPass and Remex. `doBlockLevels` has a notion of
|
||
## some tags which close paragraphs (and thus prevent wrapping on their line),
|
||
## of which "div" is one, but do p-wrapping inside them. These are referred
|
||
## to as "never suppressing". Remex, for its part, doesn't traverse into
|
||
## "div"s to p-wrap. Hence, we only get this partial wrapping.
|
||
!! test
|
||
Paragraphs inside blockquotes/divs (no extra line breaks)
|
||
!! wikitext
|
||
<blockquote><div>Line one
|
||
|
||
Line two</div></blockquote>
|
||
!! html
|
||
<blockquote><div>Line one
|
||
Line two</div></blockquote>
|
||
!! end
|
||
|
||
!! test
|
||
Paragraphs inside blockquotes/divs (extra line break on open)
|
||
!! wikitext
|
||
<blockquote><div>
|
||
Line one
|
||
|
||
Line two</div></blockquote>
|
||
!! html
|
||
<blockquote><div>
|
||
<p>Line one
|
||
</p>
|
||
Line two</div></blockquote>
|
||
!! end
|
||
|
||
!! test
|
||
Paragraphs inside blockquotes/divs (extra line break on close)
|
||
!! wikitext
|
||
<blockquote><div>Line one
|
||
|
||
Line two
|
||
</div></blockquote>
|
||
!! html
|
||
<blockquote><div>Line one
|
||
<p>Line two
|
||
</p>
|
||
</div></blockquote>
|
||
!! end
|
||
|
||
!! test
|
||
Paragraphs inside blockquotes/divs (extra line break on open and close)
|
||
!! wikitext
|
||
<blockquote><div>
|
||
Line one
|
||
|
||
Line two
|
||
</div></blockquote>
|
||
!! html
|
||
<blockquote><div>
|
||
<p>Line one
|
||
</p><p>Line two
|
||
</p>
|
||
</div></blockquote>
|
||
!! end
|
||
|
||
!! test
|
||
Interwiki links trounced by handleExternalLinks after early LinkHolderArray expansion
|
||
!! options
|
||
wgLinkHolderBatchSize=0
|
||
!! wikitext
|
||
[[meatball:1]]
|
||
[[meatball:2]]
|
||
[[meatball:3]]
|
||
!! html
|
||
<p><a href="http://www.usemod.com/cgi-bin/mb.pl?1" class="extiw" title="meatball:1">meatball:1</a>
|
||
<a href="http://www.usemod.com/cgi-bin/mb.pl?2" class="extiw" title="meatball:2">meatball:2</a>
|
||
<a href="http://www.usemod.com/cgi-bin/mb.pl?3" class="extiw" title="meatball:3">meatball:3</a>
|
||
</p>
|
||
!! end
|
||
|
||
!! test
|
||
T17196: localised external link numbers
|
||
!! options
|
||
language=fa
|
||
!! wikitext
|
||
[http://en.wikipedia.org/]
|
||
!! html/php
|
||
<p><a rel="nofollow" class="external autonumber" href="http://en.wikipedia.org/">[۱]</a>
|
||
</p>
|
||
!! html/parsoid
|
||
<p><a rel="mw:ExtLink" href="http://en.wikipedia.org/" class="external autonumber"></a></p>
|
||
!! end
|
||
|
||
!! test
|
||
Multibyte character in padleft
|
||
!! wikitext
|
||
{{padleft:-Hello|7|Æ}}
|
||
!! html/php
|
||
<p>Æ-Hello
|
||
</p>
|
||
!! html/parsoid
|
||
<p><span typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"padleft:-Hello","function":"padleft"},"params":{"1":{"wt":"7"},"2":{"wt":"Æ"}},"i":0}}]}'>Æ-Hello</span></p>
|
||
!! end
|
||
|
||
!! test
|
||
Multibyte character in padright
|
||
!! wikitext
|
||
{{padright:Hello-|7|Æ}}
|
||
!! html/php
|
||
<p>Hello-Æ
|
||
</p>
|
||
!! html/parsoid
|
||
<p><span typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"padright:Hello-","function":"padright"},"params":{"1":{"wt":"7"},"2":{"wt":"Æ"}},"i":0}}]}'>Hello-Æ</span></p>
|
||
!! end
|
||
|
||
!!test
|
||
formatdate parser function
|
||
!! wikitext
|
||
{{#formatdate:2009-03-24}}
|
||
!! html/php
|
||
<p><span class="mw-formatted-date" title="2009-03-24">2009-03-24</span>
|
||
</p>
|
||
!! html/parsoid+integrated
|
||
<p><span class="mw-formatted-date" title="2009-03-24" about="#mwt1" typeof="mw:Transclusion" data-parsoid='{"stx":"html","pi":[[]]}' data-mw='{"parts":[{"template":{"target":{"wt":"#formatdate:2009-03-24","function":"formatdate"},"params":{},"i":0}}]}'>2009-03-24</span></p>
|
||
!! end
|
||
|
||
!!test
|
||
formatdate parser function, with default format
|
||
!! wikitext
|
||
{{#formatdate:2009-03-24|mdy}}
|
||
!! html/php
|
||
<p><span class="mw-formatted-date" title="2009-03-24">March 24, 2009</span>
|
||
</p>
|
||
!! html/parsoid+integrated
|
||
<p><span class="mw-formatted-date" title="2009-03-24" about="#mwt1" typeof="mw:Transclusion" data-parsoid='{"stx":"html","pi":[[{"k":"1"}]]}' data-mw='{"parts":[{"template":{"target":{"wt":"#formatdate:2009-03-24","function":"formatdate"},"params":{"1":{"wt":"mdy"}},"i":0}}]}'>March 24, 2009</span></p>
|
||
!! end
|
||
|
||
!! test
|
||
Spacing of numbers in formatted dates
|
||
!! wikitext
|
||
{{#formatdate:January 15}}
|
||
!! html/php
|
||
<p><span class="mw-formatted-date" title="01-15">January 15</span>
|
||
</p>
|
||
!! html/parsoid+integrated
|
||
<p><span class="mw-formatted-date" title="01-15" typeof="mw:Transclusion" about="#mwt1" data-mw='{"parts":[{"template":{"target":{"wt":"#formatdate:January 15","function":"formatdate"},"params":{},"i":0}}]}'>January 15</span></p>
|
||
!! end
|
||
|
||
!! test
|
||
formatdate parser function, with default format and on a page of which the content language is always English and different from the wiki content language
|
||
!! options
|
||
language=nl title=[[MediaWiki:Common.css]]
|
||
!! wikitext
|
||
{{#formatdate:2009-03-24|dmy}}
|
||
!! html/php
|
||
<p><span class="mw-formatted-date" title="2009-03-24">24 March 2009</span>
|
||
</p>
|
||
!! html/parsoid+integrated
|
||
<p><span class="mw-formatted-date" title="2009-03-24" about="#mwt1" typeof="mw:Transclusion" data-parsoid='{"stx":"html","pi":[[{"k":"1"}]]}' data-mw='{"parts":[{"template":{"target":{"wt":"#formatdate:2009-03-24","function":"formatdate"},"params":{"1":{"wt":"dmy"}},"i":0}}]}'>24 March 2009</span></p>
|
||
!! end
|
||
|
||
!! test
|
||
formatdate with invalid month
|
||
!! wikitext
|
||
{{#formatdate:2019-22-22|dmy}}
|
||
!! html/php
|
||
<p>2019-22-22
|
||
</p>
|
||
!! html/parsoid+integrated
|
||
<p><span about="#mwt1" typeof="mw:Transclusion" data-parsoid='{"pi":[[{"k":"1"}]]}' data-mw='{"parts":[{"template":{"target":{"wt":"#formatdate:2019-22-22","function":"formatdate"},"params":{"1":{"wt":"dmy"}},"i":0}}]}'>2019-22-22</span></p>
|
||
!! end
|
||
|
||
!! test
|
||
formatdate: dots in month name do not match any char (T220563)
|
||
!! options
|
||
language=de
|
||
!! wikitext
|
||
{{#formatdate:jun. 3|dmy}}
|
||
{{#formatdate:junx 3|dmy}}
|
||
!! html/php
|
||
<p><span class="mw-formatted-date" title="06-03">3 Juni</span>
|
||
junx 3
|
||
</p>
|
||
!! html/parsoid+integrated
|
||
<p><span class="mw-formatted-date" title="06-03" about="#mwt1" typeof="mw:Transclusion" data-parsoid='{"stx":"html","pi":[[{"k":"1"}]]}' data-mw='{"parts":[{"template":{"target":{"wt":"#formatdate:jun. 3","function":"formatdate"},"params":{"1":{"wt":"dmy"}},"i":0}}]}'>3 Juni</span>
|
||
<span about="#mwt2" typeof="mw:Transclusion" data-parsoid='{"pi":[[{"k":"1"}]]}' data-mw='{"parts":[{"template":{"target":{"wt":"#formatdate:junx 3","function":"formatdate"},"params":{"1":{"wt":"dmy"}},"i":0}}]}'>junx 3</span></p>
|
||
!! end
|
||
|
||
!! test
|
||
formatdate uses correct capitalisation in French
|
||
!! options
|
||
language=fr
|
||
!! wikitext
|
||
{{#formatdate:Juin 3|dmy}}
|
||
!! html/php
|
||
<p><span class="mw-formatted-date" title="06-03">3 juin</span>
|
||
</p>
|
||
!! html/parsoid+integrated
|
||
<p><span class="mw-formatted-date" title="06-03" about="#mwt1" typeof="mw:Transclusion" data-parsoid='{"stx":"html","pi":[[{"k":"1"}]]}' data-mw='{"parts":[{"template":{"target":{"wt":"#formatdate:Juin 3","function":"formatdate"},"params":{"1":{"wt":"dmy"}},"i":0}}]}'>3 juin</span></p>
|
||
!! end
|
||
|
||
!! test
|
||
formatdate uses correct capitalisation in English
|
||
!! wikitext
|
||
{{#formatdate:june 3|dmy}}
|
||
!! html/php
|
||
<p><span class="mw-formatted-date" title="06-03">3 June</span>
|
||
</p>
|
||
!! html/parsoid+integrated
|
||
<p><span class="mw-formatted-date" title="06-03" about="#mwt1" typeof="mw:Transclusion" data-parsoid='{"stx":"html","pi":[[{"k":"1"}]]}' data-mw='{"parts":[{"template":{"target":{"wt":"#formatdate:june 3","function":"formatdate"},"params":{"1":{"wt":"dmy"}},"i":0}}]}'>3 June</span></p>
|
||
!! end
|
||
|
||
!! test
|
||
formatdate formats ISO year 0 as 1 BC
|
||
!! wikitext
|
||
{{#formatdate:-0001-12-31|mdy}}
|
||
{{#formatdate:0000-12-31|mdy}}
|
||
{{#formatdate:0001-12-31|mdy}}
|
||
!! html/php
|
||
<p><span class="mw-formatted-date" title="-0001-12-31">December 31, 2 BC</span>
|
||
<span class="mw-formatted-date" title="0000-12-31">December 31, 1 BC</span>
|
||
<span class="mw-formatted-date" title="0001-12-31">December 31, 1</span>
|
||
</p>
|
||
!! html/parsoid+integrated
|
||
<p><span class="mw-formatted-date" title="-0001-12-31" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"#formatdate:-0001-12-31","function":"formatdate"},"params":{"1":{"wt":"mdy"}},"i":0}}]}'>December 31, 2 BC</span> <span class="mw-formatted-date" title="0000-12-31" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"#formatdate:0000-12-31","function":"formatdate"},"params":{"1":{"wt":"mdy"}},"i":0}}]}'>December 31, 1 BC</span> <span class="mw-formatted-date" title="0001-12-31" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"#formatdate:0001-12-31","function":"formatdate"},"params":{"1":{"wt":"mdy"}},"i":0}}]}'>December 31, 1</span></p>
|
||
!! end
|
||
|
||
#
|
||
#
|
||
#
|
||
|
||
#
|
||
# Edit comments
|
||
#
|
||
|
||
!! test
|
||
Edit comment with link
|
||
!! options
|
||
comment
|
||
!! wikitext
|
||
I like the [[Main Page]] a lot
|
||
!! html/php
|
||
I like the <a href="/wiki/Main_Page" title="Main Page">Main Page</a> a lot
|
||
!!end
|
||
|
||
!! test
|
||
Edit comment with link and link text
|
||
!! options
|
||
comment
|
||
!! wikitext
|
||
I like the [[Main Page|best pages]] a lot
|
||
!! html/php
|
||
I like the <a href="/wiki/Main_Page" title="Main Page">best pages</a> a lot
|
||
!!end
|
||
|
||
!! test
|
||
Edit comment with link and link text with suffix
|
||
!! options
|
||
comment
|
||
!! wikitext
|
||
I like the [[Main Page|best page]]s a lot
|
||
!! html/php
|
||
I like the <a href="/wiki/Main_Page" title="Main Page">best pages</a> a lot
|
||
!!end
|
||
|
||
!! test
|
||
Edit comment with section link (non-local, eg in history list)
|
||
!! options
|
||
comment title=[[Main Page]]
|
||
!! wikitext
|
||
/* External links */ removed bogus entries
|
||
!! html/php
|
||
<span class="autocomment"><a href="/wiki/Main_Page#External_links" title="Main Page">→<bdi dir="ltr">External links</bdi></a>: </span> 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 <span class="autocomment"><a href="/wiki/Main_Page#External_links" title="Main Page">→<bdi dir="ltr">External links</bdi></a>: </span> 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
|
||
<span class="autocomment"><a href="#External_links">→<bdi dir="ltr">External links</bdi></a>: </span> removed bogus entries
|
||
!!end
|
||
|
||
!! test
|
||
Edit comment with section link that has a link in it
|
||
!! options
|
||
comment local title=[[Main Page]]
|
||
!! wikitext
|
||
/* [[A link]] */
|
||
!! html/php
|
||
<span class="autocomment"><a href="#A_link">→<bdi dir="ltr">[[A link]]</bdi></a></span>
|
||
!! end
|
||
|
||
!! test
|
||
Edit comment with section link that has a template in it
|
||
!! options
|
||
comment local title=[[Main Page]]
|
||
!! wikitext
|
||
/* {{foobar|param}} */
|
||
!! html/php
|
||
<span class="autocomment"><a href="#.7B.7Bfoobar.7Cparam.7D.7D">→<bdi dir="ltr">{{foobar|param}}</bdi></a></span>
|
||
!! 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 <a href="/wiki/Subpage_test/subpage" title="Subpage test/subpage">/subpage</a> 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 <a href="/wiki/Subpage_test/subpage" title="Subpage test/subpage">neat little page</a> here...
|
||
!!end
|
||
|
||
!! test
|
||
Edit comment with bogus subpage link in non-subpage NS (T16080)
|
||
!! options
|
||
comment
|
||
title=[[Subpage test]]
|
||
!! wikitext
|
||
Poked at a [[/subpage]] here...
|
||
!! html/php
|
||
Poked at a <a href="/index.php?title=/subpage&action=edit&redlink=1" class="new" title="/subpage (page does not exist)">/subpage</a> here...
|
||
!!end
|
||
|
||
!! test
|
||
Edit comment with bare anchor link (local, as on diff)
|
||
!! options
|
||
comment
|
||
local
|
||
title=[[Main Page]]
|
||
!! wikitext
|
||
[[#section]]
|
||
!! html/php
|
||
<a href="#section">#section</a>
|
||
!! end
|
||
|
||
!! test
|
||
Edit comment with bare anchor link (non-local, as on history)
|
||
!! options
|
||
comment
|
||
title=[[Main Page]]
|
||
!! wikitext
|
||
[[#section]]
|
||
!! html/php
|
||
<a href="/wiki/Main_Page#section" title="Main Page">#section</a>
|
||
!! end
|
||
|
||
!! test
|
||
Anchor starting with underscore
|
||
!! options
|
||
title=[[Foo]]
|
||
!! wikitext
|
||
[[#_ref|One]]
|
||
!! html/php
|
||
<p><a href="#_ref">One</a>
|
||
</p>
|
||
!! html/parsoid
|
||
<p><a rel="mw:WikiLink" href="./Foo#_ref" class="mw-selflink-fragment" data-parsoid='{"stx":"piped","a":{"href":"./Foo#_ref"},"sa":{"href":"#_ref"}}'>One</a></p>
|
||
!! end
|
||
|
||
!! test
|
||
Id starting with underscore
|
||
!! wikitext
|
||
<div id="_ref"></div>
|
||
!! html/*
|
||
<div id="_ref"></div>
|
||
!! end
|
||
|
||
!! test
|
||
Edit comment with link with more than one pipe (T99346)
|
||
!! options
|
||
comment
|
||
!! wikitext
|
||
[[Main Page|Many|pipes]]
|
||
!! html/php
|
||
<a href="/wiki/Main_Page" title="Main Page">Many|pipes</a>
|
||
!! end
|
||
|
||
!! test
|
||
Complex edit comment with link with more than one pipe (T99346)
|
||
!! options
|
||
comment
|
||
!! wikitext
|
||
Created page with "<noinclude>[[Category:Requests for permissions/Bot|{{subst:#titleparts:{{subst:PAGENAME}}|1|3}}]]</noinclude> === [[User:MineoBot|]] 8=== {{Request for permissions/links|Mineo..."
|
||
!! html/php
|
||
Created page with "<noinclude><a href="/index.php?title=Category:Requests_for_permissions/Bot&action=edit&redlink=1" class="new" title="Category:Requests for permissions/Bot (page does not exist)">{{subst:#titleparts:{{subst:PAGENAME}}|1|3}}</a></noinclude> === <a href="/index.php?title=User:MineoBot&action=edit&redlink=1" class="new" title="User:MineoBot (page does not exist)">User:MineoBot</a> 8=== {{Request for permissions/links|Mineo..."
|
||
!! end
|
||
|
||
!! test
|
||
Space normalisation on autocomment (T24784)
|
||
!! options
|
||
comment
|
||
title=[[Main Page]]
|
||
!! wikitext
|
||
/* __hello__world__ */
|
||
!! html/php
|
||
<span class="autocomment"><a href="/wiki/Main_Page#hello_world" title="Main Page">→<bdi dir="ltr">__hello__world__</bdi></a></span>
|
||
!! end
|
||
|
||
!! test
|
||
percent-encoding and + signs in comments (T28410)
|
||
!! options
|
||
comment
|
||
!! wikitext
|
||
[[ABC%33D% ++]] [[ABC%33D% ++|+%20]]
|
||
!! html/php
|
||
<a href="/index.php?title=ABC3D%25_%2B%2B&action=edit&redlink=1" class="new" title="ABC3D% ++ (page does not exist)">ABC3D% ++</a> <a href="/index.php?title=ABC3D%25_%2B%2B&action=edit&redlink=1" class="new" title="ABC3D% ++ (page does not exist)">+%20</a>
|
||
!! end
|
||
|
||
!! test
|
||
Verify that displaytitle works (T24501) no displaytitle
|
||
!! options
|
||
showtitle
|
||
!! config
|
||
wgAllowDisplayTitle=true
|
||
wgRestrictDisplayTitle=false
|
||
!! wikitext
|
||
this is not the title
|
||
!! metadata
|
||
<span class="mw-page-title-main">Parser test</span>
|
||
!! html
|
||
<p>this is not the title
|
||
</p>
|
||
!! end
|
||
|
||
!! test
|
||
Verify that displaytitle works (T24501) RestrictDisplayTitle=false
|
||
!! options
|
||
showtitle
|
||
title=[[Screen]]
|
||
!! config
|
||
wgAllowDisplayTitle=true
|
||
wgRestrictDisplayTitle=false
|
||
!! wikitext
|
||
this is not the title
|
||
{{DISPLAYTITLE:whatever}}
|
||
!! metadata
|
||
whatever
|
||
!! html/php
|
||
<p>this is not the title
|
||
</p>
|
||
!! html/parsoid+integrated
|
||
<p>this is not the title</p>
|
||
<span about="#mwt1" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"DISPLAYTITLE:whatever","function":"displaytitle"},"params":{},"i":0}}]}'></span>
|
||
!! end
|
||
|
||
!! test
|
||
Verify that displaytitle works (T24501) RestrictDisplayTitle=true mismatch
|
||
!! options
|
||
showtitle
|
||
title=[[Screen]]
|
||
!! config
|
||
wgAllowDisplayTitle=true
|
||
wgRestrictDisplayTitle=true
|
||
!! wikitext
|
||
this is not the title
|
||
{{DISPLAYTITLE:whatever}}
|
||
!! metadata
|
||
<span class="mw-page-title-main">Screen</span>
|
||
!! html/php
|
||
<p>this is not the title
|
||
</p>
|
||
!! html/parsoid+integrated
|
||
<p>this is not the title</p>
|
||
<span about="#mwt1" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"DISPLAYTITLE:whatever","function":"displaytitle"},"params":{},"i":0}}]}'></span>
|
||
!! end
|
||
|
||
!! test
|
||
Verify that displaytitle works (T24501) RestrictDisplayTitle=true matching
|
||
!! options
|
||
showtitle
|
||
title=[[Screen]]
|
||
!! config
|
||
wgAllowDisplayTitle=true
|
||
wgRestrictDisplayTitle=true
|
||
!! wikitext
|
||
this is not the title
|
||
{{DISPLAYTITLE:screen}}
|
||
!! metadata
|
||
screen
|
||
!! html/php
|
||
<p>this is not the title
|
||
</p>
|
||
!! html/parsoid+integrated
|
||
<p>this is not the title</p>
|
||
<span about="#mwt1" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"DISPLAYTITLE:screen","function":"displaytitle"},"params":{},"i":0}}]}'></span>
|
||
!! end
|
||
|
||
!! test
|
||
Verify that displaytitle works (T24501) AllowDisplayTitle=false
|
||
!! options
|
||
showtitle
|
||
title=[[Screen]]
|
||
!! config
|
||
wgAllowDisplayTitle=false
|
||
!! wikitext
|
||
this is not the title
|
||
{{DISPLAYTITLE:screen}}
|
||
!! metadata
|
||
<span class="mw-page-title-main">Screen</span>
|
||
!! html/php
|
||
<p>this is not the title
|
||
<a href="/index.php?title=Template:DISPLAYTITLE:screen&action=edit&redlink=1" class="new" title="Template:DISPLAYTITLE:screen (page does not exist)">Template:DISPLAYTITLE:screen</a>
|
||
</p>
|
||
!! html/parsoid+integrated
|
||
<p>this is not the title <a rel="mw:WikiLink" href="./Template:DISPLAYTITLE:screen?action=edit&redlink=1" title="Template:DISPLAYTITLE:screen" typeof="mw:Transclusion mw:LocalizedAttrs" class="new" data-mw='{"parts":[{"template":{"target":{"wt":"DISPLAYTITLE:screen","href":"./Template:DISPLAYTITLE:screen"},"params":{},"i":0}}]}' data-mw-i18n='{"title":{"lang":"x-page","key":"red-link-title","params":["Template:DISPLAYTITLE:screen"]}}'>Template:DISPLAYTITLE:screen</a></p>
|
||
!! end
|
||
|
||
!! test
|
||
Verify that displaytitle works (T24501) AllowDisplayTitle=false no DISPLAYTITLE
|
||
!! options
|
||
showtitle
|
||
title=[[Screen]]
|
||
!! config
|
||
wgAllowDisplayTitle=false
|
||
!! wikitext
|
||
this is not the title
|
||
!! metadata
|
||
<span class="mw-page-title-main">Screen</span>
|
||
!! html/php
|
||
<p>this is not the title
|
||
</p>
|
||
!! html/parsoid+integrated
|
||
<p>this is not the title</p>
|
||
!! end
|
||
|
||
!! test
|
||
Verify that displaytitle handles inline CSS styles (T28547) - rejected value
|
||
!! options
|
||
showtitle
|
||
title=[[Screen]]
|
||
!! config
|
||
wgAllowDisplayTitle=true
|
||
wgRestrictDisplayTitle=true
|
||
!! wikitext
|
||
this is not the title
|
||
{{DISPLAYTITLE:<span style="display: none;">s</span>creen}}
|
||
!! metadata
|
||
<span style="/* attempt to bypass $wgRestrictDisplayTitle */">s</span>creen
|
||
!! html/php
|
||
<p>this is not the title
|
||
</p>
|
||
!! html/parsoid+integrated
|
||
<p>this is not the title</p>
|
||
<span about="#mwt1" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"DISPLAYTITLE:<span style=\"display: none;\">s</span>creen","function":"displaytitle"},"params":{},"i":0}}]}'></span>
|
||
!! end
|
||
|
||
!! test
|
||
Verify that displaytitle handles inline CSS styles (T28547) - accepted value
|
||
!! options
|
||
showtitle
|
||
title=[[Screen]]
|
||
!! config
|
||
wgAllowDisplayTitle=true
|
||
wgRestrictDisplayTitle=true
|
||
!! wikitext
|
||
this is not the title
|
||
{{DISPLAYTITLE:<span style="color: red;">s</span>creen}}
|
||
!! metadata
|
||
<span style="color: red;">s</span>creen
|
||
!! html/php
|
||
<p>this is not the title
|
||
</p>
|
||
!! html/parsoid+integrated
|
||
<p>this is not the title</p>
|
||
<span about="#mwt1" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"DISPLAYTITLE:<span style=\"color: red;\">s</span>creen","function":"displaytitle"},"params":{},"i":0}}]}'></span>
|
||
!! end
|
||
|
||
!! test
|
||
Verify that displaytitle encodes & to & (T291985)
|
||
!! options
|
||
showtitle
|
||
title=[[Art©]]
|
||
!! config
|
||
wgAllowDisplayTitle=true
|
||
wgRestrictDisplayTitle=true
|
||
!! wikitext
|
||
this is not the title
|
||
{{DISPLAYTITLE:art©}}
|
||
!! metadata
|
||
art&copy
|
||
!! html/php
|
||
<p>this is not the title
|
||
</p>
|
||
!! html/parsoid+integrated
|
||
<p>this is not the title</p>
|
||
<span about="#mwt1" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"DISPLAYTITLE:art&copy","function":"displaytitle"},"params":{},"i":0}}]}'></span>
|
||
!! end
|
||
|
||
!! test
|
||
Verify that displaytitle encodes & to & (T291985)
|
||
!! options
|
||
showtitle
|
||
title=[[Art©]]
|
||
!! config
|
||
wgAllowDisplayTitle=true
|
||
wgRestrictDisplayTitle=true
|
||
!! wikitext
|
||
this is not the title
|
||
{{DISPLAYTITLE:art&copy}}
|
||
!! metadata
|
||
art&copy
|
||
!! html/php
|
||
<p>this is not the title
|
||
</p>
|
||
!! html/parsoid+integrated
|
||
<p>this is not the title</p>
|
||
<span about="#mwt1" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"DISPLAYTITLE:art&amp;copy","function":"displaytitle"},"params":{},"i":0}}]}'></span>
|
||
!! end
|
||
|
||
!! test
|
||
Verify that without displaytitle the title encodes & to & (T291985)
|
||
!! options
|
||
showtitle
|
||
title=[[Art©]]
|
||
!! config
|
||
wgAllowDisplayTitle=true
|
||
wgRestrictDisplayTitle=true
|
||
!! wikitext
|
||
this is not the title
|
||
!! metadata
|
||
<span class="mw-page-title-main">Art&copy</span>
|
||
!! html/php
|
||
<p>this is not the title
|
||
</p>
|
||
!! html/parsoid+integrated
|
||
<p>this is not the title</p>
|
||
!! end
|
||
|
||
!! test
|
||
preload: check <noinclude> and <includeonly>
|
||
!! options
|
||
preload
|
||
!! wikitext
|
||
Hello <noinclude>cruel</noinclude><includeonly>kind</includeonly> world.
|
||
!! html/php
|
||
Hello kind world.
|
||
!! end
|
||
|
||
!! test
|
||
preload: check <onlyinclude>
|
||
!! options
|
||
preload
|
||
!! wikitext
|
||
Goodbye <onlyinclude>Hello world</onlyinclude>
|
||
!! html/php
|
||
Hello world
|
||
!! end
|
||
|
||
!! test
|
||
preload: can pass tags through if we want to
|
||
!! options
|
||
preload
|
||
!! wikitext
|
||
<includeonly><</includeonly>includeonly>Hello world<includeonly><</includeonly>/includeonly>
|
||
!! html/php
|
||
<includeonly>Hello world</includeonly>
|
||
!! end
|
||
|
||
!! test
|
||
preload: check that it doesn't try to do tricks
|
||
!! options
|
||
preload
|
||
!! wikitext
|
||
* <!-- Hello --> ''{{world}}'' {{<includeonly>subst:</includeonly>How are you}}{{ {{{|safesubst:}}} #if:1|2|3}}
|
||
!! html/php
|
||
* <!-- Hello --> ''{{world}}'' {{subst:How are you}}{{ {{{|safesubst:}}} #if:1|2|3}}
|
||
!! end
|
||
|
||
!! test
|
||
Play a bit with r67090 and T5158
|
||
!! wikitext
|
||
<div style="width:50% !important"> </div>
|
||
<div style="width:50% !important"> </div>
|
||
<div style="width:50% !important"> </div>
|
||
<div style="border : solid;"> </div>
|
||
!! html/php
|
||
<div style="width:50% !important"> </div>
|
||
<div style="width:50% !important"> </div>
|
||
<div style="width:50% !important"> </div>
|
||
<div style="border : solid;"> </div>
|
||
!! html/parsoid
|
||
<div style="width:50% !important" data-parsoid='{"stx":"html"}'><span typeof="mw:Entity" data-parsoid='{"srcContent":" "}'> </span></div>
|
||
<div style="width:50% !important" data-parsoid='{"stx":"html","a":{"style":"width:50% !important"},"sa":{"style":"width:50%&nbsp;!important"}}'><span typeof="mw:Entity" data-parsoid='{"srcContent":" "}'> </span></div>
|
||
<div style="width:50% !important" data-parsoid='{"stx":"html","a":{"style":"width:50% !important"},"sa":{"style":"width:50%&#160;!important"}}'><span typeof="mw:Entity" data-parsoid='{"srcContent":" "}'> </span></div>
|
||
<div style="border : solid;" data-parsoid='{"stx":"html"}'><span typeof="mw:Entity" data-parsoid='{"srcContent":" "}'> </span></div>
|
||
!! end
|
||
|
||
!! test
|
||
French spaces in wikitext
|
||
!! wikitext
|
||
foo ! bar ? bat 50 % is less than 75 %.
|
||
|
||
Hello : this ; is « something ‹ else › again »
|
||
!! html/php
|
||
<p>foo ! bar ? bat 50 % is less than 75 %.
|
||
</p><p>Hello : this ; is « something ‹ else › again »
|
||
</p>
|
||
!! html/parsoid
|
||
<p>foo<span typeof="mw:DisplaySpace"> </span>! bar<span typeof="mw:DisplaySpace"> </span>? bat 50<span typeof="mw:DisplaySpace"> </span>% is less than 75<span typeof="mw:DisplaySpace"> </span>%.</p>
|
||
|
||
<p>Hello<span typeof="mw:DisplaySpace"> </span>: this<span typeof="mw:DisplaySpace"> </span>; is «<span typeof="mw:DisplaySpace"> </span>something ‹<span typeof="mw:DisplaySpace"> </span>else<span typeof="mw:DisplaySpace"> </span>› again<span typeof="mw:DisplaySpace"> </span>»</p>
|
||
!! end
|
||
|
||
!! test
|
||
Corner case: french spaces in definition list
|
||
!! options
|
||
parsoid=wt2html,html2html
|
||
!! wikitext
|
||
;foo : bar
|
||
!! html
|
||
<dl><dt>foo</dt>
|
||
<dd>bar</dd></dl>
|
||
!! end
|
||
|
||
!! test
|
||
T5158: Test for French spaces in attributes
|
||
!! wikitext
|
||
<br style=" clear : both ; " />
|
||
!! html/php
|
||
<p><br style="clear : both ;" />
|
||
</p>
|
||
!! end
|
||
|
||
# This test relies on the fact that image captions are processed
|
||
# as independent document fragments.
|
||
!! test
|
||
Displayspace processing on embedded fragments
|
||
!! options
|
||
parsoid=wt2html
|
||
!! wikitext
|
||
[[File:Foobar.jpg|« test »]]
|
||
!! html/parsoid
|
||
<p><span class="mw-default-size" typeof="mw:File" data-parsoid='{"optList":[{"ck":"caption","ak":"« test »"}]}' data-mw='{"caption":"«<span typeof=\"mw:DisplaySpace\" data-parsoid='{\"dsr\":[null,null,null,null]}'> </span>test<span typeof=\"mw:DisplaySpace\" data-parsoid='{\"dsr\":[null,null,null,null]}'> </span>»"}'><a href="./File:Foobar.jpg" class="mw-file-description" title="« test »" data-parsoid="{}"><img alt="« test »" resource="./File:Foobar.jpg" src="http://example.com/images/3/3a/Foobar.jpg" decoding="async" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="220" width="1941" class="mw-file-element" data-parsoid='{"a":{"resource":"./File:Foobar.jpg","height":"220","width":"1941"},"sa":{"resource":"File:Foobar.jpg"}}'/></a></span></p>
|
||
!! end
|
||
|
||
!! test
|
||
HTML5 data attributes
|
||
!! wikitext
|
||
<span data-foo="bar">Baz</span>
|
||
<p data-abc-def_hij="">Quuz</p>
|
||
!! html/php
|
||
<p><span data-foo="bar">Baz</span>
|
||
</p>
|
||
<p data-abc-def_hij="">Quuz</p>
|
||
!! html/parsoid
|
||
<p><span data-foo="bar" data-parsoid='{"stx":"html"}'>Baz</span></p>
|
||
<p data-abc-def_hij="" data-parsoid='{"stx":"html"}'>Quuz</p>
|
||
!! end
|
||
|
||
!! test
|
||
Strip reserved data attributes
|
||
!! wikitext
|
||
<div data-mw="foo" data-parsoid="bar" data-mw-someext="baz" data-ok="fred" data-object-id="123" data-ooui="xyzzy" data-bad:ns="ns">d</div>
|
||
!! html/php
|
||
<div data-ok="fred" data-object-id="123">d</div>
|
||
!! html/parsoid
|
||
<div data-x-data-mw="foo" data-x-data-parsoid="bar" data-x-data-mw-someext="baz" data-ok="fred" data-x-data-object-id="123" data-parsoid='{"stx":"html","a":{"data-ooui":null,"data-bad:ns":null},"sa":{"data-ooui":"xyzzy","data-bad:ns":"ns"}}'>d</div>
|
||
!! end
|
||
|
||
!! test
|
||
percent-encoding and + signs in internal links (T28410)
|
||
!! config
|
||
wgParserEnableLegacyMediaDOM=false
|
||
!! wikitext
|
||
[[User:+%]] [[Page+title%]]
|
||
[[%+]] [[%+|%20]] [[%+ ]] [[%+r]]
|
||
[[%]] [[+]] [[File:%+abc%39|foo|[[bar]]]]
|
||
[[%33%45]] [[%33%45+]]
|
||
!! html/php
|
||
<p><a href="/index.php?title=User:%2B%25&action=edit&redlink=1" class="new" title="User:+% (page does not exist)">User:+%</a> <a href="/index.php?title=Page%2Btitle%25&action=edit&redlink=1" class="new" title="Page+title% (page does not exist)">Page+title%</a>
|
||
<a href="/index.php?title=%25%2B&action=edit&redlink=1" class="new" title="%+ (page does not exist)">%+</a> <a href="/index.php?title=%25%2B&action=edit&redlink=1" class="new" title="%+ (page does not exist)">%20</a> <a href="/index.php?title=%25%2B&action=edit&redlink=1" class="new" title="%+ (page does not exist)">%+ </a> <a href="/index.php?title=%25%2Br&action=edit&redlink=1" class="new" title="%+r (page does not exist)">%+r</a>
|
||
<a href="/index.php?title=%25&action=edit&redlink=1" class="new" title="% (page does not exist)">%</a> <a href="/index.php?title=%2B&action=edit&redlink=1" class="new" title="+ (page does not exist)">+</a> <span class="mw-default-size" typeof="mw:Error mw:File"><a href="/index.php?title=Special:Upload&wpDestFile=%25%2Babc9" class="new" title="File:%+abc9"><span class="mw-file-element mw-broken-media">bar</span></a></span>
|
||
<a href="/index.php?title=3E&action=edit&redlink=1" class="new" title="3E (page does not exist)">3E</a> <a href="/index.php?title=3E%2B&action=edit&redlink=1" class="new" title="3E+ (page does not exist)">3E+</a>
|
||
</p>
|
||
!! html/parsoid
|
||
<p><a rel="mw:WikiLink" href="./User:+%25?action=edit&redlink=1" title="User:+%" class="new" typeof="mw:LocalizedAttrs" data-parsoid='{"stx":"simple","a":{"href":"./User:+%25"},"sa":{"href":"User:+%"}}' data-mw-i18n='{"title":{"lang":"x-page","key":"red-link-title","params":["User:+%"]}}'>User:+%</a> <a rel="mw:WikiLink" href="./Page+title%25?action=edit&redlink=1" title="Page+title%" class="new" typeof="mw:LocalizedAttrs" data-parsoid='{"stx":"simple","a":{"href":"./Page+title%25"},"sa":{"href":"Page+title%"}}' data-mw-i18n='{"title":{"lang":"x-page","key":"red-link-title","params":["Page+title%"]}}'>Page+title%</a>
|
||
<a rel="mw:WikiLink" href="./%25+?action=edit&redlink=1" title="%+" class="new" typeof="mw:LocalizedAttrs" data-parsoid='{"stx":"simple","a":{"href":"./%25+"},"sa":{"href":"%+"}}' data-mw-i18n='{"title":{"lang":"x-page","key":"red-link-title","params":["%+"]}}'>%+</a> <a rel="mw:WikiLink" href="./%25+?action=edit&redlink=1" title="%+" class="new" typeof="mw:LocalizedAttrs" data-parsoid='{"stx":"piped","a":{"href":"./%25+"},"sa":{"href":"%+"}}' data-mw-i18n='{"title":{"lang":"x-page","key":"red-link-title","params":["%+"]}}'>%20</a> <a rel="mw:WikiLink" href="./%25+?action=edit&redlink=1" title="%+" class="new" typeof="mw:LocalizedAttrs" data-parsoid='{"stx":"simple","a":{"href":"./%25+"},"sa":{"href":"%+ "}}' data-mw-i18n='{"title":{"lang":"x-page","key":"red-link-title","params":["%+"]}}'>%+ </a> <a rel="mw:WikiLink" href="./%25+r?action=edit&redlink=1" title="%+r" class="new" typeof="mw:LocalizedAttrs" data-parsoid='{"stx":"simple","a":{"href":"./%25+r"},"sa":{"href":"%+r"}}' data-mw-i18n='{"title":{"lang":"x-page","key":"red-link-title","params":["%+r"]}}'>%+r</a>
|
||
<a rel="mw:WikiLink" href="./%25?action=edit&redlink=1" title="%" class="new" typeof="mw:LocalizedAttrs" data-parsoid='{"stx":"simple","a":{"href":"./%25"},"sa":{"href":"%"}}' data-mw-i18n='{"title":{"lang":"x-page","key":"red-link-title","params":["%"]}}'>%</a> <a rel="mw:WikiLink" href="./+?action=edit&redlink=1" title="+" class="new" typeof="mw:LocalizedAttrs" data-parsoid='{"stx":"simple","a":{"href":"./+"},"sa":{"href":"+"}}' data-mw-i18n='{"title":{"lang":"x-page","key":"red-link-title","params":["+"]}}'>+</a> <span class="mw-default-size" typeof="mw:Error mw:File" data-parsoid='{"optList":[{"ck":"bogus","ak":"foo"},{"ck":"caption","ak":"[[bar]]"}]}' data-mw='{"caption":"<a rel=\"mw:WikiLink\" href=\"./Bar\" title=\"Bar\" data-parsoid='{\"stx\":\"simple\",\"a\":{\"href\":\"./Bar\"},\"sa\":{\"href\":\"bar\"},\"dsr\":[94,101,2,2]}'>bar</a>","errors":[{"key":"apierror-filedoesnotexist","message":"This image does not exist."}]}'><a href="./Special:FilePath/%25+abc9"><span class="mw-file-element mw-broken-media" resource="./File:%25+abc9" data-parsoid='{"a":{"resource":"./File:%25+abc9"},"sa":{"resource":"File:%+abc%39"}}'>bar</span></a></span>
|
||
<a rel="mw:WikiLink" href="./3E?action=edit&redlink=1" title="3E" class="new" typeof="mw:LocalizedAttrs" data-parsoid='{"stx":"simple","a":{"href":"./3E"},"sa":{"href":"%33%45"}}' data-mw-i18n='{"title":{"lang":"x-page","key":"red-link-title","params":["3E"]}}'>3E</a> <a rel="mw:WikiLink" href="./3E+?action=edit&redlink=1" title="3E+" class="new" typeof="mw:LocalizedAttrs" data-parsoid='{"stx":"simple","a":{"href":"./3E+"},"sa":{"href":"%33%45+"}}' data-mw-i18n='{"title":{"lang":"x-page","key":"red-link-title","params":["3E+"]}}'>3E+</a></p>
|
||
!! 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
|
||
<p>Text's been normalized?
|
||
</p>
|
||
!! end
|
||
|
||
!! test
|
||
T21052 U+3000 IDEOGRAPHIC SPACE should terminate free external links
|
||
!! wikitext
|
||
http://www.example.org/ <-- U+3000 (vim: ^Vu3000)
|
||
!! html
|
||
<p><a rel="nofollow" class="external free" href="http://www.example.org/">http://www.example.org/</a> <-- U+3000 (vim: ^Vu3000)
|
||
</p>
|
||
!! end
|
||
|
||
!! test
|
||
T21052 U+3000 IDEOGRAPHIC SPACE should terminate bracketed external links
|
||
!! wikitext
|
||
[http://www.example.org/ ideograms]
|
||
!! html
|
||
<p><a rel="nofollow" class="external text" href="http://www.example.org/">ideograms</a>
|
||
</p>
|
||
!! end
|
||
|
||
!! test
|
||
T21052 U+3000 IDEOGRAPHIC SPACE should terminate external images links
|
||
!! wikitext
|
||
http://www.example.org/pic.png <-- U+3000 (vim: ^Vu3000)
|
||
!! html
|
||
<p><img src="http://www.example.org/pic.png" alt="pic.png" /> <-- U+3000 (vim: ^Vu3000)
|
||
</p>
|
||
!! end
|
||
|
||
!! article
|
||
MediaWiki:loop1
|
||
!! text
|
||
{{Identical|A}}
|
||
!! endarticle
|
||
|
||
!! article
|
||
MediaWiki:loop2
|
||
!! text
|
||
{{Identical|B}}
|
||
!! endarticle
|
||
|
||
!! article
|
||
Template:Identical
|
||
!! text
|
||
{{int:loop1}}
|
||
{{int:loop2}}
|
||
!! endarticle
|
||
|
||
!! test
|
||
T33098 Template which includes system messages which includes the template
|
||
!! wikitext
|
||
{{Identical}}
|
||
!! html/php
|
||
<p><span class="error">Template loop detected: <a href="/wiki/Template:Identical" title="Template:Identical">Template:Identical</a></span>
|
||
<span class="error">Template loop detected: <a href="/wiki/Template:Identical" title="Template:Identical">Template:Identical</a></span>
|
||
</p>
|
||
!! html/parsoid+integrated
|
||
<p><span class="error" about="#mwt1" typeof="mw:Transclusion" data-parsoid='{"stx":"html","pi":[[]]}' data-mw='{"parts":[{"template":{"target":{"wt":"Identical","href":"./Template:Identical"},"params":{},"i":0}}]}'>Template loop detected: <a rel="mw:WikiLink" href="./Template:Identical" title="Template:Identical">Template:Identical</a></span><span about="#mwt1">
|
||
</span><span class="error" about="#mwt1" data-parsoid='{"stx":"html"}'>Template loop detected: <a rel="mw:WikiLink" href="./Template:Identical" title="Template:Identical">Template:Identical</a></span></p>
|
||
!! end
|
||
|
||
!! test
|
||
T33490 Turkish: ucfirst 'blah'
|
||
!! options
|
||
language=tr
|
||
!! wikitext
|
||
{{ucfirst:blah}}
|
||
!! html
|
||
<p>Blah
|
||
</p>
|
||
!! end
|
||
|
||
!! test
|
||
T33490 Turkish: ucfirst 'ix'
|
||
!! options
|
||
language=tr
|
||
!! wikitext
|
||
{{ucfirst:ix}}
|
||
!! html
|
||
<p>İx
|
||
</p>
|
||
!! end
|
||
|
||
!! test
|
||
T33490 Turkish: lcfirst 'BLAH'
|
||
!! options
|
||
language=tr
|
||
!! wikitext
|
||
{{lcfirst:BLAH}}
|
||
!! html
|
||
<p>bLAH
|
||
</p>
|
||
!! end
|
||
|
||
!! test
|
||
T33490 Turkish: ucfırst (with a dotless i)
|
||
!! options
|
||
language=tr
|
||
!! wikitext
|
||
{{ucfırst:blah}}
|
||
!! html/php
|
||
<p><a href="/index.php?title=%C5%9Eablon:Ucf%C4%B1rst:blah&action=edit&redlink=1" class="new" title="Şablon:Ucfırst:blah (sayfa mevcut değil)">Şablon:Ucfırst:blah</a>
|
||
</p>
|
||
!! html/parsoid
|
||
<p><a rel="mw:WikiLink" href="./Şablon:Ucfırst:blah?action=edit&redlink=1" title="Şablon:Ucfırst:blah" about="#mwt1" typeof="mw:Transclusion mw:LocalizedAttrs" class="new" data-parsoid='{"stx":"simple","a":{"href":"./Şablon:Ucfırst:blah"},"sa":{"href":"Şablon:Ucfırst:blah"},"pi":[[]]}' data-mw='{"parts":[{"template":{"target":{"wt":"ucfırst:blah","href":"./Şablon:Ucfırst:blah"},"params":{},"i":0}}]}' data-mw-i18n='{"title":{"lang":"x-page","key":"red-link-title","params":["Şablon:Ucfırst:blah"]}}'>Şablon:Ucfırst:blah</a></p>
|
||
!! end
|
||
|
||
!! test
|
||
T33490 ucfırst (with a dotless i) with English language
|
||
!! options
|
||
language=en
|
||
!! wikitext
|
||
{{ucfırst:blah}}
|
||
!! html/php
|
||
<p><a href="/index.php?title=Template:Ucf%C4%B1rst:blah&action=edit&redlink=1" class="new" title="Template:Ucfırst:blah (page does not exist)">Template:Ucfırst:blah</a>
|
||
</p>
|
||
!! html/parsoid
|
||
<p><a rel="mw:WikiLink" href="./Template:Ucfırst:blah?action=edit&redlink=1" title="Template:Ucfırst:blah" about="#mwt1" typeof="mw:Transclusion mw:LocalizedAttrs" class="new" data-parsoid='{"stx":"simple","a":{"href":"./Template:Ucfırst:blah"},"sa":{"href":"Template:Ucfırst:blah"},"pi":[[]]}' data-mw='{"parts":[{"template":{"target":{"wt":"ucfırst:blah","href":"./Template:Ucfırst:blah"},"params":{},"i":0}}]}' data-mw-i18n='{"title":{"lang":"x-page","key":"red-link-title","params":["Template:Ucfırst:blah"]}}'>Template:Ucfırst:blah</a></p>
|
||
!! end
|
||
|
||
!! article
|
||
MediaWiki:T34057
|
||
!! text
|
||
== {{int:ok}} ==
|
||
!! endarticle
|
||
|
||
!! test
|
||
T34057: Title needed when expanding <h> nodes.
|
||
!! options
|
||
title=[[Main Page]]
|
||
!! config
|
||
wgParserEnableLegacyHeadingDOM=false
|
||
!! wikitext
|
||
{{int:T34057}}
|
||
!! html/php
|
||
<div class="mw-heading mw-heading2"><h2 id="OK">OK</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Main_Page&action=edit&section=1" title="Edit section: OK">edit</a><span class="mw-editsection-bracket">]</span></span></div>
|
||
!! html/parsoid+integrated
|
||
<h2 about="#mwt1" typeof="mw:Transclusion" id="OK" data-mw='{"parts":[{"template":{"target":{"wt":"int:T34057","function":"int"},"params":{},"i":0}}]}'>OK</h2>
|
||
!! end
|
||
|
||
!! test
|
||
Title needed when expanding templates.
|
||
!! options
|
||
title=[[Main Page]]
|
||
!! wikitext
|
||
{{Template with pagename}}
|
||
!! html/php
|
||
<p>This is Main Page.
|
||
</p>
|
||
!! html/parsoid
|
||
<p><span about="#mwt1" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"Template with pagename","href":"./Template:Template_with_pagename"},"params":{},"i":0}}]}'>This is Main Page.</span></p>
|
||
!! end
|
||
|
||
!! test
|
||
Strip marker in urlencode
|
||
!! wikitext
|
||
{{urlencode:x<nowiki/>y}}
|
||
{{urlencode:x<nowiki/>y|wiki}}
|
||
{{urlencode:x<nowiki/>y|path}}
|
||
{{urlencode:x<pre id="one">two</pre>y}}
|
||
!! html/php
|
||
<p>xy
|
||
xy
|
||
xy
|
||
xy
|
||
</p>
|
||
!! end
|
||
|
||
!! test
|
||
Strip marker in lc
|
||
!! wikitext
|
||
{{lc:x<nowiki/>y}}
|
||
!! html/php
|
||
<p>xy
|
||
</p>
|
||
!! html/parsoid+integrated
|
||
<p><span about="#mwt1" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"lc:x<nowiki/>y","function":"lc"},"params":{},"i":0}}]}'>x</span><span>y</span></p>
|
||
!! end
|
||
|
||
!! test
|
||
Strip marker in uc
|
||
!! wikitext
|
||
{{uc:x<nowiki/>y}}
|
||
!! html/php
|
||
<p>XY
|
||
</p>
|
||
!! html/parsoid+integrated
|
||
<p><span about="#mwt1" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"uc:x<nowiki/>y","function":"uc"},"params":{},"i":0}}]}'>X</span><span>Y</span></p>
|
||
!! end
|
||
|
||
!! test
|
||
Strip marker in formatNum
|
||
!! wikitext
|
||
{{formatnum:1<nowiki/>2}}
|
||
{{formatnum:1<nowiki/>2|R}}
|
||
!! html/php
|
||
<p>12
|
||
12
|
||
</p>
|
||
!! html/parsoid
|
||
<p><span about="#mwt1" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"formatnum:1<nowiki/>2","function":"formatnum"},"params":{},"i":0}}]}'>1</span><span about="#mwt1">2</span> <span about="#mwt2" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"formatnum:1<nowiki/>2","function":"formatnum"},"params":{"1":{"wt":"R"}},"i":0}}]}'>1</span><span about="#mwt2">2</span></p>
|
||
!! end
|
||
|
||
!! test
|
||
Check noCommafy in formatNum
|
||
!! options
|
||
language=be-tarask
|
||
!! wikitext
|
||
{{formatnum:123456.78}}
|
||
{{formatnum:123456.78|NOSEP}}
|
||
!! html/php
|
||
<p>123 456,78
|
||
123456.78
|
||
</p>
|
||
!! html/parsoid+integrated
|
||
<p><span about="#mwt1" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"formatnum:123456.78","function":"formatnum"},"params":{},"i":0}}]}'>123 456,78</span>
|
||
<span about="#mwt2" typeof="mw:Transclusion" data-parsoid='{"pi":[[{"k":"1"}]]}' data-mw='{"parts":[{"template":{"target":{"wt":"formatnum:123456.78","function":"formatnum"},"params":{"1":{"wt":"NOSEP"}},"i":0}}]}'>123456.78</span></p>
|
||
!! 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/php
|
||
<p>1,234.56
|
||
1,234.56
|
||
1,234.56
|
||
</p>
|
||
!! html/parsoid+integrated
|
||
<p><span about="#mwt1" typeof="mw:Transclusion" data-parsoid='{"pi":[[{"k":"1"}]]}' data-mw='{"parts":[{"template":{"target":{"wt":"formatnum:1,234.56","function":"formatnum"},"params":{"1":{"wt":"Random"}},"i":0}}]}'>1,234.56</span>
|
||
<span about="#mwt2" typeof="mw:Transclusion" data-parsoid='{"pi":[[{"k":"1"}]]}' data-mw='{"parts":[{"template":{"target":{"wt":"formatnum:1,234.56","function":"formatnum"},"params":{"1":{"wt":"EVERYTHING"}},"i":0}}]}'>1,234.56</span>
|
||
<span about="#mwt3" typeof="mw:Transclusion" data-parsoid='{"pi":[[{"k":"1"}]]}' data-mw='{"parts":[{"template":{"target":{"wt":"formatnum:1234.56","function":"formatnum"},"params":{"1":{"wt":"any argument that has the string 'NOSEP'"}},"i":0}}]}'>1,234.56</span></p>
|
||
!! end
|
||
|
||
!! test
|
||
Strip marker in grammar
|
||
!! options
|
||
language=fi
|
||
!! wikitext
|
||
{{grammar:elative|foo<nowiki/>bar}}
|
||
!! html/php
|
||
<p>foobarista
|
||
</p>
|
||
!! html/parsoid+integrated
|
||
<p><span about="#mwt2" typeof="mw:Transclusion" data-parsoid='{"pi":[[{"k":"1"}]]}' data-mw='{"parts":[{"template":{"target":{"wt":"grammar:elative","function":"grammar"},"params":{"1":{"wt":"foo<nowiki/>bar"}},"i":0}}]}'>foobarista</span></p>
|
||
!! end
|
||
|
||
!! test
|
||
Strip marker in padleft
|
||
!! wikitext
|
||
{{padleft:|2|x<nowiki/>y}}
|
||
!! html
|
||
<p>xy
|
||
</p>
|
||
!! end
|
||
|
||
!! test
|
||
Strip marker in padright
|
||
!! wikitext
|
||
{{padright:|2|x<nowiki/>y}}
|
||
!! html
|
||
<p>xy
|
||
</p>
|
||
!! end
|
||
|
||
!! test
|
||
Strip marker in anchorencode
|
||
!! wikitext
|
||
{{anchorencode:x<nowiki/>y}}
|
||
!! html/php
|
||
<p>xy
|
||
</p>
|
||
!! html/parsoid
|
||
<p><span about="#mwt2" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"anchorencode:x<nowiki/>y","function":"anchorencode"},"params":{},"i":0}}]}'>xy</span></p>
|
||
!! end
|
||
|
||
!! test
|
||
new support for bdi element (T33817)
|
||
!! wikitext
|
||
<p dir="rtl" lang="he">ולדימיר לנין (ברוסית: <bdi lang="ru">Владимир Ленин</bdi>, 24 באפריל 1870–22 בינואר 1924) הוא מנהיג פוליטי קומוניסטי רוסי.</p>
|
||
!! html
|
||
<p dir="rtl" lang="he">ולדימיר לנין (ברוסית: <bdi lang="ru">Владимир Ленин</bdi>, 24 באפריל 1870–22 בינואר 1924) הוא מנהיג פוליטי קומוניסטי רוסי.</p>
|
||
!! end
|
||
|
||
!! test
|
||
Ignore pipe between table row attributes
|
||
!! wikitext
|
||
{|
|
||
|quux
|
||
|- id=foo | style='color: red'
|
||
|bar
|
||
|}
|
||
!! html
|
||
<table>
|
||
<tbody><tr>
|
||
<td>quux
|
||
</td></tr>
|
||
<tr id="foo" style="color: red">
|
||
<td>bar
|
||
</td></tr></tbody></table>
|
||
!! end
|
||
|
||
!! test
|
||
Language parser function (autonym)
|
||
!! wikitext
|
||
{{#language:ar}}
|
||
!! html/php
|
||
<p>العربية
|
||
</p>
|
||
!! html/parsoid+integrated
|
||
<p><span about="#mwt1" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"#language:ar","function":"language"},"params":{},"i":0}}]}'>العربية</span></p>
|
||
!! end
|
||
|
||
!! test
|
||
Language parser function (case-insensitive)
|
||
!! wikitext
|
||
{{#language:AR}}
|
||
!! html/php
|
||
<p>العربية
|
||
</p>
|
||
!! html/parsoid+integrated
|
||
<p><span about="#mwt1" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"#language:AR","function":"language"},"params":{},"i":0}}]}'>العربية</span></p>
|
||
!! end
|
||
|
||
!! test
|
||
Language parser function (non-autonym)
|
||
!! wikitext
|
||
{{#language:aR|En}}
|
||
!! html/php
|
||
<p>Arabic
|
||
</p>
|
||
!! html/parsoid+integrated
|
||
<p><span typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"#language:aR","function":"language"},"params":{"1":{"wt":"En"}},"i":0}}]}'>Arabic</span></p>
|
||
!! end
|
||
|
||
!! test
|
||
Language parser function (bcp-47 codes)
|
||
!! wikitext
|
||
{{#language:de-x-formal|en-simple}}
|
||
!! html/php
|
||
<p>German (formal address)
|
||
</p>
|
||
!! html/parsoid+integrated
|
||
<p><span typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"#language:de-x-formal","function":"language"},"params":{"1":{"wt":"en-simple"}},"i":0}}]}'>German (formal address)</span></p>
|
||
!! end
|
||
|
||
!! test
|
||
Language parser function (target language)
|
||
!! options
|
||
language=ar
|
||
!! wikitext
|
||
{{#language}} / {{#language:}}
|
||
!! html/php
|
||
<p>العربية / العربية
|
||
</p>
|
||
!! html/parsoid+integrated
|
||
<p><span typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"#language","function":"language"},"params":{},"i":0}}]}'>العربية</span> / <span typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"#language:","function":"language"},"params":{},"i":0}}]}'>العربية</span></p>
|
||
!! end
|
||
|
||
!! test
|
||
Language parser function (target language, non-autonym)
|
||
!! options
|
||
language=ar
|
||
!! wikitext
|
||
{{#language:|en}}
|
||
!! html/php
|
||
<p>Arabic
|
||
</p>
|
||
!! html/parsoid+integrated
|
||
<p><span typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"#language:","function":"language"},"params":{"1":{"wt":"en"}},"i":0}}]}'>Arabic</span></p>
|
||
!! end
|
||
|
||
!! test
|
||
Dir parser function (valid codes)
|
||
!! wikitext
|
||
Persian: {{#dir:fa}}
|
||
|
||
English: {{#dir:en}}
|
||
|
||
Persian (with space): {{#dir: fa}}
|
||
|
||
Tajik: {{#dir:tg}}
|
||
|
||
The string 'egl' is a valid internal code; however when used as a
|
||
BCP-47 code it refers to the internal code 'eml'. Unfortunately,
|
||
both of these have ltr directionality which makes this test case
|
||
less useful than it could be.
|
||
|
||
Ambiguous BCP-47 code:
|
||
;Directionality of internal code 'egl':{{#dir:egl}}
|
||
;Directionality of internal code 'eml':{{#dir:egl|bcp47}} == {{#dir:eml}}
|
||
!! html/php
|
||
<p>Persian: rtl
|
||
</p><p>English: ltr
|
||
</p><p>Persian (with space): rtl
|
||
</p><p>Tajik: ltr
|
||
</p><p>The string 'egl' is a valid internal code; however when used as a
|
||
BCP-47 code it refers to the internal code 'eml'. Unfortunately,
|
||
both of these have ltr directionality which makes this test case
|
||
less useful than it could be.
|
||
</p><p>Ambiguous BCP-47 code:
|
||
</p>
|
||
<dl><dt>Directionality of internal code 'egl'</dt>
|
||
<dd>ltr</dd>
|
||
<dt>Directionality of internal code 'eml'</dt>
|
||
<dd>ltr == ltr</dd></dl>
|
||
!! html/parsoid+integrated
|
||
<p>Persian: <span typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"#dir:fa","function":"dir"},"params":{},"i":0}}]}'>rtl</span></p>
|
||
<p>English: <span typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"#dir:en","function":"dir"},"params":{},"i":0}}]}'>ltr</span></p>
|
||
<p>Persian (with space): <span typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"#dir: fa","function":"dir"},"params":{},"i":0}}]}'>rtl</span></p>
|
||
<p>Tajik: <span typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"#dir:tg","function":"dir"},"params":{},"i":0}}]}'>ltr</span></p>
|
||
<p>The string 'egl' is a valid internal code; however when used as a BCP-47 code it refers to the internal code 'eml'. Unfortunately, both of these have ltr directionality which makes this test case less useful than it could be.</p>
|
||
<p>Ambiguous BCP-47 code:</p>
|
||
<dl>
|
||
<dt>Directionality of internal code 'egl'</dt>
|
||
<dd><span typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"#dir:egl","function":"dir"},"params":{},"i":0}}]}'>ltr</span></dd>
|
||
<dt>Directionality of internal code 'eml'</dt>
|
||
<dd><span typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"#dir:egl","function":"dir"},"params":{"1":{"wt":"bcp47"}},"i":0}}]}'>ltr</span> == <span typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"#dir:eml","function":"dir"},"params":{},"i":0}}]}'>ltr</span></dd>
|
||
</dl>
|
||
!! end
|
||
|
||
!! test
|
||
Dir parser function (target language)
|
||
!! options
|
||
language=fa
|
||
cat
|
||
!! metadata
|
||
!! wikitext
|
||
These are all equivalent:
|
||
|
||
{{#dir}} / {{#dir:}} / {{#dir:{{PAGELANGUAGE}}}}
|
||
!! html/php
|
||
<p>These are all equivalent:
|
||
</p><p>rtl / rtl / rtl
|
||
</p>
|
||
!! html/parsoid+integrated
|
||
<p>These are all equivalent:</p>
|
||
<p><span typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"#dir","function":"dir"},"params":{},"i":0}}]}'>rtl</span> / <span typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"#dir:","function":"dir"},"params":{},"i":0}}]}'>rtl</span> / <span typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"#dir:{{PAGELANGUAGE}}","function":"dir"},"params":{},"i":0}}]}'>rtl</span></p>
|
||
!! end
|
||
|
||
!! test
|
||
Dir parser function (invalid code)
|
||
!! options
|
||
cat
|
||
!! wikitext
|
||
{{#dir:blah<blah}}
|
||
!! metadata
|
||
cat=Pages_with_invalid_language_codes sort=
|
||
!! html/php
|
||
<p>ltr
|
||
</p>
|
||
!! html/parsoid+integrated
|
||
<p><span typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"#dir:blah<blah","function":"dir"},"params":{},"i":0}}]}'>ltr</span></p>
|
||
!! end
|
||
|
||
!! test
|
||
Bcp47 parser function (valid codes)
|
||
!! wikitext
|
||
Serbian: {{#bcp47:sr-ec}}
|
||
|
||
Cantonese: {{#bcp47:zh-yue}}
|
||
|
||
Formal German (with space): {{#bcp47: de-formal}}
|
||
|
||
Simple English: {{#bcp47:simple}}
|
||
|
||
The string 'egl' is a valid internal code, distinct from the
|
||
internal code 'eml'; however both map to the BCP-47 code 'egl'.
|
||
|
||
Ambiguous BCP-47 code:
|
||
;Internal code 'eml':{{#bcp47:eml}} == egl
|
||
;Internal code 'egl':{{#bcp47:egl}} == egl
|
||
!! html/php
|
||
<p>Serbian: sr-Cyrl
|
||
</p><p>Cantonese: yue
|
||
</p><p>Formal German (with space): de-x-formal
|
||
</p><p>Simple English: en-simple
|
||
</p><p>The string 'egl' is a valid internal code, distinct from the
|
||
internal code 'eml'; however both map to the BCP-47 code 'egl'.
|
||
</p><p>Ambiguous BCP-47 code:
|
||
</p>
|
||
<dl><dt>Internal code 'eml'</dt>
|
||
<dd>egl == egl</dd>
|
||
<dt>Internal code 'egl'</dt>
|
||
<dd>egl == egl</dd></dl>
|
||
!! html/parsoid+integrated
|
||
<p>Serbian: <span typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"#bcp47:sr-ec","function":"bcp47"},"params":{},"i":0}}]}'>sr-Cyrl</span></p>
|
||
<p>Cantonese: <span typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"#bcp47:zh-yue","function":"bcp47"},"params":{},"i":0}}]}'>yue</span></p>
|
||
<p>Formal German (with space): <span typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"#bcp47: de-formal","function":"bcp47"},"params":{},"i":0}}]}'>de-x-formal</span></p>
|
||
<p>Simple English: <span typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"#bcp47:simple","function":"bcp47"},"params":{},"i":0}}]}'>en-simple</span></p>
|
||
<p>The string 'egl' is a valid internal code, distinct from the internal code 'eml'; however both map to the BCP-47 code 'egl'.</p>
|
||
<p>Ambiguous BCP-47 code:</p>
|
||
<dl>
|
||
<dt>Internal code 'eml'</dt>
|
||
<dd><span typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"#bcp47:eml","function":"bcp47"},"params":{},"i":0}}]}'>egl</span> == egl</dd>
|
||
<dt>Internal code 'egl'</dt>
|
||
<dd><span typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"#bcp47:egl","function":"bcp47"},"params":{},"i":0}}]}'>egl</span> == egl</dd>
|
||
</dl>
|
||
!! end
|
||
|
||
!! test
|
||
Bcp47 parser function (target language)
|
||
!! options
|
||
language=sr-ec
|
||
!! wikitext
|
||
These are all equivalent:
|
||
|
||
{{#bcp47}} / {{#bcp47:}} / {{#bcp47:{{PAGELANGUAGE}}}}
|
||
!! html/php
|
||
<p>These are all equivalent:
|
||
</p><p>sr-Cyrl / sr-Cyrl / sr-Cyrl
|
||
</p>
|
||
!! html/parsoid+integrated
|
||
<p>These are all equivalent:</p>
|
||
<p><span typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"#bcp47","function":"bcp47"},"params":{},"i":0}}]}'>sr-Cyrl</span> / <span typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"#bcp47:","function":"bcp47"},"params":{},"i":0}}]}'>sr-Cyrl</span> / <span typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"#bcp47:{{PAGELANGUAGE}}","function":"bcp47"},"params":{},"i":0}}]}'>sr-Cyrl</span></p>
|
||
!! end
|
||
|
||
# from https://commons.wikimedia.org/w/index.php?title=Template:BCP47&oldid=597081406
|
||
!! test
|
||
Bcp47 parser function (examples from Template:BCP47)
|
||
!! wikitext
|
||
Unaffected codes, for example:
|
||
*{{#bcp47:en}} returns: "en"
|
||
Changes required by BCP47, using standard codes:
|
||
*{{#bcp47:als}} returns: "gsw"
|
||
*{{#bcp47:fiu-vro}} returns: "vro"
|
||
*{{#bcp47:simple}} returns: "en"
|
||
*{{#bcp47:zh-classical}} returns: "lzh"
|
||
*{{#bcp47:roa-rup}} returns: "rup"
|
||
Changes required by BCP47, currently using private-use extensions:
|
||
*{{#bcp47:nrm}} returns: "nrf"
|
||
*{{#bcp47:roa-tara}} returns: "it-x-tara"
|
||
Changes preferable with BCP47 for improved interoperability (not really violations):
|
||
*{{#bcp47:be-x-old}} returns: "be-tarask"
|
||
!! html/php
|
||
<p>Unaffected codes, for example:
|
||
</p>
|
||
<ul><li>en returns: "en"</li></ul>
|
||
<p>Changes required by BCP47, using standard codes:
|
||
</p>
|
||
<ul><li>gsw returns: "gsw"</li>
|
||
<li>vro returns: "vro"</li>
|
||
<li>en-simple returns: "en"</li>
|
||
<li>lzh returns: "lzh"</li>
|
||
<li>rup returns: "rup"</li></ul>
|
||
<p>Changes required by BCP47, currently using private-use extensions:
|
||
</p>
|
||
<ul><li>nrf returns: "nrf"</li>
|
||
<li>nap-x-tara returns: "it-x-tara"</li></ul>
|
||
<p>Changes preferable with BCP47 for improved interoperability (not really violations):
|
||
</p>
|
||
<ul><li>be-tarask returns: "be-tarask"</li></ul>
|
||
!! html/parsoid+integrated
|
||
<p>Unaffected codes, for example:</p>
|
||
<ul>
|
||
<li><span typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"#bcp47:en","function":"bcp47"},"params":{},"i":0}}]}'>en</span> returns: "en"</li>
|
||
</ul>
|
||
<p>Changes required by BCP47, using standard codes:</p>
|
||
<ul>
|
||
<li><span typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"#bcp47:als","function":"bcp47"},"params":{},"i":0}}]}'>gsw</span> returns: "gsw"</li>
|
||
<li><span typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"#bcp47:fiu-vro","function":"bcp47"},"params":{},"i":0}}]}'>vro</span> returns: "vro"</li>
|
||
<li><span typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"#bcp47:simple","function":"bcp47"},"params":{},"i":0}}]}'>en-simple</span> returns: "en"</li>
|
||
<li><span typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"#bcp47:zh-classical","function":"bcp47"},"params":{},"i":0}}]}'>lzh</span> returns: "lzh"</li>
|
||
<li><span typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"#bcp47:roa-rup","function":"bcp47"},"params":{},"i":0}}]}'>rup</span> returns: "rup"</li>
|
||
</ul>
|
||
<p>Changes required by BCP47, currently using private-use extensions:</p>
|
||
<ul>
|
||
<li><span typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"#bcp47:nrm","function":"bcp47"},"params":{},"i":0}}]}'>nrf</span> returns: "nrf"</li>
|
||
<li><span typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"#bcp47:roa-tara","function":"bcp47"},"params":{},"i":0}}]}'>nap-x-tara</span> returns: "it-x-tara"</li>
|
||
</ul>
|
||
<p>Changes preferable with BCP47 for improved interoperability (not really violations):</p>
|
||
<ul>
|
||
<li><span typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"#bcp47:be-x-old","function":"bcp47"},"params":{},"i":0}}]}'>be-tarask</span> returns: "be-tarask"</li>
|
||
</ul>
|
||
!! end
|
||
|
||
!!test
|
||
Padleft and padright (default 0-padding)
|
||
!! wikitext
|
||
{{padleft:xyz|5}}
|
||
{{padright:xyz|5}}
|
||
!! html/php
|
||
<p>00xyz
|
||
xyz00
|
||
</p>
|
||
!! html/parsoid
|
||
<p><span typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"padleft:xyz","function":"padleft"},"params":{"1":{"wt":"5"}},"i":0}}]}'>00xyz</span>
|
||
<span typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"padright:xyz","function":"padright"},"params":{"1":{"wt":"5"}},"i":0}}]}'>xyz00</span></p>
|
||
!! end
|
||
|
||
!!test
|
||
Padleft and padright (partial fill)
|
||
!! wikitext
|
||
{{padleft:xyz|6|ab}}
|
||
{{padright:xyz|6|ab}}
|
||
!! html/php
|
||
<p>abaxyz
|
||
xyzaba
|
||
</p>
|
||
!! html/parsoid
|
||
<p><span typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"padleft:xyz","function":"padleft"},"params":{"1":{"wt":"6"},"2":{"wt":"ab"}},"i":0}}]}'>abaxyz</span>
|
||
<span typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"padright:xyz","function":"padright"},"params":{"1":{"wt":"6"},"2":{"wt":"ab"}},"i":0}}]}'>xyzaba</span></p>
|
||
!! end
|
||
|
||
!!test
|
||
Padleft and padright as substr
|
||
!! wikitext
|
||
{{padleft:|3|abcde}}
|
||
{{padright:|3|abcde}}
|
||
!! html/php
|
||
<p>abc
|
||
abc
|
||
</p>
|
||
!! html/parsoid
|
||
<p><span typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"padleft:","function":"padleft"},"params":{"1":{"wt":"3"},"2":{"wt":"abcde"}},"i":0}}]}'>abc</span>
|
||
<span typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"padright:","function":"padright"},"params":{"1":{"wt":"3"},"2":{"wt":"abcde"}},"i":0}}]}'>abc</span></p>
|
||
!! end
|
||
|
||
!! test
|
||
Padleft and padright with non-numerical length (T180403)
|
||
!! wikitext
|
||
{{padleft:abcdef|junk}}
|
||
{{padright:abcdef|junk}}
|
||
!! html/php
|
||
<p>abcdef
|
||
abcdef
|
||
</p>
|
||
!! end
|
||
|
||
!!test
|
||
Special parser function
|
||
!! wikitext
|
||
{{#special:RandomPage}}
|
||
{{#special:BaDtItLe}}
|
||
{{#special:Foobar}}
|
||
!! html/php
|
||
<p>Special:Random
|
||
Special:Badtitle
|
||
Special:Foobar
|
||
</p>
|
||
!! html/parsoid
|
||
<p><span about="#mwt1" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"#special:RandomPage","function":"special"},"params":{},"i":0}}]}'>Special:Random</span>
|
||
<span about="#mwt2" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"#special:BaDtItLe","function":"special"},"params":{},"i":0}}]}'>Special:Badtitle</span>
|
||
<span about="#mwt3" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"#special:Foobar","function":"special"},"params":{},"i":0}}]}'>Special:Foobar</span></p>
|
||
!! end
|
||
|
||
# {{=}} will be converted to a parser function which expands to `=`
|
||
# If you have it defined as a Template that expands to `=` that's ok;
|
||
# and using it explicitly as {{Template:=}} (regardless of what it
|
||
# expands to) is also ok and will not generate a tracking category.
|
||
# T91154
|
||
#
|
||
# FIXME: Parsoid doesn't yet support this magic word natively, so standalone
|
||
# mode will fail this test.
|
||
!! test
|
||
Using {{=}} when it expands to "=" should not create a tracking category
|
||
!! wikitext
|
||
This uses {{=}} and {{Template:=}}.
|
||
!! html/php
|
||
<p>This uses = and =.
|
||
</p>
|
||
!! html/parsoid
|
||
<p>This uses <span about="#mwt1" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"=","function":"="},"params":{},"i":0}}]}'>=</span> and <span typeof="mw:Nowiki mw:Transclusion" about="#mwt2" data-mw='{"parts":[{"template":{"target":{"wt":"Template:=","href":"./Template:="},"params":{},"i":0}}]}'>=</span>.</p>
|
||
!! end
|
||
|
||
# Repeat the test, looking at categories. Note: none should be emitted!
|
||
!! test
|
||
Using {{=}} when it expands to "=" should not create a tracking category (cat)
|
||
!! options
|
||
cat
|
||
!! wikitext
|
||
This uses {{=}} and {{Template:=}}.
|
||
!! html/php
|
||
<p>This uses = and =.
|
||
</p>
|
||
!! end
|
||
|
||
!!test
|
||
T36939 - Case insensitive link parsing ([HttP://])
|
||
!! wikitext
|
||
[HttP://MediaWiki.Org/]
|
||
!! html/php
|
||
<p><a rel="nofollow" class="external autonumber" href="HttP://MediaWiki.Org/">[1]</a>
|
||
</p>
|
||
!! html/parsoid
|
||
<p><a rel="mw:ExtLink" href="HttP://MediaWiki.Org/" class="external autonumber"></a></p>
|
||
!! end
|
||
|
||
!!test
|
||
T36939 - Case insensitive link parsing ([HttP:// title])
|
||
!! wikitext
|
||
[HttP://MediaWiki.Org/ MediaWiki]
|
||
!! html
|
||
<p><a rel="nofollow" class="external text" href="HttP://MediaWiki.Org/">MediaWiki</a>
|
||
</p>
|
||
!! end
|
||
|
||
!!test
|
||
T36939 - Case insensitive link parsing (HttP://)
|
||
!! wikitext
|
||
HttP://MediaWiki.Org/
|
||
!! html/php
|
||
<p><a rel="nofollow" class="external free" href="HttP://MediaWiki.Org/">HttP://MediaWiki.Org/</a>
|
||
</p>
|
||
!! html/parsoid
|
||
<p><a rel="mw:ExtLink" href="HttP://MediaWiki.Org/" class="external free">HttP://MediaWiki.Org/</a></p>
|
||
!! end
|
||
|
||
|
||
###
|
||
### Parsoid-specific tests
|
||
### Parsoid-PHP parser incompatibilities
|
||
###
|
||
!!test
|
||
1. SOL-sensitive wikitext tokens as template-args
|
||
!! options
|
||
parsoid=wt2html,wt2wt
|
||
!! wikitext
|
||
{{1x|*a}}
|
||
{{1x|#a}}
|
||
{{1x|:a}}
|
||
!! html/php
|
||
<ul><li>a</li></ul>
|
||
<ol><li>a</li></ol>
|
||
<dl><dd>a</dd></dl>
|
||
!! html/parsoid
|
||
<ul about="#mwt1" typeof="mw:Transclusion" data-parsoid='{"pi":[[{"k":"1"}]]]}' data-mw='{"parts":[{"template":{"target":{"wt":"1x","href":"./Template:1x"},"params":{"1":{"wt":"*a"}},"i":0}}]}'><li>a</li></ul>
|
||
<ol about="#mwt2" typeof="mw:Transclusion" data-parsoid='{"pi":[[{"k":"1"}]]]}' data-mw='{"parts":[{"template":{"target":{"wt":"1x","href":"./Template:1x"},"params":{"1":{"wt":"#a"}},"i":0}}]}'><li>a</li></ol>
|
||
<dl about="#mwt3" typeof="mw:Transclusion" data-parsoid='{"pi":[[{"k":"1"}]]]}' data-mw='{"parts":[{"template":{"target":{"wt":"1x","href":"./Template:1x"},"params":{"1":{"wt":":a"}},"i":0}}]}'><dd>a</dd></dl>
|
||
!!end
|
||
|
||
#### -----------------------------------------------------------------
|
||
#### Parsoid-specific functionality tests
|
||
#### -----------------------------------------------------------------
|
||
|
||
## Just a regression test
|
||
!! test
|
||
Wikilink with only closing tag in target
|
||
!! options
|
||
parsoid=wt2html
|
||
!! wikitext
|
||
[[Test|</span>]]
|
||
!! html/parsoid
|
||
<p><a rel="mw:WikiLink" href="./Test" title="Test" data-parsoid='{"stx":"piped","a":{"href":"./Test"},"sa":{"href":"Test"}}'></a></p>
|
||
!! 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
|
||
<section begin="2011-05-16" />
|
||
<section end="2014-04-10 (MW 1.23wmf22)" />
|
||
!! html/parsoid
|
||
<p><meta typeof="mw:Extension/LabeledSectionTransclusion/begin" content="2011-05-16"/>
|
||
<meta typeof="mw:Extension/LabeledSectionTransclusion/end" content="2014-04-10 (MW 1.23wmf22)"/></p>
|
||
!! end
|
||
|
||
!! test
|
||
LST Sections: Newfangled approach
|
||
!! wikitext
|
||
<section begin="2011-05-16" />
|
||
<section end="2014-04-10 (MW 1.23wmf22)" />
|
||
!! html/parsoid
|
||
<p><link typeof="mw:Extension/section" about="#mwt4" data-mw='{"name":"section","attrs":{"begin":"2011-05-16"}}' />
|
||
<link typeof="mw:Extension/section" about="#mwt6" data-mw='{"name":"section","attrs":{"end":"2014-04-10 (MW 1.23wmf22)"}}' /></p>
|
||
!! html/parsoid+integrated
|
||
<p><section begin="2011-05-16" /> <section end="2014-04-10 (MW 1.23wmf22)" /></p>
|
||
!! end
|
||
|
||
!! test
|
||
LST Sections: Fostering
|
||
!! options
|
||
parsoid=wt2html
|
||
!! wikitext
|
||
{|
|
||
<section name="testing"/>
|
||
| 123
|
||
|}
|
||
!! html/parsoid
|
||
<link typeof="mw:Extension/section" about="#mwt2" data-parsoid='{"fostered":true}' data-mw='{"name":"section","attrs":{"name":"testing"}}'/><table>
|
||
|
||
<tbody><tr><td>123
|
||
</td></tr></tbody></table>
|
||
!! html/parsoid+integrated
|
||
<p><section name="testing"/></p>
|
||
<table>
|
||
<tbody>
|
||
<tr>
|
||
<td>123</td>
|
||
</tr>
|
||
</tbody>
|
||
</table>
|
||
!! end
|
||
|
||
#--------- Test stripping of empty nodes in template content ----------
|
||
|
||
!! test
|
||
Empty LI and TR nodes should be stripped from template content
|
||
!! options
|
||
parsoid=wt2html,wt2wt
|
||
!! wikitext
|
||
{{EmptyLITest}}
|
||
{{EmptyTRTest}}
|
||
!! html/parsoid
|
||
<ul about="#mwt1" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"EmptyLITest","href":"./Template:EmptyLITest"},"params":{},"i":0}}]}'><li>a</li>
|
||
|
||
|
||
<li>b</li></ul>
|
||
<table about="#mwt2" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"EmptyTRTest","href":"./Template:EmptyTRTest"},"params":{},"i":0}}]}'>
|
||
<tbody>
|
||
<tr>
|
||
<td>foo</td></tr>
|
||
|
||
<tr>
|
||
<td>bar</td></tr>
|
||
</tbody></table>
|
||
!! end
|
||
|
||
!! test
|
||
Empty LI and TR nodes should not be stripped from top-level content
|
||
!! wikitext
|
||
*a
|
||
*
|
||
*b
|
||
|
||
{|
|
||
|-
|
||
|-
|
||
|foo
|
||
|}
|
||
!! html/parsoid
|
||
<ul>
|
||
<li>a</li>
|
||
<li class='mw-empty-elt'></li>
|
||
<li>b</li>
|
||
</ul>
|
||
<table>
|
||
<tbody>
|
||
<tr class='mw-empty-elt'></tr>
|
||
<tr>
|
||
<td>foo</td>
|
||
</tr>
|
||
</tbody>
|
||
</table>
|
||
!! end
|
||
|
||
!! test
|
||
Empty TR nodes should not be stripped if they have any attributes set
|
||
!! wikitext
|
||
{{EmptyTRWithHTMLAttrTest}}
|
||
!! html/parsoid
|
||
<table about="#mwt1" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"EmptyTRWithHTMLAttrTest","href":"./Template:EmptyTRWithHTMLAttrTest"},"params":{},"i":0}}]}'>
|
||
<tr align='center'></tr>
|
||
<tr><td>foo</td></tr>
|
||
<tr align='center'></tr>
|
||
<tr><td>bar</td></tr>
|
||
</table>
|
||
!! end
|
||
|
||
!! test
|
||
|
||
Tag-like HTML structures are passed through as text
|
||
!! wikitext
|
||
<x y>
|
||
|
||
<x.y>
|
||
|
||
<x-y>
|
||
|
||
1>2
|
||
|
||
x<y
|
||
|
||
a>b
|
||
|
||
1<d e>f
|
||
!! html
|
||
<p><x y>
|
||
</p><p><x.y>
|
||
</p><p><x-y>
|
||
</p><p>1>2
|
||
</p><p>x<y
|
||
</p><p>a>b
|
||
</p><p>1<d e>f
|
||
</p>
|
||
!! end
|
||
|
||
!! test
|
||
HTML tag with necessary entities in attributes
|
||
!! wikitext
|
||
<span title="&amp;">foo</span>
|
||
!! html
|
||
<p><span title="&amp;">foo</span>
|
||
</p>
|
||
!! end
|
||
|
||
!! test
|
||
HTML tag with 'unnecessary' entity encoding in attributes
|
||
!! wikitext
|
||
<span title="&">foo</span>
|
||
!! html
|
||
<p><span title="&">foo</span>
|
||
</p>
|
||
!! end
|
||
|
||
!! test
|
||
HTML tag with broken attribute value quoting
|
||
!! options
|
||
parsoid=wt2html,html2html
|
||
!! wikitext
|
||
<span title="Hello world>Foo</span>
|
||
!! html/php
|
||
<p><span title="Hello world">Foo</span>
|
||
</p>
|
||
!! html/parsoid
|
||
<p><span title="Hello world">Foo</span></p>
|
||
!! end
|
||
|
||
!! test
|
||
Self-closed tag with broken attribute value quoting
|
||
!! options
|
||
parsoid=wt2html,html2html
|
||
!! wikitext
|
||
<div title="Hello world />Foo
|
||
!! html
|
||
<div title="Hello world">Foo</div>
|
||
!! end
|
||
|
||
!! test
|
||
Table with broken attribute value quoting
|
||
!! options
|
||
parsoid=wt2html,html2html
|
||
!! wikitext
|
||
{|
|
||
| title="Hello world|Foo
|
||
|}
|
||
!! html/php
|
||
<table>
|
||
<tbody><tr>
|
||
<td title="Hello world">Foo
|
||
</td></tr></tbody></table>
|
||
!! html/parsoid
|
||
<table>
|
||
<tr>
|
||
<td title="Hello world">Foo
|
||
</td></tr></table>
|
||
!! 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
|
||
<table>
|
||
<tbody><tr>
|
||
<td title="Hello world">Foo
|
||
</td>
|
||
<td style="color:red">Bar
|
||
</td></tr></tbody></table>
|
||
!! html/parsoid
|
||
<table><tbody>
|
||
<tr>
|
||
<td title="Hello world">Foo
|
||
</td><td style="color:red">Bar
|
||
</td></tr></tbody></table>
|
||
!! end
|
||
|
||
!!test
|
||
Accept empty td cell attribute
|
||
!! wikitext
|
||
{|
|
||
| align="center" |foo|| |
|
||
|}
|
||
!! html
|
||
<table>
|
||
<tbody><tr>
|
||
<td align="center">foo</td>
|
||
<td>
|
||
</td></tr></tbody></table>
|
||
!! end
|
||
|
||
!!test
|
||
Non-empty attributes in th-cells
|
||
!! wikitext
|
||
{|
|
||
!Foo!! style="color: red" |Bar
|
||
|}
|
||
!! html
|
||
<table>
|
||
<tbody><tr>
|
||
<th>Foo</th>
|
||
<th style="color: red">Bar
|
||
</th></tr></tbody></table>
|
||
!! end
|
||
|
||
!!test
|
||
Accept empty attributes in th-cells
|
||
!! wikitext
|
||
{|
|
||
!|foo!!|bar
|
||
|}
|
||
!! html
|
||
<table>
|
||
<tbody><tr>
|
||
<th>foo</th>
|
||
<th>bar
|
||
</th></tr></tbody></table>
|
||
!! end
|
||
|
||
!!test
|
||
Empty table rows go away
|
||
!! wikitext
|
||
{|
|
||
|Hello
|
||
|there
|
||
|- class="foo"
|
||
|-
|
||
|}
|
||
!! html
|
||
<table>
|
||
<tbody><tr>
|
||
<td>Hello
|
||
</td>
|
||
<td>there
|
||
</td></tr>
|
||
|
||
</tbody></table>
|
||
!! end
|
||
|
||
###
|
||
### Parsoid-centric tests for testing RTing of inter-element separators
|
||
### Edge cases not tested by existing parser tests and specific to
|
||
### Parsoid-specific serialization strategies.
|
||
###
|
||
|
||
!!test
|
||
RT-ed inter-element separators should be valid separators
|
||
!! wikitext
|
||
{|
|
||
|- [[foo]]
|
||
|}
|
||
!! html/php
|
||
<table>
|
||
|
||
</table>
|
||
!! html/parsoid
|
||
<table>
|
||
<tbody><tr class='mw-empty-elt' data-parsoid='{"startTagSrc":"|-","a":{"[[foo]]":null},"sa":{"[[foo]]":""}}'></tr>
|
||
</tbody></table>
|
||
!!end
|
||
|
||
# Parsoid-only test of a DOM pass
|
||
!!test
|
||
Trailing newlines in a deep dom-subtree that ends a wikitext line should be migrated out
|
||
!! wikitext
|
||
{|
|
||
|<small>foo
|
||
bar
|
||
|}
|
||
|
||
{|
|
||
|<small>foo<small>
|
||
|}
|
||
!! html/parsoid
|
||
<table>
|
||
<tbody><tr data-parsoid='{"autoInsertedStart":true}'><td data-parsoid='{}'><small data-parsoid='{"stx":"html","autoInsertedEnd":true}'>foo
|
||
<p>bar</p></small></td></tr>
|
||
</tbody></table>
|
||
|
||
<table>
|
||
<tbody><tr data-parsoid='{"autoInsertedStart":true}'><td data-parsoid='{}'><small data-parsoid='{"stx":"html","autoInsertedEnd":true}'>foo<small data-parsoid='{"stx":"html","autoInsertedEnd":true}'></small></small></td></tr>
|
||
</tbody></table>
|
||
!!end
|
||
|
||
# Note that the "style" attribute is really a template parameter here.
|
||
# The = would have to be {{=}} if you wanted the literal.
|
||
!!test
|
||
Empty TD followed by TD with tpl-generated attribute
|
||
!! wikitext
|
||
{|
|
||
|-
|
||
|
|
||
|{{1x|style='color:red'}}|foo
|
||
|}
|
||
!! html
|
||
<table>
|
||
|
||
<tbody><tr>
|
||
<td>
|
||
</td>
|
||
<td>foo
|
||
</td></tr></tbody></table>
|
||
!! end
|
||
|
||
!!test
|
||
Indented table with an empty td
|
||
!! wikitext
|
||
{|
|
||
|-
|
||
|
|
||
|foo
|
||
|}
|
||
!! html
|
||
<table>
|
||
|
||
<tbody><tr>
|
||
<td>
|
||
</td>
|
||
<td>foo
|
||
</td></tr></tbody></table>
|
||
!! end
|
||
|
||
!! test
|
||
Indented table with blank lines in between (T85627)
|
||
!! wikitext
|
||
{|
|
||
|foo
|
||
|
||
|
||
|}
|
||
!! html/php
|
||
<table>
|
||
<tbody><tr>
|
||
<td>foo
|
||
<p><br />
|
||
</p>
|
||
</td></tr></tbody></table>
|
||
!! html/parsoid
|
||
<table>
|
||
<tbody><tr><td>foo
|
||
<p>
|
||
<br /></p></td></tr>
|
||
</tbody></table>
|
||
!! end
|
||
|
||
!!test
|
||
Indented block & table
|
||
!! wikitext
|
||
<div>foo</div>
|
||
{|
|
||
|foo
|
||
|}
|
||
!! html/php
|
||
<div>foo</div>
|
||
<table>
|
||
<tbody><tr>
|
||
<td>foo
|
||
</td></tr></tbody></table>
|
||
!! html/parsoid
|
||
<div data-parsoid='{"stx":"html"}'>foo</div>
|
||
<table><tbody>
|
||
<tr data-parsoid='{"autoInsertedStart":true}'><td data-parsoid='{}'>foo</td></tr>
|
||
</tbody></table>
|
||
!!end
|
||
|
||
!! test
|
||
Indent and comment before table row
|
||
!! wikitext
|
||
{|
|
||
<!--hi-->|-
|
||
|there
|
||
|}
|
||
!! html/php
|
||
<table>
|
||
|
||
<tbody><tr>
|
||
<td>there
|
||
</td></tr></tbody></table>
|
||
!! html/parsoid
|
||
<table>
|
||
<!--hi--><tbody><tr data-parsoid='{"startTagSrc":"|-"}'>
|
||
<td data-parsoid='{}'> there</td></tr>
|
||
</tbody></table>
|
||
!! end
|
||
|
||
# PHP parser omits empty TR
|
||
!!test
|
||
Empty TR followed by a template-generated TR
|
||
!! wikitext
|
||
{|
|
||
|-
|
||
{{1x|<tr><td>foo</td></tr>}}
|
||
|}
|
||
!! html/php
|
||
<table>
|
||
|
||
<tbody><tr><td>foo</td></tr>
|
||
</tbody></table>
|
||
!! html/parsoid
|
||
<table>
|
||
<tbody>
|
||
<tr class='mw-empty-elt'></tr>
|
||
<tr about="#mwt1" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"1x","href":"./Template:1x"},"params":{"1":{"wt":"<tr><td>foo</td></tr>"}},"i":0}}]}'>
|
||
<td>foo</td></tr>
|
||
</tbody></table>
|
||
!!end
|
||
|
||
## PHP and parsoid output differ for this; as usual PHP omits empty
|
||
## elements, and since it strips the comments the TR is empty.
|
||
!!test
|
||
Empty TR followed by mixed-ws-comment line should RT correctly
|
||
!! wikitext
|
||
{|
|
||
|-
|
||
<!--c-->
|
||
|-
|
||
<!--c--> <!--d-->
|
||
|}
|
||
!! html/php
|
||
<table>
|
||
|
||
|
||
</table>
|
||
!! html/parsoid
|
||
<table>
|
||
<tbody>
|
||
<tr class='mw-empty-elt'></tr>
|
||
<!--c-->
|
||
<tr class="mw-empty-elt">
|
||
<!--c--> </tr><!--d-->
|
||
</tbody></table>
|
||
!! end
|
||
|
||
!!test
|
||
Multi-line image caption generated by templates with/without trailing newlines
|
||
!! wikitext
|
||
[[File:Foobar.jpg|thumb|300x300px|foo\n{{1x|A}}\n{{1x|B}}\n{{1x|C}}]]
|
||
[[File:Foobar.jpg|thumb|300x300px|foo\n{{1x|A}}\n{{1x|B}}\n{{1x|C}}\n\n]]
|
||
!! html/parsoid
|
||
<figure typeof="mw:File/Thumb"><a href="./File:Foobar.jpg" class="mw-file-description"><img resource="./File:Foobar.jpg" src="http://example.com/images/thumb/3/3a/Foobar.jpg/300px-Foobar.jpg" decoding="async" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="34" width="300" srcset="http://example.com/images/thumb/3/3a/Foobar.jpg/450px-Foobar.jpg 1.5x, http://example.com/images/thumb/3/3a/Foobar.jpg/600px-Foobar.jpg 2x" class="mw-file-element"/></a><figcaption>foo\n<span about="#mwt9" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"1x","href":"./Template:1x"},"params":{"1":{"wt":"A"}},"i":0}}]}'>A</span>\n<span about="#mwt10" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"1x","href":"./Template:1x"},"params":{"1":{"wt":"B"}},"i":0}}]}'>B</span>\n<span about="#mwt11" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"1x","href":"./Template:1x"},"params":{"1":{"wt":"C"}},"i":0}}]}'>C</span></figcaption></figure>
|
||
<figure typeof="mw:File/Thumb"><a href="./File:Foobar.jpg" class="mw-file-description"><img resource="./File:Foobar.jpg" src="http://example.com/images/thumb/3/3a/Foobar.jpg/300px-Foobar.jpg" decoding="async" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="34" width="300" srcset="http://example.com/images/thumb/3/3a/Foobar.jpg/450px-Foobar.jpg 1.5x, http://example.com/images/thumb/3/3a/Foobar.jpg/600px-Foobar.jpg 2x" class="mw-file-element"/></a><figcaption>foo\n<span about="#mwt12" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"1x","href":"./Template:1x"},"params":{"1":{"wt":"A"}},"i":0}}]}'>A</span>\n<span about="#mwt13" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"1x","href":"./Template:1x"},"params":{"1":{"wt":"B"}},"i":0}}]}'>B</span>\n<span about="#mwt14" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"1x","href":"./Template:1x"},"params":{"1":{"wt":"C"}},"i":0}}]}'>C</span>\n\n</figcaption></figure>
|
||
!! end
|
||
|
||
!! test
|
||
New element inserted (without intervening newlines) after an old sol-transparent node should serialize correctly
|
||
!! options
|
||
parsoid=html2wt
|
||
!! html/parsoid
|
||
<meta typeof="mw:Includes/IncludeOnly" data-parsoid='{"src":"<includeonly>foo</includeonly>"}' data-mw='{"src":"<includeonly>foo</includeonly>"}'/><meta typeof="mw:Includes/IncludeOnly/End" data-parsoid='{"src":""}'/><p>new para</p>
|
||
|
||
<link rel="mw:PageProp/Category" href="./Category:Foo" data-parsoid='{}'/><h1>new heading</h1>
|
||
!! wikitext
|
||
<includeonly>foo</includeonly>
|
||
new para
|
||
|
||
[[Category:Foo]]
|
||
|
||
= new heading =
|
||
!! end
|
||
|
||
## PHP emits broken html for this, and since this is primarily
|
||
## a Parsoid serializer test, marking this Parsoid only
|
||
!! test
|
||
Improperly nested inline or quotes tags with whitespace in between
|
||
!! options
|
||
parsoid=html2wt
|
||
!! html/parsoid
|
||
<p><span> <s>x</s></span><s> </s>
|
||
<b> <i>x</i></b><i> </i>
|
||
</p>
|
||
!! wikitext
|
||
<span> <s>x</s></span><s> </s>
|
||
''' ''x'''''
|
||
!! end
|
||
|
||
!!test
|
||
Encapsulate protected attributes from wt
|
||
!! wikitext
|
||
<div typeof="mw:placeholder stuff" data-mw="whoo" data-parsoid="weird" data-parsoid-other="no" about="time" rel="mw:true">foo</div>
|
||
|
||
{| typeof="mw:placeholder stuff" data-mw="whoo" data-parsoid="weird" data-parsoid-other="no" about="time" rel="mw:true"
|
||
|ok
|
||
|}
|
||
!! html/parsoid
|
||
<div data-x-typeof="mw:placeholder stuff" data-x-data-mw="whoo" data-x-data-parsoid="weird" data-x-data-parsoid-other="no" data-x-about="time" data-x-rel="mw:true">foo</div>
|
||
|
||
<table data-x-typeof="mw:placeholder stuff" data-x-data-mw="whoo" data-x-data-parsoid="weird" data-x-data-parsoid-other="no" data-x-about="time" data-x-rel="mw:true">
|
||
<tbody><tr><td data-parsoid='{}'>ok</td></tr>
|
||
</tbody></table>
|
||
!!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</pre>
|
||
!! html/parsoid
|
||
<p>plain text</p>
|
||
!! end
|
||
|
||
## Remex doesn't account for fostered content.
|
||
!! test
|
||
1. Ensure fostered text content is wrapped in element nodes
|
||
!! options
|
||
parsoid=wt2html
|
||
!! wikitext
|
||
<table>hi</table><table>ho</table>
|
||
!! html/php
|
||
hi<table></table>ho<table></table>
|
||
!! html/parsoid
|
||
<p data-parsoid='{"fostered":true,"autoInsertedEnd":true,"autoInsertedStart":true}'>hi</p><table data-parsoid='{"stx":"html"}'></table><p data-parsoid='{"fostered":true,"autoInsertedEnd":true,"autoInsertedStart":true}'>ho</p><table data-parsoid='{"stx":"html"}'></table>
|
||
!! end
|
||
|
||
## Remex doesn't account for fostered content.
|
||
!! test
|
||
2. Ensure fostered text content is wrapped in element nodes (traps regressions around fostered marker on the element getting lost)
|
||
!! options
|
||
parsoid=wt2html,wt2wt
|
||
!! wikitext
|
||
<table>
|
||
<tr> || ||
|
||
<td> a
|
||
</table>
|
||
!! html/php
|
||
|| ||
|
||
<table>
|
||
<tbody><tr><td> a
|
||
</td></tr></tbody></table>
|
||
!! html/parsoid
|
||
<p data-parsoid='{"fostered":true,"autoInsertedEnd":true,"autoInsertedStart":true}'> || ||</p>
|
||
<table data-parsoid='{"stx":"html"}'>
|
||
<tbody><tr data-parsoid='{"stx":"html"}'><td data-parsoid='{"stx":"html"}'> a
|
||
</td></tr></tbody></table>
|
||
!! end
|
||
|
||
## Remex doesn't account for fostered content.
|
||
!! test
|
||
Encapsulation properly handles null DSR information from foster box
|
||
!! options
|
||
parsoid=wt2html,wt2wt
|
||
!! wikitext
|
||
{{1x|<table>foo<tr><td>bar</td></tr></table>}}
|
||
!! html/parsoid
|
||
<p about="#mwt1" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"1x","href":"./Template:1x"},"params":{"1":{"wt":"<table>foo<tr><td>bar</td></tr></table>"}},"i":0}}]}'>foo</p><table about="#mwt1" data-parsoid='{"stx":"html"}'><tbody><tr><td>bar</td></tr></tbody></table>
|
||
!! end
|
||
|
||
## Remex doesn't account for fostered content.
|
||
!! test
|
||
1. Encapsulate foster-parented transclusion content
|
||
!! options
|
||
parsoid=wt2wt,wt2html
|
||
!! wikitext
|
||
<table>{{1x|foo<tr><td>bar</td></tr>}}</table>
|
||
!! html/php
|
||
foo<table><tbody><tr><td>bar</td></tr></tbody></table>
|
||
!! html/parsoid
|
||
<p about="#mwt2" typeof="mw:Transclusion" data-parsoid='{"fostered":true,"autoInsertedEnd":true,"autoInsertedStart":true,"firstWikitextNode":"TABLE_html","pi":[[{"k":"1"}]]}' data-mw='{"parts":["<table>",{"template":{"target":{"wt":"1x","href":"./Template:1x"},"params":{"1":{"wt":"foo<tr><td>bar</td></tr>"}},"i":0}},"</table>"]}'>foo</p><table about="#mwt2" data-parsoid='{"stx":"html"}'><tbody><tr><td>bar</td></tr></tbody></table>
|
||
!! end
|
||
|
||
!! test
|
||
2. Encapsulate foster-parented transclusion content
|
||
!! options
|
||
parsoid=wt2wt,wt2html
|
||
!! wikitext
|
||
<table><div>{{1x|foo}}</div><tr><td>bar</td></tr></table>
|
||
!! html/parsoid
|
||
<div typeof="mw:Transclusion" data-mw="{"parts":["<table><div>",{"template":{"target":{"wt":"1x","href":"./Template:1x"},"params":{"1":{"wt":"foo"}},"i":0}},"</div><tr><td>bar</td></tr></table>"]}">foo</div>
|
||
<table>
|
||
<tbody>
|
||
<tr>
|
||
<td>bar</td>
|
||
</tr>
|
||
</tbody>
|
||
</table>
|
||
!! end
|
||
|
||
!! test
|
||
3. Encapsulate foster-parented transclusion content
|
||
!! options
|
||
parsoid=wt2wt,wt2html
|
||
!! wikitext
|
||
<table><div><p>{{1x|foo</p></div><tr><td>}}bar</td></tr></table>
|
||
!! html/parsoid
|
||
<div typeof="mw:Transclusion" data-mw="{"parts":["<table><div><p>",{"template":{"target":{"wt":"1x","href":"./Template:1x"},"params":{"1":{"wt":"foo</p></div><tr><td>"}},"i":0}},"bar</td></tr></table>"]}">
|
||
<p>foo</p>
|
||
</div>
|
||
<table>
|
||
<tbody>
|
||
<tr>
|
||
<td>bar</td>
|
||
</tr>
|
||
</tbody>
|
||
</table>
|
||
!! end
|
||
|
||
!! test
|
||
4. Encapsulate foster-parented transclusion content
|
||
!! options
|
||
parsoid=wt2wt,wt2html
|
||
!! wikitext
|
||
<table><div><p>{{1x|foo</p></div><tr><td>}}bar</td></tr></table>
|
||
!! html/parsoid
|
||
<div typeof="mw:Transclusion" data-mw="{"parts":["<table><div><p>",{"template":{"target":{"wt":"1x","href":"./Template:1x"},"params":{"1":{"wt":"foo</p></div><tr><td>"}},"i":0}},"bar</td></tr></table>"]}">
|
||
<p>foo</p>
|
||
</div>
|
||
<table>
|
||
<tbody>
|
||
<tr>
|
||
<td>bar</td>
|
||
</tr>
|
||
</tbody>
|
||
</table>
|
||
!! end
|
||
|
||
## Remex doesn't account for fostered content.
|
||
!! test
|
||
5. Encapsulate foster-parented transclusion content
|
||
!!options
|
||
parsoid=wt2wt,wt2html
|
||
!! wikitext
|
||
<table><tr><td><div><p>{{1x|foo</p></div></td>foo}}</tr></table>
|
||
!! html/php
|
||
foo<table><tbody><tr><td><div><p>foo</p></div></td></tr></tbody></table>
|
||
!! html/parsoid
|
||
<p about="#mwt2" typeof="mw:Transclusion" data-parsoid='{"fostered":true,"autoInsertedEnd":true,"autoInsertedStart":true,"firstWikitextNode":"TABLE_html","pi":[[{"k":"1"}]]}' data-mw='{"parts":["<table><tr><td><div><p>",{"template":{"target":{"wt":"1x","href":"./Template:1x"},"params":{"1":{"wt":"foo</p></div></td>foo"}},"i":0}},"</tr></table>"]}'>foo</p><table about="#mwt2" data-parsoid='{"stx":"html"}'><tbody><tr><td><div><p>foo</p></div></td></tr></tbody></table>
|
||
!! end
|
||
|
||
## Remex doesn't account for fostered content.
|
||
!! test
|
||
6. Encapsulate foster-parented transclusion content
|
||
!! options
|
||
parsoid=wt2wt,wt2html
|
||
!! wikitext
|
||
<table><tr><td><div><p>{{1x|foo</p></div></td>foo</tr></table>}}<p>ok</p>
|
||
!! html/php
|
||
foo<table><tbody><tr><td><div><p>foo</p></div></td></tr></tbody></table><p>ok</p>
|
||
!! html/parsoid
|
||
<p about="#mwt2" typeof="mw:Transclusion" data-parsoid='{"fostered":true,"autoInsertedEnd":true,"autoInsertedStart":true,"firstWikitextNode":"TABLE_html","pi":[[{"k":"1"}]]}' data-mw='{"parts":["<table><tr><td><div><p>",{"template":{"target":{"wt":"1x","href":"./Template:1x"},"params":{"1":{"wt":"foo</p></div></td>foo</tr></table>"}},"i":0}}]}'>foo</p><table about="#mwt2" data-parsoid='{"stx":"html"}'><tbody><tr><td><div><p>foo</p></div></td></tr></tbody></table><p data-parsoid='{"stx":"html"}'>ok</p>
|
||
!! end
|
||
|
||
!! test
|
||
7. Encapsulate foster-parented transclusion content
|
||
!!options
|
||
parsoid=wt2wt,wt2html
|
||
!! wikitext
|
||
<table>{{1x|<p>foo</p>}}<td>bar</td></table>
|
||
!! html/parsoid
|
||
<p about="#mwt1" typeof="mw:Transclusion" data-mw="{"parts":["<table>",{"template":{"target":{"wt":"1x","href":"./Template:1x"},"params":{"1":{"wt":"<p>foo</p>"}},"i":0}},"<td>bar</td></table>"]}">foo</p>
|
||
<table>
|
||
<tbody>
|
||
<tr>
|
||
<td>bar</td>
|
||
</tr>
|
||
</tbody>
|
||
</table>
|
||
!! end
|
||
|
||
## Remex doesn't account for fostered content.
|
||
# Note that the wt is broken on purpose: the = should be {{=}} if you
|
||
# don't want it to be a template parameter key.
|
||
!! test
|
||
8. Encapsulate foster-parented transclusion content
|
||
!! options
|
||
parsoid=wt2wt,wt2html
|
||
!! wikitext
|
||
{{1x|a
|
||
}}{|{{1x|style='color:red'}}
|
||
|-
|
||
|b
|
||
|}
|
||
!! html/php
|
||
<p>a
|
||
</p>
|
||
<table>
|
||
|
||
<tbody><tr>
|
||
<td>b
|
||
</td></tr></tbody></table>
|
||
!! html/parsoid
|
||
<p about="#mwt1" typeof="mw:Transclusion" data-parsoid='{"pi":[[{"k":"1"}]]}' data-mw='{"parts":[{"template":{"target":{"wt":"1x","href":"./Template:1x"},"params":{"1":{"wt":"a\n"}},"i":0}}]}'>a</p><span about="#mwt1">
|
||
</span><p about="#mwt3" typeof="mw:Transclusion" data-parsoid='{"fostered":true,"autoInsertedEnd":true,"autoInsertedStart":true,"firstWikitextNode":"TABLE","pi":[[{"k":"style","named":true}]]}' data-mw='{"parts":["{|",{"template":{"target":{"wt":"1x","href":"./Template:1x"},"params":{"style":{"wt":"'color:red'"}},"i":0}},"\n|-\n|b\n|}"]}'>{{{1}}}</p><table about="#mwt3">
|
||
<tbody><tr>
|
||
<td>b
|
||
</td></tr></tbody></table>
|
||
!! end
|
||
|
||
## Remex doesn't account for fostered content.
|
||
!! test
|
||
9. Encapsulate foster-parented transclusion content
|
||
!!options
|
||
parsoid=wt2wt,wt2html
|
||
!! wikitext
|
||
<table>{{1x|hi</table>hello}}
|
||
!! html/php
|
||
hi<table></table><p>hello</p>
|
||
!! html/parsoid
|
||
<p about="#mwt2" typeof="mw:Transclusion" data-parsoid='{"fostered":true,"autoInsertedEnd":true,"autoInsertedStart":true,"firstWikitextNode":"TABLE_html","pi":[[{"k":"1"}]]}' data-mw='{"parts":["<table>",{"template":{"target":{"wt":"1x","href":"./Template:1x"},"params":{"1":{"wt":"hi</table>hello"}},"i":0}}]}'>hi</p><table about="#mwt2"></table><p about="#mwt2">hello</p>
|
||
!! end
|
||
|
||
!! test
|
||
Table in fosterable position
|
||
!!options
|
||
parsoid=wt2html
|
||
!! wikitext
|
||
{{OpenTable}}
|
||
<div>
|
||
{|
|
||
|}
|
||
</div>
|
||
|}
|
||
!! html/parsoid
|
||
<div about="#mwt1" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"OpenTable","href":"./Template:OpenTable"},"params":{},"i":0}},"\n<div>\n"]}' data-parsoid='{"stx":"html","autoInsertedEnd":true,"pi":[[]]}'>
|
||
</div><span about="#mwt1">
|
||
</span>
|
||
<table about="#mwt1" data-parsoid='{"autoInsertedEnd":true}'></table>
|
||
|
||
<table>
|
||
</table>
|
||
!! end
|
||
|
||
# Parsoid only for T66747
|
||
# (Also core doesn't define {{#if}} in default install)
|
||
!! test
|
||
Properly encapsulate empty-content transclusions in fosterable positions
|
||
!! wikitext
|
||
<table>
|
||
{{#if:|
|
||
<td>foo</td>
|
||
}}
|
||
</table>
|
||
!! html/parsoid
|
||
<table about="#mwt1" typeof="mw:Transclusion" data-mw='{"parts":["<table>\n",{"template":{"target":{"wt":"#if:","function":"if"},"params":{"1":{"wt":"\n<td>foo</td>\n"}},"i":0}},"\n</table>"]}' data-parsoid='{"stx":"html","pi":[[{"k":"1"}]]}'>
|
||
|
||
</table>
|
||
!! end
|
||
|
||
## No longer captures its original intention
|
||
!! test
|
||
Always encapsulate foster box when template range is expanded to table
|
||
!! options
|
||
disabled
|
||
parsoid=wt2wt
|
||
!! wikitext
|
||
{|
|
||
hello
|
||
{{OpenTable}}
|
||
|}
|
||
!! html/parsoid
|
||
!! end
|
||
|
||
!! test
|
||
T115289: Unclosed table
|
||
!! wikitext
|
||
{{1x|<table>}}<!--c-->[[Category:Two]]
|
||
!! html/parsoid
|
||
<link rel="mw:PageProp/Category" href="./Category:Two" about="#mwt1" typeof="mw:Transclusion" data-parsoid='{"stx":"simple","a":{"href":"./Category:Two"},"sa":{"href":"Category:Two"},"pi":[[{"k":"1"}]]}' data-mw='{"parts":[{"template":{"target":{"wt":"1x","href":"./Template:1x"},"params":{"1":{"wt":"<table>"}},"i":0}},"<!--c-->[[Category:Two]]"]}'/><table about="#mwt1" data-parsoid='{"stx":"html","autoInsertedEnd":true}'><!--c--></table>
|
||
!! end
|
||
|
||
!! test
|
||
T115289: Don't migrate newlines out of tables with fostered content
|
||
!! wikitext
|
||
<table><td></td>{{1x|<tr>[[Category:One]]}}<!--c-->[[Category:Two]]
|
||
!! html/parsoid
|
||
<link rel="mw:PageProp/Category" href="./Category:One" about="#mwt2" typeof="mw:Transclusion" data-parsoid='{"stx":"simple","a":{"href":"./Category:One"},"sa":{"href":"Category:One"},"fostered":true,"pi":[[{"k":"1"}]]}' data-mw='{"parts":["<table><td></td>",{"template":{"target":{"wt":"1x","href":"./Template:1x"},"params":{"1":{"wt":"<tr>[[Category:One]]"}},"i":0}},"<!--c-->[[Category:Two]]"]}'/><link rel="mw:PageProp/Category" href="./Category:Two" about="#mwt2"/><table about="#mwt2" data-parsoid='{"stx":"html","autoInsertedEnd":true}'><tbody><tr><td></td></tr><!--c--></tbody></table>
|
||
!! end
|
||
|
||
!! test
|
||
T73074: More fostering fun
|
||
!! wikitext
|
||
<table><td></td>{{1x|<tr>}}<!--c-->[[Category:Two]]
|
||
!! html/parsoid
|
||
<link rel="mw:PageProp/Category" href="./Category:Two" data-parsoid='{"stx":"simple","a":{"href":"./Category:Two"},"sa":{"href":"Category:Two"},"fostered":true}'/><table data-parsoid='{"stx":"html","autoInsertedEnd":true}'><tbody><tr data-parsoid='{"autoInsertedStart":true}'><td data-parsoid='{"stx":"html"}'></td></tr><tr about="#mwt1" typeof="mw:Transclusion" class='mw-empty-elt' data-parsoid='{"autoInsertedEnd":true,"stx":"html","pi":[[{"k":"1"}]]}' data-mw='{"parts":[{"template":{"target":{"wt":"1x","href":"./Template:1x"},"params":{"1":{"wt":"<tr>"}},"i":0}}]}'></tr><!--c--></tbody></table>
|
||
!! end
|
||
|
||
## Regression test for Parsoid's template wrapping of fostered content
|
||
!! test
|
||
Fostered content with a dom fragment token starting with a transclusion
|
||
!! options
|
||
parsoid=wt2html
|
||
!! wikitext
|
||
{|
|
||
[[File:Foobar.jpg|right|{{1x|<div>123</div>}}]]
|
||
|}
|
||
!! html/parsoid
|
||
<figure class="mw-default-size mw-halign-right" typeof="mw:File" data-parsoid='{"fostered":true}'><a href="./File:Foobar.jpg" class="mw-file-description" title="123"><img alt="123" resource="./File:Foobar.jpg" src="http://example.com/images/3/3a/Foobar.jpg" decoding="async" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="220" width="1941" class="mw-file-element"/></a><figcaption><div about="#mwt1" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"1x","href":"./Template:1x"},"params":{"1":{"wt":"<div>123</div>"}},"i":0}}]}'>123</div></figcaption></figure><table>
|
||
|
||
</table>
|
||
!! end
|
||
|
||
!! article
|
||
Template:Tr
|
||
!! text
|
||
|-
|
||
!! end
|
||
|
||
!! test
|
||
1. Template wrapping shouldn't ignore fostered content
|
||
!! options
|
||
parsoid=wt2wt
|
||
!! wikitext
|
||
{|
|
||
{{tr}}
|
||
{{1x|
|
||
}}
|
||
|
||
hiho
|
||
!! html/parsoid
|
||
!! end
|
||
|
||
!! test
|
||
2. Template wrapping shouldn't ignore fostered content
|
||
!! options
|
||
parsoid=wt2wt
|
||
!! wikitext
|
||
{|
|
||
{{tr}}
|
||
{{1x|
|
||
}}
|
||
|
||
hiho
|
||
!! html/parsoid
|
||
!! end
|
||
|
||
!!test
|
||
Support <object> element with .data attribute
|
||
!!options
|
||
parsoid=html2wt
|
||
!! html/parsoid
|
||
<object data="test.swf"></object>
|
||
!! wikitext
|
||
<object data="test.swf"></object>
|
||
!!end
|
||
|
||
!! test
|
||
T72867: Don't block XML namespace declaration
|
||
!! wikitext
|
||
<span xmlns:dct="http://purl.org/dc/terms/" property="dct:title">MediaWiki</span>
|
||
!! html/php
|
||
<p><span xmlns:dct="http://purl.org/dc/terms/" property="dct:title">MediaWiki</span>
|
||
</p>
|
||
!! html/parsoid
|
||
<p><span xmlns:dct="http://purl.org/dc/terms/" data-x-property="dct:title" data-parsoid='{"stx":"html"}'>MediaWiki</span></p>
|
||
!! 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
|
||
<a href='http://en.wikipedia.org/wiki/Foobar'>http://en.wikipedia.org/wiki/Foobar</a>
|
||
<a href='http://en.wikipedia.org/wiki/Foobar' rel='mw:ExtLink'>http://en.wikipedia.org/wiki/Foobar</a>
|
||
<a href='http://en.wikipedia.org/wiki/Foobar' rel='mw:WikiLink'>http://en.wikipedia.org/wiki/Foobar</a>
|
||
!! 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
|
||
<p><a rel="mw:ExtLink" href="http://example.org/wiki/Foo">Foo</a></p>
|
||
!! wikitext
|
||
[[Foo]]
|
||
!! end
|
||
|
||
!! test
|
||
Parsoid should accept interwiki shortcuts
|
||
!! options
|
||
parsoid=html2wt
|
||
!! html/parsoid
|
||
<p><a rel='mw:WikiLink' href='./fr:Foo'>Foo</a>
|
||
<a rel='mw:ExtLink' href='./fr:Foo'>Foo</a>
|
||
<a href='./fr:Foo'>Foo</a></p>
|
||
<p><a rel='mw:WikiLink' href='fr%3AFoo'>Foo</a>
|
||
<a rel='mw:ExtLink' href='fr%3AFoo'>Foo</a>
|
||
<a href='fr%3AFoo'>Foo</a></p>
|
||
<p><a href='FR%3AFoo'>Foo</a>
|
||
<a href='./FR:Foo'>Foo</a></p>
|
||
!! 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
|
||
<p><a rel='mw:WikiLink' href='news:Foo'>Foo</a>
|
||
<a rel='mw:ExtLink' href='news:Foo'>Foo</a>
|
||
<a href='news:Foo'>Foo</a></p>
|
||
!! 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
|
||
<a rel="mw:WikiLink" href="./Foo" title="Foo" data-parsoid='{}'>Foo</a>
|
||
<a rel="mw:WikiLink" href="./Foo" title="Foo">Foo</a>
|
||
<a href="//en.wikipedia.org/wiki/Foo">//en.wikipedia.org/wiki/Foo</a>
|
||
<a href="http://en.wikipedia.org/wiki/Foo">http://en.wikipedia.org/wiki/Foo</a>
|
||
<a href="//en.wikipedia.org/wiki/Foo_bar">//en.wikipedia.org/wiki/Foo bar</a>
|
||
!! 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
|
||
<a rel="mw:WikiLink" href="./Foo_bar">Foo_bar</a>
|
||
<a rel="mw:WikiLink" href="Foo_bar">Foo_bar</a>
|
||
<a rel="mw:WikiLink" href="Foo bar">Foo_bar</a>
|
||
<a rel="mw:WikiLink" href="./Toxine_bact%C3%A9rienne">Toxine bactérienne</a>
|
||
!! wikitext
|
||
[[Foo_bar]]
|
||
[[Foo_bar]]
|
||
[[Foo_bar]]
|
||
[[Toxine bactérienne]]
|
||
!! end
|
||
|
||
!! test
|
||
New wiki links (content string variations)
|
||
!! options
|
||
parsoid=html2wt
|
||
!! html/parsoid
|
||
<a rel="mw:WikiLink" href="./Foo_bar">Foo_bar</a>
|
||
<a rel="mw:WikiLink" href="./Foo_bar">Foo bar</a>
|
||
<a rel="mw:WikiLink" href="./Foo_bar">./Foo_bar</a>
|
||
!! wikitext
|
||
[[Foo_bar]]
|
||
[[Foo bar]]
|
||
[[Foo_bar|./Foo_bar]]
|
||
!! end
|
||
|
||
!! test
|
||
New category links (href variations)
|
||
!! options
|
||
parsoid=html2wt
|
||
!! html/parsoid
|
||
<link rel="mw:PageProp/Category" href="./Category:Toxine_bactérienne" />
|
||
<link rel="mw:PageProp/Category" href="./Category:Toxine_bact%C3%A9rienne" />
|
||
<link rel="mw:PageProp/Category" href="Category:Toxine_bact%C3%A9rienne" />
|
||
!! 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
|
||
<link rel="mw:PageProp/redirect" href="./Main_Page">
|
||
<!-- this is good --> <link rel="mw:PageProp/Category" href="./Category:Good" />
|
||
<!-- this is great --> <link rel="mw:PageProp/Category" href="./Kategorie:Great" />
|
||
!! wikitext
|
||
#WEITERLEITUNG [[Main Page]]
|
||
<!-- this is good --> [[Category:Good]]
|
||
<!-- this is great --> [[Kategorie:Great]]
|
||
!! end
|
||
|
||
!! test
|
||
New interlanguage links (href variations)
|
||
!! options
|
||
parsoid=html2wt
|
||
!! html/parsoid
|
||
<link rel="mw:PageProp/Language" href="http://es.wikipedia.org/wiki/Toxine bactérienne" />
|
||
<link rel="mw:PageProp/Language" href="http://es.wikipedia.org/wiki/Toxine_bactérienne" />
|
||
<link rel="mw:PageProp/Language" href="http://es.wikipedia.org/wiki/Toxine_bact%C3%A9rienne" />
|
||
!! wikitext
|
||
[[es:Toxine bactérienne]]
|
||
[[es:Toxine_bactérienne]]
|
||
[[es:Toxine_bactérienne]]
|
||
!! end
|
||
|
||
# Regression test for T219023
|
||
!! test
|
||
Emit simple non-piped link where possible
|
||
!! options
|
||
parsoid=html2wt
|
||
!! html/parsoid
|
||
<a rel='mw:WikiLink' href='./VisualEditor'>VisualEditor</a>
|
||
<a rel='mw:WikiLink' href='./VisualEditor'>visualEditor</a>
|
||
<a rel='mw:WikiLink' href='./VisualEditor link'>VisualEditor link</a>
|
||
<a rel='mw:WikiLink' href='./VisualEditor link'>visualEditor link</a>
|
||
!! wikitext
|
||
[[VisualEditor]]
|
||
[[visualEditor]]
|
||
[[VisualEditor link]]
|
||
[[visualEditor link]]
|
||
!! end
|
||
|
||
!! test
|
||
Lists: Serialize correctly even when list content is wrapped in p-tags (like VE does)
|
||
!! options
|
||
parsoid=html2wt
|
||
!! html/parsoid
|
||
<ul>
|
||
<li><p>foo</p></li>
|
||
</ul>
|
||
!! wikitext
|
||
* foo
|
||
!! end
|
||
|
||
!! test
|
||
Lists: Serialize correctly even when list tags has unneeded whitespace between tags
|
||
!! options
|
||
parsoid=html2wt
|
||
!! html/parsoid
|
||
<ul> <li>foo</li></ul>
|
||
!! wikitext
|
||
* foo
|
||
!! end
|
||
|
||
!! test
|
||
Don't strip leading whitespace when handling indent-pre suppressing tags
|
||
!! options
|
||
parsoid=html2wt
|
||
!! html/parsoid
|
||
<table>
|
||
<tr><td> indented row</td></tr>
|
||
</table>
|
||
<blockquote><p>
|
||
<b>This is very bold of you!</b>
|
||
</p>
|
||
<table><tr><td>
|
||
indented cell (no pre-wrapping!)
|
||
</td></tr></table>
|
||
</blockquote>
|
||
<p>foo</p>
|
||
<div>bar</div>
|
||
!! wikitext
|
||
{|
|
||
| indented row
|
||
|}
|
||
<blockquote>
|
||
'''This is very bold of you!'''
|
||
|
||
{|
|
||
|
|
||
indented cell (no pre-wrapping!)
|
||
|}
|
||
</blockquote>
|
||
foo
|
||
<div>bar</div>
|
||
!! end
|
||
|
||
!! test
|
||
Strip leading whitespace when handling indent-pre inducing tags
|
||
!! options
|
||
parsoid=html2wt
|
||
!! html/parsoid
|
||
<p>foo</p>
|
||
<span>bar</span>
|
||
|
||
<span>foo2
|
||
</span>bar2
|
||
|
||
<div>foo</div>
|
||
<span>bar</span>
|
||
|
||
<div>
|
||
<span>foo</span>
|
||
</div>
|
||
!! wikitext
|
||
foo
|
||
|
||
<span>bar</span>
|
||
|
||
<span>foo2
|
||
</span>bar2
|
||
|
||
<div>foo</div>
|
||
<span>bar</span>
|
||
|
||
<div>
|
||
<span>foo</span>
|
||
</div>
|
||
!! end
|
||
|
||
!! test
|
||
Lists: Dont insert newlines in a serialized list item.
|
||
!! options
|
||
parsoid=html2wt
|
||
!! html/parsoid
|
||
<ul><li>a<br>b</li><li>c</li></ul>
|
||
!! wikitext
|
||
* a<br />b
|
||
* c
|
||
!! end
|
||
|
||
!! test
|
||
Headings: Force sol-transparent links and behavior switches to serialize before/after
|
||
!! options
|
||
parsoid={
|
||
"modes": ["html2wt"]
|
||
}
|
||
!! html/parsoid
|
||
<h2>hello there<link href="./Category:A1" rel="mw:PageProp/Category" /></h2>
|
||
<h2><link href="./Category:A2" rel="mw:PageProp/Category" />hi pal</h2>
|
||
|
||
<h2><!--foo--> <link href="./Category:A3" rel="mw:PageProp/Category" /> how goes it</h2>
|
||
<h2>it goes well <link href="./Category:A4" rel="mw:PageProp/Category" /> <!--bar--></h2>
|
||
|
||
<h2><meta property="mw:PageProp/toc" /> ok</h2>
|
||
!! wikitext
|
||
== hello there ==
|
||
[[Category:A1]]
|
||
[[Category:A2]]
|
||
|
||
== hi pal ==
|
||
|
||
<!--foo--> [[Category:A3]]
|
||
|
||
== how goes it ==
|
||
|
||
== it goes well ==
|
||
[[Category:A4]] <!--bar-->
|
||
|
||
__TOC__
|
||
|
||
== ok ==
|
||
!! end
|
||
|
||
!! test
|
||
Headings: Don't hoist metas that come from templates
|
||
!! options
|
||
parsoid={
|
||
"modes": ["html2wt"]
|
||
}
|
||
!! html/parsoid
|
||
<h2><span about="#mwt1" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"1x","href":"./Template:1x"},"params":{"1":{"wt":"foo [[Category:Foo]]"}},"i":0}}]}'>foo </span><link rel="mw:PageProp/Category" href="./Category:Foo" about="#mwt1" /></h2>
|
||
!! wikitext
|
||
== {{1x|foo [[Category:Foo]]}} ==
|
||
!! end
|
||
|
||
!! test
|
||
Parsoid: Serialize positional parameters with = in them as named parameter
|
||
!! options
|
||
parsoid=html2wt
|
||
!! html/parsoid
|
||
<p about="#mwt1" typeof="mw:Transclusion"
|
||
data-mw='{"parts":[{"template":{"target":{"wt":"1x","href":"./Template:1x"},"params":{"1":{"wt":"f=oo"}},"i":0}}]}'>foo</p>
|
||
|
||
<p about="#mwt1" typeof="mw:Transclusion"
|
||
data-mw='{"parts":[{"template":{"target":{"wt":"1x","href":"./Template:1x"},"params":{"1":{"wt":"f=oo"}, "2":{"wt":"bar"}},"i":0}}]}'>foo</p>
|
||
|
||
<!--Orig params with data-parsoid has heuristics for handling = chars-->
|
||
<!--FIXME: But maybe the heuristic needs fixing to apply to new params as well-->
|
||
<p data-parsoid='{"pi":[[{"k":"1"},{"k":"2"}]]}' about="#mwt1" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"1x","href":"./Template:1x"},"params":{"1":{"wt":"f=oo"},"2":{"wt":"bar"}},"i":0}}]}'>foo</p>
|
||
!! wikitext
|
||
{{1x|1=f=oo}}
|
||
|
||
{{1x|1=f=oo|2=bar}}
|
||
|
||
<!--Orig params with data-parsoid has heuristics for handling = chars-->
|
||
<!--FIXME: But maybe the heuristic needs fixing to apply to new params as well-->
|
||
{{1x|<nowiki>f=oo</nowiki>|bar}}
|
||
!! end
|
||
|
||
!! test
|
||
Parsoid: Serialize positional parameters with = in extlink as named parameter
|
||
!! options
|
||
parsoid=html2wt
|
||
!! html/parsoid
|
||
<p><a rel="mw:ExtLink" href="http://stuff?is=ok" about="#mwt1" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"1x","href":"./Template:1x"},"params":{"1":{"wt":"http://stuff?is=ok"}},"i":0}}]}'>http://stuff?is=ok</a></p>
|
||
!! wikitext
|
||
{{1x|1=http://stuff?is=ok}}
|
||
!! end
|
||
|
||
!! test
|
||
Parsoid: Correctly serialize block-node children when they are a combination of text and p-nodes
|
||
!! options
|
||
parsoid=html2wt
|
||
!! html/parsoid
|
||
<div>a<p>b</p></div>
|
||
<div>a
|
||
<p>b</p></div>
|
||
<div>
|
||
a
|
||
<p>b</p></div>
|
||
!! wikitext
|
||
<div>a
|
||
b
|
||
</div>
|
||
<div>a
|
||
b
|
||
</div>
|
||
<div>
|
||
a
|
||
|
||
b
|
||
</div>
|
||
!! end
|
||
|
||
!! test
|
||
Substrings resembling wikitext in hrefs should not get nowiki escapes
|
||
!! options
|
||
parsoid=html2wt
|
||
!! html/parsoid
|
||
<a rel="mw:WikiLink" href="./Foo''bar''baz">Foo''bar''baz</a>
|
||
!! wikitext
|
||
[[Foo''bar''baz]]
|
||
!! end
|
||
|
||
!! test
|
||
Enforce single-line context in the serializer
|
||
!! options
|
||
parsoid=html2wt
|
||
!! html/parsoid
|
||
<h2>testing
|
||
123</h2>
|
||
|
||
<h2> hi <span about="#mwt1" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"bogus","href":"./Template:Bogus"},"params":{"1":{"wt":"there\nyou"}},"i":0}}]}'>there</span><span about="#mwt1">
|
||
</span><span about="#mwt1">you</span> </h2>
|
||
|
||
<h2> foo <span about="#mwt2" typeof="mw:Extension/spantag" data-mw='{"name":"spantag","body":{"extsrc":"hello\nthere"},"attrs":{}}'>hello
|
||
there</span> </h2>
|
||
|
||
<ul><li>asd
|
||
sdf</li></ul>
|
||
|
||
<ul><li>foo
|
||
bar
|
||
baz</li>
|
||
<li>foo <b>bar</b>
|
||
baz</li></ul>
|
||
|
||
<dl><dt>hi
|
||
ho </dt><dd data-parsoid='{"stx":"row"}'> hi
|
||
ho</dd></dl>
|
||
|
||
<dl><dd> <table>
|
||
<tbody><tr><td> ha
|
||
ha
|
||
ha</td></tr>
|
||
</tbody></table></dd></dl>
|
||
!! wikitext
|
||
== testing 123 ==
|
||
|
||
== hi {{bogus|there
|
||
you}} ==
|
||
|
||
== foo <spantag>hello
|
||
there</spantag> ==
|
||
|
||
* asd sdf
|
||
|
||
* foo bar baz
|
||
* foo '''bar''' baz
|
||
|
||
; hi ho : hi ho
|
||
|
||
: {|
|
||
| ha
|
||
ha
|
||
ha
|
||
|}
|
||
!! end
|
||
|
||
# Note that core parser doesn't like newlines in wikilinks in headings.
|
||
# But, Parsoid handles it just fine. We'll consider this acceptable divergence.
|
||
# We can change behavior if this becomes a real problem (ex: VE users start
|
||
# adding newlines in links in headings which then breaks rendering when rendered
|
||
# outside of Parsoid, or breaks section editing code). Eventually Parsoid will
|
||
# core parser everywhere and this inconsistency will go away.
|
||
!! test
|
||
Ignore single-line context for wikilinks
|
||
!! options
|
||
parsoid=html2wt
|
||
!! html/parsoid
|
||
<ul><li><a rel="mw:WikiLink" href="./Foo" title="Foo" class="mw-redirect">
|
||
bar</a></li></ul>
|
||
<h2><a rel="mw:WikiLink" href="./Foo" title="Foo" class="mw-redirect">
|
||
bar</a></h2>
|
||
<ul><li><a rel="mw:WikiLink" href="./Foo" title="Foo" class="mw-redirect">bar
|
||
<span style="background-color:green;
|
||
color:blue" data-parsoid='{"stx":"html"}'>x</span></a></li></ul>
|
||
!! wikitext
|
||
* [[Foo|
|
||
bar]]
|
||
|
||
== [[Foo|
|
||
bar]] ==
|
||
|
||
* [[Foo|bar
|
||
<span style="background-color:green;
|
||
color:blue">x</span>]]
|
||
!! end
|
||
|
||
!! test
|
||
Selser: Ignore single-line context for wikilinks
|
||
!! options
|
||
parsoid={
|
||
"modes": ["selser"],
|
||
"selser": "noauto",
|
||
"changes": [
|
||
[ "ul > li ", "append", "<ul><li>foo</li></ul>" ]
|
||
]
|
||
}
|
||
!! wikitext
|
||
* [[Foo|
|
||
bar]]
|
||
!! wikitext/edited
|
||
* [[Foo|
|
||
bar]]
|
||
** foo
|
||
!! end
|
||
|
||
!! test
|
||
Serialize new displayspace spans
|
||
!! options
|
||
parsoid=html2wt
|
||
!! html/parsoid
|
||
<p>foo<span typeof="mw:DisplaySpace"> </span>: bar</p>
|
||
|
||
<p>foo<span typeof="mw:DisplaySpace"> </span>: bar</p>
|
||
|
||
<p><span typeof="mw:Extension/spantag" data-mw='{"name":"spantag","attrs":{},"body":{"extsrc":"foo : bar"}}'>foo<span typeof="mw:DisplaySpace"> </span>: bar</span>ok</p>
|
||
|
||
<a href="http://example.com">«<span typeof="mw:DisplaySpace">&nsbp;</span>Tour Eiffel<span typeof="mw:DisplaySpace">&nsbp;</span>»</a>
|
||
|
||
Hello<span typeof="mw:DisplaySpace"> </span>World!
|
||
|
||
<ul>
|
||
<li><span typeof="mw:DisplaySpace"> </span>Foo</li>
|
||
</ul>
|
||
!! wikitext
|
||
foo : bar
|
||
|
||
foo : bar
|
||
|
||
<spantag>foo : bar</spantag>ok
|
||
|
||
[http://example.com « Tour Eiffel »]
|
||
|
||
Hello World!
|
||
|
||
* Foo
|
||
!! end
|
||
|
||
|
||
#-----------------------
|
||
# Tag minimization tests
|
||
#-----------------------
|
||
|
||
!! test
|
||
1. I/B quote minimization: wikitext-only tags should be combined
|
||
!! options
|
||
parsoid=html2wt
|
||
!! html/parsoid
|
||
<p><i>A</i><i>B</i></p>
|
||
<p><b>A</b><b>B</b></p>
|
||
<p><i>A</i><b><i>B</i></b></p>
|
||
<p><b>A</b><i><b>B</b></i></p>
|
||
<p><b>A</b><i><b>B</b><b>C</b></i><b>D</b></p>
|
||
<p><i><b>A</b></i><i><b>B</b></i></p>
|
||
<p><i><b>A</b></i><b><i>B</i></b></p>
|
||
<p><b><i>A</i></b><i><b>B</b></i></p>
|
||
!! 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
|
||
<p><i>A</i><i data-parsoid='{"stx":"html"}'>B</i></p>
|
||
<p><i>A</i><b><i data-parsoid='{"stx":"html"}'>B</i></b></p>
|
||
!! wikitext
|
||
''A''<i>B</i>
|
||
|
||
''A''<nowiki/>'''<i>B</i>'''
|
||
!! end
|
||
|
||
!! test
|
||
3. I/B quote minimization: templated content stops minimization
|
||
!! options
|
||
parsoid=html2wt
|
||
!! html/parsoid
|
||
<p><i>A</i><i about="#mwt1" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"1x","href":"./Template:1x"},"params":{"1":{"wt":"''B''"}},"i":0}}]}'>B</i>
|
||
<p><i>A</i><b about="#mwt1" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"1x","href":"./Template:1x"},"params":{"1":{"wt":"'''''B'''''"}},"i":0}}]}'><i>B</i></b>
|
||
!! wikitext
|
||
''A''{{1x|''B''}}
|
||
|
||
''A''{{1x|'''''B'''''}}
|
||
!! end
|
||
|
||
!! test
|
||
4. I/B quote minimization: new content should be mimimized with adjacent old content
|
||
!! options
|
||
parsoid=html2wt
|
||
!! html/parsoid
|
||
<p><i>A</i><i>B</i></p>
|
||
<p><b>A</b><b>B</b></p>
|
||
<p><i>A</i><b><i>B</i></b></p>
|
||
!! 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''<span id="x">b</span>''c''
|
||
!! wikitext/edited
|
||
''ac''
|
||
!! end
|
||
|
||
!! test
|
||
1. Merge adjacent link nodes as long as at least one element is new
|
||
!! options
|
||
parsoid={
|
||
"modes": ["html2wt"]
|
||
}
|
||
!! html/parsoid
|
||
<a rel="mw:WikiLink" href="./Football">Foot</a><a rel="mw:WikiLink" href="./Football">ball</a>
|
||
<a data-parsoid="{}" rel="mw:WikiLink" href="./Football">Foot</a><a rel="mw:WikiLink" href="./Football">ball</a>
|
||
<a data-parsoid="{}" rel="mw:WikiLink" href="./Football">Foot</a><a data-parsoid="{}" rel="mw:WikiLink" href="./Football">ball</a>
|
||
!! wikitext
|
||
[[Football]]
|
||
[[Football]]
|
||
[[Football|Foot]][[Football|ball]]
|
||
!! end
|
||
|
||
!! test
|
||
2. Merge adjacent link nodes and enable additional normalizations
|
||
!! options
|
||
parsoid={
|
||
"modes": ["html2wt"]
|
||
}
|
||
!! html/parsoid
|
||
<a rel="mw:WikiLink" href="./Football"><i>Foot</i></a><a rel="mw:WikiLink" href="./Football"><i>ball</i></a>
|
||
!! wikitext
|
||
''[[Football]]''
|
||
!! end
|
||
|
||
!! test
|
||
1. Move format tags outside of WikiLink
|
||
!! options
|
||
parsoid={
|
||
"modes": ["html2wt"]
|
||
}
|
||
!! html/parsoid
|
||
<a rel="mw:WikiLink" href="./Football"><i>Football</i></a>
|
||
<a rel="mw:WikiLink" href="./Football"><i><b>Football</b></i></a>
|
||
<a rel="mw:WikiLink" href="./Football"><u><i><b>Football</b></i></u></a>
|
||
!! wikitext
|
||
''[[Football]]''
|
||
'''''[[Football]]'''''
|
||
<u>'''''[[Football]]'''''</u>
|
||
!! end
|
||
|
||
!! test
|
||
2. Move format tags outside of WikiLink with mergable A tags
|
||
!! options
|
||
parsoid={
|
||
"modes": ["html2wt"]
|
||
}
|
||
!! html/parsoid
|
||
<a rel="mw:WikiLink" href="./Football"><i><b>Foot</b></i></a><a rel="mw:WikiLink" href="./Football"><i><b>ball</b></i></a>
|
||
!! wikitext
|
||
'''''[[Football]]'''''
|
||
!! end
|
||
|
||
!! test
|
||
3. Move format tags outside of WikiLink while preserving formats already outside WikiLink
|
||
!! options
|
||
parsoid={
|
||
"modes": ["html2wt"]
|
||
}
|
||
!! html/parsoid
|
||
<font color="red"><a rel="mw:WikiLink" href="./Foo" title="Foo" class="mw-redirect"><u><b>Foo</b></u></a></font>
|
||
!! wikitext
|
||
<font color="red"><u>'''[[Foo]]'''</u></font>
|
||
!! end
|
||
|
||
!! test
|
||
4. Do not move format tags outside of WikiLink which includes attributes color, style and class
|
||
!! options
|
||
parsoid={
|
||
"modes": ["html2wt"]
|
||
}
|
||
!! html/parsoid
|
||
<a rel="mw:WikiLink" href="./Foo" title="Foo" class="mw-redirect"><font color="red">Foo</font></a>
|
||
<a rel="mw:WikiLink" href="./Foo" title="Foo" class="mw-redirect"><span style="color: blue; font-size: 46px;">Foo></span></a>
|
||
<a rel="mw:WikiLink" href="./Foo" title="Foo" class="mw-redirect"><span class="Bar">Foo</span></a>
|
||
!! wikitext
|
||
[[Foo|<font color="red">Foo</font>]]
|
||
[[Foo|<span style="color: blue; font-size: 46px;">Foo></span>]]
|
||
[[Foo|<span class="Bar">Foo</span>]]
|
||
!! end
|
||
|
||
!! test
|
||
5. T194083 Regression test: Manual edit test to move format tags outside wikilinks
|
||
!! options
|
||
parsoid={
|
||
"modes": ["selser"],
|
||
"changes": [
|
||
["a", "html", "<i>Foo</i>"]
|
||
]
|
||
}
|
||
!! wikitext
|
||
[[Foo]]
|
||
!! wikitext/edited
|
||
''[[Foo]]''
|
||
!! end
|
||
|
||
!! test
|
||
6. Regression test: Manual edit test to ensure diff markers are not lost
|
||
!! options
|
||
parsoid={
|
||
"modes": ["selser"],
|
||
"changes": [
|
||
["i", "wrap", "<a href='./Foo' rel='mw:WikiLink'></a>"]
|
||
]
|
||
}
|
||
!! wikitext
|
||
''Foo''
|
||
!! wikitext/edited
|
||
''[[Foo]]''
|
||
!! end
|
||
|
||
!! test
|
||
7. T194083 Regression test: Manual edit test to ensure nested diff markers aren't inserted
|
||
!! options
|
||
parsoid={
|
||
"modes": ["selser"],
|
||
"changes": [
|
||
["div", "after", "\n<p><a href='./Foo' rel='mw:WikiLink'>Foo </a>, placeholder</p>"]
|
||
]
|
||
}
|
||
!! wikitext
|
||
<div>placeholder</div>
|
||
!! wikitext/edited
|
||
<div>placeholder</div>
|
||
[[Foo]] , placeholder
|
||
!! end
|
||
|
||
## No sort-key or templated sort-key
|
||
!! test
|
||
T192913 Regression test: 1. html2wt of links should not trip on parser functions found in target
|
||
!! options
|
||
parsoid
|
||
!! wikitext
|
||
[[Category:Bugs-{{#if:blah|Regression|None}}]]
|
||
[[Category:Bugs-{{#if:blah|Regression|None}}|{{#if:blah|2020|None}}-#fragment]]
|
||
!! html/parsoid
|
||
<link typeof="mw:ExpandedAttrs" rel="mw:PageProp/Category" href="./Category:Bugs-Regression" data-mw='{"attribs":[[{"txt":"href"},{"html":"Category:Bugs-<span typeof=\"mw:Transclusion\" data-mw='{\"parts\":[{\"template\":{\"target\":{\"wt\":\"#if:blah\",\"function\":\"if\"},\"params\":{\"1\":{\"wt\":\"Regression\"},\"2\":{\"wt\":\"None\"}},\"i\":0}}]}'>Regression</span>"}]]}'/>
|
||
<link typeof="mw:ExpandedAttrs" rel="mw:PageProp/Category" href="./Category:Bugs-Regression#2020-%23fragment" data-mw='{"attribs":[[{"txt":"href"},{"html":"Category:Bugs-<span typeof=\"mw:Transclusion\" data-mw='{\"parts\":[{\"template\":{\"target\":{\"wt\":\"#if:blah\",\"function\":\"if\"},\"params\":{\"1\":{\"wt\":\"Regression\"},\"2\":{\"wt\":\"None\"}},\"i\":0}}]}'>Regression</span>"}],[{"txt":"mw:sortKey"},{"html":"<span typeof=\"mw:Transclusion\" data-mw='{\"parts\":[{\"template\":{\"target\":{\"wt\":\"#if:blah\",\"function\":\"if\"},\"params\":{\"1\":{\"wt\":\"2020\"},\"2\":{\"wt\":\"None\"}},\"i\":0}}]}'>2020</span>-#fragment"}]]}'/>
|
||
!! end
|
||
|
||
## Untemplated sort-key (wt2html data-mw is missing sort-key information!)
|
||
!! test
|
||
T192913 Regression test: 2. html2wt of links should not trip on parser functions found in target (2)
|
||
!! options
|
||
parsoid
|
||
!! wikitext
|
||
[[Category:Bugs-{{#if:blah|Regression|None}}|fragment]]
|
||
[[Category:Bugs-{{#if:blah|Regression|None}}-{{#if:blah|2020|None}}|fragment]]
|
||
!! html/parsoid
|
||
<link typeof="mw:ExpandedAttrs" rel="mw:PageProp/Category" href="./Category:Bugs-Regression#fragment" data-mw='{"attribs":[[{"txt":"href"},{"html":"Category:Bugs-<span typeof=\"mw:Transclusion\" data-mw='{\"parts\":[{\"template\":{\"target\":{\"wt\":\"#if:blah\",\"function\":\"if\"},\"params\":{\"1\":{\"wt\":\"Regression\"},\"2\":{\"wt\":\"None\"}},\"i\":0}}]}'>Regression</span>"}]]}'/>
|
||
<link typeof="mw:ExpandedAttrs" rel="mw:PageProp/Category" href="./Category:Bugs-Regression-2020#fragment" data-mw='{"attribs":[[{"txt":"href"},{"html":"Category:Bugs-<span typeof=\"mw:Transclusion\" data-mw='{\"parts\":[{\"template\":{\"target\":{\"wt\":\"#if:blah\",\"function\":\"if\"},\"params\":{\"1\":{\"wt\":\"Regression\"},\"2\":{\"wt\":\"None\"}},\"i\":0}}]}'>Regression</span>-<span typeof=\"mw:Transclusion\" data-mw='{\"parts\":[{\"template\":{\"target\":{\"wt\":\"#if:blah\",\"function\":\"if\"},\"params\":{\"1\":{\"wt\":\"2020\"},\"2\":{\"wt\":\"None\"}},\"i\":0}}]}'>2020</span>"}]]}'/>
|
||
!! end
|
||
|
||
#------------------------------
|
||
# End of tag minimization tests
|
||
#------------------------------
|
||
|
||
!!test
|
||
T56262: New entities
|
||
!! options
|
||
parsoid=html2wt
|
||
!! html/parsoid
|
||
<span typeof="mw:Entity"> </span>
|
||
!! wikitext
|
||
|
||
!! end
|
||
|
||
!! test
|
||
Consecutive <pre>s should not get merged
|
||
!! options
|
||
parsoid=html2wt,html2html
|
||
!! html/parsoid
|
||
<pre>a</pre><pre>b</pre>
|
||
|
||
<pre>c
|
||
</pre><pre>
|
||
d</pre>
|
||
|
||
<pre>e
|
||
|
||
</pre><pre>
|
||
|
||
f</pre>
|
||
!! wikitext
|
||
a
|
||
|
||
b
|
||
|
||
c
|
||
|
||
d
|
||
|
||
e
|
||
|
||
|
||
|
||
f
|
||
!! end
|
||
|
||
!! test
|
||
WTS of autolinks with trailing/surrounding context
|
||
!! options
|
||
parsoid=html2wt
|
||
!! html/parsoid
|
||
<p><a href="http://cscott.net">http://cscott.net</a><b>foo</b></p>
|
||
<p><a href="http://cscott.net">http://cscott.net</a><b data-parsoid='{"stx":"html"}'>foo</b></p>
|
||
<p><b><a href="http://cscott.net">http://cscott.net</a></b></p>
|
||
<p><b><a href="http://cscott.net">http://cscott.net</a> </b></p>
|
||
<p><b><a href="http://cscott.net">http://cscott.net</a>x</b></p>
|
||
<p><a href="http://cscott.net">http://cscott.net</a>x</p>
|
||
!! wikitext
|
||
http://cscott.net'''foo'''
|
||
|
||
http://cscott.net<b>foo</b>
|
||
|
||
'''http://cscott.net'''
|
||
|
||
'''http://cscott.net '''
|
||
|
||
'''http://cscott.net<nowiki/>x'''
|
||
|
||
http://cscott.net<nowiki/>x
|
||
!! end
|
||
|
||
!! test
|
||
WTS of autolinks with nowikis (round-trip)
|
||
!! wikitext
|
||
x<nowiki/>http://cscott.net<nowiki/>x
|
||
!! html/parsoid
|
||
<p>x<a rel="mw:ExtLink" href="http://cscott.net" class="external free">http://cscott.net</a>x</p>
|
||
!! 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
|
||
x<nowiki/>http://cscott.net<nowiki/>x
|
||
!! wikitext/edited
|
||
x<nowiki/>http://cscott.net<nowiki/>x
|
||
!! end
|
||
|
||
!! test
|
||
WTS of edited autolink-like text (T103364)
|
||
!! options
|
||
parsoid={
|
||
"modes": ["wt2wt"],
|
||
"changes": [
|
||
[ "span[typeof]", "removeAttr", "typeof" ]
|
||
]
|
||
}
|
||
!! wikitext
|
||
Not a link: <nowiki>http://example.com</nowiki>.
|
||
!! wikitext/edited
|
||
Not a link: <span><nowiki>http://example.com</nowiki></span>.
|
||
!! end
|
||
|
||
!! test
|
||
WTS of newly-authored autolink-like text (T103364)
|
||
!! options
|
||
parsoid=html2wt
|
||
!! html/parsoid
|
||
<p>http://example.com is not a link.</p>
|
||
!! wikitext
|
||
<nowiki>http://example.com</nowiki> is not a link.
|
||
!! end
|
||
|
||
!! test
|
||
WTS of autolink-like text after an autolink (T108563)
|
||
!! options
|
||
parsoid=html2wt
|
||
!! html/parsoid
|
||
<p><a rel="mw:ExtLink" href="http://example.com">http://example.com</a> http://example.com is not a link.</p>
|
||
!! wikitext
|
||
http://example.com <nowiki>http://example.com</nowiki> is not a link.
|
||
!! end
|
||
|
||
!! test
|
||
WTS of an autolink surrounded by square brackets (T220018)
|
||
!! options
|
||
parsoid=html2wt
|
||
!! html/parsoid
|
||
<p>[<a rel="mw:ExtLink" href="http://example.com">http://example.com</a>]</p>
|
||
!! wikitext
|
||
<nowiki>[</nowiki>http://example.com]
|
||
!! end
|
||
|
||
!! test
|
||
WTS of edited autolink surrounded by square brackets (T220018)
|
||
!! options
|
||
parsoid={
|
||
"modes": ["wt2wt"],
|
||
"changes": [
|
||
[ "a", "before", "[" ],
|
||
[ "a", "after", "]" ]
|
||
]
|
||
}
|
||
!! wikitext
|
||
http://example.com
|
||
!! wikitext/edited
|
||
<nowiki>[</nowiki>http://example.com]
|
||
!! end
|
||
|
||
!! test
|
||
WTS of an external link surrounded by square brackets (T220018)
|
||
!! options
|
||
parsoid=html2wt
|
||
!! html/parsoid
|
||
<p>[<a rel="mw:ExtLink" href="http://example.com">foo</a>]</p>
|
||
!! wikitext
|
||
<nowiki>[</nowiki>[http://example.com foo]]
|
||
!! end
|
||
|
||
!! test
|
||
WTS of edited external link surrounded by square brackets (T220018)
|
||
!! options
|
||
parsoid={
|
||
"modes": ["wt2wt"],
|
||
"changes": [
|
||
[ "a", "before", "[" ],
|
||
[ "a", "after", "]" ]
|
||
]
|
||
}
|
||
!! wikitext
|
||
[http://example.com foo]
|
||
!! wikitext/edited
|
||
<nowiki>[</nowiki>[http://example.com foo]]
|
||
!! end
|
||
|
||
!! test
|
||
Edited Redirect link should emit a non-piped wikitext link
|
||
!! options
|
||
parsoid=html2wt
|
||
!! html/parsoid
|
||
<link rel="mw:PageProp/redirect" href="Bar" data-parsoid='{"a":{"href":"./Foo"},"sa":{"href":"Foo"}}'>
|
||
!! 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
|
||
<div typeOf="mw:Extension/foo"></div>
|
||
!! wikitext
|
||
<foo />
|
||
!! end
|
||
|
||
# Note that the <p> wrapping isn't present in PHP parser output
|
||
# The important thing for this test is that P-wrapping doesn't
|
||
# interfere with the <nowiki> protection for leading - in <td>
|
||
# (which isn't necessary for <th>).
|
||
!! test
|
||
T88318: p-wrapped dash in table.
|
||
!! options
|
||
parsoid=html2wt,wt2wt
|
||
!! html/parsoid
|
||
<table><tbody>
|
||
<tr><th><p>-</p></th><th><p>- </p></th></tr>
|
||
<tr><td><p>-</p></td><td><p>- </p></td></tr>
|
||
<tr><td><small>-</small></td><td><br/><p>-</p></td><td><br/>-</td></tr>
|
||
</tbody></table>
|
||
!! wikitext
|
||
{|
|
||
!-
|
||
!-
|
||
|-
|
||
|<nowiki>-</nowiki>
|
||
|<nowiki>- </nowiki>
|
||
|-
|
||
|<small>-</small>
|
||
|<br />
|
||
-
|
||
|<br />-
|
||
|}
|
||
!! html/php
|
||
<table>
|
||
<tbody><tr>
|
||
<th>-
|
||
</th>
|
||
<th>-
|
||
</th></tr>
|
||
<tr>
|
||
<td>-
|
||
</td>
|
||
<td>-
|
||
</td></tr>
|
||
<tr>
|
||
<td><small>-</small>
|
||
</td>
|
||
<td><br />
|
||
<p>-
|
||
</p>
|
||
</td>
|
||
<td><br />-
|
||
</td></tr></tbody></table>
|
||
!! end
|
||
|
||
!! test
|
||
T149209: WTS: Handle newlines in table cells properly
|
||
!! options
|
||
parsoid=html2wt
|
||
!! html/parsoid
|
||
<table>
|
||
<tbody>
|
||
<tr><td>a
|
||
b
|
||
</td><td data-parsoid='{"stx":"row"}'>c</td></tr>
|
||
<tr><td><p>x</p>
|
||
</td><td data-parsoid='{"stx":"row", "startTagSrc": "{{!}}{{!}}"}'>y</td></tr>
|
||
</tbody></table>
|
||
<table>
|
||
<tbody>
|
||
<tr><th>a
|
||
b
|
||
</th><th data-parsoid='{"stx":"row"}'>c</th></tr>
|
||
<tr><th><p>x</h>
|
||
</th><th data-parsoid='{"stx":"row"}'>y</th></tr>
|
||
</tbody></table>
|
||
!! 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", "<p>a</p>" ],
|
||
[ "#c3", "html", "<p>a</p>" ],
|
||
[ "#c4", "html", "edit-me<p>a</p>" ]
|
||
]
|
||
}
|
||
!! 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
|
||
<table id='mwAb'>
|
||
<td id='mwAc'>foo</td>
|
||
<td id='serialize-this'>bar</td>
|
||
</table>
|
||
!! 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
|
||
<div id="mwAQ" data-parsoid='{"stx":"html","a":{"id":"mwAQ"},"sa":{"id":"hello"}}'>ok</div>
|
||
!! wikitext
|
||
<div id="hello">ok</div>
|
||
!! 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", "<tr><td>X</td></tr>" ]
|
||
]
|
||
}
|
||
!! 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", "<tr><td>X</td></tr>" ]
|
||
]
|
||
}
|
||
!! wikitext
|
||
<table><tr><td>a</td></tr></table>
|
||
!! wikitext/edited
|
||
<table><tr><td>X</td></tr><tr><td>a</td></tr></table>
|
||
!! end
|
||
|
||
!! test
|
||
Serialize new table cells in a HTML row using HTML tags
|
||
!! options
|
||
parsoid={
|
||
"modes": ["wt2wt", "selser"],
|
||
"changes": [
|
||
[ "td", "before", "<td>X</td>" ]
|
||
]
|
||
}
|
||
!! wikitext
|
||
<table><tr><td>a</td></tr></table>
|
||
!! wikitext/edited
|
||
<table><tr><td>X</td><td>a</td></tr></table>
|
||
!! end
|
||
|
||
!! test
|
||
Serialize wikitext list items as HTML list items when embedded in a HTML list
|
||
!! options
|
||
parsoid=html2wt
|
||
!! html/parsoid
|
||
<ul data-parsoid='{"stx": "html"}'>
|
||
<li data-parsoid='{}'>a</li>
|
||
<li>b</li>
|
||
</ul>
|
||
!! wikitext
|
||
<ul>
|
||
<li>a</li>
|
||
<li>b</li>
|
||
</ul>
|
||
!! html/php
|
||
<ul>
|
||
<li>a</li>
|
||
<li>b</li>
|
||
</ul>
|
||
!! end
|
||
|
||
# Nested list should be inside <li>, that is
|
||
# <ul><li>foo<ul>..</ul></li></ul> instead of
|
||
# <ul><li>foo</li><ul>..</ul></ul>
|
||
# See https://stackoverflow.com/questions/5899337/proper-way-to-make-html-nested-list
|
||
!! test
|
||
Wikitext lists can be nested inside HTML lists
|
||
!! options
|
||
parsoid=html2wt
|
||
!! html/parsoid
|
||
<ul data-parsoid='{"stx": "html"}'>
|
||
<li data-parsoid='{"stx": "html"}'>a
|
||
<ul><li>b</li></ul>
|
||
</li>
|
||
</ul>
|
||
|
||
<ul data-parsoid='{"stx": "html"}'>
|
||
<li>x
|
||
<ul><li>y</li></ul>
|
||
</li>
|
||
</ul>
|
||
!! wikitext
|
||
<ul>
|
||
<li>a
|
||
* b
|
||
</li>
|
||
</ul>
|
||
|
||
<ul>
|
||
<li>x
|
||
* y
|
||
</li>
|
||
</ul>
|
||
!! html/php
|
||
<ul>
|
||
<li>a
|
||
<ul><li>b</li></ul>
|
||
</li>
|
||
</ul>
|
||
<ul>
|
||
<li>x
|
||
<ul><li>y</li></ul>
|
||
</li>
|
||
</ul>
|
||
!! end
|
||
|
||
!! test
|
||
WTS change modes
|
||
!! options
|
||
parsoid={
|
||
"modes": ["wt2wt"],
|
||
"changes": [
|
||
[ "#xyz", "before", "<b>before</b> stuff " ],
|
||
[ "#xyz", "after", " stuff <i>after</i>" ],
|
||
[ "#xyz", "html", "x <b>y</b> z" ]
|
||
]
|
||
}
|
||
!! wikitext
|
||
<span id="xyz">hello</span>
|
||
!! wikitext/edited
|
||
'''before''' stuff <span id="xyz">x '''y''' z</span> 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
|
||
<a rel="mw:WikiLink" href="./Foo" title="Foo" data-parsoid='{"stx":"html"}'>Foo</a>
|
||
!! 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
|
||
<a bad='true' href='http://boo.org'><img src='http://boohoo.org' /></a>
|
||
!! 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
|
||
<p data-parsoid='{}'><a rel="mw:ExtLink" href="http://test.com"></a><a rel="mw:WikiLink" href="./One" title="One" data-parsoid='{"stx":"simple","a":{"href":"./One"},"sa":{"href":"one"},"misnested":true}'>one</a><span data-parsoid='{"misnested":true}'> two three</span></p>
|
||
!! wikitext
|
||
[http://test.com][[one]] two three
|
||
!! end
|
||
|
||
!! test
|
||
Catch regression when unpacking misnested links
|
||
!! options
|
||
parsoid=wt2html
|
||
!! wikitext
|
||
{{1x|hi}}[http://example.com [[ho]]]
|
||
!! html/parsoid
|
||
<p><span about="#mwt1" typeof="mw:Transclusion" data-parsoid='{"pi":[[{"k":"1"}]]}' data-mw='{"parts":[{"template":{"target":{"wt":"1x","href":"./Template:1x"},"params":{"1":{"wt":"hi"}},"i":0}}]}'>hi</span><a rel="mw:ExtLink nofollow" href="http://example.com" class="external autonumber"></a><a rel="mw:WikiLink" href="./Ho" title="Ho" data-parsoid='{"stx":"simple","a":{"href":"./Ho"},"sa":{"href":"ho"},"misnested":true}'>ho</a></p>
|
||
!! end
|
||
|
||
!! test
|
||
Use data-parsoid.firstWikitextNode to compute newline constraints for template content
|
||
!! options
|
||
parsoid=html2wt
|
||
!! html/parsoid
|
||
<span about="#mwt1" typeof="mw:Transclusion" data-parsoid='{"pi":[[{"k":"1"}]]}' data-mw='{"parts":[{"template":{"target":{"wt":"1x","href":"./Template:1x"},"params":{"1":{"wt":"a"}},"i":0}}]}'>a</span><table about="#mwt2" typeof="mw:Transclusion mw:ExpandedAttrs" data-parsoid='{"a":{"{{1x|c\n{{!}}d\n}}":null},"sa":{"{{1x|c\n{{!}}d\n}}":""},"firstWikitextNode":"TABLE","pi":[[{"k":"1"}]]}' data-mw='{"parts":["{|",{"template":{"target":{"wt":"1x","href":"./Template:1x"},"params":{"1":{"wt":"c\n{{!}}d\n"}},"i":0}},"\n|}"]}'>
|
||
<tbody><tr><td>d
|
||
</td></tr>
|
||
</tbody></table>
|
||
!! wikitext
|
||
{{1x|a}}
|
||
{|{{1x|c
|
||
{{!}}d
|
||
}}
|
||
|}
|
||
!! end
|
||
|
||
## This test verifies the presence and computation of this attribute indirectly
|
||
## by making an edit and ensuring that the serialization is correct (which it would be
|
||
## only if firstWikitextNode is properly set).
|
||
!! test
|
||
data-parsoid.firstWikitextNode should be computed properly in the presence of fostered content
|
||
!! options
|
||
parsoid= {
|
||
"modes": ["wt2wt"],
|
||
"changes": [
|
||
[ "div#x", "remove" ],
|
||
[ "div", "before", "<div>new</div>" ]
|
||
]
|
||
}
|
||
!! wikitext
|
||
<div id="x">foo</div>
|
||
{|
|
||
{{1x|<div>boo</div>
|
||
{{!}}b}}
|
||
|c
|
||
|}
|
||
!! wikitext/edited
|
||
|
||
<div>new</div>
|
||
{|
|
||
{{1x|<div>boo</div>
|
||
{{!}}b}}
|
||
|c
|
||
|}
|
||
!! end
|
||
|
||
# --------------------------------------------
|
||
# Tests spec'ing wikitext serialization norms |
|
||
# --------------------------------------------
|
||
|
||
!! test
|
||
Serialize multi-line indent-pre starting with wikitext syntax
|
||
!! options
|
||
parsoid=html2wt
|
||
!! html/parsoid
|
||
<pre>* 1
|
||
** 2
|
||
* 3</pre>
|
||
!! wikitext
|
||
* 1
|
||
** 2
|
||
* 3
|
||
!! end
|
||
|
||
!! test
|
||
1. Categories should always be serialized on their own line
|
||
!! options
|
||
parsoid=html2wt
|
||
!! html/parsoid
|
||
foo<link rel="mw:PageProp/Category" href="./Category:Foo">bar
|
||
!! wikitext
|
||
foo
|
||
[[Category:Foo]]
|
||
bar
|
||
!! end
|
||
|
||
!! test
|
||
2. Categories that are part of templates should not introduce a line break
|
||
!! wikitext
|
||
foo {{1x|<span>bar</span> [[Category:baz]]}} bar
|
||
!! html/parsoid
|
||
<p>foo <span about="#mwt1" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"1x","href":"./Template:1x"},"params":{"1":{"wt":"<span>bar</span> [[Category:baz]]"}},"i":0}}]}'>bar</span><span about="#mwt1"> </span><link rel="mw:PageProp/Category" href="./Category:Baz" about="#mwt1" data-parsoid='{"stx":"simple","a":{"href":"./Category:Baz"},"sa":{"href":"Category:baz"}}'/> bar</p>
|
||
!! end
|
||
|
||
# Careful while editing these next 2 tests. There are \u200f characters
|
||
# before and after the <link> tags in the HTML and following some
|
||
# of the categories in wikitext
|
||
# Do not remove these characters in edits.
|
||
#
|
||
# As part of the serialization, these bidi characters will get stripped.
|
||
!! test
|
||
RTL (\u200f) and LTR (\u200e) markers around category tags should be stripped
|
||
!! options
|
||
parsoid={
|
||
"modes": ["html2wt"]
|
||
}
|
||
!! html/parsoid
|
||
<p><link rel="mw:PageProp/Category" href="./קטגוריה:טקסים" />
|
||
<link rel="mw:PageProp/Category" href="./קטגוריה:_שיטות_משפט" /></p>
|
||
!! wikitext
|
||
[[קטגוריה:טקסים]]
|
||
[[קטגוריה: שיטות משפט]]
|
||
!! end
|
||
|
||
!! test
|
||
RTL (\u200f) and LTR (\u200e) markers should not be stripped if followed by a text node
|
||
!! options
|
||
parsoid={
|
||
"modes": ["html2wt"]
|
||
}
|
||
!! html/parsoid
|
||
<p><link rel="mw:PageProp/Category" href="./קטגוריה:טקסים" />y</p>
|
||
!! wikitext
|
||
[[קטגוריה:טקסים]]
|
||
y
|
||
!! end
|
||
|
||
!! test
|
||
Lists: Add space after bullets
|
||
!! options
|
||
parsoid=html2wt
|
||
!! html/parsoid
|
||
<ul>
|
||
<li>foo</li>
|
||
<li> bar</li>
|
||
<li><span> baz</span></li>
|
||
</ul>
|
||
!! wikitext
|
||
* foo
|
||
* bar
|
||
* <span> baz</span>
|
||
!! end
|
||
|
||
!! test
|
||
1. Headings: Add space before/after == (T53744)
|
||
!! options
|
||
parsoid=html2wt
|
||
!! html/parsoid
|
||
<h2>foo</h2>
|
||
<h2> bar</h2>
|
||
<h2>baz </h2>
|
||
<h2><span> baz</span></h2>
|
||
!! wikitext
|
||
== foo ==
|
||
|
||
== bar ==
|
||
|
||
== baz ==
|
||
|
||
== <span> baz</span> ==
|
||
!! end
|
||
|
||
!! test
|
||
2. Headings: Add space before/after == even after hoisted content
|
||
!! options
|
||
parsoid={
|
||
"modes": ["html2wt"]
|
||
}
|
||
!! html/parsoid
|
||
<h2> <link href="./Category:A2" rel="mw:PageProp/Category" />ok</h2>
|
||
!! wikitext
|
||
[[Category:A2]]
|
||
|
||
== ok ==
|
||
!! end
|
||
|
||
!! test
|
||
1. Headings: suppress newly created empty headings
|
||
!! options
|
||
parsoid={
|
||
"modes": ["html2wt"]
|
||
}
|
||
!! html/parsoid
|
||
<h2></h2>
|
||
!! wikitext
|
||
!! end
|
||
|
||
!! test
|
||
2. Headings: suppress empty headings on edits
|
||
!! options
|
||
parsoid={
|
||
"modes": ["selser"],
|
||
"changes": [
|
||
[ "#x", "remove"]
|
||
]
|
||
}
|
||
!! wikitext
|
||
==<span id="x">foo</span>==
|
||
!! wikitext/edited
|
||
!! end
|
||
|
||
!! test
|
||
Headings: Replace <br/> with a single whitespace char
|
||
!! options
|
||
parsoid={
|
||
"modes": ["html2wt"]
|
||
}
|
||
!! html/parsoid
|
||
<h2>foo<br/>bar</h2>
|
||
<h2>foo <span><br/>bar</span> baz</h2>
|
||
!! wikitext
|
||
== foo bar ==
|
||
|
||
== foo <span> bar</span> baz ==
|
||
!! end
|
||
|
||
!! test
|
||
1. WT Quote Tags: suppress newly created empty style tags
|
||
!! options
|
||
parsoid={
|
||
"modes": ["html2wt"]
|
||
}
|
||
!! html/parsoid
|
||
<i></i><b></b>
|
||
!! wikitext
|
||
!! end
|
||
|
||
!! test
|
||
2. WT Quote Tags: suppress empty style tags on edits
|
||
!! options
|
||
parsoid={
|
||
"modes": ["selser"],
|
||
"changes": [
|
||
[ "#x", "remove"]
|
||
]
|
||
}
|
||
!! wikitext
|
||
'''<span id="x">foo</span>'''
|
||
!! wikitext/edited
|
||
!! end
|
||
|
||
!! test
|
||
1. Anchors: suppress newly created empty anchors
|
||
!! options
|
||
parsoid={
|
||
"modes": ["html2wt"]
|
||
}
|
||
!! html/parsoid
|
||
<a rel="mw:WikiLink" href="./Test" title="Test"></a>
|
||
!! wikitext
|
||
!! end
|
||
|
||
!! test
|
||
2. Anchors: suppress empty anchors on edits
|
||
!! options
|
||
parsoid={
|
||
"modes": ["selser"],
|
||
"changes": [
|
||
[ "#x", "remove"]
|
||
]
|
||
}
|
||
!! wikitext
|
||
[[Test|<span id="x">foo</span>]]
|
||
!! wikitext/edited
|
||
!! end
|
||
|
||
!! test
|
||
3a. Anchors: do not suppress numbered extlinks
|
||
!! options
|
||
parsoid={
|
||
"modes": ["wt2wt"]
|
||
}
|
||
!! wikitext
|
||
[http://foo.com]
|
||
!! html/parsoid
|
||
<a rel="mw:ExtLink" href="http://foo.com"></a>
|
||
!! end
|
||
|
||
!! test
|
||
3b. Anchors: do not suppress numbered extlinks
|
||
!! options
|
||
parsoid={
|
||
"modes": ["wt2wt"],
|
||
"changes": [
|
||
[ "#x", "remove"]
|
||
]
|
||
}
|
||
!! wikitext
|
||
[http://foo.com <span id="x">foo</span>]
|
||
!! wikitext/edited
|
||
[http://foo.com]
|
||
!! end
|
||
|
||
!!test
|
||
Normalizations should be restricted to edited content
|
||
!!options
|
||
parsoid={
|
||
"modes": ["selser"],
|
||
"changes": [
|
||
[ "h1", "before", "<i></i>"]
|
||
]
|
||
}
|
||
!!wikitext
|
||
a
|
||
= =
|
||
b
|
||
!!wikitext/edited
|
||
a
|
||
= =
|
||
b
|
||
!!end
|
||
|
||
!! test
|
||
1. Multiple normalizations (html2wt)
|
||
!! options
|
||
parsoid={
|
||
"modes": ["html2wt"]
|
||
}
|
||
!! html/parsoid
|
||
<h2><i></i></h2>
|
||
<p><a href='Foo' rel='mw:WikiLink'>foo<i></i>
|
||
</a><b><i></i></b>x</p>
|
||
!! wikitext
|
||
|
||
[[foo]]
|
||
x
|
||
!! end
|
||
|
||
!! test
|
||
2. Multiple normalizations (selser)
|
||
!! options
|
||
parsoid={
|
||
"modes": ["selser"],
|
||
"changes": [
|
||
[ "#x", "after", "<h1><i></i></h1>\n<p> bar<b></b></p>"]
|
||
]
|
||
}
|
||
!! wikitext
|
||
<div id="x">foo</div>
|
||
!! wikitext/edited
|
||
<div id="x">foo</div>
|
||
bar
|
||
!! end
|
||
|
||
!! test
|
||
1. Indent Pre Nowiki: suppress whitespace at the start of new paragraph
|
||
!! options
|
||
parsoid={
|
||
"modes": ["html2wt"]
|
||
}
|
||
!! html/parsoid
|
||
<p> hi</p>
|
||
<p> hello</p>
|
||
!! wikitext
|
||
hi
|
||
|
||
hello
|
||
!! end
|
||
|
||
!! test
|
||
2. Indent Pre Nowiki: suppress whitespace after newlines in new paragraph or table cell
|
||
!! options
|
||
parsoid={
|
||
"modes": ["html2wt"]
|
||
}
|
||
!! html/parsoid
|
||
<p>Foo
|
||
bar
|
||
baz</p>
|
||
|
||
<table><tr><td>Foo
|
||
bar
|
||
baz bang</td></tr></table>
|
||
|
||
<p><!--boo--> foo
|
||
bar</p>
|
||
|
||
<p> foo
|
||
bar<span>boo</span></p>
|
||
!! wikitext
|
||
Foo
|
||
bar
|
||
baz
|
||
|
||
{|
|
||
|Foo
|
||
bar
|
||
baz bang
|
||
|}
|
||
|
||
<!--boo-->foo
|
||
bar
|
||
|
||
foo
|
||
bar<span>boo</span>
|
||
!! end
|
||
|
||
!! test
|
||
3. Indent Pre Nowiki: suppress leading whitespace in edited paragraphs
|
||
!! options
|
||
parsoid={
|
||
"modes": ["selser"],
|
||
"changes": [
|
||
[ "p", "html", " a\n b" ]
|
||
]
|
||
}
|
||
!! wikitext
|
||
xyz
|
||
!! wikitext/edited
|
||
a
|
||
b
|
||
!! end
|
||
|
||
!! test
|
||
New links that end in spaces
|
||
!! options
|
||
parsoid={
|
||
"modes": ["html2wt"]
|
||
}
|
||
!! html/parsoid
|
||
<p><a rel="mw:WikiLink" href="./Berlin" title="Berlin">Berlin </a>is the capital of Germany.</p>
|
||
<p><a rel="mw:WikiLink" href="./Foo" title="Foo">Foo </a><b>bar</b></p>
|
||
<p><a rel="mw:WikiLink" href="./Boston" title="Boston">Boston </a> is a city.</p>
|
||
!! wikitext
|
||
[[Berlin]] is the capital of Germany.
|
||
|
||
[[Foo]] '''bar'''
|
||
|
||
[[Boston]] is a city.
|
||
!! end
|
||
|
||
!! test
|
||
1. Table cells with escapable prefixes
|
||
!! options
|
||
parsoid={
|
||
"modes": ["html2wt"]
|
||
}
|
||
!! html/parsoid
|
||
<table>
|
||
<tr><td>a</td></tr>
|
||
<tr><td>-</td></tr>
|
||
<tr><td>+</td></tr>
|
||
<tr><td>}</td></tr>
|
||
</table>
|
||
!! wikitext
|
||
{|
|
||
|a
|
||
|-
|
||
| -
|
||
|-
|
||
| +
|
||
|-
|
||
| }
|
||
|}
|
||
!! end
|
||
|
||
!! test
|
||
2a. Table cells with escapable prefixes after edits
|
||
!! options
|
||
parsoid={
|
||
"modes": ["selser"],
|
||
"changes": [
|
||
[ "table tbody tr:first-child td:first-child", "remove"]
|
||
]
|
||
}
|
||
!! wikitext
|
||
{|
|
||
|a||-
|
||
|}
|
||
!! wikitext/edited
|
||
{|
|
||
| -
|
||
|}
|
||
!! end
|
||
|
||
!! test
|
||
2b. Table cells with escapable prefixes after edits
|
||
!! options
|
||
parsoid={
|
||
"modes": ["selser"],
|
||
"changes": [
|
||
[ "table tbody tr:first-child td:first-child", "html", "-" ],
|
||
[ "#x", "remove" ]
|
||
]
|
||
}
|
||
!! wikitext
|
||
{|
|
||
|pqr
|
||
|<span id="x">foo</span>+
|
||
|}
|
||
!! wikitext/edited
|
||
{|
|
||
| -
|
||
| +
|
||
|}
|
||
!! end
|
||
|
||
# FIXME: This test will fail because
|
||
# normalization doesn't realize that the id attribute
|
||
# will eliminate the escapable scenario
|
||
!! test
|
||
3a. Table cells without escapable prefixes after edits
|
||
!! options
|
||
parsoid={
|
||
"modes": ["selser"],
|
||
"changes": [
|
||
[ "#x", "html", "-" ]
|
||
]
|
||
}
|
||
!! wikitext
|
||
{|
|
||
| id="x" |abcd
|
||
|}
|
||
!! wikitext/edited
|
||
{|
|
||
| id="x" |-
|
||
|}
|
||
!! end
|
||
|
||
## This tests normalizer's ability to discriminate between
|
||
## cells having identical content.
|
||
!! test
|
||
3b. Table cells without escapable prefixes after edits
|
||
!! options
|
||
parsoid={
|
||
"modes": ["selser"],
|
||
"changes": [
|
||
[ "td", "html", "-" ]
|
||
]
|
||
}
|
||
!! wikitext
|
||
{|
|
||
|a||b
|
||
|}
|
||
!! wikitext/edited
|
||
{|
|
||
| -||-
|
||
|}
|
||
!! end
|
||
|
||
## This tests normalizer's ability to not be tripped by
|
||
## comments (and whitespace)
|
||
!! test
|
||
3c. Table cells without escapable prefixes after edits
|
||
!! options
|
||
parsoid={
|
||
"modes": ["selser"],
|
||
"changes": [
|
||
[ "table tbody tr td:first-child", "remove" ]
|
||
]
|
||
}
|
||
!! wikitext
|
||
{|
|
||
|-
|
||
<!--foo--> |a||-
|
||
|}
|
||
!! wikitext/edited
|
||
{|
|
||
|-
|
||
<!--foo--> | -
|
||
|}
|
||
!! end
|
||
|
||
## This tests normalizer's ability to handle HTML cells
|
||
!! test
|
||
3d. Table cells without escapable prefixes after edits
|
||
!! options
|
||
parsoid={
|
||
"modes": ["selser"],
|
||
"changes": [
|
||
[ "td", "html", "-" ]
|
||
]
|
||
}
|
||
!! wikitext
|
||
<table>
|
||
<tr><td>a</td></tr>
|
||
</table>
|
||
!! wikitext/edited
|
||
<table>
|
||
<tr><td>-</td></tr>
|
||
</table>
|
||
!! end
|
||
|
||
## T111151 Remove font elements without attributes
|
||
!! test
|
||
4. font tags without attributes should be dropped
|
||
!! options
|
||
parsoid={
|
||
"modes": ["html2wt"]
|
||
}
|
||
!! html/parsoid
|
||
<font>foo</font>
|
||
<font><font>bar</font></font>
|
||
<font class="x">boo</font>
|
||
!! wikitext
|
||
foo
|
||
bar
|
||
<font class="x">boo</font>
|
||
!! end
|
||
|
||
!! test
|
||
Normalize empty paragraphs to HTML form that html2wt expects
|
||
!! options
|
||
parsoid={
|
||
"modes": ["html2wt"]
|
||
}
|
||
!! html/parsoid
|
||
<div>1</div>
|
||
<p>a</p><p></p><p>b</p>
|
||
<div>2</div>
|
||
<p>a</p>
|
||
<p></p>
|
||
<p>b</p>
|
||
<div>3</div>
|
||
<p>a</p>
|
||
<p></p>
|
||
<p></p>
|
||
<p></p>
|
||
<p></p>
|
||
<p>b</p>
|
||
<div>4</div>
|
||
<p>a</p>
|
||
<p></p>
|
||
<div>foo</div>
|
||
!! wikitext
|
||
<div>1</div>
|
||
a
|
||
|
||
|
||
b
|
||
<div>2</div>
|
||
a
|
||
|
||
|
||
b
|
||
<div>3</div>
|
||
a
|
||
|
||
|
||
|
||
|
||
|
||
b
|
||
<div>4</div>
|
||
a
|
||
|
||
<div>foo</div>
|
||
!! html/php
|
||
<div>1</div>
|
||
<p>a
|
||
</p><p><br />
|
||
b
|
||
</p>
|
||
<div>2</div>
|
||
<p>a
|
||
</p><p><br />
|
||
b
|
||
</p>
|
||
<div>3</div>
|
||
<p>a
|
||
</p><p><br />
|
||
</p><p><br />
|
||
</p><p>b
|
||
</p>
|
||
<div>4</div>
|
||
<p>a
|
||
</p>
|
||
<div>foo</div>
|
||
!! end
|
||
|
||
!! test
|
||
Templated content should be skipped over by normalization
|
||
!! options
|
||
parsoid={
|
||
"modes": ["html2wt"]
|
||
}
|
||
!! html/parsoid
|
||
<p about="#mwt1" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"SomeTemplate1","href":"./Template:SomeTemplate1"},"params":{"1":{"wt":"boo"}},"i":0}}]}'>foobar</p><p about="#mwt2" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"SomeTemplate2","href":"./Template:SomeTemplate2"},"params":{"1":{"wt":"booboo"}},"i":0}}]}'>foobar</p><span about="#mwt2">
|
||
</span><p about="#mwt2"></p><span about="#mwt2">
|
||
</span>
|
||
!! wikitext
|
||
{{SomeTemplate1|boo}}{{SomeTemplate2|booboo}}
|
||
!! end
|
||
|
||
!! test
|
||
Escape DOM elements
|
||
!! options
|
||
parsoid=html2wt
|
||
!! html/parsoid
|
||
<nowiki><i>foo</i></nowiki>
|
||
<noinclude><i>foo</i></noinclude>
|
||
<includeonly><i>foo</i></includeonly>
|
||
!! wikitext
|
||
<nowiki>''foo''</nowiki>
|
||
<noinclude>''foo''</noinclude>
|
||
<includeonly>''foo''</includeonly>
|
||
!! end
|
||
|
||
!! test
|
||
Don't escape pre elements that fail to parse as extension tags
|
||
!! wikitext
|
||
<pre>closed is extension tag, so everything is <span>text</span></pre>
|
||
<pre>unclosed is not, so these are <span>tags</span>
|
||
!! html/php
|
||
<pre>closed is extension tag, so everything is <span>text</span></pre>
|
||
<pre>unclosed is not, so these are <span>tags</span></pre>
|
||
!! html/parsoid
|
||
<pre typeof="mw:Extension/pre" about="#mwt3" data-mw='{"name":"pre","attrs":{},"body":{"extsrc":"closed is extension tag, so everything is <span>text</span>"}}'>closed is extension tag, so everything is <span>text</span></pre>
|
||
<pre data-parsoid='{"stx":"html","autoInsertedEnd":true}'>unclosed is not, so these are <span>tags</span></pre>
|
||
!! end
|
||
|
||
!! test
|
||
New list is serialized on newlines
|
||
!! options
|
||
parsoid=html2wt
|
||
!! html/parsoid
|
||
<p>The quick brown fox jumps over the lazy dog.</p><ul>
|
||
<li>Yesterday</li>
|
||
<li>Today</li>
|
||
<li>Tomorrow</li>
|
||
</ul><p>The quick onyx goblin jumps over the lazy dwarf.</p>
|
||
!! wikitext
|
||
The quick brown fox jumps over the lazy dog.
|
||
|
||
* Yesterday
|
||
* Today
|
||
* Tomorrow
|
||
|
||
The quick onyx goblin jumps over the lazy dwarf.
|
||
!! end
|
||
|
||
!! test
|
||
New lists in formatting elements serialized w/o newlines
|
||
!! options
|
||
parsoid=html2wt
|
||
!! html/parsoid
|
||
<small>
|
||
|
||
<ul>
|
||
<li>123</li>
|
||
</ul>
|
||
|
||
</small>
|
||
|
||
<small><ul><li>hi</li></ul></small>
|
||
!! wikitext
|
||
<small>
|
||
* 123
|
||
</small>
|
||
|
||
<small>
|
||
* hi
|
||
</small>
|
||
!! end
|
||
|
||
!! test
|
||
New list in table doesn't need newlines
|
||
!! options
|
||
parsoid=html2wt
|
||
!! html/parsoid
|
||
<table><tr><td><ul><li>test</li><li>123</li></td></tr></table>
|
||
!! wikitext
|
||
{|
|
||
|
|
||
* test
|
||
* 123
|
||
|}
|
||
!! end
|
||
|
||
!! test
|
||
Newly inserted noinclude tags do not need newlines before/after
|
||
!! html/parsoid
|
||
<p>a<meta typeof="mw:Includes/NoInclude">b<meta typeof="mw:Includes/NoInclude/End">c</p>
|
||
!! wikitext
|
||
a<noinclude>b</noinclude>c
|
||
!! 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<p>b</p>
|
||
<b>c</b><p>d</p>
|
||
<table><tr>
|
||
<td>a<p>b</p></td>
|
||
<td><b>c</b><p>d</p></td>
|
||
</tr></table>
|
||
!! wikitext
|
||
a
|
||
|
||
b
|
||
|
||
'''c'''
|
||
|
||
d
|
||
{|
|
||
|a
|
||
b
|
||
|'''c'''
|
||
d
|
||
|}
|
||
!! end
|
||
|
||
!! test
|
||
Anchor without href scenarios
|
||
!! options
|
||
parsoid={ "modes": ["html2wt"], "suppressErrors": true }
|
||
!! html/parsoid
|
||
<a class="bc"></a>
|
||
<a class="no">dice</a>
|
||
<a name="foo"></a>
|
||
!! wikitext
|
||
|
||
dice
|
||
<span name="foo"></span>
|
||
!! end
|
||
|
||
!! test
|
||
New transclusion added after a list should be serialized after the list
|
||
!! options
|
||
parsoid=html2wt
|
||
!! html/parsoid
|
||
<ul><li>a</li></ul><span about="#mwt1" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"1x","href":"./Template:1x"},"params":{"1":{"wt":"foo"}},"i":0}}]}'>foo</span>
|
||
!! wikitext
|
||
* a
|
||
{{1x|foo}}
|
||
!! end
|
||
|
||
## FIXME: This test is less useful now that the leading space is normalized away
|
||
!! test
|
||
Only html p-tag is strong indent pre suppressing
|
||
!! options
|
||
parsoid=html2wt
|
||
!! html/parsoid
|
||
<p>test2<span>
|
||
test3
|
||
</span></p>
|
||
!! wikitext
|
||
test2<span>
|
||
test3
|
||
</span>
|
||
!! end
|
||
|
||
# Clients like VE don't know about this property (T238721)
|
||
!! test
|
||
T238721: New transclusion without the "i" property for a template part should be handled properly
|
||
!! options
|
||
parsoid=html2wt
|
||
!! html/parsoid
|
||
<span about="#mwt1" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"1x","href":"./Template:1x"}}}]}'>foo</span>
|
||
!! wikitext
|
||
{{1x}}
|
||
!! end
|
||
|
||
# -----------------------------------------------------------------
|
||
# End of section for Parsoid-only html2wt tests for serialization
|
||
# of new content
|
||
# -----------------------------------------------------------------
|
||
|
||
# -----------------------------------------------------------------
|
||
# The following section of tests are primarily to spec behavior of
|
||
# the selective serializer. All these tests have manual selser
|
||
# changes. The automated selser changes for all tests handle the
|
||
# wide variation of changes, but these tests here capture specs
|
||
# deterministically.
|
||
# ----------------------------------------------------------------
|
||
|
||
## T90517
|
||
!! test
|
||
Selser: New comments should not be lost
|
||
!! options
|
||
parsoid={
|
||
"modes": ["selser"],
|
||
"changes": [
|
||
[ "#a", "after", "<!--c1-->" ],
|
||
[ "#b", "before", "<!--c2-->" ]
|
||
]
|
||
}
|
||
!! wikitext
|
||
<span id="a">a</span>
|
||
|
||
<span id="b">b</span>
|
||
!! wikitext/edited
|
||
<span id="a">a</span><!--c1-->
|
||
|
||
<!--c2--><span id="b">b</span>
|
||
!! end
|
||
|
||
## T89383
|
||
!! test
|
||
Selser: Check for validity of DSR before using it
|
||
!! options
|
||
parsoid={
|
||
"modes": ["selser"],
|
||
"changes": [
|
||
[ "#a", "before", "<meta property='mw:PageProp/displaytitle' content='foo'>" ]
|
||
]
|
||
}
|
||
!! wikitext
|
||
<span id="a">a</span>
|
||
!! wikitext/edited
|
||
{{DISPLAYTITLE:foo}}
|
||
<span id="a">a</span>
|
||
!! 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
|
||
<div style="{{1x|color:red;}}%">foo</div>
|
||
!! wikitext/edited
|
||
<div style="{{1x|color:red;}}%">bar</div>
|
||
!! end
|
||
|
||
!! test
|
||
Empty LI (T49673)
|
||
!! wikitext
|
||
*a
|
||
*
|
||
*
|
||
*b
|
||
!! html
|
||
<ul><li>a</li>
|
||
<li class="mw-empty-elt"></li>
|
||
<li class="mw-empty-elt"></li>
|
||
<li>b</li></ul>
|
||
!! end
|
||
|
||
!! test
|
||
Empty list item with rendering transparent tag
|
||
!! wikitext
|
||
{{1x|*hmm
|
||
*[[category:123]]}}
|
||
!! html/php
|
||
<ul><li>hmm</li>
|
||
<li class="mw-empty-elt"></li></ul>
|
||
!! html/parsoid
|
||
<ul about="#mwt1" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"1x","href":"./Template:1x"},"params":{"1":{"wt":"*hmm\n*[[category:123]]"}},"i":0}}]}'><li>hmm</li>
|
||
<li class="mw-empty-elt"><link rel="mw:PageProp/Category" href="./Category:123"/></li></ul>
|
||
!! end
|
||
|
||
!! test
|
||
unclosed internal link XSS (T137264)
|
||
!! wikitext
|
||
[[#%3Cscript%3Ealert(1)%3C/script%3E|
|
||
!! html/php
|
||
<p>[[#<script>alert(1)</script>|
|
||
</p>
|
||
!! html/parsoid
|
||
<p>[[#%3Cscript%3Ealert(1)%3C/script%3E|</p>
|
||
!! end
|
||
|
||
!! test
|
||
Validating that <style> isn't eaten by tidy (T167349)
|
||
!! options
|
||
styletag=1
|
||
!! wikitext
|
||
<div class="foo">
|
||
<style>.foo::before { content: "<foo>"; }</style>
|
||
<style data-mw-foobar="baz">.foo::after { content: "<bar>"; }</style>
|
||
</div>
|
||
!! html/php
|
||
<div class="foo">
|
||
<style>.foo::before { content: "<foo>"; }</style>
|
||
<style data-mw-foobar="baz">.foo::after { content: "<bar>"; }</style>
|
||
</div>
|
||
!! html/parsoid
|
||
<div class="foo">
|
||
<style typeof="mw:Extension/style" data-mw='{"name":"style","attrs":{},"body":{"extsrc":".foo::before { content: \"<foo>\"; }"}}'>.foo::before { content: "<foo>"; }</style>
|
||
<style data-x-data-mw-foobar="baz" typeof="mw:Extension/style" data-mw='{"name":"style","attrs":{"data-x-data-mw-foobar":"baz"},"body":{"extsrc":".foo::after { content: \"<bar>\"; }"}}'>.foo::after { content: "<bar>"; }</style>
|
||
</div>
|
||
!! end
|
||
|
||
## Right now, Parsoid doesn't de-duplicate style tags.
|
||
## So, we shouldn't see link tags that need to bypass the sanitizer.
|
||
## In a followup patch, when we de-duplicate style tags and
|
||
## introduce link tags, we'll add a hook for link tags in
|
||
## the parser test runner script.
|
||
!! test
|
||
Validating that <style> isn't wrapped in a paragraph (T186965)
|
||
!! options
|
||
styletag=1
|
||
!! wikitext
|
||
A style tag, by itself or with other style/link tags, shouldn't be wrapped in a paragraph
|
||
|
||
<style>.foo::before { content: "<foo>"; }</style>
|
||
|
||
<style>.foo::before { content: "<foo>"; }</style> <link rel="foo" href="bar"/><style>.foo::before { content: "<foo>"; }</style>
|
||
|
||
But if it's on a line with other content, let it be wrapped.
|
||
|
||
<style>.foo::before { content: "<foo>"; }</style> bar
|
||
|
||
foo <style>.foo::before { content: "<foo>"; }</style>
|
||
|
||
foo <style>.foo::before { content: "<foo>"; }</style> bar
|
||
|
||
And the same if we have non-paragraph-breaking whitespace
|
||
|
||
foo
|
||
<style>.foo::before { content: "<foo>"; }</style>
|
||
bar
|
||
!! html/php
|
||
<p>A style tag, by itself or with other style/link tags, shouldn't be wrapped in a paragraph
|
||
</p>
|
||
<style>.foo::before { content: "<foo>"; }</style>
|
||
<style>.foo::before { content: "<foo>"; }</style> <link rel="foo" href="bar" /><style>.foo::before { content: "<foo>"; }</style>
|
||
<p>But if it's on a line with other content, let it be wrapped.
|
||
</p><p><style>.foo::before { content: "<foo>"; }</style> bar
|
||
</p><p>foo <style>.foo::before { content: "<foo>"; }</style>
|
||
</p><p>foo <style>.foo::before { content: "<foo>"; }</style> bar
|
||
</p><p>And the same if we have non-paragraph-breaking whitespace
|
||
</p><p>foo
|
||
<style>.foo::before { content: "<foo>"; }</style>
|
||
bar
|
||
</p>
|
||
!! html/parsoid
|
||
<p>A style tag, by itself or with other style/link tags, shouldn't be wrapped in a paragraph</p>
|
||
|
||
<style typeof="mw:Extension/style" data-mw='{"name":"style","attrs":{},"body":{"extsrc":".foo::before { content: \"<foo>\"; }"}}'>.foo::before { content: "<foo>"; }</style>
|
||
|
||
<p><style typeof="mw:Extension/style" data-mw='{"name":"style","attrs":{},"body":{"extsrc":".foo::before { content: \"<foo>\"; }"}}'>.foo::before { content: "<foo>"; }</style> <link rel="foo" href="bar"/><style typeof="mw:Extension/style" data-mw='{"name":"style","attrs":{},"body":{"extsrc":".foo::before { content: \"<foo>\"; }"}}'>.foo::before { content: "<foo>"; }</style></p>
|
||
|
||
<p>But if it's on a line with other content, let it be wrapped.</p>
|
||
|
||
<p><style typeof="mw:Extension/style" data-mw='{"name":"style","attrs":{},"body":{"extsrc":".foo::before { content: \"<foo>\"; }"}}'>.foo::before { content: "<foo>"; }</style> bar</p>
|
||
|
||
<p>foo <style typeof="mw:Extension/style" data-mw='{"name":"style","attrs":{},"body":{"extsrc":".foo::before { content: \"<foo>\"; }"}}'>.foo::before { content: "<foo>"; }</style></p>
|
||
|
||
<p>foo <style typeof="mw:Extension/style" data-mw='{"name":"style","attrs":{},"body":{"extsrc":".foo::before { content: \"<foo>\"; }"}}'>.foo::before { content: "<foo>"; }</style> bar</p>
|
||
|
||
<p>And the same if we have non-paragraph-breaking whitespace</p>
|
||
|
||
<p>foo
|
||
<style typeof="mw:Extension/style" data-mw='{"name":"style","attrs":{},"body":{"extsrc":".foo::before { content: \"<foo>\"; }"}}'>.foo::before { content: "<foo>"; }</style>
|
||
bar</p>
|
||
!! end
|
||
|
||
!! test
|
||
Validating that <link> isn't wrapped in a paragraph (T186965)
|
||
!! options
|
||
styletag=1
|
||
!! wikitext
|
||
A link tag, by itself or with other style/link tags, shouldn't be wrapped in a paragraph
|
||
|
||
<link rel="foo" href="bar"/>
|
||
|
||
<link rel="foo" href="bar"/> <style>.foo::before { content: "<foo>"; }</style><link rel="foo" href="bar"/>
|
||
|
||
But if it's on a line with other content, let it be wrapped.
|
||
|
||
<link rel="foo" href="bar"/> bar
|
||
|
||
foo <link rel="foo" href="bar"/>
|
||
|
||
foo <link rel="foo" href="bar"/> bar
|
||
|
||
And the same if we have non-paragraph-breaking whitespace
|
||
|
||
foo
|
||
<link rel="foo" href="bar"/>
|
||
bar
|
||
!! html/php
|
||
<p>A link tag, by itself or with other style/link tags, shouldn't be wrapped in a paragraph
|
||
</p>
|
||
<link rel="foo" href="bar" />
|
||
<link rel="foo" href="bar" /> <style>.foo::before { content: "<foo>"; }</style><link rel="foo" href="bar" />
|
||
<p>But if it's on a line with other content, let it be wrapped.
|
||
</p><p><link rel="foo" href="bar" /> bar
|
||
</p><p>foo <link rel="foo" href="bar" />
|
||
</p><p>foo <link rel="foo" href="bar" /> bar
|
||
</p><p>And the same if we have non-paragraph-breaking whitespace
|
||
</p><p>foo
|
||
<link rel="foo" href="bar" />
|
||
bar
|
||
</p>
|
||
!! end
|
||
|
||
!! test
|
||
Extension returning multiple nodes starting with a style tag roundtrips
|
||
!! options
|
||
wgRawHtml=1
|
||
!! wikitext
|
||
<table>
|
||
{{1x|<html><style>.hi { color: red; }</style>
|
||
</html>}}
|
||
<tr><td class="hi">ho</td></tr>
|
||
</table>
|
||
!! html/parsoid
|
||
<p about="#mwt5" typeof="mw:Transclusion" data-parsoid='{"fostered":true,"autoInsertedEnd":true,"autoInsertedStart":true,"firstWikitextNode":"TABLE_html","pi":[[{"k":"1"}]]}' data-mw='{"parts":["<table>\n",{"template":{"target":{"wt":"1x","href":"./Template:1x"},"params":{"1":{"wt":"<html><style>.hi { color: red; }</style>\n</html>"}},"i":0}},"\n<tr><td class=\"hi\">ho</td></tr>\n</table>"]}'><style typeof="mw:Extension/html" about="#mwt4" data-mw='{"name":"html","attrs":{},"body":{"extsrc":"<style>.hi { color: red; }</style>\n"}}'>.hi { color: red; }</style><span about="#mwt4">
|
||
</span></p><table about="#mwt5" data-parsoid='{"stx":"html"}'>
|
||
|
||
<tbody><tr><td class="hi">ho</td></tr>
|
||
</tbody></table>
|
||
!! end
|
||
|
||
!! test
|
||
Decoding of HTML entities in embedded HTML tags
|
||
!! wikitext
|
||
<table class="1&2&3&amp;4&amp;amp;5"><tr><td>x</td></tr></table>
|
||
!! html/php
|
||
<table class="1&2&3&amp;4&amp;amp;5"><tbody><tr><td>x</td></tr></tbody></table>
|
||
!! html/parsoid
|
||
<table class="1&2&3&amp;4&amp;amp;5" data-parsoid='{"stx":"html","a":{"class":"1&2&3&amp;4&amp;amp;5"},"sa":{"class":"1&2&amp;3&amp;amp;4&amp;amp;amp;5"}}'><tbody><tr data-parsoid='{"stx":"html"}'><td data-parsoid='{"stx":"html"}'>x</td></tr></tbody></table>
|
||
!! end
|
||
|
||
!! test
|
||
T51672: Test for brackets in attributes of elements in external link texts
|
||
!! wikitext
|
||
[http://example.com/ link <span title="title with [brackets]">span</span>]
|
||
[http://example.com/ link <span title="title with [brackets]">span</span>]
|
||
|
||
!! html/php
|
||
<p><a rel="nofollow" class="external text" href="http://example.com/">link <span title="title with [brackets]">span</span></a>
|
||
<a rel="nofollow" class="external text" href="http://example.com/">link <span title="title with [brackets]">span</span></a>
|
||
</p>
|
||
!! html/parsoid
|
||
<p><a rel="mw:ExtLink" href="http://example.com/" class="external text">link <span title="title with [brackets]">span</span></a>
|
||
<a rel="mw:ExtLink" href="http://example.com/" class="external text">link <span title="title with [brackets]" data-parsoid='{"stx":"html","a":{"title":"title with [brackets]"},"sa":{"title":"title with &#91;brackets&#93;"}}'>span</span></a></p>
|
||
!! end
|
||
|
||
!! test
|
||
T72875: Test for brackets in attributes of elements in internal link texts
|
||
!! wikitext
|
||
[[Foo|link <span title="title with [[double brackets]]">span</span>]]
|
||
[[Foo|link <span title="title with [[double brackets]]">span</span>]]
|
||
|
||
!! html/php
|
||
<p><a href="/wiki/Foo" title="Foo">link <span title="title with [[double brackets]]">span</span></a>
|
||
<a href="/wiki/Foo" title="Foo">link <span title="title with [[double brackets]]">span</span></a>
|
||
</p>
|
||
!! html/parsoid
|
||
<p><a rel="mw:WikiLink" href="./Foo" title="Foo">link <span title="title with [[double brackets]]">span</span></a>
|
||
<a rel="mw:WikiLink" href="./Foo" title="Foo">link <span title="title with [[double brackets]]" data-parsoid='{"stx":"html","a":{"title":"title with [[double brackets]]"},"sa":{"title":"title with &#91;&#91;double brackets&#93;&#93;"}}'>span</span></a></p>
|
||
!! end
|
||
|
||
!! test
|
||
T199926: html arrow wt: Parsoid sometimes trips up on verticalbar chars in hrefs
|
||
!! options
|
||
parsoid={
|
||
"modes": ["html2wt"]
|
||
}
|
||
!! html/parsoid
|
||
<a href="https://stats.wikimedia.org/v2/#/fr.wikipedia.org/reading/page-views-by-country/normal|map|2-Year~2016060100~2018071100|~total">9</a>
|
||
<a href="https://stats.wikimedia.org/v2/#/fr.wikipedia.org/reading/page-views-by-country/normal%7Cmap%7C2-Year~2016060100~2018071100%7C~total">10</a>
|
||
!! wikitext
|
||
[https://stats.wikimedia.org/v2/#/fr.wikipedia.org/reading/page-views-by-country/normal|map|2-Year~2016060100~2018071100|~total 9]
|
||
[[stats:v2/#/fr.wikipedia.org/reading/page-views-by-country/normal%7Cmap%7C2-Year~2016060100~2018071100%7C~total|10]]
|
||
!! end
|
||
|
||
!! test
|
||
T199926: Hash only interwiki link
|
||
!! config
|
||
wgFragmentMode=[ "html5" ]
|
||
!! wikitext
|
||
[[meatball:Test#1/2]]
|
||
[[gerrit:#/q/project:mediawiki/services/parsoid|Gerrit]]
|
||
!! html/php
|
||
<p><a href="http://www.usemod.com/cgi-bin/mb.pl?Test#1.2F2" class="extiw" title="meatball:Test">meatball:Test#1/2</a>
|
||
<a href="https://gerrit.wikimedia.org/#/q/project:mediawiki/services/parsoid" class="extiw" title="gerrit:">Gerrit</a>
|
||
</p>
|
||
!! html/parsoid
|
||
<p><a rel="mw:WikiLink/Interwiki" href="http://www.usemod.com/cgi-bin/mb.pl?Test#1.2F2" title="meatball:Test" class="extiw" data-parsoid='{"stx":"simple","a":{"href":"http://www.usemod.com/cgi-bin/mb.pl?Test#1.2F2"},"sa":{"href":"meatball:Test#1/2"},"isIW":true}'>meatball:Test#1/2</a>
|
||
<a rel="mw:WikiLink/Interwiki" href="https://gerrit.wikimedia.org/#/q/project:mediawiki/services/parsoid" class="extiw">Gerrit</a></p>
|
||
!! end
|
||
|
||
!! test
|
||
T179544: {{anchorencode:}} output should be always usable in links
|
||
!! config
|
||
wgFragmentMode=[ "html5" ]
|
||
!! wikitext
|
||
<span id="{{anchorencode:[foo]}}"></span>[[#{{anchorencode:[foo]}}]]
|
||
!! html/php
|
||
<p><span id="[foo]"></span><a href="#[foo]">#[foo]</a>
|
||
</p>
|
||
!! html/parsoid
|
||
<p><span id="[foo]" about="#mwt2" typeof="mw:ExpandedAttrs" data-parsoid='{"stx":"html","a":{"id":"[foo]"},"sa":{"id":"{{anchorencode:[foo]}}"}}' data-mw='{"attribs":[[{"txt":"id"},{"html":"<span typeof=\"mw:Transclusion mw:Entity\" about=\"#mwt1\" data-parsoid='{\"srcContent\":\"[\",\"dsr\":[10,32,null,null],\"pi\":[[]]}' data-mw='{\"parts\":[{\"template\":{\"target\":{\"wt\":\"anchorencode:[foo]\",\"function\":\"anchorencode\"},\"params\":{},\"i\":0}}]}'>[</span><span about=\"#mwt1\" data-parsoid=\"{}\">foo</span><span typeof=\"mw:Entity\" about=\"#mwt1\" data-parsoid='{\"src\":\"&amp;#x5D;\",\"srcContent\":\"]\"}'>]</span>"}]]}'></span><a typeof="mw:ExpandedAttrs" about="#mwt4" rel="mw:WikiLink" href="./Parser_test#[foo]" class="mw-selflink-fragment" data-parsoid='{"stx":"simple","a":{"href":"./Parser_test#[foo]"},"sa":{"href":"#{{anchorencode:[foo]}}"}}' data-mw='{"attribs":[[{"txt":"href"},{"html":"#<span typeof=\"mw:Transclusion mw:Entity\" about=\"#mwt3\" data-parsoid='{\"srcContent\":\"[\",\"dsr\":[44,66,null,null],\"pi\":[[]]}' data-mw='{\"parts\":[{\"template\":{\"target\":{\"wt\":\"anchorencode:[foo]\",\"function\":\"anchorencode\"},\"params\":{},\"i\":0}}]}'>[</span><span about=\"#mwt3\" data-parsoid=\"{}\">foo</span><span typeof=\"mw:Entity\" about=\"#mwt3\" data-parsoid='{\"src\":\"&amp;#x5D;\",\"srcContent\":\"]\"}'>]</span>"}]]}'>#[foo]</a></p>
|
||
!! end
|
||
##########################################################################
|
||
# Tests demonstrating white-space insensitivity in input wikitext
|
||
# for wikitext headings, wikitext list items, and wikitext table captions,
|
||
# headings, and cells. HTML versions of the same should preserve whitespace.
|
||
##########################################################################
|
||
!! test
|
||
Trim whitespace in wikitext headings, list items, table captions, headings, and cells
|
||
!! options
|
||
parsoid={
|
||
"modes": ["wt2html"],
|
||
"preserveIEW": true
|
||
}
|
||
!! config
|
||
wgParserEnableLegacyHeadingDOM=false
|
||
!! wikitext
|
||
__NOTOC__
|
||
== <!--c1--> <!--c2--> Spaces <!--c3--> <!--c4--> ==
|
||
== <!--c1--> <!--c2--> Tabs <!--c3--><!--c4--> ==
|
||
== <!--Headings with fallback ids--> Личная жизнь ==
|
||
* <!--c1--> <!--c2--> List item <!--c3--> <!--c4-->
|
||
; <!--term to define--> term : <!--term's definition--> definition
|
||
{|
|
||
|+ <!--c1--> <!--c2--> Table Caption <!--c3--> <!--c4-->
|
||
|-
|
||
! <!--c1--> <!--c2--> Table Heading 1 <!--c3--> <!--c4--> !! Table Heading 2 <!--c5-->
|
||
|-
|
||
| <!--c1--> <!--c2--> Table Cell 1 <!--c3--> <!--c4--> || Table Cell 2 <!--c5-->
|
||
|-
|
||
| class="foo" || <!--c1--> <!--c2--> Table Cell 3 <!--c3--> <!--c4-->
|
||
|-
|
||
| <!--c1--> testing [[one|two]] <!--c2--> | <!--c3--> some content
|
||
|}
|
||
: {|
|
||
| <!--c1--> <!--c2--> Table Cell 1 <!--c3--> <!--c4--> || Table Cell 2 <!--c5-->
|
||
|} foo <!--c1-->
|
||
!! html/php
|
||
<div class="mw-heading mw-heading2"><h2 id="Spaces">Spaces</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&action=edit&section=1" title="Edit section: Spaces">edit</a><span class="mw-editsection-bracket">]</span></span></div>
|
||
<div class="mw-heading mw-heading2"><h2 id="Tabs">Tabs</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&action=edit&section=2" title="Edit section: Tabs">edit</a><span class="mw-editsection-bracket">]</span></span></div>
|
||
<div class="mw-heading mw-heading2"><h2 id=".D0.9B.D0.B8.D1.87.D0.BD.D0.B0.D1.8F_.D0.B6.D0.B8.D0.B7.D0.BD.D1.8C">Личная жизнь</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&action=edit&section=3" title="Edit section: Личная жизнь">edit</a><span class="mw-editsection-bracket">]</span></span></div>
|
||
<ul><li>List item</li></ul>
|
||
<dl><dt>term</dt>
|
||
<dd>definition</dd></dl>
|
||
<table>
|
||
<caption>Table Caption
|
||
</caption>
|
||
<tbody><tr>
|
||
<th>Table Heading 1</th>
|
||
<th>Table Heading 2
|
||
</th></tr>
|
||
<tr>
|
||
<td>Table Cell 1</td>
|
||
<td>Table Cell 2
|
||
</td></tr>
|
||
<tr>
|
||
<td>class="foo"</td>
|
||
<td>Table Cell 3
|
||
</td></tr>
|
||
<tr>
|
||
<td>testing <a href="/wiki/One" title="One">two</a> | some content
|
||
</td></tr></tbody></table>
|
||
<dl><dd><table>
|
||
<tbody><tr>
|
||
<td>Table Cell 1</td>
|
||
<td>Table Cell 2
|
||
</td></tr></tbody></table> foo</dd></dl>
|
||
!! html/parsoid
|
||
<meta property="mw:PageProp/notoc" data-parsoid='{"src":"__NOTOC__","magicSrc":"__NOTOC__"}'/>
|
||
<h2 id="Spaces"><!--c1--><!--c2-->Spaces<!--c3--><!--c4--></h2>
|
||
<h2 id="Tabs"><!--c1--><!--c2-->Tabs<!--c3--><!--c4--></h2>
|
||
<h2 id="Личная_жизнь"><span id=".D0.9B.D0.B8.D1.87.D0.BD.D0.B0.D1.8F_.D0.B6.D0.B8.D0.B7.D0.BD.D1.8C" typeof="mw:FallbackId"></span><!--Headings with fallback ids-->Личная жизнь</h2>
|
||
<ul><li><!--c1--><!--c2-->List item<!--c3--><!--c4--></li></ul>
|
||
<dl><dt><!--term to define-->term</dt><dd data-parsoid='{"stx":"row"}'><!--term's definition-->definition</dd></dl>
|
||
<table>
|
||
<caption><!--c1--><!--c2-->Table Caption<!--c3--><!--c4--></caption>
|
||
<tbody><tr data-parsoid='{"startTagSrc":"|-"}'>
|
||
<th><!--c1--><!--c2-->Table Heading 1<!--c3--><!--c4--></th><th data-parsoid='{"stx":"row"}'>Table Heading 2<!--c5--></th></tr>
|
||
<tr data-parsoid='{"startTagSrc":"|-"}'>
|
||
<td><!--c1--><!--c2-->Table Cell 1<!--c3--><!--c4--></td><td data-parsoid='{"stx":"row"}'>Table Cell 2<!--c5--></td></tr>
|
||
<tr data-parsoid='{"startTagSrc":"|-"}'>
|
||
<td>class="foo"</td><td data-parsoid='{"stx":"row"}'><!--c1--><!--c2-->Table Cell 3<!--c3--><!--c4--></td></tr>
|
||
<tr data-parsoid='{"startTagSrc":"|-"}'>
|
||
<td><!--c1-->testing <a rel="mw:WikiLink" href="./One" title="One" data-parsoid='{"stx":"piped","a":{"href":"./One"},"sa":{"href":"one"}}'>two</a> <!--c2--> | <!--c3--> some content</td></tr>
|
||
</tbody></table>
|
||
<dl><dd><table>
|
||
<tbody><tr data-parsoid='{"autoInsertedStart":true}'><td><!--c1--><!--c2-->Table Cell 1<!--c3--><!--c4--></td><td data-parsoid='{"stx":"row"}'>Table Cell 2 <!--c5-->
|
||
</td></tr></tbody></table> foo<!--c1--></dd></dl>
|
||
!! end
|
||
|
||
# Looks like <caption> is not accepted in HTML
|
||
!! test
|
||
Do not trim whitespace in HTML headings, list items, table captions, headings, and cells
|
||
!! options
|
||
parsoid={
|
||
"modes": ["wt2html"],
|
||
"preserveIEW": true
|
||
}
|
||
!! config
|
||
wgParserEnableLegacyHeadingDOM=false
|
||
!! wikitext
|
||
__NOTOC__
|
||
<h2> <!--c1--> <!--c2--> Heading <!--c3--> <!--c4--> </h2>
|
||
<ul><li> <!--c1--> <!--c2--> List item <!--c3--> <!--c4--> </li></ul>
|
||
<table>
|
||
<tr><th> <!--c1--> <!--c2--> Table Heading <!--c3--> <!--c4--> <th></tr>
|
||
<tr><td> <!--c1--> <!--c2--> Table Cell <!--c3--> <!--c4--> <th></tr>
|
||
</table>
|
||
!! html/php
|
||
<div class="mw-heading mw-heading2"><h2 id="Heading"> Heading </h2></div>
|
||
<ul><li> List item </li></ul>
|
||
<table>
|
||
<tbody><tr><th> Table Heading </th><th></th></tr>
|
||
<tr><td> Table Cell </td><th></th></tr>
|
||
</tbody></table>
|
||
!! html/parsoid
|
||
<meta property="mw:PageProp/notoc"/>
|
||
<h2 id="Heading"> <!--c1--> <!--c2--> Heading <!--c3--> <!--c4--> </h2>
|
||
<ul><li> <!--c1--> <!--c2--> List item <!--c3--> <!--c4--> </li></ul>
|
||
<table>
|
||
<tbody><tr><th> <!--c1--> <!--c2--> Table Heading <!--c3--> <!--c4--> </th><th></th></tr>
|
||
<tr><td> <!--c1--> <!--c2--> Table Cell <!--c3--> <!--c4--> </td><th></th></tr>
|
||
</tbody></table>
|
||
!! end
|
||
|
||
!! test
|
||
Do not trim whitespace in links and quotes
|
||
!! options
|
||
parsoid={
|
||
"modes": ["wt2html"],
|
||
"preserveIEW": true
|
||
}
|
||
!! wikitext
|
||
foo '' <!--c1--> italic <!--c2--> '' and ''' <!--c3--> bold <!--c4--> '''
|
||
[[Foo| some text ]]
|
||
!! html/php
|
||
<p>foo <i> italic </i> and <b> bold </b>
|
||
<a href="/wiki/Foo" title="Foo"> some text </a>
|
||
</p>
|
||
!! html/parsoid
|
||
<p>foo <i> <!--c1--> italic <!--c2--> </i> and <b> <!--c3--> bold <!--c4--> </b>
|
||
<a rel="mw:WikiLink" href="./Foo" title="Foo"> some text </a></p>
|
||
!! end
|
||
|
||
!! test
|
||
Remove p tags surrounding a single element in a figcaption
|
||
!! options
|
||
parsoid=html2wt
|
||
!! wikitext
|
||
[[File:Foobar.jpg|right|200x200px|Caption]]
|
||
!! html/parsoid
|
||
<figure class="mw-halign-right" typeof="mw:File"><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="http://example.com/images/thumb/3/3a/Foobar.jpg/200px-Foobar.jpg" decoding="async" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="23" width="200"/></a><figcaption><p>Caption</p></figcaption></figure>
|
||
!! end
|
||
|
||
!! test
|
||
Selser preserves lack of newline before list and allows newline after the list
|
||
!! options
|
||
parsoid={
|
||
"modes": ["selser"],
|
||
"changes": [
|
||
[ "ul", "after", "<p>footer</p>" ]
|
||
]
|
||
}
|
||
!! wikitext
|
||
header
|
||
*foo
|
||
*bar
|
||
!! wikitext/edited
|
||
header
|
||
*foo
|
||
*bar
|
||
footer
|
||
!! end
|
||
|
||
!! test
|
||
Selser does not introduce newlines between unedited paragraph preceding the list
|
||
!! options
|
||
parsoid={
|
||
"modes": ["selser"],
|
||
"changes": [
|
||
[ "table tbody tr td p:last-child", "empty" ]
|
||
]
|
||
}
|
||
!! wikitext
|
||
{|
|
||
|
|
||
header
|
||
*foo
|
||
*bar
|
||
footer
|
||
|}
|
||
!! wikitext/edited
|
||
{|
|
||
|
|
||
header
|
||
*foo
|
||
*bar
|
||
|
||
|}
|
||
!! end
|
||
|
||
!! test
|
||
Selser does not introduce newlines between unedited paragraph following the list
|
||
!! options
|
||
parsoid={
|
||
"modes": ["selser"],
|
||
"changes": [
|
||
[ "table tbody tr td p:first-child", "empty" ]
|
||
]
|
||
}
|
||
!! wikitext
|
||
{|
|
||
|
|
||
header
|
||
*foo
|
||
*bar
|
||
footer
|
||
|}
|
||
!! wikitext/edited
|
||
{|
|
||
|
|
||
*foo
|
||
*bar
|
||
footer
|
||
|}
|
||
!! end
|
||
|
||
!! test
|
||
Remove a list item but do not insert newline above list
|
||
!! options
|
||
parsoid={
|
||
"modes": ["selser"],
|
||
"changes": [
|
||
[ "ul li:last-child", "remove" ]
|
||
]
|
||
}
|
||
!! wikitext
|
||
header
|
||
*foo
|
||
*bar
|
||
footer
|
||
!! wikitext/edited
|
||
header
|
||
*foo
|
||
footer
|
||
!! end
|
||
|
||
!! test
|
||
Spaced heading with element
|
||
!! options
|
||
parsoid={
|
||
"modes": ["selser"],
|
||
"changes": [
|
||
["#x", "attr", "class", "y"]
|
||
]
|
||
}
|
||
!! wikitext
|
||
=== hi <span id="x">hi</span> hi ho ===
|
||
!! wikitext/edited
|
||
=== hi <span id="x" class="y">hi</span> hi ho ===
|
||
!! end
|
||
|
||
!! test
|
||
Allow tabindex 0
|
||
!! wikitext
|
||
<div tabindex="0">A</div>
|
||
!! html
|
||
<div tabindex="0">A</div>
|
||
!! end
|
||
|
||
!! test
|
||
Don't allow tabindex -1
|
||
!! options
|
||
parsoid=wt2html
|
||
!! wikitext
|
||
<div tabindex="-1">A</div>
|
||
!! html
|
||
<div>A</div>
|
||
!! end
|
||
|
||
!! test
|
||
Don't Allow tabindex > 0
|
||
!! options
|
||
parsoid=wt2html
|
||
!! wikitext
|
||
<div tabindex="3">A</div>
|
||
!! html
|
||
<div>A</div>
|
||
!! end
|
||
|
||
!! test
|
||
aside tag in extension HTML is not p-wrapped (T278565)
|
||
!! wikitext
|
||
<asidetag></asidetag>This is some article content.
|
||
!! html/php
|
||
<aside>Some aside content</aside><p>This is some article content.</p>
|
||
!! html/parsoid
|
||
<aside typeof="mw:Extension/asidetag" data-mw='{"name":"asidetag","attrs":{},"body":{"extsrc":""}}'>Some aside content</aside><p>This is some article content.</p>
|
||
!! end
|
||
|
||
!! test
|
||
aside tag is not allowed directly in wikitext (T278565)
|
||
!! wikitext
|
||
<aside>This aside tag in wikitext should be escaped</aside>
|
||
!! html
|
||
<p><aside>This aside tag in wikitext should be escaped</aside>
|
||
</p>
|
||
!! end
|
||
|
||
!! test
|
||
Stripped tag in list
|
||
!! options
|
||
parsoid={
|
||
"modes": ["selser"],
|
||
"selser": "noauto",
|
||
"changes": [
|
||
["dd", "append", "ho"]
|
||
]
|
||
}
|
||
!! wikitext
|
||
:<i>hi</i></b>
|
||
!! wikitext/edited
|
||
:<i>hi</i></b>ho
|
||
!! end
|
||
|
||
!! test
|
||
Misnested link nested in span
|
||
!! options
|
||
parsoid={
|
||
"modes": ["selser"],
|
||
"selser": "noauto",
|
||
"changes": [
|
||
["dd", "append", " ho"]
|
||
]
|
||
}
|
||
!! wikitext
|
||
: [http://google.com <span>[[Lala]]:</span>ok]-hi
|
||
!! wikitext/edited
|
||
: [http://google.com <span>[[Lala]]:</span>ok]-hi ho
|
||
!! end
|
||
|
||
## From T290938, wrapper unmodified was prevented due to the auto-inserted end
|
||
!! test
|
||
Preserve the order invalid attributes
|
||
!! options
|
||
parsoid={
|
||
"modes": ["selser"],
|
||
"selser": "noauto",
|
||
"changes": [
|
||
["div", "append", "ho"]
|
||
]
|
||
}
|
||
!! wikitext
|
||
<div width="95%" style="border: 3px solid darkblue">hi
|
||
!! wikitext/edited
|
||
<div width="95%" style="border: 3px solid darkblue">hiho
|
||
!! end
|