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}} ', '[[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", ' ', ], ]; } }