Skip to content
Extraits de code Groupes Projets
Valider 51022df5 rédigé par diosmosis's avatar diosmosis
Parcourir les fichiers

Partially move NumberFormatter to DI, refactor NumberFormatterTest so not as...

Partially move NumberFormatter to DI, refactor NumberFormatterTest so not as many deprecated classes/methods are used, and add tests for NumberFormatter::format().
parent c79ebcc1
Aucune branche associée trouvée
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
...@@ -7,13 +7,15 @@ ...@@ -7,13 +7,15 @@
* *
*/ */
namespace Piwik; namespace Piwik;
use Piwik\Container\StaticContainer;
use Piwik\Translation\Translator;
/** /**
* Class NumberFormatter * Class NumberFormatter
* *
* Used to format numbers according to current language * Used to format numbers according to current language
*/ */
class NumberFormatter extends Singleton class NumberFormatter
{ {
/** @var string language specific patterns for numbers */ /** @var string language specific patterns for numbers */
protected $patternNumber; protected $patternNumber;
...@@ -51,18 +53,23 @@ class NumberFormatter extends Singleton ...@@ -51,18 +53,23 @@ class NumberFormatter extends Singleton
/** /**
* Loads all required data from Intl plugin * Loads all required data from Intl plugin
* *
* TODO: instead of going directly through Translator, there should be a specific class
* that gets needed characters (ie, NumberFormatSource). The default implementation
* can use the Translator. This will make it easier to unit test NumberFormatter,
* w/o needing the Piwik Environment.
*
* @return NumberFormatter * @return NumberFormatter
*/ */
public function __construct() public function __construct(Translator $translator)
{ {
$this->patternNumber = Piwik::translate('Intl_NumberFormatNumber'); $this->patternNumber = $translator->translate('Intl_NumberFormatNumber');
$this->patternCurrency = Piwik::translate('Intl_NumberFormatCurrency'); $this->patternCurrency = $translator->translate('Intl_NumberFormatCurrency');
$this->patternPercent = Piwik::translate('Intl_NumberFormatPercent'); $this->patternPercent = $translator->translate('Intl_NumberFormatPercent');
$this->symbolPlus = Piwik::translate('Intl_NumberSymbolPlus'); $this->symbolPlus = $translator->translate('Intl_NumberSymbolPlus');
$this->symbolMinus = Piwik::translate('Intl_NumberSymbolMinus'); $this->symbolMinus = $translator->translate('Intl_NumberSymbolMinus');
$this->symbolPercent = Piwik::translate('Intl_NumberSymbolPercent'); $this->symbolPercent = $translator->translate('Intl_NumberSymbolPercent');
$this->symbolGroup = Piwik::translate('Intl_NumberSymbolGroup'); $this->symbolGroup = $translator->translate('Intl_NumberSymbolGroup');
$this->symbolDecimal = Piwik::translate('Intl_NumberSymbolDecimal'); $this->symbolDecimal = $translator->translate('Intl_NumberSymbolDecimal');
} }
/** /**
...@@ -306,4 +313,13 @@ class NumberFormatter extends Singleton ...@@ -306,4 +313,13 @@ class NumberFormatter extends Singleton
{ {
return $value < 0; return $value < 0;
} }
/**
* @deprecated
* @return self
*/
public static function getInstance()
{
return StaticContainer::get('Piwik\NumberFormatter');
}
} }
\ No newline at end of file
...@@ -10,7 +10,7 @@ namespace Piwik\Tests\Integration; ...@@ -10,7 +10,7 @@ namespace Piwik\Tests\Integration;
use Piwik\Container\StaticContainer; use Piwik\Container\StaticContainer;
use Piwik\NumberFormatter; use Piwik\NumberFormatter;
use Piwik\Translate; use Piwik\Translation\Translator;
/** /**
* @group Core * @group Core
...@@ -18,15 +18,48 @@ use Piwik\Translate; ...@@ -18,15 +18,48 @@ use Piwik\Translate;
*/ */
class NumberFormatterTest extends \PHPUnit_Framework_TestCase class NumberFormatterTest extends \PHPUnit_Framework_TestCase
{ {
/**
* @var Translator
*/
private $translator;
public function setUp() public function setUp()
{ {
Translate::loadAllTranslations(); \Piwik\Plugin\Manager::getInstance()->loadPluginTranslations();
$this->translator = StaticContainer::get('Piwik\Translation\Translator');
} }
public function tearDown() public function tearDown()
{ {
StaticContainer::get('Piwik\NumberFormatter')->unsetInstance(); $this->translator->reset();
Translate::reset(); }
/**
* @dataProvider getFormatMethodTestData
*/
public function test_format_CorrectlyFormatsValueAsNumberOrPercent(
$language, $value, $maximumFractionDigits, $minimumFractionDigits, $expected)
{
$this->translator->setCurrentLanguage($language);
$numberFormatter = new NumberFormatter($this->translator);
$this->assertEquals($expected, $numberFormatter->format($value, $maximumFractionDigits,$minimumFractionDigits));
}
public function getFormatMethodTestData()
{
return array(
// number formatting
array('en', 5, 0, 0, '5'),
array('en', -5, 0, 3, '-5'),
array('en', 5.299, 0, 0, '5'),
array('en', 5.299, 3, 0, '5.299'),
array('en', sqrt(33), 2, 0, '5.74'),
// percent formatting
array('en', '5.299%', 0, 0, '5%'),
array('en', '5.299%', 3, 0, '5.299%'),
);
} }
/** /**
...@@ -34,9 +67,10 @@ class NumberFormatterTest extends \PHPUnit_Framework_TestCase ...@@ -34,9 +67,10 @@ class NumberFormatterTest extends \PHPUnit_Framework_TestCase
*/ */
public function testNumberFormatting($language, $value, $maximumFractionDigits, $minimumFractionDigits, $expected) public function testNumberFormatting($language, $value, $maximumFractionDigits, $minimumFractionDigits, $expected)
{ {
StaticContainer::get('Piwik\Translation\Translator')->setCurrentLanguage($language); $this->translator->setCurrentLanguage($language);
$formatter = NumberFormatter::getInstance(); $numberFormatter = new NumberFormatter($this->translator);
$this->assertEquals($expected, $formatter->formatNumber($value, $maximumFractionDigits, $minimumFractionDigits));
$this->assertEquals($expected, $numberFormatter->formatNumber($value, $maximumFractionDigits, $minimumFractionDigits));
} }
public function getNumberFormattingTestData() public function getNumberFormattingTestData()
...@@ -67,9 +101,9 @@ class NumberFormatterTest extends \PHPUnit_Framework_TestCase ...@@ -67,9 +101,9 @@ class NumberFormatterTest extends \PHPUnit_Framework_TestCase
*/ */
public function testPercentNumberFormatting($language, $value, $maximumFractionDigits, $minimumFractionDigits, $expected) public function testPercentNumberFormatting($language, $value, $maximumFractionDigits, $minimumFractionDigits, $expected)
{ {
StaticContainer::get('Piwik\Translation\Translator')->setCurrentLanguage($language); $this->translator->setCurrentLanguage($language);
$formatter = NumberFormatter::getInstance(); $numberFormatter = new NumberFormatter($this->translator);
$this->assertEquals($expected, $formatter->formatPercent($value, $maximumFractionDigits, $minimumFractionDigits)); $this->assertEquals($expected, $numberFormatter->formatPercent($value, $maximumFractionDigits, $minimumFractionDigits));
} }
public function getPercentNumberFormattingTestData() public function getPercentNumberFormattingTestData()
...@@ -101,9 +135,9 @@ class NumberFormatterTest extends \PHPUnit_Framework_TestCase ...@@ -101,9 +135,9 @@ class NumberFormatterTest extends \PHPUnit_Framework_TestCase
*/ */
public function testPercentEvolutionNumberFormatting($language, $value, $expected) public function testPercentEvolutionNumberFormatting($language, $value, $expected)
{ {
StaticContainer::get('Piwik\Translation\Translator')->setCurrentLanguage($language); $this->translator->setCurrentLanguage($language);
$formatter = NumberFormatter::getInstance(); $numberFormatter = new NumberFormatter($this->translator);
$this->assertEquals($expected, $formatter->formatPercentEvolution($value)); $this->assertEquals($expected, $numberFormatter->formatPercentEvolution($value));
} }
public function getPercentNumberEvolutionFormattingTestData() public function getPercentNumberEvolutionFormattingTestData()
......
0% Chargement en cours ou .
You are about to add 0 people to the discussion. Proceed with caution.
Terminez d'abord l'édition de ce message.
Veuillez vous inscrire ou vous pour commenter