added tests for content model stuff to RevisionTest
authordaniel <daniel.kinzler@wikimedia.de>
Mon, 23 Apr 2012 19:22:06 +0000 (21:22 +0200)
committerdaniel <daniel.kinzler@wikimedia.de>
Mon, 23 Apr 2012 19:22:06 +0000 (21:22 +0200)
includes/AutoLoader.php
tests/phpunit/includes/RevisionTest.php

index 1da1275..03553c4 100644 (file)
@@ -975,6 +975,8 @@ $wgAutoloadLocalClasses = array(
        # tests/phpunit
        'WikitextContentTest' => 'tests/phpunit/includes/WikitextContentTest.php',
        'JavascriptContentTest' => 'tests/phpunit/includes/JavascriptContentTest.php',
+       'DummyContentHandlerForTesting' => 'tests/phpunit/includes/ContentHandlerTest.php',
+       'DummyContentForTesting' => 'tests/phpunit/includes/ContentHandlerTest.php',
 
        # tests/parser
        'ParserTest' => 'tests/parser/parserTest.inc',
index d7654db..e9243d4 100644 (file)
@@ -6,14 +6,31 @@ class RevisionTest extends MediaWikiTestCase {
        function setUp() {
                global $wgContLang;
                $wgContLang = Language::factory( 'en' );
+
                $globalSet = array(
                        'wgLegacyEncoding' => false,
                        'wgCompressRevisions' => false,
+
+                       'wgContentHandlerTextFallback' => $GLOBALS['wgContentHandlerTextFallback'],
+                       'wgExtraNamespaces' => $GLOBALS['wgExtraNamespaces'],
+                       'wgNamespaceContentModels' => $GLOBALS['wgNamespaceContentModels'],
+                       'wgContentHandlers' => $GLOBALS['wgContentHandlers'],
                );
+
                foreach ( $globalSet as $var => $data ) {
                        $this->saveGlobals[$var] = $GLOBALS[$var];
                        $GLOBALS[$var] = $data;
                }
+
+               global $wgExtraNamespaces, $wgNamespaceContentModels, $wgContentHandlers;
+               $wgExtraNamespaces[ 12312 ] = 'Dummy';
+               $wgExtraNamespaces[ 12313 ] = 'Dummy_talk';
+
+               $wgNamespaceContentModels[ 12312 ] = 'DUMMY';
+               $wgContentHandlers[ 'DUMMY' ] = 'DummyContentHandlerForTesting';
+
+               global $wgContentHandlerTextFallback;
+               $wgContentHandlerTextFallback = 'ignore';
        }
 
        function tearDown() {
@@ -120,6 +137,138 @@ class RevisionTest extends MediaWikiTestCase {
                $this->assertEquals( "Wiki est l'\xc3\xa9cole superieur !",
                        Revision::getRevisionText( $row ), "getRevisionText" );
        }
+
+       # =================================================================================================================
+
+       /**
+        * @param string $text
+        * @param string $title
+        * @param string $model
+        * @return Revision
+        */
+       function newTestRevision( $text, $title = "Test", $model = CONTENT_MODEL_WIKITEXT, $format = null ) {
+               if ( is_string( $title ) ) {
+                       $title = Title::newFromText( $title );
+               }
+
+               $content = ContentHandler::makeContent( $text, $title, $model, $format );
+
+               $rev = new Revision(
+                       array(
+                               'id'         => 42,
+                               'page'       => 23,
+                               'title'      => $title,
+
+                               'content'    => $content,
+                               'length'     => $content->getSize(),
+                               'comment'    => "testing",
+                               'minor_edit' => false,
+
+                               'content_format' => $format,
+                       )
+               );
+
+               return $rev;
+       }
+
+       function dataGetContentModel() {
+               return array(
+                       array( 'hello world', 'Hello', null, null, CONTENT_MODEL_WIKITEXT ),
+                       array( 'hello world', 'User:hello/there.css', null, null, CONTENT_MODEL_CSS ),
+                       array( serialize('hello world'), 'Dummy:Hello', null, null, 'DUMMY' ),
+               );
+       }
+
+       /**
+        * @dataProvider dataGetContentModel
+        */
+       function testGetContentModel( $text, $title, $model, $format, $expectedModel ) {
+               $rev = $this->newTestRevision( $text, $title, $model, $format );
+
+               $this->assertEquals( $expectedModel, $rev->getContentModelName() );
+       }
+
+       function dataGetContentFormat() {
+               return array(
+                       array( 'hello world', 'Hello', null, null, 'application/x-wikitext' ),
+                       array( 'hello world', 'Hello', CONTENT_MODEL_CSS, null, 'text/css' ),
+                       array( 'hello world', 'User:hello/there.css', null, null, 'text/css' ),
+                       array( serialize('hello world'), 'Dummy:Hello', null, null, 'dummy' ),
+               );
+       }
+
+       /**
+        * @dataProvider dataGetContentFormat
+        */
+       function testGetContentFormat( $text, $title, $model, $format, $expectedFormat ) {
+               $rev = $this->newTestRevision( $text, $title, $model, $format );
+
+               $this->assertEquals( $expectedFormat, $rev->getContentFormat() );
+       }
+
+       function dataGetContentHandler() {
+               return array(
+                       array( 'hello world', 'Hello', null, null, 'WikitextContentHandler' ),
+                       array( 'hello world', 'User:hello/there.css', null, null, 'CssContentHandler' ),
+                       array( serialize('hello world'), 'Dummy:Hello', null, null, 'DummyContentHandlerForTesting' ),
+               );
+       }
+
+       /**
+        * @dataProvider dataGetContentHandler
+        */
+       function testGetContentHandler( $text, $title, $model, $format, $expectedClass ) {
+               $rev = $this->newTestRevision( $text, $title, $model, $format );
+
+               $this->assertEquals( $expectedClass, get_class( $rev->getContentHandler() ) );
+       }
+
+       function dataGetContent() {
+               return array(
+                       array( 'hello world', 'Hello', null, null, Revision::FOR_PUBLIC, 'hello world' ),
+                       array( serialize('hello world'), 'Hello', 'DUMMY', null, Revision::FOR_PUBLIC, serialize('hello world') ),
+                       array( serialize('hello world'), 'Dummy:Hello', null, null, Revision::FOR_PUBLIC, serialize('hello world') ),
+               );
+       }
+
+       /**
+        * @dataProvider dataGetContent
+        */
+       function testGetContent( $text, $title, $model, $format, $audience, $expectedSerialization ) {
+               $rev = $this->newTestRevision( $text, $title, $model, $format );
+               $content = $rev->getContent( $audience );
+
+               $this->assertEquals( $expectedSerialization, is_null( $content ) ? null : $content->serialize( $format ) );
+       }
+
+       function dataGetText() {
+               return array(
+                       array( 'hello world', 'Hello', null, null, Revision::FOR_PUBLIC, 'hello world' ),
+                       array( serialize('hello world'), 'Hello', 'DUMMY', null, Revision::FOR_PUBLIC, null ),
+                       array( serialize('hello world'), 'Dummy:Hello', null, null, Revision::FOR_PUBLIC, null ),
+               );
+       }
+
+       /**
+        * @dataProvider dataGetText
+        */
+       function testGetText( $text, $title, $model, $format, $audience, $expectedText ) {
+               $rev = $this->newTestRevision( $text, $title, $model, $format );
+
+               $this->assertEquals( $expectedText, $rev->getText( $audience ) );
+       }
+
+       /**
+        * @dataProvider dataGetText
+        */
+       function testGetRawText( $text, $title, $model, $format, $audience, $expectedText ) {
+               $rev = $this->newTestRevision( $text, $title, $model, $format );
+
+               $this->assertEquals( $expectedText, $rev->getRawText( $audience ) );
+       }
+
+       // @todo: set up testing environment with database to tgest loading and inserting revisions
+
 }