| Current File : /home/jvzmxxx/wiki1/extensions/Wikibase/client/tests/phpunit/includes/InterwikiSorterTest.php |
<?php
namespace Wikibase\Client\Tests;
use Wikibase\InterwikiSorter;
/**
* @covers Wikibase\InterwikiSorter
*
* @group WikibaseClient
* @group Wikibase
*
* @license GPL-2.0+
* @author Katie Filbert < aude.wiki@gmail.com >
*/
class InterwikiSorterTest extends \PHPUnit_Framework_TestCase {
public function sortOrdersProvider() {
return array(
'alphabetic' => array( 'ar', 'de', 'en', 'fr', 'ks', 'rn', 'ky', 'hu', 'ja', 'pt' ),
'alphabetic_revised' => array( 'ar', 'de', 'en', 'fr', 'ks', 'ky', 'rn', 'hu', 'ja', 'pt' ),
'alphabetic_sr' => array( 'ar', 'de', 'en', 'fr', 'ky', 'rn', 'ks', 'ja', 'hu', 'pt' ),
'mycustomorder' => array( 'de', 'ja', 'pt', 'hu', 'en' ),
);
}
public function constructorProvider() {
$sortOrders = $this->sortOrdersProvider();
return array(
array( 'code', $sortOrders, array() ),
array( 'code', $sortOrders, array( 'en' ) )
);
}
/**
* @dataProvider constructorProvider
*/
public function testConstructor( $sort, $sortOrders, $sortPrepend ) {
$interwikiSorter = new InterwikiSorter( $sort, $sortOrders, $sortPrepend );
$this->assertInstanceOf( InterwikiSorter::class, $interwikiSorter );
}
public function sortLinksProvider() {
$sortOrders = $this->sortOrdersProvider();
$links = array( 'fr', 'ky', 'hu', 'ar', 'ks', 'ja', 'de', 'en', 'pt', 'rn' );
return array(
array(
$links, 'code', $sortOrders, array(),
array( 'ar', 'de', 'en', 'fr', 'hu', 'ja', 'ks', 'ky', 'pt', 'rn' )
),
array(
$links, 'code', $sortOrders, array( 'en' ),
array( 'en', 'ar', 'de', 'fr', 'hu', 'ja', 'ks', 'ky', 'pt', 'rn' )
),
array(
$links, 'alphabetic', $sortOrders, array(),
$sortOrders['alphabetic']
),
array(
$links, 'alphabetic', $sortOrders, array( 'en', 'ja' ),
array( 'en', 'ja', 'ar', 'de','fr', 'ks', 'rn', 'ky', 'hu', 'pt' )
),
array(
$links, 'alphabetic_revised', $sortOrders, array(),
$sortOrders['alphabetic_revised']
),
array(
$links, 'alphabetic_revised', $sortOrders, array( 'hu' ),
array( 'hu', 'ar', 'de', 'en', 'fr', 'ks', 'ky', 'rn', 'ja', 'pt' )
),
array(
array( 'ja', 'de', 'pt', 'en', 'hu' ), 'mycustomorder', $sortOrders, array(),
$sortOrders['mycustomorder']
),
array(
array( 'x2', 'x1', 'x3' ),
'alphabetic',
array( 'alphabetic' => array() ),
array(),
array( 'x1', 'x2', 'x3' )
),
array(
array( 'x2', 'x1', 'en', 'de', 'a2', 'a1' ),
'alphabetic',
$sortOrders,
array(),
array( 'de', 'en', 'a1', 'a2', 'x1', 'x2' )
),
array(
array( 'f', 'd', 'b', 'a', 'c', 'e' ),
'alphabetic',
array( 'alphabetic' => array( 'c', 'a' ) ),
array( 'e' ),
array( 'e', 'c', 'a', 'b', 'd', 'f' )
),
'Strict code order' => array(
array( 'f', 'd', 'b', 'a', 'c', 'e' ),
'code',
array( 'alphabetic' => array( 'c', 'a' ) ), // this should be ignored
array( 'e' ), // prepend
array( 'e', 'a', 'b', 'c', 'd', 'f' )
),
'Code w/o alphabetic' => array(
array( 'c', 'b', 'a' ),
'code',
array(),
array(),
array( 'a', 'b', 'c' )
),
array(
array( 'a', 'b', 'k', 'x' ),
'alphabetic',
array( 'alphabetic' => array( 'x', 'k', 'a' ) ),
array(),
array( 'x', 'k', 'a', 'b' )
),
'Fall back to code order' => array(
array( 'b', 'a' ),
'invalid',
array(),
array(),
array( 'a', 'b' )
)
);
}
/**
* @dataProvider sortLinksProvider
*/
public function testSortLinks( array $links, $sort, array $sortOrders, $sortPrepend, $expected ) {
$interwikiSorter = new InterwikiSorter( $sort, $sortOrders, $sortPrepend );
$sortedLinks = $interwikiSorter->sortLinks( $links );
$this->assertEquals( $expected, $sortedLinks );
}
}