import 'package:flutter/material.dart'; import 'package:flutter_test/flutter_test.dart'; import 'package:patbond_flutter/app/app.dart'; import 'package:patbond_flutter/app/app_localization.dart'; import 'package:patbond_flutter/features/auth/session_manager.dart'; import 'package:shared_preferences/shared_preferences.dart'; import '../helpers/auth_test_helpers.dart'; import '../helpers/community_test_helpers.dart'; import '../helpers/pet_test_helpers.dart'; /// M3.5-01:根 [MaterialApp] 实际挂上 zh-CN 本地化。 /// /// 用户桌面实测反馈「日期选择器全英文」的根因就在这里——delegate 一行没配, /// Material 静默回退英文兜底。本测试守住这一行不被回删。 void main() { testWidgets('MaterialApp 挂三件套 delegate + 单语言 zh-CN', (tester) async { SharedPreferences.setMockInitialValues({}); final session = SessionManager(store: InMemoryTokenStore()) ..markAuthenticated(); await tester.pumpWidget( App( sessionManager: session, authRepository: FakeAuthRepository(), petsRepository: FakePetsRepository(), communityRepository: FakeCommunityRepository() ..onFeed = (_, _) async => feedPage(const []), ), ); await tester.pumpAndSettle(); final app = tester.widget(find.byType(MaterialApp)); expect(app.localizationsDelegates, appLocalizationsDelegates); expect(app.supportedLocales, appSupportedLocales); expect(app.locale, const Locale('zh', 'CN')); // 运行期实际解析出的 Material 文案为中文(不是 Default* 英文兜底)。 final context = tester.element(find.byType(NavigationBar)); final l10n = MaterialLocalizations.of(context); expect(l10n.okButtonLabel, '确定'); expect(l10n.cancelButtonLabel, '取消'); expect(l10n.datePickerHelpText, '选择日期'); expect(l10n.dateInputLabel, '输入日期'); expect(l10n.inputDateModeButtonLabel, '切换到输入模式'); expect(l10n.invalidDateFormatLabel, '格式无效。'); expect(l10n.formatMonthYear(DateTime(2026, 9, 10)), '2026年9月'); }); }