bbea1dd364
Co-Authored-By: Claude Code <noreply@anthropic.com>
51 lines
1.8 KiB
Dart
51 lines
1.8 KiB
Dart
/// 相册时区格式化纯逻辑测试(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);
|
||
});
|
||
}
|