298 lines
13 KiB
PHP
298 lines
13 KiB
PHP
<?php
|
|
|
|
/*
|
|
* This file is part of the Symfony package.
|
|
*
|
|
* (c) Fabien Potencier <fabien@symfony.com>
|
|
*
|
|
* For the full copyright and license information, please view the LICENSE
|
|
* file that was distributed with this source code.
|
|
*/
|
|
|
|
namespace Symfony\Component\VarDumper\Tests\Caster;
|
|
|
|
use PHPUnit\Framework\TestCase;
|
|
use Symfony\Component\VarDumper\Test\VarDumperTestTrait;
|
|
|
|
/**
|
|
* @requires extension intl
|
|
*/
|
|
class IntlCasterTest extends TestCase
|
|
{
|
|
use VarDumperTestTrait;
|
|
|
|
public function testMessageFormatter()
|
|
{
|
|
$var = new \MessageFormatter('en', 'Hello {name}');
|
|
|
|
$expected = <<<EOTXT
|
|
MessageFormatter {
|
|
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 = $this->getDump($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 = $this->getDump($var->getAttribute(\NumberFormatter::MIN_SIGNIFICANT_DIGITS));
|
|
$expectedAttribute19 = $this->getDump($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 = <<<EOTXT
|
|
NumberFormatter {
|
|
locale: "$expectedLocale"
|
|
pattern: "$expectedPattern"
|
|
attributes: {
|
|
PARSE_INT_ONLY: $expectedAttribute1
|
|
GROUPING_USED: $expectedAttribute2
|
|
DECIMAL_ALWAYS_SHOWN: $expectedAttribute3
|
|
MAX_INTEGER_DIGITS: $expectedAttribute4
|
|
MIN_INTEGER_DIGITS: $expectedAttribute5
|
|
INTEGER_DIGITS: $expectedAttribute6
|
|
MAX_FRACTION_DIGITS: $expectedAttribute7
|
|
MIN_FRACTION_DIGITS: $expectedAttribute8
|
|
FRACTION_DIGITS: $expectedAttribute9
|
|
MULTIPLIER: $expectedAttribute10
|
|
GROUPING_SIZE: $expectedAttribute11
|
|
ROUNDING_MODE: $expectedAttribute12
|
|
ROUNDING_INCREMENT: $expectedAttribute13
|
|
FORMAT_WIDTH: $expectedAttribute14
|
|
PADDING_POSITION: $expectedAttribute15
|
|
SECONDARY_GROUPING_SIZE: $expectedAttribute16
|
|
SIGNIFICANT_DIGITS_USED: $expectedAttribute17
|
|
MIN_SIGNIFICANT_DIGITS: $expectedAttribute18
|
|
MAX_SIGNIFICANT_DIGITS: $expectedAttribute19
|
|
LENIENT_PARSE: $expectedAttribute20
|
|
}
|
|
text_attributes: {
|
|
POSITIVE_PREFIX: "$expectedTextAttribute1"
|
|
POSITIVE_SUFFIX: "$expectedTextAttribute2"
|
|
NEGATIVE_PREFIX: "$expectedTextAttribute3"
|
|
NEGATIVE_SUFFIX: "$expectedTextAttribute4"
|
|
PADDING_CHARACTER: "$expectedTextAttribute5"
|
|
CURRENCY_CODE: "$expectedTextAttribute6"
|
|
DEFAULT_RULESET: $expectedTextAttribute7
|
|
PUBLIC_RULESETS: $expectedTextAttribute8
|
|
}
|
|
symbols: {
|
|
DECIMAL_SEPARATOR_SYMBOL: "$expectedSymbol1"
|
|
GROUPING_SEPARATOR_SYMBOL: "$expectedSymbol2"
|
|
PATTERN_SEPARATOR_SYMBOL: "$expectedSymbol3"
|
|
PERCENT_SYMBOL: "$expectedSymbol4"
|
|
ZERO_DIGIT_SYMBOL: "$expectedSymbol5"
|
|
DIGIT_SYMBOL: "$expectedSymbol6"
|
|
MINUS_SIGN_SYMBOL: "$expectedSymbol7"
|
|
PLUS_SIGN_SYMBOL: "$expectedSymbol8"
|
|
CURRENCY_SYMBOL: "$expectedSymbol9"
|
|
INTL_CURRENCY_SYMBOL: "$expectedSymbol10"
|
|
MONETARY_SEPARATOR_SYMBOL: "$expectedSymbol11"
|
|
EXPONENTIAL_SYMBOL: "$expectedSymbol12"
|
|
PERMILL_SYMBOL: "$expectedSymbol13"
|
|
PAD_ESCAPE_SYMBOL: "$expectedSymbol14"
|
|
INFINITY_SYMBOL: "$expectedSymbol15"
|
|
NAN_SYMBOL: "$expectedSymbol16"
|
|
SIGNIFICANT_DIGIT_SYMBOL: "$expectedSymbol17"
|
|
MONETARY_GROUPING_SEPARATOR_SYMBOL: "$expectedSymbol18"
|
|
}
|
|
}
|
|
EOTXT;
|
|
$this->assertDumpEquals($expected, $var);
|
|
}
|
|
|
|
public function testCastIntlTimeZoneWithDST()
|
|
{
|
|
$var = \IntlTimeZone::createTimeZone('America/Los_Angeles');
|
|
|
|
$expectedDisplayName = $var->getDisplayName();
|
|
$expectedDSTSavings = $var->getDSTSavings();
|
|
$expectedID = $var->getID();
|
|
$expectedRawOffset = $var->getRawOffset();
|
|
|
|
$expected = <<<EOTXT
|
|
IntlTimeZone {
|
|
display_name: "$expectedDisplayName"
|
|
id: "$expectedID"
|
|
raw_offset: $expectedRawOffset
|
|
dst_savings: $expectedDSTSavings
|
|
}
|
|
EOTXT;
|
|
$this->assertDumpEquals($expected, $var);
|
|
}
|
|
|
|
public function testCastIntlTimeZoneWithoutDST()
|
|
{
|
|
$var = \IntlTimeZone::createTimeZone('Asia/Bangkok');
|
|
|
|
$expectedDisplayName = $var->getDisplayName();
|
|
$expectedID = $var->getID();
|
|
$expectedRawOffset = $var->getRawOffset();
|
|
|
|
$expected = <<<EOTXT
|
|
IntlTimeZone {
|
|
display_name: "$expectedDisplayName"
|
|
id: "$expectedID"
|
|
raw_offset: $expectedRawOffset
|
|
}
|
|
EOTXT;
|
|
$this->assertDumpEquals($expected, $var);
|
|
}
|
|
|
|
public function testCastIntlCalendar()
|
|
{
|
|
$var = \IntlCalendar::createInstance('America/Los_Angeles', 'en');
|
|
|
|
$expectedType = $var->getType();
|
|
$expectedFirstDayOfWeek = $var->getFirstDayOfWeek();
|
|
$expectedMinimalDaysInFirstWeek = $var->getMinimalDaysInFirstWeek();
|
|
$expectedRepeatedWallTimeOption = $var->getRepeatedWallTimeOption();
|
|
$expectedSkippedWallTimeOption = $var->getSkippedWallTimeOption();
|
|
$expectedTime = $var->getTime().'.0';
|
|
$expectedInDaylightTime = $var->inDaylightTime() ? 'true' : 'false';
|
|
$expectedIsLenient = $var->isLenient() ? 'true' : 'false';
|
|
|
|
$expectedTimeZone = $var->getTimeZone();
|
|
$expectedTimeZoneDisplayName = $expectedTimeZone->getDisplayName();
|
|
$expectedTimeZoneID = $expectedTimeZone->getID();
|
|
$expectedTimeZoneRawOffset = $expectedTimeZone->getRawOffset();
|
|
$expectedTimeZoneDSTSavings = $expectedTimeZone->getDSTSavings();
|
|
|
|
$expected = <<<EOTXT
|
|
IntlGregorianCalendar {
|
|
type: "$expectedType"
|
|
first_day_of_week: $expectedFirstDayOfWeek
|
|
minimal_days_in_first_week: $expectedMinimalDaysInFirstWeek
|
|
repeated_wall_time_option: $expectedRepeatedWallTimeOption
|
|
skipped_wall_time_option: $expectedSkippedWallTimeOption
|
|
time: $expectedTime
|
|
in_daylight_time: $expectedInDaylightTime
|
|
is_lenient: $expectedIsLenient
|
|
time_zone: IntlTimeZone {
|
|
display_name: "$expectedTimeZoneDisplayName"
|
|
id: "$expectedTimeZoneID"
|
|
raw_offset: $expectedTimeZoneRawOffset
|
|
dst_savings: $expectedTimeZoneDSTSavings
|
|
}
|
|
}
|
|
EOTXT;
|
|
$this->assertDumpEquals($expected, $var);
|
|
}
|
|
|
|
public function testCastDateFormatter()
|
|
{
|
|
$var = new \IntlDateFormatter('en', \IntlDateFormatter::TRADITIONAL, \IntlDateFormatter::TRADITIONAL);
|
|
|
|
$expectedLocale = $var->getLocale();
|
|
$expectedPattern = $var->getPattern();
|
|
$expectedCalendar = $var->getCalendar();
|
|
$expectedTimeZoneId = $var->getTimeZoneId();
|
|
$expectedTimeType = $var->getTimeType();
|
|
$expectedDateType = $var->getDateType();
|
|
|
|
$expectedTimeZone = $var->getTimeZone();
|
|
$expectedTimeZoneDisplayName = $expectedTimeZone->getDisplayName();
|
|
$expectedTimeZoneID = $expectedTimeZone->getID();
|
|
$expectedTimeZoneRawOffset = $expectedTimeZone->getRawOffset();
|
|
$expectedTimeZoneDSTSavings = $expectedTimeZone->useDaylightTime() ? "\n dst_savings: ".$expectedTimeZone->getDSTSavings() : '';
|
|
|
|
$expectedCalendarObject = $var->getCalendarObject();
|
|
$expectedCalendarObjectType = $expectedCalendarObject->getType();
|
|
$expectedCalendarObjectFirstDayOfWeek = $expectedCalendarObject->getFirstDayOfWeek();
|
|
$expectedCalendarObjectMinimalDaysInFirstWeek = $expectedCalendarObject->getMinimalDaysInFirstWeek();
|
|
$expectedCalendarObjectRepeatedWallTimeOption = $expectedCalendarObject->getRepeatedWallTimeOption();
|
|
$expectedCalendarObjectSkippedWallTimeOption = $expectedCalendarObject->getSkippedWallTimeOption();
|
|
$expectedCalendarObjectTime = $expectedCalendarObject->getTime().'.0';
|
|
$expectedCalendarObjectInDaylightTime = $expectedCalendarObject->inDaylightTime() ? 'true' : 'false';
|
|
$expectedCalendarObjectIsLenient = $expectedCalendarObject->isLenient() ? 'true' : 'false';
|
|
|
|
$expectedCalendarObjectTimeZone = $expectedCalendarObject->getTimeZone();
|
|
$expectedCalendarObjectTimeZoneDisplayName = $expectedCalendarObjectTimeZone->getDisplayName();
|
|
$expectedCalendarObjectTimeZoneID = $expectedCalendarObjectTimeZone->getID();
|
|
$expectedCalendarObjectTimeZoneRawOffset = $expectedCalendarObjectTimeZone->getRawOffset();
|
|
$expectedCalendarObjectTimeZoneDSTSavings = $expectedTimeZone->useDaylightTime() ? "\n dst_savings: ".$expectedCalendarObjectTimeZone->getDSTSavings() : '';
|
|
|
|
$expected = <<<EOTXT
|
|
IntlDateFormatter {
|
|
locale: "$expectedLocale"
|
|
pattern: "$expectedPattern"
|
|
calendar: $expectedCalendar
|
|
time_zone_id: "$expectedTimeZoneId"
|
|
time_type: $expectedTimeType
|
|
date_type: $expectedDateType
|
|
calendar_object: IntlGregorianCalendar {
|
|
type: "$expectedCalendarObjectType"
|
|
first_day_of_week: $expectedCalendarObjectFirstDayOfWeek
|
|
minimal_days_in_first_week: $expectedCalendarObjectMinimalDaysInFirstWeek
|
|
repeated_wall_time_option: $expectedCalendarObjectRepeatedWallTimeOption
|
|
skipped_wall_time_option: $expectedCalendarObjectSkippedWallTimeOption
|
|
time: $expectedCalendarObjectTime
|
|
in_daylight_time: $expectedCalendarObjectInDaylightTime
|
|
is_lenient: $expectedCalendarObjectIsLenient
|
|
time_zone: IntlTimeZone {
|
|
display_name: "$expectedCalendarObjectTimeZoneDisplayName"
|
|
id: "$expectedCalendarObjectTimeZoneID"
|
|
raw_offset: $expectedCalendarObjectTimeZoneRawOffset$expectedCalendarObjectTimeZoneDSTSavings
|
|
}
|
|
}
|
|
time_zone: IntlTimeZone {
|
|
display_name: "$expectedTimeZoneDisplayName"
|
|
id: "$expectedTimeZoneID"
|
|
raw_offset: $expectedTimeZoneRawOffset$expectedTimeZoneDSTSavings
|
|
}
|
|
}
|
|
EOTXT;
|
|
$this->assertDumpEquals($expected, $var);
|
|
}
|
|
}
|