@@ -332,18 +332,95 @@ void main() {
332
332
check (find.textContaining (longString).evaluate ()).length.equals (7 );
333
333
});
334
334
335
- test ('assets; ensure the timezone database used to display users\' local time is up-to-date' , () async {
336
- tz.initializeTimeZones ();
337
- final latestTimezones = tz.tzdbSerialize (tz.timeZoneDatabase);
338
-
339
- await UserLocalTimeText .initializeTimezonesUsingAssets ();
340
- final currentTimezones = tz.tzdbSerialize (tz.timeZoneDatabase);
341
-
342
- check (
343
- listEquals (currentTimezones, latestTimezones),
344
- because:
345
- 'the timezone database used to display users\' local time is not up-to-date, please copy `package:timezone/data/latest_all.tzf` to `assets/timezone/latest_all.tzf`' ,
346
- ).isTrue ();
335
+ group ('UserLocalTimeText' , () {
336
+ setUp (() async {
337
+ await UserLocalTimeText .initializeTimezonesUsingAssets ();
338
+ });
339
+
340
+ test ('assets; ensure the timezone database used to display users\' local time is up-to-date' , () async {
341
+ tz.initializeTimeZones ();
342
+ final latestTimezones = tz.tzdbSerialize (tz.timeZoneDatabase);
343
+
344
+ await UserLocalTimeText .initializeTimezonesUsingAssets ();
345
+ final currentTimezones = tz.tzdbSerialize (tz.timeZoneDatabase);
346
+
347
+ check (
348
+ listEquals (currentTimezones, latestTimezones),
349
+ because:
350
+ 'the timezone database used to display users\' local time is not up-to-date, please copy `package:timezone/data/latest_all.tzf` to `assets/timezone/latest_all.tzf`' ,
351
+ ).isTrue ();
352
+ });
353
+
354
+ final testCases = [(
355
+ description: 'simple usecase' ,
356
+ currentTimezone: 'America/Los_Angeles' ,
357
+ currentYear: 2025 , currentMonth: 02 , currentDay: 01 , currentHour: 12 , currentMinute: 00 ,
358
+ userTimezone: 'America/New_York' ,
359
+ equalsTo: '3:00 PM local time'
360
+ ), (
361
+ description: 'abbreviation usecase' ,
362
+ currentTimezone: 'Europe/Brussels' ,
363
+ currentYear: 2025 , currentMonth: 02 , currentDay: 01 , currentHour: 12 , currentMinute: 00 ,
364
+ userTimezone: 'CET' ,
365
+ equalsTo: '12:00 PM local time'
366
+ ), (
367
+ description: 'DST usecase' ,
368
+ currentTimezone: 'Europe/London' ,
369
+ currentYear: 2025 , currentMonth: 08 , currentDay: 01 , currentHour: 12 , currentMinute: 00 ,
370
+ userTimezone: 'UTC' ,
371
+ equalsTo: '11:00 AM local time'
372
+ )
373
+ ];
374
+
375
+ for (
376
+ final (
377
+ : description,
378
+ : currentTimezone,
379
+ : currentYear,
380
+ : currentMonth,
381
+ : currentDay,
382
+ : currentHour,
383
+ : currentMinute, : userTimezone, : equalsTo) in testCases) {
384
+ testWidgets ('page builds; $description ' , (tester) async {
385
+ final currentTime = tz.TZDateTime (
386
+ tz.getLocation (currentTimezone),
387
+ currentYear,
388
+ currentMonth,
389
+ currentDay,
390
+ currentHour,
391
+ currentMinute
392
+ );
393
+ resetTimezones ();
394
+
395
+ await withClock (Clock .fixed (currentTime), () async {
396
+ final user = eg.user (userId: 1 , timezone: userTimezone);
397
+ await setupPage (tester, pageUserId: user.userId, users: [user]);
398
+
399
+ checkUserLocalTimeText (tester).equals (equalsTo);
400
+ });
401
+ });
402
+ }
403
+
404
+ testWidgets ('page builds; keep "current" local time current' , (tester) async {
405
+ withClock (Clock .fixed (tz.TZDateTime (tz.getLocation ('Europe/London' ), 2025 , 02 , 01 , 12 , 00 )), () {
406
+ FakeAsync ().run ((async ) {
407
+ final user = eg.user (userId: 1 , timezone: 'Europe/London' );
408
+ setupPage (tester, pageUserId: user.userId, users: [user]);
409
+ async .flushMicrotasks ();
410
+ checkUserLocalTimeText (tester).equals ('12:00 PM local time' );
411
+
412
+ async .elapse (Duration (minutes: 1 ));
413
+ tester.pumpAndSettle ();
414
+ async .flushMicrotasks ();
415
+ checkUserLocalTimeText (tester).equals ('12:01 PM local time' );
416
+
417
+ async .elapse (Duration (minutes: 1 ));
418
+ tester.pumpAndSettle ();
419
+ async .flushMicrotasks ();
420
+ checkUserLocalTimeText (tester).equals ('12:02 PM local time' );
421
+ });
422
+ });
423
+ });
347
424
});
348
425
});
349
426
}
0 commit comments