1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133
|
<?php
/**
* @group GlobalFunctions
* @covers ::wfEscapeWikiText
*/
class WfEscapeWikiTextTest extends MediaWikiUnitTestCase {
/**
* @dataProvider provideEscape
*/
public function testEscape( $input, $expected ) {
// save global
global $wgEnableMagicLinks;
$old = $wgEnableMagicLinks;
$wgEnableMagicLinks = [];
try {
$actual = wfEscapeWikiText( $input );
// Sanity check that the output can be decoded back to the input
// input as well.
$decoded = html_entity_decode( $actual, ENT_QUOTES | ENT_SUBSTITUTE | ENT_HTML5 );
$this->assertEquals( $decoded, (string)$input );
// And that the output was what we expected
$this->assertEquals( $expected, $actual );
} finally {
// restore global
$wgEnableMagicLinks = $old;
}
}
public function provideEscape() {
return [
'null' => [
null,
'',
],
'false' => [
false,
'',
],
'empty string' => [
'',
'',
],
'no escapes' => [
'a',
'a',
],
'braces and brackets' => [
'[[WikiLink]] {{Template}} <html>',
'[[WikiLink]] {{Template}} <html>',
],
'quotes' => [
'"\'',
'"'',
],
'tokens' => [
'{| |- |+ !! ~~~~~ __FOO__',
'{| |- |+ !! ~~~~~ __FOO__',
],
'start of line' => [
"* foo\n! bar\n# bat\n:baz\n pre\n----",
"* foo\n! bar\n# bat\n:baz\n pre\n----",
],
'paragraph separators' => [
"a\n\n\n\nb",
"a\n \n b",
],
'language converter' => [
'-{ foo ; bar }-',
'-{ foo ; bar }-',
],
'left-side context: |+' => [
'+ foo + bar',
'+ foo + bar',
],
'left-side context: |-' => [
'- foo - bar',
'- foo - bar',
],
'left-side context: __FOO__' => [
'_FOO__',
'_FOO__',
],
'left-side context: ~~~' => [
'~~ long string here',
'~~ long string here',
],
'left-side context: newlines' => [
"\n\n\nFoo",
" \n Foo",
],
'right-side context: ~~~' => [
'long string here ~~',
'long string here ~~',
],
'right-side context: __FOO__' => [
'__FOO_',
'__FOO_',
],
'right-side context: newlines' => [
"foo\n\n\n",
"foo\n ",
],
// A single character input needs to be protected against both
// left-side context and right-side context.
'both-side context: +' => [ // | + + (left side)
'+',
'+',
],
'both-side context: -' => [ // | + - (left side)
'-',
'-',
],
'both-side context: _' => [ // _ + _FOO as well as __FOO_ + _
'_',
'_',
],
'both-side context: ~' => [ // ~ + ~~ as well as ~~ + ~
'~',
'~',
],
'both-side context: \\n' => [ // \n + \n
"\n",
' ',
],
'both-side context: \\t' => [ // \n + \t + \n becomes paragraph break
"\t",
'	',
],
];
}
}
|