Add tests for parser tag hooks.
authorPlatonides <platonides@users.mediawiki.org>
Tue, 11 Jan 2011 18:37:15 +0000 (18:37 +0000)
committerPlatonides <platonides@users.mediawiki.org>
Tue, 11 Jan 2011 18:37:15 +0000 (18:37 +0000)
tests/phpunit/includes/parser/TagHooks.php [new file with mode: 0644]

diff --git a/tests/phpunit/includes/parser/TagHooks.php b/tests/phpunit/includes/parser/TagHooks.php
new file mode 100644 (file)
index 0000000..2227908
--- /dev/null
@@ -0,0 +1,77 @@
+<?php
+
+/**
+ * @group Parser
+ */
+class TagHookTest extends MediaWikiTestCase {
+       
+       public static function provideValidNames() {
+               return array( array( 'foo' ), array( 'foo-bar' ), array( 'foo_bar' ), array( 'FOO-BAR' ) );
+       }
+
+       public static function provideBadNames() {
+               return array( array( "foo<bar" ), array( "foo>bar" ), array( "foo bar" ), array( "foo\nbar" ),  array( "foo\rbar" ) );
+       }
+               
+       /**
+        * @dataProvider provideValidNames
+        */
+       function testTagHooks( $tag ) {
+               global $wgParserConf;
+               $parser = new Parser( $wgParserConf );
+               
+               $parser->setHook( $tag, array( $this, 'tagCallback' ) );
+               $parserOutput = $parser->parse( "Foo<$tag>Bar</$tag>Baz", new Title( 'Test' ), new ParserOptions );
+               $this->assertEquals( "<p>FooOneBaz\n</p>", $parserOutput->getText() );
+               
+               $parser->mPreprocessor = null; # Break the Parser <-> Preprocessor cycle
+       }
+       
+       /**
+        * @dataProvider provideBadNames
+        * @expectedException MWException
+        */
+       function testBadTagHooks( $tag ) {
+               global $wgParserConf;
+               $parser = new Parser( $wgParserConf );
+               
+               $parser->setHook( $tag, array( $this, 'tagCallback' ) );
+               $parser->parse( "Foo<$tag>Bar</$tag>Baz", new Title( 'Test' ), new ParserOptions );
+               $this->fail('Exception not thrown.');
+       }
+       
+       /**
+        * @dataProvider provideValidNames
+        */
+       function testFunctionTagHooks( $tag ) {
+               global $wgParserConf;
+               $parser = new Parser( $wgParserConf );
+               
+               $parser->setFunctionTagHook( $tag, array( $this, 'functionTagCallback' ), 0 );
+               $parserOutput = $parser->parse( "Foo<$tag>Bar</$tag>Baz", new Title( 'Test' ), new ParserOptions );
+               $this->assertEquals( "<p>FooOneBaz\n</p>", $parserOutput->getText() );
+               
+               $parser->mPreprocessor = null; # Break the Parser <-> Preprocessor cycle
+       }
+       
+       /**
+        * @dataProvider provideBadNames
+        * @expectedException MWException
+        */
+       function testBadFunctionTagHooks( $tag ) {
+               global $wgParserConf;
+               $parser = new Parser( $wgParserConf );
+               
+               $parser->setFunctionTagHook( $tag, array( $this, 'functionTagCallback' ), SFH_OBJECT_ARGS );
+               $parser->parse( "Foo<$tag>Bar</$tag>Baz", new Title( 'Test' ), new ParserOptions );
+               $this->fail('Exception not thrown.');
+       }
+       
+       function tagCallback( $text, $params, $parser ) {
+               return str_rot13( $text );
+       }
+       
+       function functionTagCallback( &$parser, $frame, $code, $attribs ) {
+               return str_rot13( $code );
+       }
+}