mediawiki-extensions-Syntax.../tests/parser/parserTests.txt
Kunal Mehta ab5ce23881 Remove tidy workaround for armoring tabs
RemexHtml does not mangle tabs, so we don't need to armor them! We'll
now output literal tab characters, so this does change the HTML output,
but does not have any visual change.

Depends-On: Idf246d05d116f63a73105b50a1929a7721fbe7b9
Change-Id: I2ba871acf9ff5fdc81c13e03eee3a8fe670e1f0f
2018-09-18 21:30:20 +00:00

186 lines
5.1 KiB
Plaintext

!! hooks
source
!! endhooks
!! test
Non-existent language
!!input
<source lang="doesnotexist">
foobar
</source>
!! result
<div class="mw-highlight mw-content-ltr" dir="ltr"><pre>foobar</pre></div>
!! end
!! test
No language specified
!! wikitext
<source>
foo
</source>
!! html
<div class="mw-highlight mw-content-ltr" dir="ltr"><pre>foo</pre></div>
!! end
!! test
No language specified (no wellformed xml)
!! config
!! wikitext
<source>
bar
</source>
!! html
<div class="mw-highlight mw-content-ltr" dir="ltr"><pre>bar</pre></div>
!! end
!! test
XSS is escaped
!!input
<source lang="doesnotexist">
<script>alert("pwnd")</script>
<IMG SRC=`javascript:alert("RSnake says, 'XSS'")`>
<IMG
SRC=&#106;&#97;&#118;&#97;&#115;&#99;&#114;&#105;&#112;&#116;&#58;&#97;&#108;&#101;&#114;&#116;&#40;
&#39;&#88;&#83;&#83;&#39;&#41;
\";alert('XSS');//
</script><script>alert('XSS');</script>
%253cscript%253ealert(document.cookie)%253c/script%253e
</source>
!! result
<div class="mw-highlight mw-content-ltr" dir="ltr"><pre>&lt;script>alert("pwnd")&lt;/script>
&lt;IMG SRC=`javascript:alert("RSnake says, 'XSS'")`>
&lt;IMG
SRC=&amp;#106;&amp;#97;&amp;#118;&amp;#97;&amp;#115;&amp;#99;&amp;#114;&amp;#105;&amp;#112;&amp;#116;&amp;#58;&amp;#97;&amp;#108;&amp;#101;&amp;#114;&amp;#116;&amp;#40;
&amp;#39;&amp;#88;&amp;#83;&amp;#83;&amp;#39;&amp;#41;
\";alert('XSS');//
&lt;/script>&lt;script>alert('XSS');&lt;/script>
%253cscript%253ealert(document.cookie)%253c/script%253e</pre></div>
!! end
!! test
XSS is escaped (inline)
!!input
<source lang="doesnotexist" inline>
<script>alert("pwnd")</script>
<IMG SRC=`javascript:alert("RSnake says, 'XSS'")`>
<IMG
SRC=&#106;&#97;&#118;&#97;&#115;&#99;&#114;&#105;&#112;&#116;&#58;&#97;&#108;&#101;&#114;&#116;&#40;
&#39;&#88;&#83;&#83;&#39;&#41;
\";alert('XSS');//
</script><script>alert('XSS');</script>
%253cscript%253ealert(document.cookie)%253c/script%253e
</source>
!! result
<p><code class="mw-highlight" dir="ltr">&lt;script&gt;alert("pwnd")&lt;/script&gt; &lt;IMG SRC=`javascript:alert("RSnake says, 'XSS'")`&gt; &lt;IMG SRC=&amp;#106;&amp;#97;&amp;#118;&amp;#97;&amp;#115;&amp;#99;&amp;#114;&amp;#105;&amp;#112;&amp;#116;&amp;#58;&amp;#97;&amp;#108;&amp;#101;&amp;#114;&amp;#116;&amp;#40; &amp;#39;&amp;#88;&amp;#83;&amp;#83;&amp;#39;&amp;#41; \";alert('XSS');// &lt;/script&gt;&lt;script&gt;alert('XSS');&lt;/script&gt; %253cscript%253ealert(document.cookie)%253c/script%253e</code>
</p>
!! end
!! test
Default behaviour (inner is pre)
!!input
<source lang="javascript">
var a;
</source>
!! result
<div class="mw-highlight mw-content-ltr" dir="ltr"><pre><span></span><span class="kd">var</span> <span class="nx">a</span><span class="p">;</span>
</pre></div>
!! end
!! test
Multiline <source/> in lists
!!input
* <source>a
b</source>
* foo <source>a
b</source>
!! html
<ul><li><div class="mw-highlight mw-content-ltr" dir="ltr"><pre>a
b</pre></div></li></ul>
<ul><li>foo <div class="mw-highlight mw-content-ltr" dir="ltr"><pre>a
b</pre></div></li></ul>
!! html+tidy
<ul><li><div class="mw-highlight mw-content-ltr" dir="ltr"><pre>a
b</pre></div></li></ul>
<ul><li>foo <div class="mw-highlight mw-content-ltr" dir="ltr"><pre>a
b</pre></div></li></ul>
!! end
!! test
Custom attributes
!!input
<source lang="javascript" id="foo" class="bar" dir="rtl" style="font-size: larger;">var a;</source>
!! result
<div id="foo" class="bar mw-highlight mw-content-rtl" dir="rtl" style="font-size: larger;"><pre><span></span><span class="kd">var</span> <span class="nx">a</span><span class="p">;</span>
</pre></div>
!! end
!! test
Inline attribute (inline code)
!!input
Text <source lang="javascript" inline>var a;</source>.
!! result
<p>Text <code class="mw-highlight" dir="ltr"><span class="kd">var</span> <span class="nx">a</span><span class="p">;</span></code>.
</p>
!! end
!! test
Enclose none (inline code)
!!input
Text <source lang="javascript" enclose="none">var a;</source>.
!! result
<p>Text <code class="mw-highlight" dir="ltr"><span class="kd">var</span> <span class="nx">a</span><span class="p">;</span></code>.
</p>
!! end
!! test
Enclose with nowiki
!! input
{{#tag:syntaxhighlight|<nowiki>foo</nowiki>|lang="text"|inline=none}}
!! result
<p><code class="mw-highlight" dir="ltr">foo</code>
</p>
!! end
!! test
No code
!! input
<source lang="CSharp"></source>
!! result
<div class="mw-highlight mw-content-ltr" dir="ltr"></div>
!! end
!! test
Just whitespace
!! input
<source lang="CSharp"> </source>
!! result
<div class="mw-highlight mw-content-ltr" dir="ltr"></div>
!! end
!! test
tabs plus tidy (T32930, T59826)
!! input
<syntaxhighlight lang="javascript" enclose="pre" highlight="2-3">
function doSomething() {
var foo,
bar;
if (baz) {
</syntaxhighlight>
!! html+tidy
<div class="mw-highlight mw-content-ltr" dir="ltr"><pre><span></span><span class="kd">function</span> <span class="nx">doSomething</span><span class="p">()</span> <span class="p">{</span>
<span class="hll"> <span class="kd">var</span> <span class="nx">foo</span><span class="p">,</span>
</span><span class="hll"> <span class="nx">bar</span><span class="p">;</span>
</span> <span class="k">if</span> <span class="p">(</span><span class="nx">baz</span><span class="p">)</span> <span class="p">{</span>
</pre></div>
!! end