aboutsummaryrefslogtreecommitdiffstats
path: root/library/intl/tests/Formatter/NumberFormatterTest.php
diff options
context:
space:
mode:
Diffstat (limited to 'library/intl/tests/Formatter/NumberFormatterTest.php')
-rw-r--r--library/intl/tests/Formatter/NumberFormatterTest.php378
1 files changed, 0 insertions, 378 deletions
diff --git a/library/intl/tests/Formatter/NumberFormatterTest.php b/library/intl/tests/Formatter/NumberFormatterTest.php
deleted file mode 100644
index 83574873b..000000000
--- a/library/intl/tests/Formatter/NumberFormatterTest.php
+++ /dev/null
@@ -1,378 +0,0 @@
-<?php
-
-namespace CommerceGuys\Intl\Tests\Formatter;
-
-use CommerceGuys\Intl\Currency\Currency;
-use CommerceGuys\Intl\Formatter\NumberFormatter;
-use CommerceGuys\Intl\NumberFormat\NumberFormat;
-
-/**
- * @coversDefaultClass \CommerceGuys\Intl\Formatter\NumberFormatter
- */
-class NumberFormatterTest extends \PHPUnit_Framework_TestCase
-{
- /**
- * Prepare two number formats.
- */
- protected $numberFormats = array(
- 'latn' => array(
- 'numbering_system' => 'latn',
- 'decimal_pattern' => '#,##0.###',
- 'percent_pattern' => '#,##0%',
- 'currency_pattern' => '¤#,##0.00',
- 'accounting_currency_pattern' => '¤#,##0.00;(¤#,##0.00)',
- ),
- 'beng' => array(
- 'numbering_system' => 'beng',
- 'decimal_pattern' => '#,##,##0.###',
- 'percent_pattern' => '#,##,##0%',
- 'currency_pattern' => '#,##,##0.00¤',
- 'accounting_currency_pattern' => '#,##,##0.00¤;(#,##,##0.00¤)',
- ),
- );
-
- /**
- * Prepare two currency formats.
- */
- protected $currencies = array(
- 'USD' => array(
- 'code' => 'USD',
- 'name' => 'US Dollar',
- 'numeric_code' => '840',
- 'symbol' => '$',
- ),
- 'BND' => array(
- 'code' => 'BND',
- 'name' => 'dollar Brunei',
- 'numeric_code' => '096',
- 'symbol' => 'BND',
- ),
- );
-
- /**
- * @covers ::__construct
- * @uses \CommerceGuys\Intl\Formatter\NumberFormatter::getNumberFormat
- * @uses \CommerceGuys\Intl\NumberFormat\NumberFormat
- */
- public function testConstructor()
- {
- $numberFormat = new NumberFormat();
- $formatter = new NumberFormatter($numberFormat, NumberFormatter::DECIMAL);
- $this->assertSame($numberFormat, $formatter->getNumberFormat());
- }
-
- /**
- * @covers ::__construct
- * @uses \CommerceGuys\Intl\NumberFormat\NumberFormat
- *
- * @expectedException \CommerceGuys\Intl\Exception\InvalidArgumentException
- * @expectedExceptionMessage Unknown format style provided to NumberFormatter::__construct().
- */
- public function testConstructorWithInvalidStyle()
- {
- $numberFormat = new NumberFormat();
- new NumberFormatter($numberFormat, 'foo');
- }
-
- /**
- * @covers ::format
- * @covers ::replaceDigits
- * @covers ::replaceSymbols
- * @uses \CommerceGuys\Intl\Formatter\NumberFormatter::__construct
- * @uses \CommerceGuys\Intl\NumberFormat\NumberFormat
- *
- * @dataProvider numberValueProvider
- */
- public function testFormat($number_format, $style, $value, $expected_value)
- {
- $formatter = new NumberFormatter($number_format, $style);
-
- $formattedNumber = $formatter->format($value);
- $this->assertSame($expected_value, $formattedNumber);
- }
-
- /**
- * @covers ::SetMinimumFractionDigits
- * @covers ::SetMaximumFractionDigits
- * @covers ::format
- * @uses \CommerceGuys\Intl\Formatter\NumberFormatter::__construct
- * @uses \CommerceGuys\Intl\Formatter\NumberFormatter::replaceDigits
- * @uses \CommerceGuys\Intl\Formatter\NumberFormatter::replaceSymbols
- * @uses \CommerceGuys\Intl\NumberFormat\NumberFormat
- */
- public function testFormatFractionDigits()
- {
- $numberFormat = $this->createNumberFormat($this->numberFormats['latn']);
-
- $formatter = new NumberFormatter($numberFormat);
- $formatter->setMinimumFractionDigits(2);
- $formattedNumber = $formatter->format('12.5');
- $this->assertSame('12.50', $formattedNumber);
-
- $formatter = new NumberFormatter($numberFormat);
- $formatter->setMaximumFractionDigits(1);
- $formattedNumber = $formatter->format('12.50');
- $this->assertSame('12.5', $formattedNumber);
-
- $formatter = new NumberFormatter($numberFormat);
- $formatter->setMinimumFractionDigits(4);
- $formatter->setMaximumFractionDigits(5);
- $formattedNumber = $formatter->format('12.50000');
- $this->assertSame('12.5000', $formattedNumber);
- }
-
- /**
- * @covers ::format
- * @uses \CommerceGuys\Intl\Formatter\NumberFormatter::__construct
- * @uses \CommerceGuys\Intl\Formatter\NumberFormatter::format
- * @uses \CommerceGuys\Intl\NumberFormat\NumberFormat
- *
- * @expectedException \CommerceGuys\Intl\Exception\InvalidArgumentException
- */
- public function testFormatOnlyAllowsNumbers()
- {
- $numberFormat = $this->createNumberFormat($this->numberFormats['latn']);
- $formatter = new NumberFormatter($numberFormat);
- $formatter->format('a12.34');
- }
-
- /**
- * @covers ::formatCurrency
- * @covers ::replaceSymbols
- * @uses \CommerceGuys\Intl\Currency\Currency
- * @uses \CommerceGuys\Intl\Formatter\NumberFormatter::__construct
- * @uses \CommerceGuys\Intl\Formatter\NumberFormatter::format
- * @uses \CommerceGuys\Intl\Formatter\NumberFormatter::replaceDigits
- * @uses \CommerceGuys\Intl\NumberFormat\NumberFormat
- *
- * @dataProvider currencyValueProvider
- */
- public function testFormatCurrency($number_format, $currency, $style, $value, $expected_value)
- {
- $formatter = new NumberFormatter($number_format, $style);
-
- $formattedNumber = $formatter->formatCurrency($value, $currency);
- $this->assertSame($expected_value, $formattedNumber);
- }
-
- /**
- * @covers ::parseCurrency
- * @uses \CommerceGuys\Intl\Currency\Currency
- * @uses \CommerceGuys\Intl\Formatter\NumberFormatter::__construct
- * @uses \CommerceGuys\Intl\NumberFormat\NumberFormat
- *
- * @dataProvider formattedCurrencyProvider
- */
- public function testParseCurrency($number_format, $currency, $style, $value, $expected_value)
- {
- $formatter = new NumberFormatter($number_format, $style);
-
- $parsedNumber = $formatter->parseCurrency($value, $currency);
- $this->assertSame($expected_value, $parsedNumber);
- }
-
- /**
- * @covers ::getNumberFormat
- * @uses \CommerceGuys\Intl\Formatter\NumberFormatter::__construct
- * @uses \CommerceGuys\Intl\NumberFormat\NumberFormat
- */
- public function testGetNumberFormat()
- {
- $numberFormat = $this->createNumberFormat($this->numberFormats['latn']);
- $formatter = new NumberFormatter($numberFormat, NumberFormatter::DECIMAL);
- $this->assertSame($numberFormat, $formatter->getNumberFormat());
- }
-
- /**
- * @covers ::getMinimumFractionDigits
- * @uses \CommerceGuys\Intl\Formatter\NumberFormatter::__construct
- * @uses \CommerceGuys\Intl\NumberFormat\NumberFormat
- */
- public function testMinimumFractionDigits()
- {
- $numberFormat = $this->createNumberFormat($this->numberFormats['latn']);
-
- // Defaults to 0 for decimal and percentage formats.
- $formatter = new NumberFormatter($numberFormat, NumberFormatter::DECIMAL);
- $this->assertEquals(0, $formatter->getMinimumFractionDigits());
- $formatter = new NumberFormatter($numberFormat, NumberFormatter::PERCENT);
- $this->assertEquals(0, $formatter->getMinimumFractionDigits());
-
- // Should default to null for currency formats.
- $formatter = new NumberFormatter($numberFormat, NumberFormatter::CURRENCY);
- $this->assertNull($formatter->getMinimumFractionDigits());
- $formatter = new NumberFormatter($numberFormat, NumberFormatter::CURRENCY_ACCOUNTING);
- $this->assertNull($formatter->getMinimumFractionDigits());
- }
-
- /**
- * @covers ::getMaximumFractionDigits
- * @uses \CommerceGuys\Intl\Formatter\NumberFormatter::__construct
- * @uses \CommerceGuys\Intl\NumberFormat\NumberFormat
- */
- public function testMaximumFractionDigits()
- {
- $numberFormat = $this->createNumberFormat($this->numberFormats['latn']);
-
- // Defaults to 3 for decimal and percentage formats.
- $formatter = new NumberFormatter($numberFormat, NumberFormatter::DECIMAL);
- $this->assertEquals(3, $formatter->getMaximumFractionDigits());
- $formatter = new NumberFormatter($numberFormat, NumberFormatter::PERCENT);
- $this->assertEquals(3, $formatter->getMaximumFractionDigits());
-
- // Should default to null for currency formats.
- $formatter = new NumberFormatter($numberFormat, NumberFormatter::CURRENCY);
- $this->assertNull($formatter->getMaximumFractionDigits());
- $formatter = new NumberFormatter($numberFormat, NumberFormatter::CURRENCY_ACCOUNTING);
- $this->assertNull($formatter->getMaximumFractionDigits());
- }
-
- /**
- * @covers ::isGroupingUsed
- * @covers ::setGroupingUsed
- * @uses \CommerceGuys\Intl\Formatter\NumberFormatter::__construct
- * @uses \CommerceGuys\Intl\Formatter\NumberFormatter::format
- * @uses \CommerceGuys\Intl\Formatter\NumberFormatter::replaceDigits
- * @uses \CommerceGuys\Intl\Formatter\NumberFormatter::replaceSymbols
- * @uses \CommerceGuys\Intl\NumberFormat\NumberFormat
- */
- public function testGroupingUsed()
- {
- $numberFormat = $this->createNumberFormat($this->numberFormats['latn']);
-
- // The formatter groups correctly.
- $formatter = new NumberFormatter($numberFormat, NumberFormatter::DECIMAL);
- $this->assertTrue($formatter->isGroupingUsed());
- $this->assertSame('10,000.9', $formatter->format('10000.90'));
-
- // The formatter respects grouping turned off.
- $formatter = new NumberFormatter($numberFormat, NumberFormatter::DECIMAL);
- $formatter->setGroupingUsed(false);
- $this->assertFalse($formatter->isGroupingUsed());
- $this->assertSame('10000.9', $formatter->format('10000.90'));
- }
-
- /**
- * @covers ::getCurrencyDisplay
- * @covers ::setCurrencyDisplay
- * @covers ::formatCurrency
- * @uses \CommerceGuys\Intl\Currency\Currency
- * @uses \CommerceGuys\Intl\Formatter\NumberFormatter::__construct
- * @uses \CommerceGuys\Intl\Formatter\NumberFormatter::format
- * @uses \CommerceGuys\Intl\Formatter\NumberFormatter::replaceDigits
- * @uses \CommerceGuys\Intl\Formatter\NumberFormatter::replaceSymbols
- * @uses \CommerceGuys\Intl\NumberFormat\NumberFormat
- */
- public function testCurrencyDisplay()
- {
- $numberFormat = $this->createNumberFormat($this->numberFormats['latn']);
- $currency = $this->createCurrency($this->currencies['USD']);
-
- // Currency display defaults to symbol.
- $formatter = new NumberFormatter($numberFormat, NumberFormatter::CURRENCY);
- $this->assertSame(NumberFormatter::CURRENCY_DISPLAY_SYMBOL, $formatter->getCurrencyDisplay());
- $formattedNumber = $formatter->formatCurrency('100', $currency);
- $this->assertSame('$100.00', $formattedNumber);
-
- // Currency display respects setting the value to currency code.
- $formatter = new NumberFormatter($numberFormat, NumberFormatter::CURRENCY);
- $formatter->setCurrencyDisplay(NumberFormatter::CURRENCY_DISPLAY_CODE);
- $this->assertSame(NumberFormatter::CURRENCY_DISPLAY_CODE, $formatter->getCurrencyDisplay());
- $formattedNumber = $formatter->formatCurrency('100', $currency);
- $this->assertSame('USD100.00', $formattedNumber);
- }
-
- /**
- * Provides the number format, number style, value and expected formatted value.
- */
- public function numberValueProvider()
- {
- return array(
- array($this->createNumberFormat($this->numberFormats['latn']), NumberFormatter::DECIMAL, '-50.5', '-50.5'),
- array($this->createNumberFormat($this->numberFormats['latn']), NumberFormatter::PERCENT, '50.5', '50.5%'),
- array($this->createNumberFormat($this->numberFormats['latn']), NumberFormatter::DECIMAL, '5000000.5', '5,000,000.5'),
- array($this->createNumberFormat($this->numberFormats['beng'], 'bn'), NumberFormatter::DECIMAL, '-50.5', '-৫০.৫'),
- array($this->createNumberFormat($this->numberFormats['beng'], 'bn'), NumberFormatter::PERCENT, '50.5', '৫০.৫%'),
- array($this->createNumberFormat($this->numberFormats['beng'], 'bn'), NumberFormatter::DECIMAL, '5000000.5', '৫০,০০,০০০.৫')
- );
- }
-
- /**
- * Provides the number format, currency format, number style, value and expected formatted value.
- */
- public function currencyValueProvider()
- {
- return array(
- array($this->createNumberFormat($this->numberFormats['latn']), $this->createCurrency($this->currencies['USD']), NumberFormatter::CURRENCY, '-5.05', '-$5.05'),
- array($this->createNumberFormat($this->numberFormats['latn']), $this->createCurrency($this->currencies['USD']), NumberFormatter::CURRENCY_ACCOUNTING, '-5.05', '($5.05)'),
- array($this->createNumberFormat($this->numberFormats['latn']), $this->createCurrency($this->currencies['USD']), NumberFormatter::CURRENCY, '500100.05', '$500,100.05'),
- array($this->createNumberFormat($this->numberFormats['beng'], 'bn'), $this->createCurrency($this->currencies['BND'], 'bn'), NumberFormatter::CURRENCY, '-50.5', '-৫০.৫০BND'),
- array($this->createNumberFormat($this->numberFormats['beng'], 'bn'), $this->createCurrency($this->currencies['BND'], 'bn'), NumberFormatter::CURRENCY_ACCOUNTING, '-50.5', '(৫০.৫০BND)'),
- array($this->createNumberFormat($this->numberFormats['beng'], 'bn'), $this->createCurrency($this->currencies['BND'], 'bn'), NumberFormatter::CURRENCY, '500100.05', '৫,০০,১০০.০৫BND'),
- );
- }
-
- /**
- * Provides values for the formatted currency parser.
- */
- public function formattedCurrencyProvider()
- {
- return array(
- array($this->createNumberFormat($this->numberFormats['latn']), $this->createCurrency($this->currencies['USD']), NumberFormatter::CURRENCY, '$500,100.05', '500100.05'),
- array($this->createNumberFormat($this->numberFormats['latn']), $this->createCurrency($this->currencies['USD']), NumberFormatter::CURRENCY, '-$1,059.59', '-1059.59'),
- array($this->createNumberFormat($this->numberFormats['latn']), $this->createCurrency($this->currencies['USD']), NumberFormatter::CURRENCY_ACCOUNTING, '($1,059.59)', '-1059.59'),
- array($this->createNumberFormat($this->numberFormats['beng'], 'bn'), $this->createCurrency($this->currencies['BND'], 'bn'), NumberFormatter::CURRENCY, '৫,০০,১০০.০৫BND', '500100.05'),
- );
- }
-
- /**
- * Helper for initiating a new NumberFormat object.
- */
- protected function createNumberFormat(array $definition, $locale = 'en')
- {
- $default = array(
- 'decimal_separator' => '.',
- 'grouping_separator' => ',',
- 'plus_sign' => '+',
- 'minus_sign' => '-',
- 'percent_sign' => '%'
- );
- $format = array_merge($default, $definition);
-
- $numberFormat = new NumberFormat();
- $numberFormat->setLocale($locale);
- $numberFormat->setNumberingSystem($format['numbering_system']);
- $numberFormat->setDecimalSeparator($format['decimal_separator']);
- $numberFormat->setGroupingSeparator($format['grouping_separator']);
- $numberFormat->setPlusSign($format['plus_sign']);
- $numberFormat->setMinusSign($format['minus_sign']);
- $numberFormat->setPercentSign($format['percent_sign']);
- $numberFormat->setDecimalPattern($format['decimal_pattern']);
- $numberFormat->setPercentPattern($format['percent_pattern']);
- $numberFormat->setCurrencyPattern($format['currency_pattern']);
- $numberFormat->setAccountingCurrencyPattern($format['accounting_currency_pattern']);
-
- return $numberFormat;
- }
-
- /**
- * Helper for initiating a new Currency object.
- */
- protected function createCurrency(array $definition, $locale = 'en')
- {
- $default = array(
- 'fraction_digits' => 2
- );
- $format = array_merge($default, $definition);
-
- $currency = new Currency();
- $currency->setCurrencyCode($format['code']);
- $currency->setName($format['name']);
- $currency->setNumericCode($format['numeric_code']);
- $currency->setFractionDigits($format['fraction_digits']);
- $currency->setSymbol($format['symbol']);
- $currency->setLocale($locale);
-
- return $currency;
- }
-}