import 'package:fancake/core/i18n/app_locale.dart'; import 'package:fancake/core/theme/app_theme.dart'; import 'package:fancake/features/campaign/campaign_detail_screen.dart'; import 'package:fancake/features/home/nebula_create_screen.dart'; import 'package:fancake/features/inside/inside_data.dart'; import 'package:fancake/features/inside/inside_detail_screen.dart'; import 'package:fancake/features/my/my_data.dart'; import 'package:fancake/features/my/my_screen.dart'; import 'package:fancake/features/quest/quest_data.dart'; import 'package:fancake/features/quest/quest_list_screen.dart'; import 'package:fancake/features/station/station_screen.dart'; import 'package:fancake/l10n/app_localizations.dart' show lookupAppLocalizations; import 'package:flutter/material.dart'; import 'package:flutter_localizations/flutter_localizations.dart'; import 'package:flutter_test/flutter_test.dart'; /// 이전한 화면을 ko 가 아닌 언어로 띄워 문구가 바뀌고, 긴 번역에도 레이아웃이 /// 넘치지 않는지(RenderFlex overflow 등) 본다. 폭은 작은 단말(360×800) 기준. void main() { tearDown(() => appL10n = koL10n); final screens = { 'MY': (MyScreen(repository: SampleMyRepository()), (l) => l.myTabActivity), 'QUEST': ( const QuestListScreen(repository: SampleQuestRepository()), (l) => l.questDailyHelp, ), 'STATION': (const StationScreen(), (l) => l.stationSuggest), '성운 생성': (const NebulaCreateScreen(), (l) => l.nebulaHeadline), '캠페인 상세': ( CampaignDetailScreen(campaignId: 'c1', myPop: 1000), (l) => l.campaignFundingStatus, ), 'INSIDE 상세': ( InsideDetailScreen( question: InsideQuestion( id: 'q-0', title: 'Title', body: 'Body', authorName: 'fan', createdAt: DateTime(2026, 9, 1), bountyPop: 500, ), answers: sampleInsideAnswers, ), (l) => l.insideAnswerHint, ), }; for (final locale in const [Locale('en'), Locale('ja')]) { for (final MapEntry(key: name, value: (screen, marker)) in screens.entries) { testWidgets('$name 화면이 ${locale.languageCode} 로 넘침 없이 그려진다', ( tester, ) async { tester.view.physicalSize = const Size(1080, 2400); tester.view.devicePixelRatio = 3; addTearDown(tester.view.reset); await tester.pumpWidget( MaterialApp( theme: buildAppTheme(), locale: locale, supportedLocales: appLocales, localizationsDelegates: const [ RemoteL10nDelegate({}), GlobalMaterialLocalizations.delegate, GlobalWidgetsLocalizations.delegate, GlobalCupertinoLocalizations.delegate, ], home: screen, ), ); await tester.pumpAndSettle(); expect(tester.takeException(), isNull); expect( find.text(marker(lookupAppLocalizations(locale)), findRichText: true), findsWidgets, ); }); } } }