Files
fanuzu/app/test/i18n_smoke_test.dart

85 lines
3.1 KiB
Dart

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 = <String, (Widget, String Function(AppLocalizations))>{
'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,
);
});
}
}
}