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
|
<?php
namespace MediaWiki\Tests\Parser;
use InvalidArgumentException;
use MediaWiki\Parser\ParserOptions;
use MediaWiki\Title\Title;
use MediaWiki\User\User;
use MediaWikiIntegrationTestCase;
/**
* @group Database
* @group Parser
*
* @covers \MediaWiki\Parser\Parser
* @covers \MediaWiki\Parser\BlockLevelPass
* @covers \MediaWiki\Parser\StripState
*
* @covers \MediaWiki\Parser\Preprocessor_Hash
* @covers \MediaWiki\Parser\PPDStack_Hash
* @covers \MediaWiki\Parser\PPDStackElement_Hash
* @covers \MediaWiki\Parser\PPDPart_Hash
* @covers \MediaWiki\Parser\PPFrame_Hash
* @covers \MediaWiki\Parser\PPTemplateFrame_Hash
* @covers \MediaWiki\Parser\PPCustomFrame_Hash
* @covers \MediaWiki\Parser\PPNode_Hash_Tree
* @covers \MediaWiki\Parser\PPNode_Hash_Text
* @covers \MediaWiki\Parser\PPNode_Hash_Array
* @covers \MediaWiki\Parser\PPNode_Hash_Attr
*/
class TagHooksTest extends MediaWikiIntegrationTestCase {
public static function provideValidNames() {
return [
[ 'foo' ],
[ 'foo-bar' ],
[ 'foo_bar' ],
[ 'FOO-BAR' ],
[ 'foo bar' ]
];
}
public static function provideBadNames() {
return [ [ "foo<bar" ], [ "foo>bar" ], [ "foo\nbar" ], [ "foo\rbar" ] ];
}
private function getParserOptions() {
$popt = ParserOptions::newFromUserAndLang( new User,
$this->getServiceContainer()->getContentLanguage() );
return $popt;
}
/**
* @dataProvider provideValidNames
*/
public function testTagHooks( $tag ) {
$parser = $this->getServiceContainer()->getParserFactory()->create();
$parser->setHook( $tag, [ $this, 'tagCallback' ] );
$parserOutput = $parser->parse(
"Foo<$tag>Bar</$tag>Baz",
Title::makeTitle( NS_MAIN, 'Test' ),
$this->getParserOptions()
);
$this->assertEquals( "<p>FooOneBaz\n</p>", $parserOutput->getRawText() );
}
/**
* @dataProvider provideBadNames
*/
public function testBadTagHooks( $tag ) {
$parser = $this->getServiceContainer()->getParserFactory()->create();
$this->expectException( InvalidArgumentException::class );
$parser->setHook( $tag, [ $this, 'tagCallback' ] );
}
public function tagCallback( $text, $params, $parser ) {
return str_rot13( $text );
}
}
|