diff options
Diffstat (limited to 'www/wiki/extensions/SemanticMediaWiki/tests/phpunit/Unit/DataValues/Number/IntlNumberFormatterTest.php')
-rw-r--r-- | www/wiki/extensions/SemanticMediaWiki/tests/phpunit/Unit/DataValues/Number/IntlNumberFormatterTest.php | 348 |
1 files changed, 348 insertions, 0 deletions
diff --git a/www/wiki/extensions/SemanticMediaWiki/tests/phpunit/Unit/DataValues/Number/IntlNumberFormatterTest.php b/www/wiki/extensions/SemanticMediaWiki/tests/phpunit/Unit/DataValues/Number/IntlNumberFormatterTest.php new file mode 100644 index 00000000..326ed465 --- /dev/null +++ b/www/wiki/extensions/SemanticMediaWiki/tests/phpunit/Unit/DataValues/Number/IntlNumberFormatterTest.php @@ -0,0 +1,348 @@ +<?php + +namespace SMW\Tests\DataValues\Number; + +use Language; +use SMW\DataValues\Number\IntlNumberFormatter; +use SMW\Tests\PHPUnitCompat; + +/** + * @covers \SMW\DataValues\Number\IntlNumberFormatter + * @group semantic-mediawiki + * + * @license GNU GPL v2+ + * @since 2.1 + * + * @author mwjames + */ +class IntlNumberFormatterTest extends \PHPUnit_Framework_TestCase { + + use PHPUnitCompat; + + public function testCanConstruct() { + + $this->assertInstanceOf( + IntlNumberFormatter::class, + new IntlNumberFormatter( 10000 ) + ); + + $this->assertInstanceOf( + IntlNumberFormatter::class, + IntlNumberFormatter::getInstance() + ); + } + + /** + * @dataProvider numberProvider + */ + public function testLocalizedFormattedNumber( $maxNonExpNumber, $number, $userLanguage, $contentLanguage, $expected ) { + + $instance = new IntlNumberFormatter( $maxNonExpNumber ); + + $instance->setOption( IntlNumberFormatter::USER_LANGUAGE, $userLanguage ); + $instance->setOption( IntlNumberFormatter::CONTENT_LANGUAGE, $contentLanguage ); + + $this->assertEquals( + $expected, + $instance->format( $number ) + ); + } + + public function testZeroPadding() { + + $expected = '1000(foo)42'; + + $instance = new IntlNumberFormatter( 10000 ); + + // #2797 + $instance->setOption( IntlNumberFormatter::DECIMAL_SEPARATOR, '(foo)' ); + $instance->setOption( IntlNumberFormatter::THOUSANDS_SEPARATOR, '' ); + + $this->assertEquals( + $expected, + $instance->format( 1000.42 ) + ); + } + + /** + * @dataProvider unformattedNumberByPrecisionProvider + */ + public function testGetUnformattedNumberByPrecision( $maxNonExpNumber, $number, $precision, $userLanguage, $contentLanguage, $expected ) { + + $instance = new IntlNumberFormatter( $maxNonExpNumber ); + + $instance->setOption( IntlNumberFormatter::USER_LANGUAGE, $userLanguage ); + $instance->setOption( IntlNumberFormatter::CONTENT_LANGUAGE, $contentLanguage ); + + $this->assertEquals( + $expected, + $instance->format( $number, $precision, IntlNumberFormatter::VALUE_FORMAT ) + ); + } + + public function testCompareFloatValue() { + + $instance = new IntlNumberFormatter( 1000 ); + + $instance->setOption( IntlNumberFormatter::USER_LANGUAGE, 'en' ); + $instance->setOption( IntlNumberFormatter::CONTENT_LANGUAGE, 'en' ); + + $this->assertSame( + $instance->format( 100.0, false, IntlNumberFormatter::VALUE_FORMAT ), + $instance->format( 100, false, IntlNumberFormatter::VALUE_FORMAT ) + ); + } + + /** + * @dataProvider separatorProvider + */ + public function testgetSeparatorByLanguage( $type, $locale, $userLanguage, $contentLanguage, $expected ) { + + $instance = new IntlNumberFormatter( 10000000 ); + + $instance->setOption( IntlNumberFormatter::USER_LANGUAGE, $userLanguage ); + $instance->setOption( IntlNumberFormatter::CONTENT_LANGUAGE, $contentLanguage ); + + $this->assertEquals( + $expected, + $instance->getSeparatorByLanguage( $type, $locale ) + ); + } + + public function testCustomSeparator() { + + $instance = new IntlNumberFormatter( 10000000 ); + + $instance->setOption( IntlNumberFormatter::DECIMAL_SEPARATOR, 'FOO' ); + $instance->setOption( IntlNumberFormatter::THOUSANDS_SEPARATOR, 'BAR' ); + + $this->assertEquals( + 'FOO', + $instance->getSeparatorByLanguage( IntlNumberFormatter::DECIMAL_SEPARATOR, 'zzz' ) + ); + + $this->assertEquals( + 'BAR', + $instance->getSeparatorByLanguage( IntlNumberFormatter::THOUSANDS_SEPARATOR, 'zzz' ) + ); + } + + public function testTryTogetSeparatorByLanguageOnInvalidTypeThrowsException() { + + $instance = new IntlNumberFormatter( 10000000 ); + + $this->setExpectedException( 'InvalidArgumentException' ); + $instance->getSeparatorByLanguage( 'Foo' ); + } + + public function numberProvider() { + + $provider[] = [ + 10000, + 1000, + 'en', + 'en', + '1,000' + ]; + + $provider[] = [ + 10000, + 1000.42, + 'en', + 'en', + '1,000.42' + ]; + + $provider[] = [ + 10000, + 1000000, + 'en', + 'en', + '1.0e+6' + ]; + + $provider[] = [ + 10000000, + 1000000, + 'en', + 'en', + '1,000,000' + ]; + + return $provider; + } + + public function unformattedNumberByPrecisionProvider() { + + $provider['un.1'] = [ + 10000, + 1000, + 2, + 'en', + 'en', + '1000.00' + ]; + + $provider['un.2'] = [ + 10000, + 1000.42, + 3, + 'en', + 'en', + '1000.420' + ]; + + $provider['un.3'] = [ + 10000, + 1000000, + 0, + 'en', + 'en', + '1000000' + ]; + + $provider['un.4'] = [ + 10000000, + 1000000, + 2, + 'en', + 'en', + '1000000.00' + ]; + + $provider['un.5'] = [ + 10000000, + 1000000, + false, + 'en', + 'en', + '1000000' + ]; + + $provider['un.6'] = [ + 10000000, + 312.23545555, + false, + 'en', + 'en', + '312.23545555' + ]; + + $provider['un.7'] = [ + 10000000, + 312.23545555, + 6, + 'en', + 'en', + '312.235456' + ]; + + $provider['un.8'] = [ + 10000000, + 312.23545555, + 9, + 'en', + 'en', + '312.235455550' + ]; + + $provider['un.9'] = [ + 10000000, + 312.23545555, + null, + 'en', + 'en', + '312.235455550' + ]; + + $provider['un.10'] = [ + 10000000, + 1.334e-13, + false, + 'en', + 'en', + '1.334e-13' + ]; + + $provider['un.11'] = [ + 10000000, + 1.334e-13, + false, + 'en', + 'fr', + '1,334e-13' + ]; + + return $provider; + } + + public function separatorProvider() { + + $provider['1.en'] = [ + IntlNumberFormatter::DECIMAL_SEPARATOR, + IntlNumberFormatter::USER_LANGUAGE, + 'en', + 'en', + '.' + ]; + + $provider['2.en'] = [ + IntlNumberFormatter::THOUSANDS_SEPARATOR, + IntlNumberFormatter::USER_LANGUAGE, + 'en', + 'en', + ',' + ]; + + $provider['3.en'] = [ + IntlNumberFormatter::DECIMAL_SEPARATOR, + IntlNumberFormatter::CONTENT_LANGUAGE, + 'en', + 'en', + '.' + ]; + + $provider['4.en'] = [ + IntlNumberFormatter::THOUSANDS_SEPARATOR, + IntlNumberFormatter::CONTENT_LANGUAGE, + 'en', + 'en', + ',' + ]; + + $provider['5.fr'] = [ + IntlNumberFormatter::DECIMAL_SEPARATOR, + IntlNumberFormatter::USER_LANGUAGE, + 'fr', + 'en', + ',' + ]; + + $provider['6.fr'] = [ + IntlNumberFormatter::THOUSANDS_SEPARATOR, + IntlNumberFormatter::USER_LANGUAGE, + 'fr', + 'en', + ' ' + ]; + + $provider['7.fr'] = [ + IntlNumberFormatter::DECIMAL_SEPARATOR, + IntlNumberFormatter::CONTENT_LANGUAGE, + 'fr', + 'fr', + ',' + ]; + + $provider['8.fr'] = [ + IntlNumberFormatter::THOUSANDS_SEPARATOR, + IntlNumberFormatter::CONTENT_LANGUAGE, + 'fr', + 'fr', + ' ' + ]; + + return $provider; + } + +} |