diff --git a/src/Symfony/Component/VarDumper/Caster/IntlCaster.php b/src/Symfony/Component/VarDumper/Caster/IntlCaster.php
index ba2a70e34ed33..ecb87e06f1ee9 100644
--- a/src/Symfony/Component/VarDumper/Caster/IntlCaster.php
+++ b/src/Symfony/Component/VarDumper/Caster/IntlCaster.php
@@ -15,6 +15,7 @@
/**
* @author Nicolas Grekas
+ * @author Jan Schädlich
*/
class IntlCaster
{
@@ -25,6 +26,88 @@ public static function castMessageFormatter(\MessageFormatter $c, array $a, Stub
Caster::PREFIX_VIRTUAL.'pattern' => $c->getPattern(),
);
+ return self::castError($c, $a);
+ }
+
+ public static function castNumberFormatter(\NumberFormatter $c, array $a, Stub $stub, $isNested, $filter = 0)
+ {
+ $a += array(
+ Caster::PREFIX_VIRTUAL.'locale' => $c->getLocale(),
+ Caster::PREFIX_VIRTUAL.'pattern' => $c->getPattern(),
+ );
+
+ if ($filter & Caster::EXCLUDE_VERBOSE) {
+ $stub->cut += 3;
+
+ return self::castError($c, $a);
+ }
+
+ $a += array(
+ Caster::PREFIX_VIRTUAL.'attributes' => new EnumStub(
+ array(
+ 'PARSE_INT_ONLY' => $c->getAttribute(\NumberFormatter::PARSE_INT_ONLY),
+ 'GROUPING_USED' => $c->getAttribute(\NumberFormatter::GROUPING_USED),
+ 'DECIMAL_ALWAYS_SHOWN' => $c->getAttribute(\NumberFormatter::DECIMAL_ALWAYS_SHOWN),
+ 'MAX_INTEGER_DIGITS' => $c->getAttribute(\NumberFormatter::MAX_INTEGER_DIGITS),
+ 'MIN_INTEGER_DIGITS' => $c->getAttribute(\NumberFormatter::MIN_INTEGER_DIGITS),
+ 'INTEGER_DIGITS' => $c->getAttribute(\NumberFormatter::INTEGER_DIGITS),
+ 'MAX_FRACTION_DIGITS' => $c->getAttribute(\NumberFormatter::MAX_FRACTION_DIGITS),
+ 'MIN_FRACTION_DIGITS' => $c->getAttribute(\NumberFormatter::MIN_FRACTION_DIGITS),
+ 'FRACTION_DIGITS' => $c->getAttribute(\NumberFormatter::FRACTION_DIGITS),
+ 'MULTIPLIER' => $c->getAttribute(\NumberFormatter::MULTIPLIER),
+ 'GROUPING_SIZE' => $c->getAttribute(\NumberFormatter::GROUPING_SIZE),
+ 'ROUNDING_MODE' => $c->getAttribute(\NumberFormatter::ROUNDING_MODE),
+ 'ROUNDING_INCREMENT' => $c->getAttribute(\NumberFormatter::ROUNDING_INCREMENT),
+ 'FORMAT_WIDTH' => $c->getAttribute(\NumberFormatter::FORMAT_WIDTH),
+ 'PADDING_POSITION' => $c->getAttribute(\NumberFormatter::PADDING_POSITION),
+ 'SECONDARY_GROUPING_SIZE' => $c->getAttribute(\NumberFormatter::SECONDARY_GROUPING_SIZE),
+ 'SIGNIFICANT_DIGITS_USED' => $c->getAttribute(\NumberFormatter::SIGNIFICANT_DIGITS_USED),
+ 'MIN_SIGNIFICANT_DIGITS' => $c->getAttribute(\NumberFormatter::MIN_SIGNIFICANT_DIGITS),
+ 'MAX_SIGNIFICANT_DIGITS' => $c->getAttribute(\NumberFormatter::MAX_SIGNIFICANT_DIGITS),
+ 'LENIENT_PARSE' => $c->getAttribute(\NumberFormatter::LENIENT_PARSE),
+ )
+ ),
+ Caster::PREFIX_VIRTUAL.'text_attributes' => new EnumStub(
+ array(
+ 'POSITIVE_PREFIX' => $c->getTextAttribute(\NumberFormatter::POSITIVE_PREFIX),
+ 'POSITIVE_SUFFIX' => $c->getTextAttribute(\NumberFormatter::POSITIVE_SUFFIX),
+ 'NEGATIVE_PREFIX' => $c->getTextAttribute(\NumberFormatter::NEGATIVE_PREFIX),
+ 'NEGATIVE_SUFFIX' => $c->getTextAttribute(\NumberFormatter::NEGATIVE_SUFFIX),
+ 'PADDING_CHARACTER' => $c->getTextAttribute(\NumberFormatter::PADDING_CHARACTER),
+ 'CURRENCY_CODE' => $c->getTextAttribute(\NumberFormatter::CURRENCY_CODE),
+ 'DEFAULT_RULESET' => $c->getTextAttribute(\NumberFormatter::DEFAULT_RULESET),
+ 'PUBLIC_RULESETS' => $c->getTextAttribute(\NumberFormatter::PUBLIC_RULESETS),
+ )
+ ),
+ Caster::PREFIX_VIRTUAL.'symbols' => new EnumStub(
+ array(
+ 'DECIMAL_SEPARATOR_SYMBOL' => $c->getSymbol(\NumberFormatter::DECIMAL_SEPARATOR_SYMBOL),
+ 'GROUPING_SEPARATOR_SYMBOL' => $c->getSymbol(\NumberFormatter::GROUPING_SEPARATOR_SYMBOL),
+ 'PATTERN_SEPARATOR_SYMBOL' => $c->getSymbol(\NumberFormatter::PATTERN_SEPARATOR_SYMBOL),
+ 'PERCENT_SYMBOL' => $c->getSymbol(\NumberFormatter::PERCENT_SYMBOL),
+ 'ZERO_DIGIT_SYMBOL' => $c->getSymbol(\NumberFormatter::ZERO_DIGIT_SYMBOL),
+ 'DIGIT_SYMBOL' => $c->getSymbol(\NumberFormatter::DIGIT_SYMBOL),
+ 'MINUS_SIGN_SYMBOL' => $c->getSymbol(\NumberFormatter::MINUS_SIGN_SYMBOL),
+ 'PLUS_SIGN_SYMBOL' => $c->getSymbol(\NumberFormatter::PLUS_SIGN_SYMBOL),
+ 'CURRENCY_SYMBOL' => $c->getSymbol(\NumberFormatter::CURRENCY_SYMBOL),
+ 'INTL_CURRENCY_SYMBOL' => $c->getSymbol(\NumberFormatter::INTL_CURRENCY_SYMBOL),
+ 'MONETARY_SEPARATOR_SYMBOL' => $c->getSymbol(\NumberFormatter::MONETARY_SEPARATOR_SYMBOL),
+ 'EXPONENTIAL_SYMBOL' => $c->getSymbol(\NumberFormatter::EXPONENTIAL_SYMBOL),
+ 'PERMILL_SYMBOL' => $c->getSymbol(\NumberFormatter::PERMILL_SYMBOL),
+ 'PAD_ESCAPE_SYMBOL' => $c->getSymbol(\NumberFormatter::PAD_ESCAPE_SYMBOL),
+ 'INFINITY_SYMBOL' => $c->getSymbol(\NumberFormatter::INFINITY_SYMBOL),
+ 'NAN_SYMBOL' => $c->getSymbol(\NumberFormatter::NAN_SYMBOL),
+ 'SIGNIFICANT_DIGIT_SYMBOL' => $c->getSymbol(\NumberFormatter::SIGNIFICANT_DIGIT_SYMBOL),
+ 'MONETARY_GROUPING_SEPARATOR_SYMBOL' => $c->getSymbol(\NumberFormatter::MONETARY_GROUPING_SEPARATOR_SYMBOL),
+ )
+ ),
+ );
+
+ return self::castError($c, $a);
+ }
+
+ private static function castError($c, array $a): array
+ {
if ($errorCode = $c->getErrorCode()) {
$a += array(
Caster::PREFIX_VIRTUAL.'error_code' => $errorCode,
diff --git a/src/Symfony/Component/VarDumper/Cloner/AbstractCloner.php b/src/Symfony/Component/VarDumper/Cloner/AbstractCloner.php
index 04662152eb259..f35c94e67393b 100644
--- a/src/Symfony/Component/VarDumper/Cloner/AbstractCloner.php
+++ b/src/Symfony/Component/VarDumper/Cloner/AbstractCloner.php
@@ -118,6 +118,7 @@ abstract class AbstractCloner implements ClonerInterface
'GMP' => array('Symfony\Component\VarDumper\Caster\GmpCaster', 'castGmp'),
'MessageFormatter' => array('Symfony\Component\VarDumper\Caster\IntlCaster', 'castMessageFormatter'),
+ 'NumberFormatter' => array('Symfony\Component\VarDumper\Caster\IntlCaster', 'castNumberFormatter'),
':curl' => array('Symfony\Component\VarDumper\Caster\ResourceCaster', 'castCurl'),
':dba' => array('Symfony\Component\VarDumper\Caster\ResourceCaster', 'castDba'),
diff --git a/src/Symfony/Component/VarDumper/Tests/Caster/IntlCasterTest.php b/src/Symfony/Component/VarDumper/Tests/Caster/IntlCasterTest.php
index cfa611085c7c8..fc47330460e2e 100644
--- a/src/Symfony/Component/VarDumper/Tests/Caster/IntlCasterTest.php
+++ b/src/Symfony/Component/VarDumper/Tests/Caster/IntlCasterTest.php
@@ -21,7 +21,7 @@ class IntlCasterTest extends TestCase
{
use VarDumperTestTrait;
- public function testArrayIterator()
+ public function testMessageFormatter()
{
$var = new \MessageFormatter('en', 'Hello {name}');
@@ -30,6 +30,123 @@ public function testArrayIterator()
locale: "en"
pattern: "Hello {name}"
}
+EOTXT;
+ $this->assertDumpEquals($expected, $var);
+ }
+
+ public function testCastNumberFormatter()
+ {
+ $var = new \NumberFormatter('en', \NumberFormatter::DECIMAL);
+
+ $expectedLocale = $var->getLocale();
+ $expectedPattern = $var->getPattern();
+
+ $expectedAttribute1 = $var->getAttribute(\NumberFormatter::PARSE_INT_ONLY);
+ $expectedAttribute2 = $var->getAttribute(\NumberFormatter::GROUPING_USED);
+ $expectedAttribute3 = $var->getAttribute(\NumberFormatter::DECIMAL_ALWAYS_SHOWN);
+ $expectedAttribute4 = $var->getAttribute(\NumberFormatter::MAX_INTEGER_DIGITS);
+ $expectedAttribute5 = $var->getAttribute(\NumberFormatter::MIN_INTEGER_DIGITS);
+ $expectedAttribute6 = $var->getAttribute(\NumberFormatter::INTEGER_DIGITS);
+ $expectedAttribute7 = $var->getAttribute(\NumberFormatter::MAX_FRACTION_DIGITS);
+ $expectedAttribute8 = $var->getAttribute(\NumberFormatter::MIN_FRACTION_DIGITS);
+ $expectedAttribute9 = $var->getAttribute(\NumberFormatter::FRACTION_DIGITS);
+ $expectedAttribute10 = $var->getAttribute(\NumberFormatter::MULTIPLIER);
+ $expectedAttribute11 = $var->getAttribute(\NumberFormatter::GROUPING_SIZE);
+ $expectedAttribute12 = $var->getAttribute(\NumberFormatter::ROUNDING_MODE);
+ $expectedAttribute13 = number_format($var->getAttribute(\NumberFormatter::ROUNDING_INCREMENT), 1);
+ $expectedAttribute14 = $var->getAttribute(\NumberFormatter::FORMAT_WIDTH);
+ $expectedAttribute15 = $var->getAttribute(\NumberFormatter::PADDING_POSITION);
+ $expectedAttribute16 = $var->getAttribute(\NumberFormatter::SECONDARY_GROUPING_SIZE);
+ $expectedAttribute17 = $var->getAttribute(\NumberFormatter::SIGNIFICANT_DIGITS_USED);
+ $expectedAttribute18 = $var->getAttribute(\NumberFormatter::MIN_SIGNIFICANT_DIGITS);
+ $expectedAttribute19 = $var->getAttribute(\NumberFormatter::MAX_SIGNIFICANT_DIGITS);
+ $expectedAttribute20 = $var->getAttribute(\NumberFormatter::LENIENT_PARSE);
+
+ $expectedTextAttribute1 = $var->getTextAttribute(\NumberFormatter::POSITIVE_PREFIX);
+ $expectedTextAttribute2 = $var->getTextAttribute(\NumberFormatter::POSITIVE_SUFFIX);
+ $expectedTextAttribute3 = $var->getTextAttribute(\NumberFormatter::NEGATIVE_PREFIX);
+ $expectedTextAttribute4 = $var->getTextAttribute(\NumberFormatter::NEGATIVE_SUFFIX);
+ $expectedTextAttribute5 = $var->getTextAttribute(\NumberFormatter::PADDING_CHARACTER);
+ $expectedTextAttribute6 = $var->getTextAttribute(\NumberFormatter::CURRENCY_CODE);
+ $expectedTextAttribute7 = $var->getTextAttribute(\NumberFormatter::DEFAULT_RULESET) ? 'true' : 'false';
+ $expectedTextAttribute8 = $var->getTextAttribute(\NumberFormatter::PUBLIC_RULESETS) ? 'true' : 'false';
+
+ $expectedSymbol1 = $var->getSymbol(\NumberFormatter::DECIMAL_SEPARATOR_SYMBOL);
+ $expectedSymbol2 = $var->getSymbol(\NumberFormatter::GROUPING_SEPARATOR_SYMBOL);
+ $expectedSymbol3 = $var->getSymbol(\NumberFormatter::PATTERN_SEPARATOR_SYMBOL);
+ $expectedSymbol4 = $var->getSymbol(\NumberFormatter::PERCENT_SYMBOL);
+ $expectedSymbol5 = $var->getSymbol(\NumberFormatter::ZERO_DIGIT_SYMBOL);
+ $expectedSymbol6 = $var->getSymbol(\NumberFormatter::DIGIT_SYMBOL);
+ $expectedSymbol7 = $var->getSymbol(\NumberFormatter::MINUS_SIGN_SYMBOL);
+ $expectedSymbol8 = $var->getSymbol(\NumberFormatter::PLUS_SIGN_SYMBOL);
+ $expectedSymbol9 = $var->getSymbol(\NumberFormatter::CURRENCY_SYMBOL);
+ $expectedSymbol10 = $var->getSymbol(\NumberFormatter::INTL_CURRENCY_SYMBOL);
+ $expectedSymbol11 = $var->getSymbol(\NumberFormatter::MONETARY_SEPARATOR_SYMBOL);
+ $expectedSymbol12 = $var->getSymbol(\NumberFormatter::EXPONENTIAL_SYMBOL);
+ $expectedSymbol13 = $var->getSymbol(\NumberFormatter::PERMILL_SYMBOL);
+ $expectedSymbol14 = $var->getSymbol(\NumberFormatter::PAD_ESCAPE_SYMBOL);
+ $expectedSymbol15 = $var->getSymbol(\NumberFormatter::INFINITY_SYMBOL);
+ $expectedSymbol16 = $var->getSymbol(\NumberFormatter::NAN_SYMBOL);
+ $expectedSymbol17 = $var->getSymbol(\NumberFormatter::SIGNIFICANT_DIGIT_SYMBOL);
+ $expectedSymbol18 = $var->getSymbol(\NumberFormatter::MONETARY_GROUPING_SEPARATOR_SYMBOL);
+
+ $expected = <<assertDumpEquals($expected, $var);
}