85 lines
3.1 KiB
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,
|
|
);
|
|
});
|
|
}
|
|
}
|
|
}
|