| Current File : /home/jvzmxxx/wiki1/extensions/MobileFrontend/tests/phpunit/specials/SpecialMobileLanguagesTest.php |
<?php
/**
* @group MobileFrontend
*/
class SpecialMobileLanguagesTest extends MediaWikiTestCase {
/**
* Data provider for testProcessLanguages
*/
public function providerProcessLanguages() {
$input = [
'bs' => [
'lang' => 'bs',
'url' => 'http://bs.wikipedia.org',
'title' => 'bosnian'
],
'de' => [
'lang' => 'de',
'url' => 'http://de.wikipedia.org',
'title' => 'German'
],
'es' => [
'lang' => 'es',
'url' => 'http://es.wikipedia.org',
'title' => 'Spanish',
],
'simple' => [
'lang' => 'simple',
'url' => 'http://simple.wikipedia.org',
'title' => 'Simple English'
]
];
$expected = [
'bs' => [
'langname' => 'bosanski'
] + $input['bs'],
'de' => [
'langname' => 'Deutsch'
] + $input['de'],
'es' => [
'langname' => 'español'
] + $input['es'],
'simple' => [
'langname' => 'Simple English'
] + $input['simple']
];
// Transform URLs to mobile version, which is dependent on wgMobileUrlTemplate
$ctx = MobileContext::singleton();
foreach ( $expected as $key => &$value ) {
$value['url'] = $ctx->getMobileUrl( $value['url'] );
}
return [
[ // Works with one language
[
$input['es']
],
[
$expected['es']
]
],
[ // Sorts two languages
[
$input['es'],
$input['bs']
],
[
$expected['bs'],
$expected['es']
]
],
[ // Should still sort correctly if already in correct order
[
$input['bs'],
$input['es']
],
[
$expected['bs'],
$expected['es']
]
],
[ // Sorts languages case-insensitive
[
$input['simple'],
$input['de'],
$input['bs'],
$input['es']
],
[
$expected['bs'],
$expected['de'],
$expected['es'],
$expected['simple']
]
],
[ // Should still sort correctly if already in correct order (mixed case)
[
$input['bs'],
$input['de'],
$input['es'],
$input['simple']
],
[
$expected['bs'],
$expected['de'],
$expected['es'],
$expected['simple']
]
]
];
}
/**
* @dataProvider providerProcessLanguages
* @covers SpecialMobileLanguages::processLanguages
*/
public function testProcessLanguages( $langlinks, $expected ) {
$apiResult = [
42 => [
'langlinks' => $langlinks
]
];
$sp = new SpecialMobileLanguages();
$class = new ReflectionClass( 'SpecialMobileLanguages' );
$method = $class->getMethod( 'processLanguages' );
$method->setAccessible( true );
$this->assertEquals(
$expected,
$method->invokeArgs( $sp, [ $apiResult ] ),
'Property langname should be added, URL should be transformed, and languages should be sorted.'
);
}
}