/// 相册时区格式化纯逻辑测试(P3 计划 Task 4)。 /// /// 覆盖:UTC 瞬间 → Asia/Shanghai 墙钟展示、无效时区回退 UTC、 /// 墙钟 → UTC 提交往返一致、IANA 时区名校验。 library; import 'package:flutter_test/flutter_test.dart'; import 'package:intl/date_symbol_data_local.dart'; import 'package:photo_live/features/albums/album_format.dart'; void main() { setUpAll(initializeDateFormatting); test('UTC 瞬间按 Asia/Shanghai 展示(intl 格式化)', () { final utc = DateTime.utc(2026, 9, 18, 6, 30); expect(formatAlbumDateTime(utc, 'Asia/Shanghai', 'en'), '2026/9/18 14:30'); }); test('非 Asia/Shanghai 时区亦按各自墙钟展示(America/New_York)', () { final utc = DateTime.utc(2026, 9, 18, 6, 30); // 9 月为纽约夏令时 UTC-4 → 02:30。 expect( formatAlbumDateTime(utc, 'America/New_York', 'en'), '2026/9/18 02:30', ); }); test('无效时区回退 UTC 展示', () { final utc = DateTime.utc(2026, 9, 18, 6, 30); expect(formatAlbumDateTime(utc, 'Mars/Olympus', 'en'), '2026/9/18 06:30'); }); test('墙钟 → UTC 往返一致(表单提交与回显)', () { final naive = DateTime(2026, 9, 18, 14, 30); final utc = albumWallClockToUtc(naive, 'Asia/Shanghai'); expect(utc.toUtc(), DateTime.utc(2026, 9, 18, 6, 30)); final zoned = tryToAlbumZone(utc, 'Asia/Shanghai'); expect(zoned, isNotNull); expect(zoned!.hour, 14); expect(zoned.minute, 30); }); test('isValidTimezone:空/非法拒绝,合法通过', () { expect(isValidTimezone(''), isFalse); expect(isValidTimezone(' '), isFalse); expect(isValidTimezone('Not/AZone'), isFalse); expect(isValidTimezone('Asia/Shanghai'), isTrue); expect(isValidTimezone('UTC'), isTrue); }); }