X-Git-Url: https://git.heureux-cyclage.org/?p=lhc%2Fweb%2Fwiklou.git;a=blobdiff_plain;f=tests%2Fphpunit%2Fincludes%2FRevisionTest.php;h=39f7e5c304f2ed17478031c786aac7e6af887275;hp=ba19f3b2ae71e0c17ad7bba65bafc5e8e03f3ec8;hb=288fb8cafaa14e5bacda9316536f36fe4425b8a4;hpb=1bdc9e1d6bc4064f38fbc40d76cb1007bb160d8a diff --git a/tests/phpunit/includes/RevisionTest.php b/tests/phpunit/includes/RevisionTest.php index ba19f3b2ae..39f7e5c304 100644 --- a/tests/phpunit/includes/RevisionTest.php +++ b/tests/phpunit/includes/RevisionTest.php @@ -57,86 +57,159 @@ class RevisionTest extends MediaWikiTestCase { parent::tearDown(); } + public function provideConstruct() { + yield 'with text' => [ + [ + 'text' => 'hello world.', + 'content_model' => CONTENT_MODEL_JAVASCRIPT + ], + ]; + yield 'with content' => [ + [ + 'content' => new JavaScriptContent( 'hellow world.' ) + ], + ]; + } + /** - * @covers Revision::getRevisionText + * @dataProvider provideConstruct */ - public function testGetRevisionText() { - $row = new stdClass; - $row->old_flags = ''; - $row->old_text = 'This is a bunch of revision text.'; - $this->assertEquals( - 'This is a bunch of revision text.', - Revision::getRevisionText( $row ) ); + public function testConstruct( $rowArray ) { + $rev = new Revision( $rowArray ); + $this->assertNotNull( $rev->getContent(), 'no content object available' ); + $this->assertEquals( CONTENT_MODEL_JAVASCRIPT, $rev->getContent()->getModel() ); + $this->assertEquals( CONTENT_MODEL_JAVASCRIPT, $rev->getContentModel() ); + } + + public function provideConstructThrowsExceptions() { + yield 'content and text_id both not empty' => [ + [ + 'content' => new WikitextContent( 'GOAT' ), + 'text_id' => 'someid', + ], + new MWException( "Text already stored in external store (id someid), " . + "can't serialize content object" ) + ]; + yield 'with bad content object (class)' => [ + [ 'content' => new stdClass() ], + new MWException( '`content` field must contain a Content object.' ) + ]; + yield 'with bad content object (string)' => [ + [ 'content' => 'ImAGoat' ], + new MWException( '`content` field must contain a Content object.' ) + ]; + yield 'bad row format' => [ + 'imastring, not a row', + new MWException( 'Revision constructor passed invalid row format.' ) + ]; } /** - * @covers Revision::getRevisionText + * @dataProvider provideConstructThrowsExceptions */ - public function testGetRevisionTextGzip() { - $this->checkPHPExtension( 'zlib' ); + public function testConstructThrowsExceptions( $rowArray, Exception $expectedException ) { + $this->setExpectedException( + get_class( $expectedException ), + $expectedException->getMessage(), + $expectedException->getCode() + ); + new Revision( $rowArray ); + } - $row = new stdClass; - $row->old_flags = 'gzip'; - $row->old_text = gzdeflate( 'This is a bunch of revision text.' ); - $this->assertEquals( - 'This is a bunch of revision text.', - Revision::getRevisionText( $row ) ); + public function provideGetRevisionText() { + yield 'Generic test' => [ + 'This is a goat of revision text.', + [ + 'old_flags' => '', + 'old_text' => 'This is a goat of revision text.', + ], + ]; } /** * @covers Revision::getRevisionText + * @dataProvider provideGetRevisionText */ - public function testGetRevisionTextUtf8Native() { - $row = new stdClass; - $row->old_flags = 'utf-8'; - $row->old_text = "Wiki est l'\xc3\xa9cole superieur !"; - $GLOBALS['wgLegacyEncoding'] = 'iso-8859-1'; + public function testGetRevisionText( $expected, $rowData, $prefix = 'old_', $wiki = false ) { $this->assertEquals( - "Wiki est l'\xc3\xa9cole superieur !", - Revision::getRevisionText( $row ) ); + $expected, + Revision::getRevisionText( (object)$rowData, $prefix, $wiki ) ); + } + + public function provideGetRevisionTextWithZlibExtension() { + yield 'Generic gzip test' => [ + 'This is a small goat of revision text.', + [ + 'old_flags' => 'gzip', + 'old_text' => gzdeflate( 'This is a small goat of revision text.' ), + ], + ]; } /** * @covers Revision::getRevisionText + * @dataProvider provideGetRevisionTextWithZlibExtension */ - public function testGetRevisionTextUtf8Legacy() { - $row = new stdClass; - $row->old_flags = ''; - $row->old_text = "Wiki est l'\xe9cole superieur !"; - $GLOBALS['wgLegacyEncoding'] = 'iso-8859-1'; - $this->assertEquals( + public function testGetRevisionWithZlibExtension( $expected, $rowData ) { + $this->checkPHPExtension( 'zlib' ); + $this->testGetRevisionText( $expected, $rowData ); + } + + public function provideGetRevisionTextWithLegacyEncoding() { + yield 'Utf8Native' => [ "Wiki est l'\xc3\xa9cole superieur !", - Revision::getRevisionText( $row ) ); + 'iso-8859-1', + [ + 'old_flags' => 'utf-8', + 'old_text' => "Wiki est l'\xc3\xa9cole superieur !", + ] + ]; + yield 'Utf8Legacy' => [ + "Wiki est l'\xc3\xa9cole superieur !", + 'iso-8859-1', + [ + 'old_flags' => '', + 'old_text' => "Wiki est l'\xe9cole superieur !", + ] + ]; } /** * @covers Revision::getRevisionText + * @dataProvider provideGetRevisionTextWithLegacyEncoding */ - public function testGetRevisionTextUtf8NativeGzip() { - $this->checkPHPExtension( 'zlib' ); + public function testGetRevisionWithLegacyEncoding( $expected, $encoding, $rowData ) { + $GLOBALS['wgLegacyEncoding'] = $encoding; + $this->testGetRevisionText( $expected, $rowData ); + } - $row = new stdClass; - $row->old_flags = 'gzip,utf-8'; - $row->old_text = gzdeflate( "Wiki est l'\xc3\xa9cole superieur !" ); - $GLOBALS['wgLegacyEncoding'] = 'iso-8859-1'; - $this->assertEquals( + public function provideGetRevisionTextWithGzipAndLegacyEncoding() { + yield 'Utf8NativeGzip' => [ "Wiki est l'\xc3\xa9cole superieur !", - Revision::getRevisionText( $row ) ); + 'iso-8859-1', + [ + 'old_flags' => 'gzip,utf-8', + 'old_text' => gzdeflate( "Wiki est l'\xc3\xa9cole superieur !" ), + ] + ]; + yield 'Utf8LegacyGzip' => [ + "Wiki est l'\xc3\xa9cole superieur !", + 'iso-8859-1', + [ + 'old_flags' => 'gzip', + 'old_text' => gzdeflate( "Wiki est l'\xe9cole superieur !" ), + ] + ]; } /** * @covers Revision::getRevisionText + * @dataProvider provideGetRevisionTextWithGzipAndLegacyEncoding */ - public function testGetRevisionTextUtf8LegacyGzip() { + public function testGetRevisionWithGzipAndLegacyEncoding( $expected, $encoding, $rowData ) { $this->checkPHPExtension( 'zlib' ); - - $row = new stdClass; - $row->old_flags = 'gzip'; - $row->old_text = gzdeflate( "Wiki est l'\xe9cole superieur !" ); - $GLOBALS['wgLegacyEncoding'] = 'iso-8859-1'; - $this->assertEquals( - "Wiki est l'\xc3\xa9cole superieur !", - Revision::getRevisionText( $row ) ); + $GLOBALS['wgLegacyEncoding'] = $encoding; + $this->testGetRevisionText( $expected, $rowData ); } /** @@ -176,8 +249,6 @@ class RevisionTest extends MediaWikiTestCase { Revision::getRevisionText( $row ), "getRevisionText" ); } - # ========================================================================= - /** * @param string $text * @param string $title @@ -213,7 +284,7 @@ class RevisionTest extends MediaWikiTestCase { return $rev; } - public function dataGetContentModel() { + public function provideGetContentModel() { // NOTE: we expect the help namespace to always contain wikitext return [ [ 'hello world', 'Help:Hello', null, null, CONTENT_MODEL_WIKITEXT ], @@ -224,7 +295,7 @@ class RevisionTest extends MediaWikiTestCase { /** * @group Database - * @dataProvider dataGetContentModel + * @dataProvider provideGetContentModel * @covers Revision::getContentModel */ public function testGetContentModel( $text, $title, $model, $format, $expectedModel ) { @@ -233,7 +304,7 @@ class RevisionTest extends MediaWikiTestCase { $this->assertEquals( $expectedModel, $rev->getContentModel() ); } - public function dataGetContentFormat() { + public function provideGetContentFormat() { // NOTE: we expect the help namespace to always contain wikitext return [ [ 'hello world', 'Help:Hello', null, null, CONTENT_FORMAT_WIKITEXT ], @@ -245,7 +316,7 @@ class RevisionTest extends MediaWikiTestCase { /** * @group Database - * @dataProvider dataGetContentFormat + * @dataProvider provideGetContentFormat * @covers Revision::getContentFormat */ public function testGetContentFormat( $text, $title, $model, $format, $expectedFormat ) { @@ -254,7 +325,7 @@ class RevisionTest extends MediaWikiTestCase { $this->assertEquals( $expectedFormat, $rev->getContentFormat() ); } - public function dataGetContentHandler() { + public function provideGetContentHandler() { // NOTE: we expect the help namespace to always contain wikitext return [ [ 'hello world', 'Help:Hello', null, null, 'WikitextContentHandler' ], @@ -265,7 +336,7 @@ class RevisionTest extends MediaWikiTestCase { /** * @group Database - * @dataProvider dataGetContentHandler + * @dataProvider provideGetContentHandler * @covers Revision::getContentHandler */ public function testGetContentHandler( $text, $title, $model, $format, $expectedClass ) { @@ -274,7 +345,7 @@ class RevisionTest extends MediaWikiTestCase { $this->assertEquals( $expectedClass, get_class( $rev->getContentHandler() ) ); } - public function dataGetContent() { + public function provideGetContent() { // NOTE: we expect the help namespace to always contain wikitext return [ [ 'hello world', 'Help:Hello', null, null, Revision::FOR_PUBLIC, 'hello world' ], @@ -299,7 +370,7 @@ class RevisionTest extends MediaWikiTestCase { /** * @group Database - * @dataProvider dataGetContent + * @dataProvider provideGetContent * @covers Revision::getContent */ public function testGetContent( $text, $title, $model, $format, @@ -314,7 +385,7 @@ class RevisionTest extends MediaWikiTestCase { ); } - public function dataGetSize() { + public function provideGetSize() { return [ [ "hello world.", CONTENT_MODEL_WIKITEXT, 12 ], [ serialize( "hello world." ), "testing", 12 ], @@ -324,14 +395,14 @@ class RevisionTest extends MediaWikiTestCase { /** * @covers Revision::getSize * @group Database - * @dataProvider dataGetSize + * @dataProvider provideGetSize */ public function testGetSize( $text, $model, $expected_size ) { $rev = $this->newTestRevision( $text, 'RevisionTest_testGetSize', $model ); $this->assertEquals( $expected_size, $rev->getSize() ); } - public function dataGetSha1() { + public function provideGetSha1() { return [ [ "hello world.", CONTENT_MODEL_WIKITEXT, Revision::base36Sha1( "hello world." ) ], [ @@ -345,42 +416,13 @@ class RevisionTest extends MediaWikiTestCase { /** * @covers Revision::getSha1 * @group Database - * @dataProvider dataGetSha1 + * @dataProvider provideGetSha1 */ public function testGetSha1( $text, $model, $expected_hash ) { $rev = $this->newTestRevision( $text, 'RevisionTest_testGetSha1', $model ); $this->assertEquals( $expected_hash, $rev->getSha1() ); } - /** - * @covers Revision::__construct - */ - public function testConstructWithText() { - $rev = new Revision( [ - 'text' => 'hello world.', - 'content_model' => CONTENT_MODEL_JAVASCRIPT - ] ); - - $this->assertNotNull( $rev->getContent(), 'no content object available' ); - $this->assertEquals( CONTENT_MODEL_JAVASCRIPT, $rev->getContent()->getModel() ); - $this->assertEquals( CONTENT_MODEL_JAVASCRIPT, $rev->getContentModel() ); - } - - /** - * @covers Revision::__construct - */ - public function testConstructWithContent() { - $title = Title::newFromText( 'RevisionTest_testConstructWithContent' ); - - $rev = new Revision( [ - 'content' => ContentHandler::makeContent( 'hello world.', $title, CONTENT_MODEL_JAVASCRIPT ), - ] ); - - $this->assertNotNull( $rev->getContent(), 'no content object available' ); - $this->assertEquals( CONTENT_MODEL_JAVASCRIPT, $rev->getContent()->getModel() ); - $this->assertEquals( CONTENT_MODEL_JAVASCRIPT, $rev->getContentModel() ); - } - /** * Tests whether $rev->getContent() returns a clone when needed. *