MediaWiki  1.23.2
RevisionTest.php
Go to the documentation of this file.
1 <?php
2 
7  protected function setUp() {
9 
10  parent::setUp();
11 
12  $this->setMwGlobals( array(
13  'wgContLang' => Language::factory( 'en' ),
14  'wgLanguageCode' => 'en',
15  'wgLegacyEncoding' => false,
16  'wgCompressRevisions' => false,
17 
18  'wgContentHandlerTextFallback' => 'ignore',
19  ) );
20 
22  'wgExtraNamespaces',
23  array(
24  12312 => 'Dummy',
25  12313 => 'Dummy_talk',
26  )
27  );
28 
30  'wgNamespaceContentModels',
31  array(
32  12312 => 'testing',
33  )
34  );
35 
37  'wgContentHandlers',
38  array(
39  'testing' => 'DummyContentHandlerForTesting',
40  'RevisionTestModifyableContent' => 'RevisionTestModifyableContentHandler',
41  )
42  );
43 
44  MWNamespace::getCanonicalNamespaces( true ); # reset namespace cache
45  $wgContLang->resetNamespaces(); # reset namespace cache
46  }
47 
50 
51  MWNamespace::getCanonicalNamespaces( true ); # reset namespace cache
52  $wgContLang->resetNamespaces(); # reset namespace cache
53 
54  parent::tearDown();
55  }
56 
61  $row = new stdClass;
62  $row->old_flags = '';
63  $row->old_text = 'This is a bunch of revision text.';
64  $this->assertEquals(
65  'This is a bunch of revision text.',
66  Revision::getRevisionText( $row ) );
67  }
68 
72  public function testGetRevisionTextGzip() {
73  $this->checkPHPExtension( 'zlib' );
74 
75  $row = new stdClass;
76  $row->old_flags = 'gzip';
77  $row->old_text = gzdeflate( 'This is a bunch of revision text.' );
78  $this->assertEquals(
79  'This is a bunch of revision text.',
80  Revision::getRevisionText( $row ) );
81  }
82 
86  public function testGetRevisionTextUtf8Native() {
87  $row = new stdClass;
88  $row->old_flags = 'utf-8';
89  $row->old_text = "Wiki est l'\xc3\xa9cole superieur !";
90  $GLOBALS['wgLegacyEncoding'] = 'iso-8859-1';
91  $this->assertEquals(
92  "Wiki est l'\xc3\xa9cole superieur !",
93  Revision::getRevisionText( $row ) );
94  }
95 
99  public function testGetRevisionTextUtf8Legacy() {
100  $row = new stdClass;
101  $row->old_flags = '';
102  $row->old_text = "Wiki est l'\xe9cole superieur !";
103  $GLOBALS['wgLegacyEncoding'] = 'iso-8859-1';
104  $this->assertEquals(
105  "Wiki est l'\xc3\xa9cole superieur !",
106  Revision::getRevisionText( $row ) );
107  }
108 
113  $this->checkPHPExtension( 'zlib' );
114 
115  $row = new stdClass;
116  $row->old_flags = 'gzip,utf-8';
117  $row->old_text = gzdeflate( "Wiki est l'\xc3\xa9cole superieur !" );
118  $GLOBALS['wgLegacyEncoding'] = 'iso-8859-1';
119  $this->assertEquals(
120  "Wiki est l'\xc3\xa9cole superieur !",
121  Revision::getRevisionText( $row ) );
122  }
123 
128  $this->checkPHPExtension( 'zlib' );
129 
130  $row = new stdClass;
131  $row->old_flags = 'gzip';
132  $row->old_text = gzdeflate( "Wiki est l'\xe9cole superieur !" );
133  $GLOBALS['wgLegacyEncoding'] = 'iso-8859-1';
134  $this->assertEquals(
135  "Wiki est l'\xc3\xa9cole superieur !",
136  Revision::getRevisionText( $row ) );
137  }
138 
142  public function testCompressRevisionTextUtf8() {
143  $row = new stdClass;
144  $row->old_text = "Wiki est l'\xc3\xa9cole superieur !";
145  $row->old_flags = Revision::compressRevisionText( $row->old_text );
146  $this->assertTrue( false !== strpos( $row->old_flags, 'utf-8' ),
147  "Flags should contain 'utf-8'" );
148  $this->assertFalse( false !== strpos( $row->old_flags, 'gzip' ),
149  "Flags should not contain 'gzip'" );
150  $this->assertEquals( "Wiki est l'\xc3\xa9cole superieur !",
151  $row->old_text, "Direct check" );
152  $this->assertEquals( "Wiki est l'\xc3\xa9cole superieur !",
153  Revision::getRevisionText( $row ), "getRevisionText" );
154  }
155 
160  $this->checkPHPExtension( 'zlib' );
161  $this->setMwGlobals( 'wgCompressRevisions', true );
162 
163  $row = new stdClass;
164  $row->old_text = "Wiki est l'\xc3\xa9cole superieur !";
165  $row->old_flags = Revision::compressRevisionText( $row->old_text );
166  $this->assertTrue( false !== strpos( $row->old_flags, 'utf-8' ),
167  "Flags should contain 'utf-8'" );
168  $this->assertTrue( false !== strpos( $row->old_flags, 'gzip' ),
169  "Flags should contain 'gzip'" );
170  $this->assertEquals( "Wiki est l'\xc3\xa9cole superieur !",
171  gzinflate( $row->old_text ), "Direct check" );
172  $this->assertEquals( "Wiki est l'\xc3\xa9cole superieur !",
173  Revision::getRevisionText( $row ), "getRevisionText" );
174  }
175 
176  # =================================================================================================================
177 
186  function newTestRevision( $text, $title = "Test", $model = CONTENT_MODEL_WIKITEXT, $format = null ) {
187  if ( is_string( $title ) ) {
189  }
190 
191  $content = ContentHandler::makeContent( $text, $title, $model, $format );
192 
193  $rev = new Revision(
194  array(
195  'id' => 42,
196  'page' => 23,
197  'title' => $title,
198 
199  'content' => $content,
200  'length' => $content->getSize(),
201  'comment' => "testing",
202  'minor_edit' => false,
203 
204  'content_format' => $format,
205  )
206  );
207 
208  return $rev;
209  }
210 
211  function dataGetContentModel() {
212  //NOTE: we expect the help namespace to always contain wikitext
213  return array(
214  array( 'hello world', 'Help:Hello', null, null, CONTENT_MODEL_WIKITEXT ),
215  array( 'hello world', 'User:hello/there.css', null, null, CONTENT_MODEL_CSS ),
216  array( serialize( 'hello world' ), 'Dummy:Hello', null, null, "testing" ),
217  );
218  }
219 
225  public function testGetContentModel( $text, $title, $model, $format, $expectedModel ) {
226  $rev = $this->newTestRevision( $text, $title, $model, $format );
227 
228  $this->assertEquals( $expectedModel, $rev->getContentModel() );
229  }
230 
231  function dataGetContentFormat() {
232  //NOTE: we expect the help namespace to always contain wikitext
233  return array(
234  array( 'hello world', 'Help:Hello', null, null, CONTENT_FORMAT_WIKITEXT ),
235  array( 'hello world', 'Help:Hello', CONTENT_MODEL_CSS, null, CONTENT_FORMAT_CSS ),
236  array( 'hello world', 'User:hello/there.css', null, null, CONTENT_FORMAT_CSS ),
237  array( serialize( 'hello world' ), 'Dummy:Hello', null, null, "testing" ),
238  );
239  }
240 
246  public function testGetContentFormat( $text, $title, $model, $format, $expectedFormat ) {
247  $rev = $this->newTestRevision( $text, $title, $model, $format );
248 
249  $this->assertEquals( $expectedFormat, $rev->getContentFormat() );
250  }
251 
253  //NOTE: we expect the help namespace to always contain wikitext
254  return array(
255  array( 'hello world', 'Help:Hello', null, null, 'WikitextContentHandler' ),
256  array( 'hello world', 'User:hello/there.css', null, null, 'CssContentHandler' ),
257  array( serialize( 'hello world' ), 'Dummy:Hello', null, null, 'DummyContentHandlerForTesting' ),
258  );
259  }
260 
266  public function testGetContentHandler( $text, $title, $model, $format, $expectedClass ) {
267  $rev = $this->newTestRevision( $text, $title, $model, $format );
268 
269  $this->assertEquals( $expectedClass, get_class( $rev->getContentHandler() ) );
270  }
271 
272  function dataGetContent() {
273  //NOTE: we expect the help namespace to always contain wikitext
274  return array(
275  array( 'hello world', 'Help:Hello', null, null, Revision::FOR_PUBLIC, 'hello world' ),
276  array( serialize( 'hello world' ), 'Hello', "testing", null, Revision::FOR_PUBLIC, serialize( 'hello world' ) ),
277  array( serialize( 'hello world' ), 'Dummy:Hello', null, null, Revision::FOR_PUBLIC, serialize( 'hello world' ) ),
278  );
279  }
280 
286  public function testGetContent( $text, $title, $model, $format, $audience, $expectedSerialization ) {
287  $rev = $this->newTestRevision( $text, $title, $model, $format );
288  $content = $rev->getContent( $audience );
289 
290  $this->assertEquals( $expectedSerialization, is_null( $content ) ? null : $content->serialize( $format ) );
291  }
292 
293  function dataGetText() {
294  //NOTE: we expect the help namespace to always contain wikitext
295  return array(
296  array( 'hello world', 'Help:Hello', null, null, Revision::FOR_PUBLIC, 'hello world' ),
297  array( serialize( 'hello world' ), 'Hello', "testing", null, Revision::FOR_PUBLIC, null ),
298  array( serialize( 'hello world' ), 'Dummy:Hello', null, null, Revision::FOR_PUBLIC, null ),
299  );
300  }
301 
307  public function testGetText( $text, $title, $model, $format, $audience, $expectedText ) {
308  $this->hideDeprecated( 'Revision::getText' );
309 
310  $rev = $this->newTestRevision( $text, $title, $model, $format );
311 
312  $this->assertEquals( $expectedText, $rev->getText( $audience ) );
313  }
314 
320  public function testGetRawText( $text, $title, $model, $format, $audience, $expectedText ) {
321  $this->hideDeprecated( 'Revision::getRawText' );
322 
323  $rev = $this->newTestRevision( $text, $title, $model, $format );
324 
325  $this->assertEquals( $expectedText, $rev->getRawText( $audience ) );
326  }
327 
328  public function dataGetSize() {
329  return array(
330  array( "hello world.", CONTENT_MODEL_WIKITEXT, 12 ),
331  array( serialize( "hello world." ), "testing", 12 ),
332  );
333  }
334 
340  public function testGetSize( $text, $model, $expected_size ) {
341  $rev = $this->newTestRevision( $text, 'RevisionTest_testGetSize', $model );
342  $this->assertEquals( $expected_size, $rev->getSize() );
343  }
344 
345  public function dataGetSha1() {
346  return array(
347  array( "hello world.", CONTENT_MODEL_WIKITEXT, Revision::base36Sha1( "hello world." ) ),
348  array( serialize( "hello world." ), "testing", Revision::base36Sha1( serialize( "hello world." ) ) ),
349  );
350  }
351 
357  public function testGetSha1( $text, $model, $expected_hash ) {
358  $rev = $this->newTestRevision( $text, 'RevisionTest_testGetSha1', $model );
359  $this->assertEquals( $expected_hash, $rev->getSha1() );
360  }
361 
365  public function testConstructWithText() {
366  $this->hideDeprecated( "Revision::getText" );
367 
368  $rev = new Revision( array(
369  'text' => 'hello world.',
370  'content_model' => CONTENT_MODEL_JAVASCRIPT
371  ) );
372 
373  $this->assertNotNull( $rev->getText(), 'no content text' );
374  $this->assertNotNull( $rev->getContent(), 'no content object available' );
375  $this->assertEquals( CONTENT_MODEL_JAVASCRIPT, $rev->getContent()->getModel() );
376  $this->assertEquals( CONTENT_MODEL_JAVASCRIPT, $rev->getContentModel() );
377  }
378 
382  public function testConstructWithContent() {
383  $this->hideDeprecated( "Revision::getText" );
384 
385  $title = Title::newFromText( 'RevisionTest_testConstructWithContent' );
386 
387  $rev = new Revision( array(
388  'content' => ContentHandler::makeContent( 'hello world.', $title, CONTENT_MODEL_JAVASCRIPT ),
389  ) );
390 
391  $this->assertNotNull( $rev->getText(), 'no content text' );
392  $this->assertNotNull( $rev->getContent(), 'no content object available' );
393  $this->assertEquals( CONTENT_MODEL_JAVASCRIPT, $rev->getContent()->getModel() );
394  $this->assertEquals( CONTENT_MODEL_JAVASCRIPT, $rev->getContentModel() );
395  }
396 
403  public function testGetContentClone() {
404  $content = new RevisionTestModifyableContent( "foo" );
405 
406  $rev = new Revision(
407  array(
408  'id' => 42,
409  'page' => 23,
410  'title' => Title::newFromText( "testGetContentClone_dummy" ),
411 
412  'content' => $content,
413  'length' => $content->getSize(),
414  'comment' => "testing",
415  'minor_edit' => false,
416  )
417  );
418 
419  $content = $rev->getContent( Revision::RAW );
420  $content->setText( "bar" );
421 
422  $content2 = $rev->getContent( Revision::RAW );
423  $this->assertNotSame( $content, $content2, "expected a clone" ); // content is mutable, expect clone
424  $this->assertEquals( "foo", $content2->getText() ); // clone should contain the original text
425 
426  $content2->setText( "bla bla" );
427  $this->assertEquals( "bar", $content->getText() ); // clones should be independent
428  }
429 
436  public function testGetContentUncloned() {
437  $rev = $this->newTestRevision( "hello", "testGetContentUncloned_dummy", CONTENT_MODEL_WIKITEXT );
438  $content = $rev->getContent( Revision::RAW );
439  $content2 = $rev->getContent( Revision::RAW );
440 
441  // for immutable content like wikitext, this should be the same object
442  $this->assertSame( $content, $content2 );
443  }
444 }
445 
447  public function __construct( $text ) {
448  parent::__construct( $text, "RevisionTestModifyableContent" );
449  }
450 
451  public function copy() {
452  return new RevisionTestModifyableContent( $this->mText );
453  }
454 
455  public function getText() {
456  return $this->mText;
457  }
458 
459  public function setText( $text ) {
460  $this->mText = $text;
461  }
462 }
463 
465 
466  public function __construct() {
467  parent::__construct( "RevisionTestModifyableContent", array( CONTENT_FORMAT_TEXT ) );
468  }
469 
470  public function unserializeContent( $text, $format = null ) {
471  $this->checkFormat( $format );
472 
473  return new RevisionTestModifyableContent( $text );
474  }
475 
476  public function makeEmptyContent() {
477  return new RevisionTestModifyableContent( '' );
478  }
479 }
RevisionTest\testGetText
testGetText( $text, $title, $model, $format, $audience, $expectedText)
@group Database @dataProvider dataGetText @covers Revision::getText
Definition: RevisionTest.php:307
Revision\FOR_PUBLIC
const FOR_PUBLIC
Definition: Revision.php:72
RevisionTestModifyableContent\getText
getText()
Definition: RevisionTest.php:455
RevisionTest\tearDown
tearDown()
Definition: RevisionTest.php:48
RevisionTest\testConstructWithContent
testConstructWithContent()
@covers Revision::__construct
Definition: RevisionTest.php:382
Title\newFromText
static newFromText( $text, $defaultNamespace=NS_MAIN)
Create a new Title from text, such as what one would find in a link.
Definition: Title.php:189
RevisionTest\testGetSize
testGetSize( $text, $model, $expected_size)
@covers Revision::getSize @group Database @dataProvider dataGetSize
Definition: RevisionTest.php:340
php
skin txt MediaWiki includes four core it has been set as the default in MediaWiki since the replacing Monobook it had been been the default skin since before being replaced by Vector largely rewritten in while keeping its appearance Several legacy skins were removed in the as the burden of supporting them became too heavy to bear Those in etc for skin dependent CSS etc for skin dependent JavaScript These can also be customised on a per user by etc This feature has led to a wide variety of user styles becoming that gallery is a good place to ending in php
Definition: skin.txt:62
MediaWikiTestCase\mergeMwGlobalArrayValue
mergeMwGlobalArrayValue( $name, $values)
Merges the given values into a MW global array variable.
Definition: MediaWikiTestCase.php:369
CONTENT_MODEL_CSS
const CONTENT_MODEL_CSS
Definition: Defines.php:285
RevisionTestModifyableContentHandler\__construct
__construct()
Definition: RevisionTest.php:466
RevisionTest\testGetRevisionTextUtf8Native
testGetRevisionTextUtf8Native()
@covers Revision::getRevisionText
Definition: RevisionTest.php:86
Revision\getRevisionText
static getRevisionText( $row, $prefix='old_', $wiki=false)
Get revision text associated with an old or archive row $row is usually an object from wfFetchRow(),...
Definition: Revision.php:1212
CONTENT_FORMAT_CSS
const CONTENT_FORMAT_CSS
Definition: Defines.php:301
RevisionTest\dataGetContent
dataGetContent()
Definition: RevisionTest.php:272
$wgContLang
this class mediates it Skin Encapsulates a look and feel for the wiki All of the functions that render HTML and make choices about how to render it are here and are called from various other places when and is meant to be subclassed with other skins that may override some of its functions The User object contains a reference to a and so rather than having a global skin object we just rely on the global User and get the skin with $wgUser and also has some character encoding functions and other locale stuff The current user interface language is instantiated as and the content language as $wgContLang
Definition: design.txt:56
CONTENT_MODEL_WIKITEXT
const CONTENT_MODEL_WIKITEXT
Definition: Defines.php:283
RevisionTestModifyableContent\setText
setText( $text)
Definition: RevisionTest.php:459
RevisionTest\testGetRevisionTextUtf8NativeGzip
testGetRevisionTextUtf8NativeGzip()
@covers Revision::getRevisionText
Definition: RevisionTest.php:112
cache
you have access to all of the normal MediaWiki so you can get a DB use the cache
Definition: maintenance.txt:52
Revision\base36Sha1
static base36Sha1( $text)
Get the base 36 SHA-1 value for a string of text.
Definition: Revision.php:1479
RevisionTest\testGetRevisionTextUtf8LegacyGzip
testGetRevisionTextUtf8LegacyGzip()
@covers Revision::getRevisionText
Definition: RevisionTest.php:127
Revision
Definition: Revision.php:26
RevisionTest\testGetRevisionText
testGetRevisionText()
@covers Revision::getRevisionText
Definition: RevisionTest.php:60
RevisionTest\testConstructWithText
testConstructWithText()
@covers Revision::__construct
Definition: RevisionTest.php:365
RevisionTest\testCompressRevisionTextUtf8Gzip
testCompressRevisionTextUtf8Gzip()
@covers Revision::compressRevisionText
Definition: RevisionTest.php:159
MediaWikiTestCase\setMwGlobals
setMwGlobals( $pairs, $value=null)
Definition: MediaWikiTestCase.php:302
MediaWikiTestCase
Definition: MediaWikiTestCase.php:6
Revision\compressRevisionText
static compressRevisionText(&$text)
If $wgCompressRevisions is enabled, we will compress data.
Definition: Revision.php:1261
MediaWikiTestCase\hideDeprecated
hideDeprecated( $function)
Don't throw a warning if $function is deprecated and called later.
Definition: MediaWikiTestCase.php:679
RevisionTest\dataGetContentModel
dataGetContentModel()
Definition: RevisionTest.php:211
RevisionTest\setUp
setUp()
Definition: RevisionTest.php:7
CONTENT_FORMAT_TEXT
const CONTENT_FORMAT_TEXT
Definition: Defines.php:303
RevisionTest\dataGetContentHandler
dataGetContentHandler()
Definition: RevisionTest.php:252
array
the array() calling protocol came about after MediaWiki 1.4rc1.
List of Api Query prop modules.
RevisionTestModifyableContent\__construct
__construct( $text)
Definition: RevisionTest.php:447
global
when a variable name is used in a it is silently declared as a new masking the global
Definition: design.txt:93
RevisionTest\testGetRawText
testGetRawText( $text, $title, $model, $format, $audience, $expectedText)
@group Database @dataProvider dataGetText @covers Revision::getRawText
Definition: RevisionTest.php:320
CONTENT_FORMAT_WIKITEXT
const CONTENT_FORMAT_WIKITEXT
Definition: Defines.php:297
RevisionTest
@group ContentHandler
Definition: RevisionTest.php:6
RevisionTest\newTestRevision
newTestRevision( $text, $title="Test", $model=CONTENT_MODEL_WIKITEXT, $format=null)
Definition: RevisionTest.php:186
ContentHandler\makeContent
static makeContent( $text, Title $title=null, $modelId=null, $format=null)
Convenience function for creating a Content object from a given textual representation.
Definition: ContentHandler.php:144
$title
presenting them properly to the user as errors is done by the caller $title
Definition: hooks.txt:1324
function
when a variable name is used in a function
Definition: design.txt:93
RevisionTest\dataGetSha1
dataGetSha1()
Definition: RevisionTest.php:345
TextContentHandler
Base content handler implementation for flat text contents.
Definition: TextContentHandler.php:31
RevisionTest\dataGetText
dataGetText()
Definition: RevisionTest.php:293
Revision\RAW
const RAW
Definition: Revision.php:74
RevisionTestModifyableContentHandler
Definition: RevisionTest.php:464
RevisionTest\testGetContentModel
testGetContentModel( $text, $title, $model, $format, $expectedModel)
@group Database @dataProvider dataGetContentModel @covers Revision::getContentModel
Definition: RevisionTest.php:225
TextContent
Content object implementation for representing flat text.
Definition: TextContent.php:35
RevisionTest\testGetRevisionTextGzip
testGetRevisionTextGzip()
@covers Revision::getRevisionText
Definition: RevisionTest.php:72
RevisionTestModifyableContent\copy
copy()
Definition: RevisionTest.php:451
RevisionTest\testGetContentHandler
testGetContentHandler( $text, $title, $model, $format, $expectedClass)
@group Database @dataProvider dataGetContentHandler @covers Revision::getContentHandler
Definition: RevisionTest.php:266
$rev
presenting them properly to the user as errors is done by the caller return true use this to change the list i e etc $rev
Definition: hooks.txt:1337
RevisionTestModifyableContentHandler\makeEmptyContent
makeEmptyContent()
Creates an empty TextContent object.
Definition: RevisionTest.php:476
RevisionTest\testGetRevisionTextUtf8Legacy
testGetRevisionTextUtf8Legacy()
@covers Revision::getRevisionText
Definition: RevisionTest.php:99
RevisionTest\testGetContentFormat
testGetContentFormat( $text, $title, $model, $format, $expectedFormat)
@group Database @dataProvider dataGetContentFormat @covers Revision::getContentFormat
Definition: RevisionTest.php:246
RevisionTest\testGetContentUncloned
testGetContentUncloned()
Tests whether $rev->getContent() returns the same object repeatedly if appropriate.
Definition: RevisionTest.php:436
MWNamespace\getCanonicalNamespaces
static getCanonicalNamespaces( $rebuild=false)
Returns array of all defined namespaces with their canonical (English) names.
Definition: Namespace.php:218
MediaWikiTestCase\checkPHPExtension
checkPHPExtension( $extName)
Check if $extName is a loaded PHP extension, will skip the test whenever it is not loaded.
Definition: MediaWikiTestCase.php:1005
RevisionTestModifyableContent
Definition: RevisionTest.php:446
Language\factory
static factory( $code)
Get a cached or new language object for a given language code.
Definition: Language.php:184
CONTENT_MODEL_JAVASCRIPT
const CONTENT_MODEL_JAVASCRIPT
Definition: Defines.php:284
RevisionTest\testGetContent
testGetContent( $text, $title, $model, $format, $audience, $expectedSerialization)
@group Database @dataProvider dataGetContent @covers Revision::getContent
Definition: RevisionTest.php:286
RevisionTest\dataGetContentFormat
dataGetContentFormat()
Definition: RevisionTest.php:231
RevisionTest\testGetContentClone
testGetContentClone()
Tests whether $rev->getContent() returns a clone when needed.
Definition: RevisionTest.php:403
RevisionTestModifyableContentHandler\unserializeContent
unserializeContent( $text, $format=null)
Unserializes a Content object of the type supported by this ContentHandler.
Definition: RevisionTest.php:470
$GLOBALS
$GLOBALS['IP']
Definition: ComposerHookHandler.php:6
RevisionTest\testCompressRevisionTextUtf8
testCompressRevisionTextUtf8()
@covers Revision::compressRevisionText
Definition: RevisionTest.php:142
RevisionTest\dataGetSize
dataGetSize()
Definition: RevisionTest.php:328
RevisionTest\testGetSha1
testGetSha1( $text, $model, $expected_hash)
@covers Revision::getSha1 @group Database @dataProvider dataGetSha1
Definition: RevisionTest.php:357