@@ -60,7 +60,26 @@ public function testValidTimezones(string $timezone)
60
60
61
61
public function getValidTimezones (): iterable
62
62
{
63
+ // ICU standard (alias/BC in PHP)
64
+ yield ['Etc/UTC ' ];
65
+ yield ['Etc/GMT ' ];
66
+ yield ['America/Buenos_Aires ' ];
67
+
68
+ // PHP standard (alias in ICU)
69
+ yield ['UTC ' ];
63
70
yield ['America/Argentina/Buenos_Aires ' ];
71
+
72
+ // not deprecated in ICU
73
+ yield ['CST6CDT ' ];
74
+ yield ['EST5EDT ' ];
75
+ yield ['MST7MDT ' ];
76
+ yield ['PST8PDT ' ];
77
+ yield ['America/Montreal ' ];
78
+
79
+ // expired in ICU
80
+ yield ['Europe/Saratov ' ];
81
+
82
+ // standard
64
83
yield ['America/Barbados ' ];
65
84
yield ['America/Toronto ' ];
66
85
yield ['Antarctica/Syowa ' ];
@@ -71,7 +90,6 @@ public function getValidTimezones(): iterable
71
90
yield ['Europe/Copenhagen ' ];
72
91
yield ['Europe/Paris ' ];
73
92
yield ['Pacific/Noumea ' ];
74
- yield ['UTC ' ];
75
93
}
76
94
77
95
/**
@@ -90,6 +108,8 @@ public function testValidGroupedTimezones(string $timezone, int $zone)
90
108
91
109
public function getValidGroupedTimezones (): iterable
92
110
{
111
+ yield ['America/Buenos_Aires ' , \DateTimeZone::AMERICA | \DateTimeZone::AUSTRALIA ]; // icu
112
+ yield ['America/Argentina/Buenos_Aires ' , \DateTimeZone::AMERICA ]; // php
93
113
yield ['America/Argentina/Cordoba ' , \DateTimeZone::AMERICA ];
94
114
yield ['America/Barbados ' , \DateTimeZone::AMERICA ];
95
115
yield ['Africa/Cairo ' , \DateTimeZone::AFRICA ];
@@ -124,6 +144,7 @@ public function testInvalidTimezoneWithoutZone(string $timezone)
124
144
125
145
public function getInvalidTimezones (): iterable
126
146
{
147
+ yield ['Buenos_Aires/America ' ];
127
148
yield ['Buenos_Aires/Argentina/America ' ];
128
149
yield ['Mayotte/Indian ' ];
129
150
yield ['foobar ' ];
@@ -149,11 +170,15 @@ public function testInvalidGroupedTimezones(string $timezone, int $zone)
149
170
150
171
public function getInvalidGroupedTimezones (): iterable
151
172
{
173
+ yield ['America/Buenos_Aires ' , \DateTimeZone::ASIA | \DateTimeZone::AUSTRALIA ]; // icu
174
+ yield ['America/Argentina/Buenos_Aires ' , \DateTimeZone::EUROPE ]; // php
152
175
yield ['Antarctica/McMurdo ' , \DateTimeZone::AMERICA ];
153
176
yield ['America/Barbados ' , \DateTimeZone::ANTARCTICA ];
154
177
yield ['Europe/Kiev ' , \DateTimeZone::ARCTIC ];
155
178
yield ['Asia/Ho_Chi_Minh ' , \DateTimeZone::INDIAN ];
156
179
yield ['Asia/Ho_Chi_Minh ' , \DateTimeZone::INDIAN | \DateTimeZone::ANTARCTICA ];
180
+ yield ['UTC ' , \DateTimeZone::EUROPE ];
181
+ yield ['Etc/UTC ' , \DateTimeZone::EUROPE ];
157
182
}
158
183
159
184
/**
@@ -173,6 +198,8 @@ public function testValidGroupedTimezonesByCountry(string $timezone, string $cou
173
198
174
199
public function getValidGroupedTimezonesByCountry (): iterable
175
200
{
201
+ yield ['America/Buenos_Aires ' , 'AR ' ]; // icu
202
+ yield ['America/Argentina/Buenos_Aires ' , 'AR ' ]; // php
176
203
yield ['America/Argentina/Cordoba ' , 'AR ' ];
177
204
yield ['America/Barbados ' , 'BB ' ];
178
205
yield ['Africa/Cairo ' , 'EG ' ];
@@ -215,6 +242,7 @@ public function getInvalidGroupedTimezonesByCountry(): iterable
215
242
yield ['America/Argentina/Cordoba ' , 'FR ' ];
216
243
yield ['America/Barbados ' , 'PT ' ];
217
244
yield ['Europe/Bern ' , 'FR ' ];
245
+ yield ['Etc/UTC ' , 'NL ' ];
218
246
yield ['Europe/Amsterdam ' , 'AC ' ]; // "AC" has no timezones, but is a valid country code
219
247
}
220
248
@@ -267,8 +295,6 @@ public function testDeprecatedTimezonesAreInvalidWithoutBC(string $timezone)
267
295
268
296
public function getDeprecatedTimezones (): iterable
269
297
{
270
- yield ['America/Buenos_Aires ' ];
271
- yield ['America/Montreal ' ];
272
298
yield ['Australia/ACT ' ];
273
299
yield ['Australia/LHI ' ];
274
300
yield ['Australia/Queensland ' ];
@@ -277,13 +303,29 @@ public function getDeprecatedTimezones(): iterable
277
303
yield ['Canada/Mountain ' ];
278
304
yield ['Canada/Pacific ' ];
279
305
yield ['CET ' ];
280
- yield ['CST6CDT ' ];
281
- yield ['Etc/GMT ' ];
306
+ yield ['GMT ' ];
282
307
yield ['Etc/Greenwich ' ];
283
308
yield ['Etc/UCT ' ];
284
309
yield ['Etc/Universal ' ];
285
- yield ['Etc/UTC ' ];
286
310
yield ['Etc/Zulu ' ];
287
311
yield ['US/Pacific ' ];
288
312
}
313
+
314
+ /**
315
+ * @requires extension intl
316
+ */
317
+ public function testIntlCompatibility ()
318
+ {
319
+ $ constraint = new Timezone ([
320
+ 'message ' => 'myMessage ' ,
321
+ 'intlCompatible ' => true ,
322
+ ]);
323
+
324
+ $ this ->validator ->validate ('Europe/Saratov ' , $ constraint );
325
+
326
+ $ this ->buildViolation ('myMessage ' )
327
+ ->setParameter ('{{ value }} ' , '"Europe/Saratov" ' )
328
+ ->setCode (Timezone::TIMEZONE_IDENTIFIER_INTL_ERROR )
329
+ ->assertRaised ();
330
+ }
289
331
}
0 commit comments