summaryrefslogtreecommitdiff
path: root/tests/phpunit/includes/parser/TagHooksTest.php
diff options
context:
space:
mode:
Diffstat (limited to 'tests/phpunit/includes/parser/TagHooksTest.php')
-rw-r--r--tests/phpunit/includes/parser/TagHooksTest.php108
1 files changed, 108 insertions, 0 deletions
diff --git a/tests/phpunit/includes/parser/TagHooksTest.php b/tests/phpunit/includes/parser/TagHooksTest.php
new file mode 100644
index 00000000..e3c4cc84
--- /dev/null
+++ b/tests/phpunit/includes/parser/TagHooksTest.php
@@ -0,0 +1,108 @@
+<?php
+
+/**
+ * @group Parser
+ */
+class TagHookTest extends MediaWikiTestCase {
+ public static function provideValidNames() {
+ return array(
+ array( 'foo' ),
+ array( 'foo-bar' ),
+ array( 'foo_bar' ),
+ array( 'FOO-BAR' ),
+ array( 'foo bar' )
+ );
+ }
+
+ public static function provideBadNames() {
+ return array( array( "foo<bar" ), array( "foo>bar" ), array( "foo\nbar" ), array( "foo\rbar" ) );
+ }
+
+ protected function setUp() {
+ parent::setUp();
+
+ $this->setMwGlobals( 'wgAlwaysUseTidy', false );
+ }
+
+ /**
+ * @dataProvider provideValidNames
+ * @covers Parser::setHook
+ */
+ public function testTagHooks( $tag ) {
+ global $wgParserConf, $wgContLang;
+ $parser = new Parser( $wgParserConf );
+
+ $parser->setHook( $tag, array( $this, 'tagCallback' ) );
+ $parserOutput = $parser->parse(
+ "Foo<$tag>Bar</$tag>Baz",
+ Title::newFromText( 'Test' ),
+ ParserOptions::newFromUserAndLang( new User, $wgContLang )
+ );
+ $this->assertEquals( "<p>FooOneBaz\n</p>", $parserOutput->getText() );
+
+ $parser->mPreprocessor = null; # Break the Parser <-> Preprocessor cycle
+ }
+
+ /**
+ * @dataProvider provideBadNames
+ * @expectedException MWException
+ * @covers Parser::setHook
+ */
+ public function testBadTagHooks( $tag ) {
+ global $wgParserConf, $wgContLang;
+ $parser = new Parser( $wgParserConf );
+
+ $parser->setHook( $tag, array( $this, 'tagCallback' ) );
+ $parser->parse(
+ "Foo<$tag>Bar</$tag>Baz",
+ Title::newFromText( 'Test' ),
+ ParserOptions::newFromUserAndLang( new User, $wgContLang )
+ );
+ $this->fail( 'Exception not thrown.' );
+ }
+
+ /**
+ * @dataProvider provideValidNames
+ * @covers Parser::setFunctionTagHook
+ */
+ public function testFunctionTagHooks( $tag ) {
+ global $wgParserConf, $wgContLang;
+ $parser = new Parser( $wgParserConf );
+
+ $parser->setFunctionTagHook( $tag, array( $this, 'functionTagCallback' ), 0 );
+ $parserOutput = $parser->parse(
+ "Foo<$tag>Bar</$tag>Baz",
+ Title::newFromText( 'Test' ),
+ ParserOptions::newFromUserAndLang( new User, $wgContLang )
+ );
+ $this->assertEquals( "<p>FooOneBaz\n</p>", $parserOutput->getText() );
+
+ $parser->mPreprocessor = null; # Break the Parser <-> Preprocessor cycle
+ }
+
+ /**
+ * @dataProvider provideBadNames
+ * @expectedException MWException
+ * @covers Parser::setFunctionTagHook
+ */
+ public function testBadFunctionTagHooks( $tag ) {
+ global $wgParserConf, $wgContLang;
+ $parser = new Parser( $wgParserConf );
+
+ $parser->setFunctionTagHook( $tag, array( $this, 'functionTagCallback' ), SFH_OBJECT_ARGS );
+ $parser->parse(
+ "Foo<$tag>Bar</$tag>Baz",
+ Title::newFromText( 'Test' ),
+ ParserOptions::newFromUserAndLang( new User, $wgContLang )
+ );
+ $this->fail( 'Exception not thrown.' );
+ }
+
+ function tagCallback( $text, $params, $parser ) {
+ return str_rot13( $text );
+ }
+
+ function functionTagCallback( &$parser, $frame, $code, $attribs ) {
+ return str_rot13( $code );
+ }
+}