wiki.techinc.nl/tests/phpunit/includes/RevisionUnitTest.php

206 lines
6 KiB
PHP
Raw Normal View History

<?php
/**
* @group ContentHandler
*/
class RevisionUnitTest extends MediaWikiTestCase {
public function provideConstructFromArray() {
yield 'with text' => [
[
'text' => 'hello world.',
'content_model' => CONTENT_MODEL_JAVASCRIPT
],
];
yield 'with content' => [
[
'content' => new JavaScriptContent( 'hellow world.' )
],
];
}
/**
* @dataProvider provideConstructFromArray
*/
public function testConstructFromArray( $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 provideConstructFromArrayThrowsExceptions() {
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.' )
];
}
/**
* @dataProvider provideConstructFromArrayThrowsExceptions
*/
public function testConstructFromArrayThrowsExceptions( $rowArray, Exception $expectedException ) {
$this->setExpectedException(
get_class( $expectedException ),
$expectedException->getMessage(),
$expectedException->getCode()
);
new Revision( $rowArray );
}
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 testGetRevisionText( $expected, $rowData, $prefix = 'old_', $wiki = false ) {
$this->assertEquals(
$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 testGetRevisionWithZlibExtension( $expected, $rowData ) {
$this->checkPHPExtension( 'zlib' );
$this->testGetRevisionText( $expected, $rowData );
}
public function provideGetRevisionTextWithLegacyEncoding() {
yield 'Utf8Native' => [
"Wiki est l'\xc3\xa9cole superieur !",
'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 testGetRevisionWithLegacyEncoding( $expected, $encoding, $rowData ) {
$this->setMwGlobals( 'wgLegacyEncoding', $encoding );
$this->testGetRevisionText( $expected, $rowData );
}
public function provideGetRevisionTextWithGzipAndLegacyEncoding() {
/**
* WARNING!
* Do not set the external flag!
* Otherwise, getRevisionText will hit the live database (if ExternalStore is enabled)!
*/
yield 'Utf8NativeGzip' => [
"Wiki est l'\xc3\xa9cole superieur !",
'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 testGetRevisionWithGzipAndLegacyEncoding( $expected, $encoding, $rowData ) {
$this->checkPHPExtension( 'zlib' );
$this->setMwGlobals( 'wgLegacyEncoding', $encoding );
$this->testGetRevisionText( $expected, $rowData );
}
/**
* @covers Revision::compressRevisionText
*/
public function testCompressRevisionTextUtf8() {
$row = new stdClass;
$row->old_text = "Wiki est l'\xc3\xa9cole superieur !";
$row->old_flags = Revision::compressRevisionText( $row->old_text );
$this->assertTrue( false !== strpos( $row->old_flags, 'utf-8' ),
"Flags should contain 'utf-8'" );
$this->assertFalse( false !== strpos( $row->old_flags, 'gzip' ),
"Flags should not contain 'gzip'" );
$this->assertEquals( "Wiki est l'\xc3\xa9cole superieur !",
$row->old_text, "Direct check" );
$this->assertEquals( "Wiki est l'\xc3\xa9cole superieur !",
Revision::getRevisionText( $row ), "getRevisionText" );
}
/**
* @covers Revision::compressRevisionText
*/
public function testCompressRevisionTextUtf8Gzip() {
$this->checkPHPExtension( 'zlib' );
$this->setMwGlobals( 'wgCompressRevisions', true );
$row = new stdClass;
$row->old_text = "Wiki est l'\xc3\xa9cole superieur !";
$row->old_flags = Revision::compressRevisionText( $row->old_text );
$this->assertTrue( false !== strpos( $row->old_flags, 'utf-8' ),
"Flags should contain 'utf-8'" );
$this->assertTrue( false !== strpos( $row->old_flags, 'gzip' ),
"Flags should contain 'gzip'" );
$this->assertEquals( "Wiki est l'\xc3\xa9cole superieur !",
gzinflate( $row->old_text ), "Direct check" );
$this->assertEquals( "Wiki est l'\xc3\xa9cole superieur !",
Revision::getRevisionText( $row ), "getRevisionText" );
}
}