WIP 시험: Total Commander 모양 F8 = 지우기 - 확인 창 [취소] 면 그대로, [휴지통으로] 면 (가짜) 휴지통으로 (28 지적) (검토 대기)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
next3
RyuJongJin 2026-10-19 21:20:36 +09:00
parent cfed8fa355
commit 1396ba41c8
1 changed files with 34 additions and 0 deletions

View File

@ -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);