import 'package:flutter/material.dart'; import 'package:flutter_test/flutter_test.dart'; import 'package:jj_mkvmaker/core/sync_preview.dart'; import 'package:jj_mkvmaker/ui/sync_preview_view.dart'; /// 211: 미리 보기에서 덮어쓰는 것 (내용이 다른 같은 이름) 을 눈에 띄게 void main() { testWidgets('211: 덮어쓸 것이 있으면 "덮어씀 n" · 주황 경고 줄 · 목록에 (덮어씀)', (tester) async { await tester.pumpWidget(MaterialApp( home: Scaffold( body: SyncPreviewView( compute: () async => const [ PreviewItem('new.txt', PreviewAction.add, toRight: true, size: 3), PreviewItem('diff.txt', PreviewAction.update, toRight: true, size: 5), ], ), ), )); await tester.pumpAndSettle(); expect(find.text('→ 새로 1 · 덮어씀 1'), findsOneWidget); expect(find.text('받는 쪽에서 1개를 덮어씁니다 (내용이 다른 같은 이름 - 원래 것은 없어짐)'), findsOneWidget); expect(find.textContaining('~ diff.txt'), findsOneWidget); expect(find.textContaining('(덮어씀)'), findsOneWidget); }); testWidgets('211: 덮어쓸 것이 없으면 경고 줄 없음', (tester) async { await tester.pumpWidget(MaterialApp( home: Scaffold( body: SyncPreviewView(compute: () async => const [PreviewItem('new.txt', PreviewAction.add, toRight: true, size: 3)]), ), )); await tester.pumpAndSettle(); expect(find.textContaining('덮어씁니다'), findsNothing); }); testWidgets('229: 받는 쪽이 더 새것 - 건너뛰면 "(건너뜀)", 덮어쓰게 되면 따로 굵게 경고', (tester) async { await tester.pumpWidget(MaterialApp( home: Scaffold( body: SyncPreviewView( compute: () async => const [ PreviewItem('skip.txt', PreviewAction.skipNewer, toRight: true, size: 3), PreviewItem('older.txt', PreviewAction.update, toRight: true, size: 13, newer: true), ], ), ), )); await tester.pumpAndSettle(); expect(find.textContaining('받는 쪽이 더 새것 1 (건너뜀)'), findsOneWidget); expect(find.text('그중 1개는 받는 쪽이 더 새것입니다 - 더 새 파일을 예전 것으로 덮어씁니다'), findsOneWidget); expect(find.textContaining('(더 새 파일을 덮어씀)'), findsOneWidget); expect(find.textContaining('(받는 쪽이 더 새것 - 건너뜀)'), findsOneWidget); }); test('28 확인 (10/20): keepOptionsTogether - 글 안의 옵션 덩어리만 묶고 (괄호째 · 따로 쓴 것) 나머지는 그대로', () { const wj = '\u2060', nb = '\u00A0'; expect(keepOptionsTogether('원본 파일 지우기 (--remove-source-files)'), '원본 파일 지우기 (-$wj-${wj}remove-${wj}source-${wj}files)'); expect(keepOptionsTogether('Delete source files (--remove-source-files)'), 'Delete source files (-$wj-${wj}remove-${wj}source-${wj}files)', reason: '앞 글의 빈칸은 그대로 (거기서는 줄을 바꿀 수 있음)'); expect(keepOptionsTogether('지워집니다 (--delete, 되돌릴 수 없음)'), '지워집니다 (-$wj-${wj}delete,$nb되돌릴$nb수$nb없음)'); expect(keepOptionsTogether('rsync --delete · robocopy /PURGE. 끄면'), 'rsync -$wj-${wj}delete · robocopy /${wj}PURGE. 끄면'); expect(keepOptionsTogether('(rsync 의 -u, robocopy 의 /XO 와 같음)'), '(rsync 의 -${wj}u, robocopy 의 /${wj}XO 와 같음)'); // 낱말 가운데의 - · / 는 그대로 (real-time · a/b) expect(keepOptionsTogether('real-time 동기화 · a/b · WebDAV'), 'real-time 동기화 · a/b · WebDAV'); }); }