From bd8e492803b7959fe51eb39d7f7e061dc4dcfbdc Mon Sep 17 00:00:00 2001 From: daniel Date: Mon, 23 Apr 2012 21:22:06 +0200 Subject: [PATCH] added tests for content model stuff to RevisionTest --- includes/AutoLoader.php | 2 + tests/phpunit/includes/RevisionTest.php | 149 ++++++++++++++++++++++++ 2 files changed, 151 insertions(+) diff --git a/includes/AutoLoader.php b/includes/AutoLoader.php index 1da12751e2..03553c48ef 100644 --- a/includes/AutoLoader.php +++ b/includes/AutoLoader.php @@ -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', diff --git a/tests/phpunit/includes/RevisionTest.php b/tests/phpunit/includes/RevisionTest.php index d7654db9f2..e9243d47d5 100644 --- a/tests/phpunit/includes/RevisionTest.php +++ b/tests/phpunit/includes/RevisionTest.php @@ -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 + } -- 2.20.1