Skip to content

Commit f368263

Browse files
committed
Merge remote-tracking branch 'origin/MAGETWO-57070' into NORD-FIXES
2 parents be3e966 + 5a3747c commit f368263

File tree

2 files changed

+97
-26
lines changed

2 files changed

+97
-26
lines changed

lib/internal/Magento/Framework/Locale/Format.php

Lines changed: 8 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -5,15 +5,8 @@
55
*/
66
namespace Magento\Framework\Locale;
77

8-
use Magento\Framework\Locale\Bundle\DataBundle;
9-
108
class Format implements \Magento\Framework\Locale\FormatInterface
119
{
12-
/**
13-
* @var string
14-
*/
15-
private static $defaultNumberSet = 'latn';
16-
1710
/**
1811
* @var \Magento\Framework\App\ScopeResolverInterface
1912
*/
@@ -68,7 +61,7 @@ public function getNumber($value)
6861
}
6962

7063
if (!is_string($value)) {
71-
return floatval($value);
64+
return (float)$value;
7265
}
7366

7467
//trim spaces and apostrophes
@@ -79,16 +72,15 @@ public function getNumber($value)
7972

8073
if ($separatorComa !== false && $separatorDot !== false) {
8174
if ($separatorComa > $separatorDot) {
82-
$value = str_replace('.', '', $value);
83-
$value = str_replace(',', '.', $value);
75+
$value = str_replace(['.', ','], ['', '.'], $value);
8476
} else {
8577
$value = str_replace(',', '', $value);
8678
}
8779
} elseif ($separatorComa !== false) {
8880
$value = str_replace(',', '.', $value);
8981
}
9082

91-
return floatval($value);
83+
return (float)$value;
9284
}
9385

9486
/**
@@ -97,8 +89,6 @@ public function getNumber($value)
9789
* @param string $localeCode Locale code.
9890
* @param string $currencyCode Currency code.
9991
* @return array
100-
* @SuppressWarnings(PHPMD.NPathComplexity)
101-
* @SuppressWarnings(PHPMD.CyclomaticComplexity)
10292
*/
10393
public function getPriceFormat($localeCode = null, $currencyCode = null)
10494
{
@@ -108,25 +98,17 @@ public function getPriceFormat($localeCode = null, $currencyCode = null)
10898
} else {
10999
$currency = $this->_scopeResolver->getScope()->getCurrentCurrency();
110100
}
111-
$localeData = (new DataBundle())->get($localeCode);
112-
$defaultSet = $localeData['NumberElements']['default'] ?: self::$defaultNumberSet;
113-
$format = $localeData['NumberElements'][$defaultSet]['patterns']['currencyFormat']
114-
?: ($localeData['NumberElements'][self::$defaultNumberSet]['patterns']['currencyFormat']
115-
?: explode(';', $localeData['NumberPatterns'][1])[0]);
116-
117-
$decimalSymbol = $localeData['NumberElements'][$defaultSet]['symbols']['decimal']
118-
?: ($localeData['NumberElements'][self::$defaultNumberSet]['symbols']['decimal']
119-
?: $localeData['NumberElements'][0]);
120101

121-
$groupSymbol = $localeData['NumberElements'][$defaultSet]['symbols']['group']
122-
?: ($localeData['NumberElements'][self::$defaultNumberSet]['symbols']['group']
123-
?: $localeData['NumberElements'][1]);
102+
$formatter = new \NumberFormatter($localeCode, \NumberFormatter::CURRENCY);
103+
$format = $formatter->getPattern();
104+
$decimalSymbol = $formatter->getSymbol(\NumberFormatter::DECIMAL_SEPARATOR_SYMBOL);
105+
$groupSymbol = $formatter->getSymbol(\NumberFormatter::GROUPING_SEPARATOR_SYMBOL);
124106

125107
$pos = strpos($format, ';');
126108
if ($pos !== false) {
127109
$format = substr($format, 0, $pos);
128110
}
129-
$format = preg_replace("/[^0\#\.,]/", "", $format);
111+
$format = preg_replace("/[^0\#\.,]/", '', $format);
130112
$totalPrecision = 0;
131113
$decimalPoint = strpos($format, '.');
132114
if ($decimalPoint !== false) {
Lines changed: 89 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,89 @@
1+
<?php
2+
/**
3+
* Copyright © Magento, Inc. All rights reserved.
4+
* See COPYING.txt for license details.
5+
*/
6+
7+
namespace Magento\Framework\Locale\Test\Unit;
8+
9+
class FormatTest extends \PHPUnit_Framework_TestCase
10+
{
11+
/**
12+
* @var \Magento\Framework\Locale\Format
13+
*/
14+
protected $formatModel;
15+
16+
/**
17+
* @var \PHPUnit_Framework_MockObject_MockObject|\Magento\Framework\Locale\ResolverInterface
18+
*/
19+
protected $localeResolver;
20+
21+
/**
22+
* @var \PHPUnit_Framework_MockObject_MockObject|\Magento\Framework\App\ScopeInterface
23+
*/
24+
protected $scope;
25+
26+
/**
27+
* @var \PHPUnit_Framework_MockObject_MockObject|\Magento\Framework\App\ScopeResolverInterface
28+
*/
29+
protected $scopeResolver;
30+
31+
/**
32+
* @var \PHPUnit_Framework_MockObject_MockObject|\Magento\Directory\Model\Currency
33+
*/
34+
protected $currency;
35+
36+
protected function setUp()
37+
{
38+
$this->currency = $this->getMockBuilder(\Magento\Directory\Model\Currency::class)
39+
->disableOriginalConstructor()
40+
->getMock();
41+
$this->scope = $this->getMockBuilder(\Magento\Framework\App\ScopeInterface::class)
42+
->setMethods(['getCurrentCurrency'])
43+
->getMockForAbstractClass();
44+
$this->scope->expects($this->once())
45+
->method('getCurrentCurrency')
46+
->willReturn($this->currency);
47+
$this->scopeResolver = $this->getMockBuilder(\Magento\Framework\App\ScopeResolverInterface::class)
48+
->setMethods(['getScope'])
49+
->getMockForAbstractClass();
50+
$this->scopeResolver->expects($this->any())
51+
->method('getScope')
52+
->willReturn($this->scope);
53+
$this->localeResolver = $this->getMockBuilder(\Magento\Framework\Locale\ResolverInterface::class)
54+
->getMock();
55+
$currencyFactory = $this->getMockBuilder(\Magento\Directory\Model\CurrencyFactory::class)
56+
->getMock();
57+
58+
$this->formatModel = new \Magento\Framework\Locale\Format(
59+
$this->scopeResolver,
60+
$this->localeResolver,
61+
$currencyFactory
62+
);
63+
}
64+
65+
/**
66+
* @param $localeCode
67+
* @param $expectedResult
68+
* @dataProvider getPriceFormatDataProvider
69+
*/
70+
public function testGetPriceFormat($localeCode, $expectedResult)
71+
{
72+
$result = $this->formatModel->getPriceFormat($localeCode);
73+
$intersection = array_intersect_assoc($result, $expectedResult);
74+
$this->assertCount(count($expectedResult), $intersection);
75+
}
76+
77+
/**
78+
* @return array
79+
*/
80+
public function getPriceFormatDataProvider()
81+
{
82+
return [
83+
['en_US', ['decimalSymbol' => '.', 'groupSymbol' => ',']],
84+
['de_DE', ['decimalSymbol' => ',', 'groupSymbol' => '.']],
85+
['de_CH', ['decimalSymbol' => '.', 'groupSymbol' => '\'']],
86+
['uk_UA', ['decimalSymbol' => ',', 'groupSymbol' => ' ']]
87+
];
88+
}
89+
}

0 commit comments

Comments
 (0)