1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
|
<?php
/**
* Tests for different MessageIndex backends.
*
* @file
* @author Niklas Laxström
* @copyright Copyright © 2012-2013, Niklas Laxström
* @license GPL-2.0+
*/
/**
* @group Database
* @group large
*/
class MessageIndexTest extends MediaWikiTestCase {
protected function setUp() {
parent::setUp();
$this->setMwGlobals( array(
'wgTranslateCacheDirectory' => $this->getNewTempDirectory(),
'wgTranslateTranslationServices' => array(),
) );
}
protected static function getTestData() {
static $data = null;
if ( $data === null ) {
$data = unserialize( file_get_contents( __DIR__ . '/messageindexdata.ser' ) );
}
return $data;
}
/**
* @dataProvider provideMessageIndexImplementation
*/
public function testMessageIndexImplementation( $mi ) {
$data = self::getTestData();
/** @var TestableDatabaseMessageIndex|TestableCDBMessageIndex|TestableSerializedMessageIndex */
$mi->store( $data );
$tests = array_rand( $data, 10 );
foreach ( $tests as $key ) {
$this->assertSame(
$data[$key],
$mi->get( $key ),
"Values are preserved for random key $key"
);
}
$cached = $mi->retrieve();
$tests = array_rand( $data, 10 );
foreach ( $tests as $key ) {
$this->assertSame(
$data[$key],
$mi->get( $key ),
"Values are preserved after retrieve for random key $key"
);
}
$this->assertEquals(
count( $data ),
count( $cached ),
'Cache has same number of elements'
);
$this->assertEquals( $data, $cached, 'Cache is preserved' );
}
public static function provideMessageIndexImplementation() {
return array(
array( new TestableDatabaseMessageIndex() ),
array( new TestableCDBMessageIndex() ),
array( new TestableSerializedMessageIndex() ),
// Not testing CachedMessageIndex because there is no easy way to mockup those.
);
}
}
class TestableDatabaseMessageIndex extends DatabaseMessageIndex {
// @codingStandardsIgnoreStart PHP CodeSniffer warns "Useless method overriding
// detected", but store() and get() are protected in parent.
public function store( array $a ) {
parent::store( $a );
}
public function get( $a ) {
return parent::get( $a );
} // @codingStandardsIgnoreEnd
}
class TestableCDBMessageIndex extends CDBMessageIndex {
// @codingStandardsIgnoreStart PHP CodeSniffer warns "Useless method overriding
// detected", but store() and get() are protected in parent.
public function store( array $a ) {
parent::store( $a );
}
public function get( $a ) {
return parent::get( $a );
} // @codingStandardsIgnoreEnd
}
class TestableSerializedMessageIndex extends SerializedMessageIndex {
// @codingStandardsIgnoreStart PHP CodeSniffer warns "Useless method overriding
// detected", but store() and get() are protected in parent.
public function store( array $a ) {
parent::store( $a );
}
public function get( $a ) {
return parent::get( $a );
} // @codingStandardsIgnoreEnd
}
|