3 * @covers MediaWiki\Interwiki\ClassicInterwikiLookup
8 class ClassicInterwikiLookupTest
extends MediaWikiTestCase
{
10 private function populateDB( $iwrows ) {
11 $dbw = wfGetDB( DB_MASTER
);
12 $dbw->delete( 'interwiki', '*', __METHOD__
);
13 $dbw->insert( 'interwiki', array_values( $iwrows ), __METHOD__
);
14 $this->tablesUsed
[] = 'interwiki';
17 public function testDatabaseStorage() {
18 // NOTE: database setup is expensive, so we only do
19 // it once and run all the tests in one go.
22 'iw_url' => 'http://de.wikipedia.org/wiki/',
23 'iw_api' => 'http://de.wikipedia.org/w/api.php',
24 'iw_wikiid' => 'dewiki',
31 'iw_url' => 'http://zzwiki.org/wiki/',
32 'iw_api' => 'http://zzwiki.org/w/api.php',
33 'iw_wikiid' => 'zzwiki',
38 $this->populateDB( [ $dewiki, $zzwiki ] );
39 $lookup = new \MediaWiki\Interwiki\
ClassicInterwikiLookup(
40 Language
::factory( 'en' ),
41 WANObjectCache
::newEmpty(),
50 $lookup->getAllPrefixes(),
55 $lookup->getAllPrefixes( true ),
60 $lookup->getAllPrefixes( false ),
64 $this->assertTrue( $lookup->isValidInterwiki( 'de' ), 'known prefix is valid' );
65 $this->assertFalse( $lookup->isValidInterwiki( 'xyz' ), 'unknown prefix is valid' );
67 $this->assertNull( $lookup->fetch( null ), 'no prefix' );
68 $this->assertFalse( $lookup->fetch( 'xyz' ), 'unknown prefix' );
70 $interwiki = $lookup->fetch( 'de' );
71 $this->assertInstanceOf( 'Interwiki', $interwiki );
72 $this->assertSame( $interwiki, $lookup->fetch( 'de' ), 'in-process caching' );
74 $this->assertSame( 'http://de.wikipedia.org/wiki/', $interwiki->getURL(), 'getURL' );
75 $this->assertSame( 'http://de.wikipedia.org/w/api.php', $interwiki->getAPI(), 'getAPI' );
76 $this->assertSame( 'dewiki', $interwiki->getWikiID(), 'getWikiID' );
77 $this->assertSame( true, $interwiki->isLocal(), 'isLocal' );
78 $this->assertSame( false, $interwiki->isTranscludable(), 'isTranscludable' );
80 $lookup->invalidateCache( 'de' );
81 $this->assertNotSame( $interwiki, $lookup->fetch( 'de' ), 'invalidate cache' );
85 * @param string $thisSite
86 * @param string[] $local
87 * @param string[] $global
91 private function populateHash( $thisSite, $local, $global ) {
93 $hash[ '__sites:' . wfWikiID() ] = $thisSite;
98 foreach ( $local as $row ) {
99 $prefix = $row['iw_prefix'];
100 $data = $row['iw_local'] . ' ' . $row['iw_url'];
102 $hash[ "_{$thisSite}:{$prefix}" ] = $data;
105 foreach ( $global as $row ) {
106 $prefix = $row['iw_prefix'];
107 $data = $row['iw_local'] . ' ' . $row['iw_url'];
108 $globals[] = $prefix;
109 $hash[ "__global:{$prefix}" ] = $data;
112 $hash[ '__list:__global' ] = implode( ' ', $globals );
113 $hash[ '__list:_' . $thisSite ] = implode( ' ', $locals );
118 private function populateCDB( $thisSite, $local, $global ) {
119 $cdbFile = tempnam( wfTempDir(), 'MW-ClassicInterwikiLookupTest-' ) . '.cdb';
120 $cdb = \Cdb\Writer
::open( $cdbFile );
122 $hash = $this->populateHash( $thisSite, $local, $global );
124 foreach ( $hash as $key => $value ) {
125 $cdb->set( $key, $value );
132 public function testCDBStorage() {
133 // NOTE: CDB setup is expensive, so we only do
134 // it once and run all the tests in one go.
138 'iw_url' => 'http://de.wikipedia.org/wiki/',
144 'iw_url' => 'http://zzwiki.org/wiki/',
148 $cdbFile = $this->populateCDB(
153 $lookup = new \MediaWiki\Interwiki\
ClassicInterwikiLookup(
154 Language
::factory( 'en' ),
155 WANObjectCache
::newEmpty(),
163 [ $dewiki, $zzwiki ],
164 $lookup->getAllPrefixes(),
168 $this->assertTrue( $lookup->isValidInterwiki( 'de' ), 'known prefix is valid' );
169 $this->assertTrue( $lookup->isValidInterwiki( 'zz' ), 'known prefix is valid' );
171 $interwiki = $lookup->fetch( 'de' );
172 $this->assertInstanceOf( 'Interwiki', $interwiki );
174 $this->assertSame( 'http://de.wikipedia.org/wiki/', $interwiki->getURL(), 'getURL' );
175 $this->assertSame( true, $interwiki->isLocal(), 'isLocal' );
177 $interwiki = $lookup->fetch( 'zz' );
178 $this->assertInstanceOf( 'Interwiki', $interwiki );
180 $this->assertSame( 'http://zzwiki.org/wiki/', $interwiki->getURL(), 'getURL' );
181 $this->assertSame( false, $interwiki->isLocal(), 'isLocal' );
187 public function testArrayStorage() {
190 'iw_url' => 'http://de.wikipedia.org/wiki/',
196 'iw_url' => 'http://zzwiki.org/wiki/',
200 $hash = $this->populateHash(
205 $lookup = new \MediaWiki\Interwiki\
ClassicInterwikiLookup(
206 Language
::factory( 'en' ),
207 WANObjectCache
::newEmpty(),
215 [ $dewiki, $zzwiki ],
216 $lookup->getAllPrefixes(),
220 $this->assertTrue( $lookup->isValidInterwiki( 'de' ), 'known prefix is valid' );
221 $this->assertTrue( $lookup->isValidInterwiki( 'zz' ), 'known prefix is valid' );
223 $interwiki = $lookup->fetch( 'de' );
224 $this->assertInstanceOf( 'Interwiki', $interwiki );
226 $this->assertSame( 'http://de.wikipedia.org/wiki/', $interwiki->getURL(), 'getURL' );
227 $this->assertSame( true, $interwiki->isLocal(), 'isLocal' );
229 $interwiki = $lookup->fetch( 'zz' );
230 $this->assertInstanceOf( 'Interwiki', $interwiki );
232 $this->assertSame( 'http://zzwiki.org/wiki/', $interwiki->getURL(), 'getURL' );
233 $this->assertSame( false, $interwiki->isLocal(), 'isLocal' );