diff --git a/test/explorer_test.dart b/test/explorer_test.dart index d70bf15..da54d9d 100644 --- a/test/explorer_test.dart +++ b/test/explorer_test.dart @@ -26,6 +26,7 @@ import 'package:jj_mkvmaker/ui/storage_page.dart'; import 'package:jj_mkvmaker/ui/path_label.dart'; import 'package:path/path.dart' as p; import 'support/fake_recycle_bin.dart'; +import 'package:jj_mkvmaker/platform/windows/recycle_bin.dart' show recycleBinForTest; /// 다른 앱으로 열기를 기록만 하는 셸 (실제로 프로그램을 띄우지 않게) class _Shell extends NoopShell { @@ -1297,6 +1298,39 @@ void main() { await calm(tester); }); + testWidgets('83 (28 지적): Total Commander 모양 F8 = 지우기 - 확인 창 [취소] 면 그대로, [휴지통으로] 면 휴지통으로', (tester) async { + final bin = recycleBinForTest; + if (bin is! FakeRecycleBin) return markTestSkipped('실제 휴지통 (JJ_TEST_REAL_RECYCLE=1) 에서는 건너뜀'); + if (!Platform.isWindows) return markTestSkipped('휴지통은 Windows 만 (Android 는 앱 휴지통 시험)'); + final victim = File(p.join(left, 'tcdel.txt'))..writeAsStringSync('x'); + c.settings.explorerStyle = 'totalcmd'; + await open(tester); + await settle(tester, () => find.text('tcdel').evaluate().isNotEmpty); + await act(tester, () => tester.tap(find.text('tcdel'))); + await settle(tester, () => false, rounds: 15); + + // F8 → 확인 창 → [취소]: 아무것도 지우지 않음 + await act(tester, () => tester.sendKeyEvent(LogicalKeyboardKey.f8)); + await calm(tester); + expect(find.text('휴지통으로 보내기'), findsOneWidget); + expect(find.widgetWithText(FilledButton, '휴지통으로'), findsOneWidget, reason: '처음 값은 휴지통 (영구 삭제 아님)'); + await tester.tap(find.text('취소').last); + await calm(tester); + expect(victim.existsSync(), isTrue); + expect(bin.items, isEmpty); + + // F8 → [휴지통으로]: 휴지통 길로 (영구 삭제가 아님) + await act(tester, () => tester.sendKeyEvent(LogicalKeyboardKey.f8)); + await calm(tester); + await act(tester, () => tester.tap(find.widgetWithText(FilledButton, '휴지통으로'))); + await settle(tester, () => !victim.existsSync() && find.byType(SnackBar).evaluate().isNotEmpty); + expect(victim.existsSync(), isFalse); + expect(bin.items.keys, [victim.path], reason: '휴지통으로 보냄 (되돌릴 수 있음)'); + expect(File(p.join(left, 'doc.txt')).existsSync(), isTrue, reason: '고른 것만'); + expect(find.text('되돌리기'), findsOneWidget); + await calm(tester); + }); + testWidgets('83: Windows 탐색기 모양 단축키 - Ctrl+A 모두 표시 · Ctrl+C 담기 · Ctrl+V 붙여넣기', (tester) async { c.settings.explorerStyle = 'windows'; await open(tester);