123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253 |
- <?php
- /**
- * PHPUnit tests for the Serbian language.
- * The language can be represented using two scripts:
- * - Latin (SR_el)
- * - Cyrillic (SR_ec)
- * Both representations seems to be bijective, hence MediaWiki can convert
- * from one script to the other.
- *
- * @author Antoine Musso <hashar at free dot fr>
- * @copyright Copyright © 2011, Antoine Musso <hashar at free dot fr>
- * @file
- *
- * @todo methods in test class should be tidied:
- * - Should be split into separate test methods and data providers
- * - Tests for LanguageConverter and Language should probably be separate..
- */
- /**
- * @covers LanguageSr
- * @covers SrConverter
- */
- class LanguageSrTest extends LanguageClassesTestCase {
- /**
- * @covers LanguageConverter::convertTo
- */
- public function testEasyConversions() {
- $this->assertCyrillic(
- 'шђчћжШЂЧЋЖ',
- 'Cyrillic guessing characters'
- );
- $this->assertLatin(
- 'šđč枊ĐČĆŽ',
- 'Latin guessing characters'
- );
- }
- /**
- * @covers LanguageConverter::convertTo
- */
- public function testMixedConversions() {
- $this->assertCyrillic(
- 'шђчћжШЂЧЋЖ - šđčćž',
- 'Mostly cyrillic characters'
- );
- $this->assertLatin(
- 'šđč枊ĐČĆŽ - шђчћж',
- 'Mostly latin characters'
- );
- }
- /**
- * @covers LanguageConverter::convertTo
- */
- public function testSameAmountOfLatinAndCyrillicGetConverted() {
- $this->assertConverted(
- '4 latin: šđčć | 4 cyrillic: шђчћ',
- 'sr-ec'
- );
- $this->assertConverted(
- '4 latin: šđčć | 4 cyrillic: шђчћ',
- 'sr-el'
- );
- }
- /**
- * @author Nikola Smolenski
- * @covers LanguageConverter::convertTo
- */
- public function testConversionToCyrillic() {
- // A simple conversion of Latin to Cyrillic
- $this->assertEquals( 'абвг',
- $this->convertToCyrillic( 'abvg' )
- );
- // Same as above, but assert that -{}-s must be removed and not converted
- $this->assertEquals( 'ljабnjвгdž',
- $this->convertToCyrillic( '-{lj}-ab-{nj}-vg-{dž}-' )
- );
- // A simple conversion of Cyrillic to Cyrillic
- $this->assertEquals( 'абвг',
- $this->convertToCyrillic( 'абвг' )
- );
- // Same as above, but assert that -{}-s must be removed and not converted
- $this->assertEquals( 'ljабnjвгdž',
- $this->convertToCyrillic( '-{lj}-аб-{nj}-вг-{dž}-' )
- );
- // This text has some Latin, but is recognized as Cyrillic, so it should not be converted
- $this->assertEquals( 'abvgшђжчћ',
- $this->convertToCyrillic( 'abvgшђжчћ' )
- );
- // Same as above, but assert that -{}-s must be removed
- $this->assertEquals( 'љabvgњшђжчћџ',
- $this->convertToCyrillic( '-{љ}-abvg-{њ}-шђжчћ-{џ}-' )
- );
- // This text has some Cyrillic, but is recognized as Latin, so it should be converted
- $this->assertEquals( 'абвгшђжчћ',
- $this->convertToCyrillic( 'абвгšđžčć' )
- );
- // Same as above, but assert that -{}-s must be removed and not converted
- $this->assertEquals( 'ljабвгnjшђжчћdž',
- $this->convertToCyrillic( '-{lj}-абвг-{nj}-šđžčć-{dž}-' )
- );
- // Roman numerals are not converted
- $this->assertEquals( 'а I б II в III г IV шђжчћ',
- $this->convertToCyrillic( 'a I b II v III g IV šđžčć' )
- );
- }
- /**
- * @covers LanguageConverter::convertTo
- */
- public function testConversionToLatin() {
- // A simple conversion of Latin to Latin
- $this->assertEquals( 'abcd',
- $this->convertToLatin( 'abcd' )
- );
- // A simple conversion of Cyrillic to Latin
- $this->assertEquals( 'abcd',
- $this->convertToLatin( 'абцд' )
- );
- // This text has some Latin, but is recognized as Cyrillic, so it should be converted
- $this->assertEquals( 'abcdšđžčć',
- $this->convertToLatin( 'abcdшђжчћ' )
- );
- // This text has some Cyrillic, but is recognized as Latin, so it should not be converted
- $this->assertEquals( 'абцдšđžčć',
- $this->convertToLatin( 'абцдšđžčć' )
- );
- }
- /**
- * @dataProvider providePlural
- * @covers Language::convertPlural
- */
- public function testPlural( $result, $value ) {
- $forms = [ 'one', 'few', 'other' ];
- $this->assertEquals( $result, $this->getLang()->convertPlural( $value, $forms ) );
- }
- /**
- * @dataProvider providePlural
- * @covers Language::getPluralRuleType
- */
- public function testGetPluralRuleType( $result, $value ) {
- $this->assertEquals( $result, $this->getLang()->getPluralRuleType( $value ) );
- }
- public static function providePlural() {
- return [
- [ 'one', 1 ],
- [ 'other', 11 ],
- [ 'one', 91 ],
- [ 'one', 121 ],
- [ 'few', 2 ],
- [ 'few', 3 ],
- [ 'few', 4 ],
- [ 'few', 334 ],
- [ 'other', 5 ],
- [ 'other', 15 ],
- [ 'other', 120 ],
- ];
- }
- /**
- * @dataProvider providePluralTwoForms
- * @covers Language::convertPlural
- */
- public function testPluralTwoForms( $result, $value ) {
- $forms = [ 'one', 'other' ];
- $this->assertEquals( $result, $this->getLang()->convertPlural( $value, $forms ) );
- }
- public static function providePluralTwoForms() {
- return [
- [ 'one', 1 ],
- [ 'other', 11 ],
- [ 'other', 4 ],
- [ 'one', 91 ],
- [ 'one', 121 ],
- ];
- }
- # #### HELPERS #####################################################
- /**
- *Wrapper to verify text stay the same after applying conversion
- * @param string $text Text to convert
- * @param string $variant Language variant 'sr-ec' or 'sr-el'
- * @param string $msg Optional message
- */
- protected function assertUnConverted( $text, $variant, $msg = '' ) {
- $this->assertEquals(
- $text,
- $this->convertTo( $text, $variant ),
- $msg
- );
- }
- /**
- * Wrapper to verify a text is different once converted to a variant.
- * @param string $text Text to convert
- * @param string $variant Language variant 'sr-ec' or 'sr-el'
- * @param string $msg Optional message
- */
- protected function assertConverted( $text, $variant, $msg = '' ) {
- $this->assertNotEquals(
- $text,
- $this->convertTo( $text, $variant ),
- $msg
- );
- }
- /**
- * Verifiy the given Cyrillic text is not converted when using
- * using the cyrillic variant and converted to Latin when using
- * the Latin variant.
- * @param string $text Text to convert
- * @param string $msg Optional message
- */
- protected function assertCyrillic( $text, $msg = '' ) {
- $this->assertUnConverted( $text, 'sr-ec', $msg );
- $this->assertConverted( $text, 'sr-el', $msg );
- }
- /**
- * Verifiy the given Latin text is not converted when using
- * using the Latin variant and converted to Cyrillic when using
- * the Cyrillic variant.
- * @param string $text Text to convert
- * @param string $msg Optional message
- */
- protected function assertLatin( $text, $msg = '' ) {
- $this->assertUnConverted( $text, 'sr-el', $msg );
- $this->assertConverted( $text, 'sr-ec', $msg );
- }
- /** Wrapper for converter::convertTo() method*/
- protected function convertTo( $text, $variant ) {
- return $this->getLang()
- ->mConverter
- ->convertTo(
- $text, $variant
- );
- }
- protected function convertToCyrillic( $text ) {
- return $this->convertTo( $text, 'sr-ec' );
- }
- protected function convertToLatin( $text ) {
- return $this->convertTo( $text, 'sr-el' );
- }
- }
|