끝난 이클립스 합류 문구 · HOME 헤더 POP · 다국어 HOME 레이아웃 · 캠페인 표시 수정

This commit is contained in:
Sn-Kinos
2026-10-08 19:00:24 +09:00
parent a74edaef6b
commit 40b2c0e6f6
40 changed files with 1649 additions and 845 deletions
+86
View File
@@ -0,0 +1,86 @@
import 'package:fancake/core/i18n/app_locale.dart';
import 'package:fancake/core/theme/app_theme.dart';
import 'package:fancake/features/home/home_data.dart';
import 'package:fancake/features/home/widgets/home_hero.dart';
import 'package:fancake/features/home/widgets/home_weekly.dart';
import 'package:flutter/material.dart';
import 'package:flutter_localizations/flutter_localizations.dart';
import 'package:flutter_test/flutter_test.dart';
/// 긴 언어(es · ja)에서 HOME 이 깨지지 않는다 — 10/8 r11 실기기(Flip3) 관찰.
void main() {
tearDown(() => appL10n = koL10n);
Future<void> pump(WidgetTester tester, Locale locale, Widget child,
{double width = 360}) async {
tester.view.physicalSize = Size(width * 3, 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: Scaffold(body: child),
));
await tester.pumpAndSettle();
}
const growth = PlanetGrowth(
fandomName: '오로라',
contributorName: 'Kinos',
stage: 2,
contributedPop: 0,
growthPercent: 1,
currentPop: 189,
requiredPop: 16575,
);
testWidgets('es 주간 카드 「Mis POP」 라벨이 한 글자씩 줄바꿈되지 않는다', (tester) async {
final weekly = HomeWeekly.from(
fandomId: 'f',
snapshots: const [],
fandom: const {},
myWeekPop: 250,
wallet: const {'activityBalance': 12130, 'supportBalance': 330},
);
await pump(tester, const Locale('es'), HomeWeeklyCard(weekly: weekly));
expect(tester.takeException(), isNull);
// 한 줄 = 글자 13 × 행간 18/13.
expect(tester.getSize(find.text('Mis POP')).height, 18);
});
testWidgets('es 인사 줄은 「De Kinos」 — 「aporta:」 오역이 아니다', (tester) async {
await pump(tester, const Locale('es'), const HomeHero(growth: growth));
expect(find.text('De '), findsOneWidget);
expect(find.text('Kinos'), findsOneWidget);
expect(find.textContaining('aporta'), findsNothing);
});
testWidgets('es 성장 말풍선이 성장률 글자를 가리지 않는다', (tester) async {
await pump(tester, const Locale('es'), const HomeHero(growth: growth),
width: 540);
final rate = tester.getRect(find.text('Crecimiento del planeta 1%'));
final bubble = tester.getRect(find.text('Ver condiciones'));
expect(bubble.left, greaterThanOrEqualTo(rate.right));
});
testWidgets('ja 제목이 미니맵 아래로 들어가지 않는다', (tester) async {
await pump(
tester,
const Locale('ja'),
const HomeHero(
growth: growth,
miniMap: SizedBox(width: HomeHero.miniMapSize, height: 90),
),
);
expect(tester.takeException(), isNull);
final title = tester.getRect(find.text('みんなで育てるファンダム惑星'));
expect(title.right, lessThanOrEqualTo(360 - HomeHero.miniMapSize));
});
}