import 'package:flutter/material.dart'; import 'package:flutter_test/flutter_test.dart'; import 'package:jj_mkvmaker/core/models.dart'; import 'package:jj_mkvmaker/ui/home/log_panel.dart'; import 'package:jj_mkvmaker/ui/home/video_list_view.dart'; /// home_page 를 나눈 모듈의 약속 (실제 위젯으로) void main() { Widget host(Widget w) => MaterialApp(home: Scaffold(body: SizedBox(width: 800, height: 300, child: w))); testWidgets('약속 LogPanel · LogStrip: 새 기록이 맨 아래 · 비면 안내 · ✕ 는 닫기 · 한 줄을 누르면 열기', (t) async { var closed = 0, opened = 0; await t.pumpWidget(host(LogPanel(logs: const [], onClose: () => closed++))); expect(find.textContaining('작업 기록이 아직 없습니다'), findsOneWidget); await t.pumpWidget(host(LogPanel(logs: const ['첫 줄', '둘째 줄'], onClose: () => closed++))); expect(find.textContaining('작업 기록이 아직 없습니다'), findsNothing); expect(t.getTopLeft(find.text('둘째 줄')).dy, greaterThan(t.getTopLeft(find.text('첫 줄')).dy), reason: '거꾸로 쌓아 새 기록이 아래 칸의 맨 아래 (reverse 목록)'); await t.tap(find.byTooltip('작업 기록 숨기기')); expect(closed, 1); await t.pumpWidget(host(LogStrip(last: '마지막 기록', onOpen: () => opened++))); expect(find.text('마지막 기록'), findsOneWidget); await t.tap(find.text('작업 기록 보기')); expect(opened, 1); }); testWidgets('약속 JobStatusIcon: 상태마다 다른 아이콘 (취소는 실패와 다름)', (t) async { final icons = {}; for (final s in JobStatus.values) { await t.pumpWidget(host(JobStatusIcon(s))); icons.add(t.widget(find.byType(Icon)).icon); } expect(icons.length, JobStatus.values.length); }); }