Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 31836ed

Browse files
feature #28566 [VarDumper] add casters for IntlDateFormatter and IntlCalendar (jschaedl)
This PR was squashed before being merged into the 4.2-dev branch (closes #28566). Discussion ---------- [VarDumper] add casters for IntlDateFormatter and IntlCalendar | Q | A | ------------- | --- | Branch? | master | Bug fix? | no | New feature? | yes | BC breaks? | no | Deprecations? | no | Tests pass? | yes | Fixed tickets | #28554 | License | MIT | Doc PR | - Commits ------- ae76c68 [VarDumper] add casters for IntlDateFormatter and IntlCalendar
2 parents c53b687 + ae76c68 commit 31836ed

File tree

3 files changed

+144
-0
lines changed

3 files changed

+144
-0
lines changed

src/Symfony/Component/VarDumper/Caster/IntlCaster.php

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -123,6 +123,40 @@ public static function castIntlTimeZone(\IntlTimeZone $c, array $a, Stub $stub,
123123
return self::castError($c, $a);
124124
}
125125

126+
public static function castIntlCalendar(\IntlCalendar $c, array $a, Stub $stub, $isNested, $filter = 0)
127+
{
128+
$a += array(
129+
Caster::PREFIX_VIRTUAL.'type' => $c->getType(),
130+
Caster::PREFIX_VIRTUAL.'first_day_of_week' => $c->getFirstDayOfWeek(),
131+
Caster::PREFIX_VIRTUAL.'minimal_days_in_first_week' => $c->getMinimalDaysInFirstWeek(),
132+
Caster::PREFIX_VIRTUAL.'repeated_wall_time_option' => $c->getRepeatedWallTimeOption(),
133+
Caster::PREFIX_VIRTUAL.'skipped_wall_time_option' => $c->getSkippedWallTimeOption(),
134+
Caster::PREFIX_VIRTUAL.'time' => $c->getTime(),
135+
Caster::PREFIX_VIRTUAL.'type' => $c->getType(),
136+
Caster::PREFIX_VIRTUAL.'in_daylight_time' => $c->inDaylightTime(),
137+
Caster::PREFIX_VIRTUAL.'is_lenient' => $c->isLenient(),
138+
Caster::PREFIX_VIRTUAL.'time_zone' => ($filter & Caster::EXCLUDE_VERBOSE) ? new CutStub($c->getTimeZone()) : $c->getTimeZone(),
139+
);
140+
141+
return self::castError($c, $a);
142+
}
143+
144+
public static function castIntlDateFormatter(\IntlDateFormatter $c, array $a, Stub $stub, $isNested, $filter = 0)
145+
{
146+
$a += array(
147+
Caster::PREFIX_VIRTUAL.'locale' => $c->getLocale(),
148+
Caster::PREFIX_VIRTUAL.'pattern' => $c->getPattern(),
149+
Caster::PREFIX_VIRTUAL.'calendar' => $c->getCalendar(),
150+
Caster::PREFIX_VIRTUAL.'time_zone_id' => $c->getTimeZoneId(),
151+
Caster::PREFIX_VIRTUAL.'time_type' => $c->getTimeType(),
152+
Caster::PREFIX_VIRTUAL.'date_type' => $c->getDateType(),
153+
Caster::PREFIX_VIRTUAL.'calendar_object' => ($filter & Caster::EXCLUDE_VERBOSE) ? new CutStub($c->getCalendarObject()) : $c->getCalendarObject(),
154+
Caster::PREFIX_VIRTUAL.'time_zone' => ($filter & Caster::EXCLUDE_VERBOSE) ? new CutStub($c->getTimeZone()) : $c->getTimeZone(),
155+
);
156+
157+
return self::castError($c, $a);
158+
}
159+
126160
private static function castError($c, array $a): array
127161
{
128162
if ($errorCode = $c->getErrorCode()) {

src/Symfony/Component/VarDumper/Cloner/AbstractCloner.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -120,6 +120,8 @@ abstract class AbstractCloner implements ClonerInterface
120120
'MessageFormatter' => array('Symfony\Component\VarDumper\Caster\IntlCaster', 'castMessageFormatter'),
121121
'NumberFormatter' => array('Symfony\Component\VarDumper\Caster\IntlCaster', 'castNumberFormatter'),
122122
'IntlTimeZone' => array('Symfony\Component\VarDumper\Caster\IntlCaster', 'castIntlTimeZone'),
123+
'IntlCalendar' => array('Symfony\Component\VarDumper\Caster\IntlCaster', 'castIntlCalendar'),
124+
'IntlDateFormatter' => array('Symfony\Component\VarDumper\Caster\IntlCaster', 'castIntlDateFormatter'),
123125

124126
':curl' => array('Symfony\Component\VarDumper\Caster\ResourceCaster', 'castCurl'),
125127
':dba' => array('Symfony\Component\VarDumper\Caster\ResourceCaster', 'castDba'),

src/Symfony/Component/VarDumper/Tests/Caster/IntlCasterTest.php

Lines changed: 108 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -185,6 +185,114 @@ public function testCastIntlTimeZoneWithoutDST()
185185
id: "$expectedID"
186186
raw_offset: $expectedRawOffset
187187
}
188+
EOTXT;
189+
$this->assertDumpEquals($expected, $var);
190+
}
191+
192+
public function testCastIntlCalendar()
193+
{
194+
$var = \IntlCalendar::createInstance('America/Los_Angeles', 'en');
195+
196+
$expectedType = $var->getType();
197+
$expectedFirstDayOfWeek = $var->getFirstDayOfWeek();
198+
$expectedMinimalDaysInFirstWeek = $var->getMinimalDaysInFirstWeek();
199+
$expectedRepeatedWallTimeOption = $var->getRepeatedWallTimeOption();
200+
$expectedSkippedWallTimeOption = $var->getSkippedWallTimeOption();
201+
$expectedTime = $var->getTime().'.0';
202+
$expectedInDaylightTime = $var->inDaylightTime() ? 'true' : 'false';
203+
$expectedIsLenient = $var->isLenient() ? 'true' : 'false';
204+
205+
$expectedTimeZone = $var->getTimeZone();
206+
$expectedTimeZoneDisplayName = $expectedTimeZone->getDisplayName();
207+
$expectedTimeZoneID = $expectedTimeZone->getID();
208+
$expectedTimeZoneRawOffset = $expectedTimeZone->getRawOffset();
209+
$expectedTimeZoneDSTSavings = $expectedTimeZone->getDSTSavings();
210+
211+
$expected = <<<EOTXT
212+
IntlGregorianCalendar {
213+
type: "$expectedType"
214+
first_day_of_week: $expectedFirstDayOfWeek
215+
minimal_days_in_first_week: $expectedMinimalDaysInFirstWeek
216+
repeated_wall_time_option: $expectedRepeatedWallTimeOption
217+
skipped_wall_time_option: $expectedSkippedWallTimeOption
218+
time: $expectedTime
219+
in_daylight_time: $expectedInDaylightTime
220+
is_lenient: $expectedIsLenient
221+
time_zone: IntlTimeZone {
222+
display_name: "$expectedTimeZoneDisplayName"
223+
id: "$expectedTimeZoneID"
224+
raw_offset: $expectedTimeZoneRawOffset
225+
dst_savings: $expectedTimeZoneDSTSavings
226+
}
227+
}
228+
EOTXT;
229+
$this->assertDumpEquals($expected, $var);
230+
}
231+
232+
public function testCastDateFormatter()
233+
{
234+
$var = new \IntlDateFormatter('en', \IntlDateFormatter::TRADITIONAL, \IntlDateFormatter::TRADITIONAL);
235+
236+
$expectedLocale = $var->getLocale();
237+
$expectedPattern = $var->getPattern();
238+
$expectedCalendar = $var->getCalendar();
239+
$expectedTimeZoneId = $var->getTimeZoneId();
240+
$expectedTimeType = $var->getTimeType();
241+
$expectedDateType = $var->getDateType();
242+
243+
$expectedCalendarObject = $var->getCalendarObject();
244+
$expectedCalendarObjectType = $expectedCalendarObject->getType();
245+
$expectedCalendarObjectFirstDayOfWeek = $expectedCalendarObject->getFirstDayOfWeek();
246+
$expectedCalendarObjectMinimalDaysInFirstWeek = $expectedCalendarObject->getMinimalDaysInFirstWeek();
247+
$expectedCalendarObjectRepeatedWallTimeOption = $expectedCalendarObject->getRepeatedWallTimeOption();
248+
$expectedCalendarObjectSkippedWallTimeOption = $expectedCalendarObject->getSkippedWallTimeOption();
249+
$expectedCalendarObjectTime = $expectedCalendarObject->getTime().'.0';
250+
$expectedCalendarObjectInDaylightTime = $expectedCalendarObject->inDaylightTime() ? 'true' : 'false';
251+
$expectedCalendarObjectIsLenient = $expectedCalendarObject->isLenient() ? 'true' : 'false';
252+
253+
$expectedCalendarObjectTimeZone = $expectedCalendarObject->getTimeZone();
254+
$expectedCalendarObjectTimeZoneDisplayName = $expectedCalendarObjectTimeZone->getDisplayName();
255+
$expectedCalendarObjectTimeZoneID = $expectedCalendarObjectTimeZone->getID();
256+
$expectedCalendarObjectTimeZoneRawOffset = $expectedCalendarObjectTimeZone->getRawOffset();
257+
$expectedCalendarObjectTimeZoneDSTSavings = $expectedCalendarObjectTimeZone->getDSTSavings();
258+
259+
$expectedTimeZone = $var->getTimeZone();
260+
$expectedTimeZoneDisplayName = $expectedTimeZone->getDisplayName();
261+
$expectedTimeZoneID = $expectedTimeZone->getID();
262+
$expectedTimeZoneRawOffset = $expectedTimeZone->getRawOffset();
263+
$expectedTimeZoneDSTSavings = $expectedTimeZone->getDSTSavings();
264+
265+
$expected = <<<EOTXT
266+
IntlDateFormatter {
267+
locale: "$expectedLocale"
268+
pattern: "$expectedPattern"
269+
calendar: $expectedCalendar
270+
time_zone_id: "$expectedTimeZoneId"
271+
time_type: $expectedTimeType
272+
date_type: $expectedDateType
273+
calendar_object: IntlGregorianCalendar {
274+
type: "$expectedCalendarObjectType"
275+
first_day_of_week: $expectedCalendarObjectFirstDayOfWeek
276+
minimal_days_in_first_week: $expectedCalendarObjectMinimalDaysInFirstWeek
277+
repeated_wall_time_option: $expectedCalendarObjectRepeatedWallTimeOption
278+
skipped_wall_time_option: $expectedCalendarObjectSkippedWallTimeOption
279+
time: $expectedCalendarObjectTime
280+
in_daylight_time: $expectedCalendarObjectInDaylightTime
281+
is_lenient: $expectedCalendarObjectIsLenient
282+
time_zone: IntlTimeZone {
283+
display_name: "$expectedCalendarObjectTimeZoneDisplayName"
284+
id: "$expectedCalendarObjectTimeZoneID"
285+
raw_offset: $expectedCalendarObjectTimeZoneRawOffset
286+
dst_savings: $expectedCalendarObjectTimeZoneDSTSavings
287+
}
288+
}
289+
time_zone: IntlTimeZone {
290+
display_name: "$expectedTimeZoneDisplayName"
291+
id: "$expectedTimeZoneID"
292+
raw_offset: $expectedTimeZoneRawOffset
293+
dst_savings: $expectedTimeZoneDSTSavings
294+
}
295+
}
188296
EOTXT;
189297
$this->assertDumpEquals($expected, $var);
190298
}

0 commit comments

Comments
 (0)