diff --git a/src/app.rs b/src/app.rs index 1405059..a250898 100644 --- a/src/app.rs +++ b/src/app.rs @@ -34,6 +34,7 @@ where display: Display, event_sender: SyncSender, ui_effects: UiEffects, + delete_confirmation_disabled: bool, } impl App @@ -45,6 +46,7 @@ where path_in_filesystem: PathBuf, event_sender: SyncSender, show_apparent_size: bool, + disable_delete_confirmation: bool, ) -> Self { let display = Display::new(terminal_backend); let board = Board::new(&Folder::new(&path_in_filesystem)); @@ -65,6 +67,7 @@ where ui_mode: UiMode::Loading, event_sender, ui_effects, + delete_confirmation_disabled: disable_delete_confirmation, } } pub fn start(&mut self, receiver: Receiver) { @@ -213,8 +216,16 @@ where } pub fn prompt_file_deletion(&mut self) { if let Some(file_to_delete) = self.get_file_to_delete() { - self.ui_mode = UiMode::DeleteFile(file_to_delete); - self.render(); + self.ui_mode = UiMode::DeleteFile(file_to_delete.clone()); + + if self.delete_confirmation_disabled { + // Here we just delete the file. + // As we have set the UI mode above we will get the deletion in progress message box instead of the prompt. + self.delete_file(&file_to_delete); + } else { + // Here we will render which will display the confirmation prompt + self.render(); + } } } pub fn normal_mode(&mut self) { diff --git a/src/main.rs b/src/main.rs index e5ac3b5..aeccf34 100644 --- a/src/main.rs +++ b/src/main.rs @@ -52,6 +52,9 @@ pub struct Opt { #[structopt(short, long)] /// Show file sizes rather than their block usage on disk apparent_size: bool, + #[structopt(short, long)] + /// Don't ask for confirmation before deleting + disable_delete_confirmation: bool, } fn main() { @@ -79,6 +82,7 @@ fn try_main() -> Result<(), failure::Error> { Box::new(keyboard_events), folder, opts.apparent_size, + opts.disable_delete_confirmation, ); } Err(_) => failure::bail!("Failed to get stdout: are you trying to pipe 'diskonaut'?"), @@ -91,6 +95,7 @@ pub fn start( keyboard_events: Box + Send>, path: PathBuf, show_apparent_size: bool, + disable_delete_confirmation: bool, ) where B: Backend + Send + 'static, { @@ -231,7 +236,13 @@ pub fn start( ); } - let mut app = App::new(terminal_backend, path, event_sender, show_apparent_size); + let mut app = App::new( + terminal_backend, + path, + event_sender, + show_apparent_size, + disable_delete_confirmation, + ); app.start(instruction_receiver); running.store(false, Ordering::Release); cleanup(); diff --git a/src/tests/cases/snapshots/diskonaut__tests__cases__ui__delete_file_no_confirmation-2.snap b/src/tests/cases/snapshots/diskonaut__tests__cases__ui__delete_file_no_confirmation-2.snap new file mode 100644 index 0000000..2aca1d5 --- /dev/null +++ b/src/tests/cases/snapshots/diskonaut__tests__cases__ui__delete_file_no_confirmation-2.snap @@ -0,0 +1,55 @@ +--- +source: src/tests/cases/ui.rs +expression: "&terminal_draw_events_mirror[1]" +--- + + + █████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████ + █████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████ + █████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████ + █████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████ + █████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████ + █████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████ + █████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████ + █████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████ + █████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████ + ████████████████████████████████████████████████████████████file2████████████████████████████████████████████████████████████ + █████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████ + █████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████ + █████████████████████████████████████████████████████████4.0K (33%)██████████████████████████████████████████████████████████ + █████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████ + █████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████ + █████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████ + █████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████ + █████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████ + █████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████ + █████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████ + █████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████ + █████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████ + + + + + + + + + + + + + + + + + + + + + + + + + SELECTED: file2 (4.0K) + + diff --git a/src/tests/cases/snapshots/diskonaut__tests__cases__ui__delete_file_no_confirmation-3.snap b/src/tests/cases/snapshots/diskonaut__tests__cases__ui__delete_file_no_confirmation-3.snap new file mode 100644 index 0000000..6b6809a --- /dev/null +++ b/src/tests/cases/snapshots/diskonaut__tests__cases__ui__delete_file_no_confirmation-3.snap @@ -0,0 +1,55 @@ +--- +source: src/tests/cases/ui.rs +expression: "&terminal_draw_events_mirror[2]" +--- + + + + + + + + + + + + + + + + + + + + + ┌─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐ + │ │ + │ │ + │ │ + │ Deleting │ + │ │ + │ /tmp/diskonaut_tests/delete_file_no_confirmation/file2 │ + │ │ + │ │ + │ │ + └─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘ + + + + + + + + + + + + + + + + + + + + diff --git a/src/tests/cases/snapshots/diskonaut__tests__cases__ui__delete_file_no_confirmation-4.snap b/src/tests/cases/snapshots/diskonaut__tests__cases__ui__delete_file_no_confirmation-4.snap new file mode 100644 index 0000000..0a955ff --- /dev/null +++ b/src/tests/cases/snapshots/diskonaut__tests__cases__ui__delete_file_no_confirmation-4.snap @@ -0,0 +1,55 @@ +--- +source: src/tests/cases/ui.rs +expression: "&terminal_draw_events_mirror[3]" +--- + 8.0K (3 files), fre d: 4.0K | /tmp/diskonau _te ts/d l te_file_no_confirmation + ─ + + + + + + + + + + file3 + + + 4.0K (50%) + + + + + + + + + + ─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┤ + + + + + + + + + + subfolder1/ (+1 descendants) + + + 4.0K (50%) + + + + + + + + + + ─ + + + diff --git a/src/tests/cases/snapshots/diskonaut__tests__cases__ui__delete_file_no_confirmation-5.snap b/src/tests/cases/snapshots/diskonaut__tests__cases__ui__delete_file_no_confirmation-5.snap new file mode 100644 index 0000000..aa53557 --- /dev/null +++ b/src/tests/cases/snapshots/diskonaut__tests__cases__ui__delete_file_no_confirmation-5.snap @@ -0,0 +1,55 @@ +--- +source: src/tests/cases/ui.rs +expression: "&terminal_draw_events_mirror[4]" +--- + Total: 8.0K (3 files), freed: 4.0K + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/tests/cases/snapshots/diskonaut__tests__cases__ui__delete_file_no_confirmation-6.snap b/src/tests/cases/snapshots/diskonaut__tests__cases__ui__delete_file_no_confirmation-6.snap new file mode 100644 index 0000000..5ca8d5b --- /dev/null +++ b/src/tests/cases/snapshots/diskonaut__tests__cases__ui__delete_file_no_confirmation-6.snap @@ -0,0 +1,55 @@ +--- +source: src/tests/cases/ui.rs +expression: "&terminal_draw_events_mirror[5]" +--- + Total: 8.0K (3 files), freed: 4.0K + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/tests/cases/snapshots/diskonaut__tests__cases__ui__delete_file_no_confirmation-7.snap b/src/tests/cases/snapshots/diskonaut__tests__cases__ui__delete_file_no_confirmation-7.snap new file mode 100644 index 0000000..66c1ca8 --- /dev/null +++ b/src/tests/cases/snapshots/diskonaut__tests__cases__ui__delete_file_no_confirmation-7.snap @@ -0,0 +1,55 @@ +--- +source: src/tests/cases/ui.rs +expression: "&terminal_draw_events_mirror[6]" +--- + + + + + + + + + + + + + + + + + + + + + ┌─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐ + │ │ + │ │ + │ Are you sure you want to quit? │ + │ │ + │ │ + │ │ + │ │ + │ (y/n) │ + │ │ + └─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘ + + + + + + + + + + + + + + + + + + + + diff --git a/src/tests/cases/snapshots/diskonaut__tests__cases__ui__delete_file_no_confirmation.snap b/src/tests/cases/snapshots/diskonaut__tests__cases__ui__delete_file_no_confirmation.snap new file mode 100644 index 0000000..b6b5f1e --- /dev/null +++ b/src/tests/cases/snapshots/diskonaut__tests__cases__ui__delete_file_no_confirmation.snap @@ -0,0 +1,55 @@ +--- +source: src/tests/cases/ui.rs +expression: "&terminal_draw_events_mirror[0]" +--- + Total: 12.0K (4 files), freed: 0 | /tmp/diskonaut_tests/delete_file_no_confirmation +┌─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┬──────────────────────────────────────────────────────────────┐ +│ │ │ +│ │ │ +│ │ │ +│ │ │ +│ │ │ +│ │ │ +│ │ │ +│ │ │ +│ │ │ +│ file2 │ │ +│ │ │ +│ │ │ +│ 4.0K (33%) │ │ +│ │ │ +│ │ │ +│ │ │ +│ │ │ +│ │ │ +│ │ │ +│ │ │ +│ │ │ +│ │ subfolder1/ (+1 descendants) │ +├─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┤ │ +│ │ 4.0K (33%) │ +│ │ │ +│ │ │ +│ │ │ +│ │ │ +│ │ │ +│ │ │ +│ │ │ +│ │ │ +│ file3 │ │ +│ │ │ +│ │ │ +│ 4.0K (33%) │ │ +│ │ │ +│ │ │ +│ │ │ +│ │ │ +│ │ │ +│ │ │ +│ │ │ +│ │ │ +│ │ │ +└─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┴──────────────────────────────────────────────────────────────┘ + (x = Small files) + - move around, - enter folder, - parent folder, - delete, <+/-/0> - zoom in/out/reset, - quit + diff --git a/src/tests/cases/snapshots/diskonaut__tests__cases__ui__delete_folder_no_confirmation-2.snap b/src/tests/cases/snapshots/diskonaut__tests__cases__ui__delete_folder_no_confirmation-2.snap new file mode 100644 index 0000000..2aca1d5 --- /dev/null +++ b/src/tests/cases/snapshots/diskonaut__tests__cases__ui__delete_folder_no_confirmation-2.snap @@ -0,0 +1,55 @@ +--- +source: src/tests/cases/ui.rs +expression: "&terminal_draw_events_mirror[1]" +--- + + + █████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████ + █████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████ + █████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████ + █████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████ + █████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████ + █████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████ + █████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████ + █████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████ + █████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████ + ████████████████████████████████████████████████████████████file2████████████████████████████████████████████████████████████ + █████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████ + █████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████ + █████████████████████████████████████████████████████████4.0K (33%)██████████████████████████████████████████████████████████ + █████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████ + █████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████ + █████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████ + █████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████ + █████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████ + █████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████ + █████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████ + █████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████ + █████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████ + + + + + + + + + + + + + + + + + + + + + + + + + SELECTED: file2 (4.0K) + + diff --git a/src/tests/cases/snapshots/diskonaut__tests__cases__ui__delete_folder_no_confirmation-3.snap b/src/tests/cases/snapshots/diskonaut__tests__cases__ui__delete_folder_no_confirmation-3.snap new file mode 100644 index 0000000..257a4ef --- /dev/null +++ b/src/tests/cases/snapshots/diskonaut__tests__cases__ui__delete_folder_no_confirmation-3.snap @@ -0,0 +1,55 @@ +--- +source: src/tests/cases/ui.rs +expression: "&terminal_draw_events_mirror[2]" +--- + + + ██████████████████████████████████████████████████████████████ + ██████████████████████████████████████████████████████████████ + ██████████████████████████████████████████████████████████████ + ██████████████████████████████████████████████████████████████ + ██████████████████████████████████████████████████████████████ + ██████████████████████████████████████████████████████████████ + ██████████████████████████████████████████████████████████████ + ██████████████████████████████████████████████████████████████ + ██████████████████████████████████████████████████████████████ + file2 ██████████████████████████████████████████████████████████████ + ██████████████████████████████████████████████████████████████ + ██████████████████████████████████████████████████████████████ + 4.0K (33%) ██████████████████████████████████████████████████████████████ + ██████████████████████████████████████████████████████████████ + ██████████████████████████████████████████████████████████████ + ██████████████████████████████████████████████████████████████ + ██████████████████████████████████████████████████████████████ + ██████████████████████████████████████████████████████████████ + ██████████████████████████████████████████████████████████████ + ██████████████████████████████████████████████████████████████ + ██████████████████████████████████████████████████████████████ + █████████████████subfolder1/ (+1 descendants)█████████████████ + ██████████████████████████████████████████████████████████████ + ██████████████████████████4.0K (33%)██████████████████████████ + ██████████████████████████████████████████████████████████████ + ██████████████████████████████████████████████████████████████ + ██████████████████████████████████████████████████████████████ + ██████████████████████████████████████████████████████████████ + ██████████████████████████████████████████████████████████████ + ██████████████████████████████████████████████████████████████ + ██████████████████████████████████████████████████████████████ + ██████████████████████████████████████████████████████████████ + ██████████████████████████████████████████████████████████████ + ██████████████████████████████████████████████████████████████ + ██████████████████████████████████████████████████████████████ + ██████████████████████████████████████████████████████████████ + ██████████████████████████████████████████████████████████████ + ██████████████████████████████████████████████████████████████ + ██████████████████████████████████████████████████████████████ + ██████████████████████████████████████████████████████████████ + ██████████████████████████████████████████████████████████████ + ██████████████████████████████████████████████████████████████ + ██████████████████████████████████████████████████████████████ + ██████████████████████████████████████████████████████████████ + ██████████████████████████████████████████████████████████████ + + SELECTED: subfolder1 (4.0K, 1 files) + + diff --git a/src/tests/cases/snapshots/diskonaut__tests__cases__ui__delete_folder_no_confirmation-4.snap b/src/tests/cases/snapshots/diskonaut__tests__cases__ui__delete_folder_no_confirmation-4.snap new file mode 100644 index 0000000..575ba95 --- /dev/null +++ b/src/tests/cases/snapshots/diskonaut__tests__cases__ui__delete_folder_no_confirmation-4.snap @@ -0,0 +1,55 @@ +--- +source: src/tests/cases/ui.rs +expression: "&terminal_draw_events_mirror[3]" +--- + + + + + + + + + + + + + + + + + + + + + ┌─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐ + │ │ + │ │ + │ │ + │ Deleting │ + │ │ + │ /tmp/diskonaut_tests/delete_folder_no_confirmation/subfolder1 │ + │ │ + │ │ + │ │ + └─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘ + + + + + + + + + + + + + + + + + + + + diff --git a/src/tests/cases/snapshots/diskonaut__tests__cases__ui__delete_folder_no_confirmation-5.snap b/src/tests/cases/snapshots/diskonaut__tests__cases__ui__delete_folder_no_confirmation-5.snap new file mode 100644 index 0000000..5da7f3b --- /dev/null +++ b/src/tests/cases/snapshots/diskonaut__tests__cases__ui__delete_folder_no_confirmation-5.snap @@ -0,0 +1,55 @@ +--- +source: src/tests/cases/ui.rs +expression: "&terminal_draw_events_mirror[4]" +--- + 8.0K (3 files), fre d: 4.0K | /tmp/diskonau _te ts/d l te_folder_no_confirmation + ─ + + + + + + + + + + file2 + + + 4.0K (50%) + + + + + + + + + + ─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┤ + + + + + + + + + + file3 + + + 4.0K (50%) + + + + + + + + + + ─ + + + diff --git a/src/tests/cases/snapshots/diskonaut__tests__cases__ui__delete_folder_no_confirmation-6.snap b/src/tests/cases/snapshots/diskonaut__tests__cases__ui__delete_folder_no_confirmation-6.snap new file mode 100644 index 0000000..85f2fe1 --- /dev/null +++ b/src/tests/cases/snapshots/diskonaut__tests__cases__ui__delete_folder_no_confirmation-6.snap @@ -0,0 +1,55 @@ +--- +source: src/tests/cases/ui.rs +expression: "&terminal_draw_events_mirror[6]" +--- + Total: 8.0K (3 files), freed: 4.0K + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/tests/cases/snapshots/diskonaut__tests__cases__ui__delete_folder_no_confirmation-7.snap b/src/tests/cases/snapshots/diskonaut__tests__cases__ui__delete_folder_no_confirmation-7.snap new file mode 100644 index 0000000..254a8d9 --- /dev/null +++ b/src/tests/cases/snapshots/diskonaut__tests__cases__ui__delete_folder_no_confirmation-7.snap @@ -0,0 +1,55 @@ +--- +source: src/tests/cases/ui.rs +expression: "&terminal_draw_events_mirror[7]" +--- + Total: 8.0K (3 files), freed: 4.0K + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/tests/cases/snapshots/diskonaut__tests__cases__ui__delete_folder_no_confirmation-8.snap b/src/tests/cases/snapshots/diskonaut__tests__cases__ui__delete_folder_no_confirmation-8.snap new file mode 100644 index 0000000..7f7dcdd --- /dev/null +++ b/src/tests/cases/snapshots/diskonaut__tests__cases__ui__delete_folder_no_confirmation-8.snap @@ -0,0 +1,55 @@ +--- +source: src/tests/cases/ui.rs +expression: "&terminal_draw_events_mirror[8]" +--- + + + + + + + + + + + + + + + + + + + + + ┌─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐ + │ │ + │ │ + │ Are you sure you want to quit? │ + │ │ + │ │ + │ │ + │ │ + │ (y/n) │ + │ │ + └─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘ + + + + + + + + + + + + + + + + + + + + diff --git a/src/tests/cases/snapshots/diskonaut__tests__cases__ui__delete_folder_no_confirmation.snap b/src/tests/cases/snapshots/diskonaut__tests__cases__ui__delete_folder_no_confirmation.snap new file mode 100644 index 0000000..7d6c399 --- /dev/null +++ b/src/tests/cases/snapshots/diskonaut__tests__cases__ui__delete_folder_no_confirmation.snap @@ -0,0 +1,55 @@ +--- +source: src/tests/cases/ui.rs +expression: "&terminal_draw_events_mirror[0]" +--- + Total: 12.0K (4 files), freed: 0 | /tmp/diskonaut_tests/delete_folder_no_confirmation +┌─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┬──────────────────────────────────────────────────────────────┐ +│ │ │ +│ │ │ +│ │ │ +│ │ │ +│ │ │ +│ │ │ +│ │ │ +│ │ │ +│ │ │ +│ file2 │ │ +│ │ │ +│ │ │ +│ 4.0K (33%) │ │ +│ │ │ +│ │ │ +│ │ │ +│ │ │ +│ │ │ +│ │ │ +│ │ │ +│ │ │ +│ │ subfolder1/ (+1 descendants) │ +├─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┤ │ +│ │ 4.0K (33%) │ +│ │ │ +│ │ │ +│ │ │ +│ │ │ +│ │ │ +│ │ │ +│ │ │ +│ │ │ +│ file3 │ │ +│ │ │ +│ │ │ +│ 4.0K (33%) │ │ +│ │ │ +│ │ │ +│ │ │ +│ │ │ +│ │ │ +│ │ │ +│ │ │ +│ │ │ +│ │ │ +└─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┴──────────────────────────────────────────────────────────────┘ + (x = Small files) + - move around, - enter folder, - parent folder, - delete, <+/-/0> - zoom in/out/reset, - quit + diff --git a/src/tests/cases/snapshots/diskonaut__tests__cases__ui__delete_folder_small_window-7.snap b/src/tests/cases/snapshots/diskonaut__tests__cases__ui__delete_folder_small_window-7.snap index 5f069d1..66fae6d 100644 --- a/src/tests/cases/snapshots/diskonaut__tests__cases__ui__delete_folder_small_window-7.snap +++ b/src/tests/cases/snapshots/diskonaut__tests__cases__ui__delete_folder_small_window-7.snap @@ -2,7 +2,7 @@ source: src/tests/cases/ui.rs expression: "&terminal_draw_events_mirror[6]" --- - 8.0K | /tmp/diskonaut_tests/delete_folder_smal _wikndow + 8.0K | /tmp/diskonaut_tests/delete_folder_smal _window diff --git a/src/tests/cases/snapshots/diskonaut__tests__cases__ui__delete_folder_small_window.snap b/src/tests/cases/snapshots/diskonaut__tests__cases__ui__delete_folder_small_window.snap index a4bb828..8ce895e 100644 --- a/src/tests/cases/snapshots/diskonaut__tests__cases__ui__delete_folder_small_window.snap +++ b/src/tests/cases/snapshots/diskonaut__tests__cases__ui__delete_folder_small_window.snap @@ -2,7 +2,7 @@ source: src/tests/cases/ui.rs expression: "&terminal_draw_events_mirror[0]" --- - 12.0K | /tmp/diskonaut_tests/delete_folder_small_wikndow + 12.0K | /tmp/diskonaut_tests/delete_folder_small_window ┌──────────────────────────────────────────────────────────┐ │ │ │ │ @@ -51,5 +51,5 @@ expression: "&terminal_draw_events_mirror[0]" │ │ └──────────────────────────────────────────────────────────┘ (x = Small files) - ←↓↑→//: navigate, : del + ←↓↑→//: navigate, : del diff --git a/src/tests/cases/snapshots/diskonaut__tests__cases__ui__delete_folder_small_window_no_confirmation-2.snap b/src/tests/cases/snapshots/diskonaut__tests__cases__ui__delete_folder_small_window_no_confirmation-2.snap new file mode 100644 index 0000000..d1a251e --- /dev/null +++ b/src/tests/cases/snapshots/diskonaut__tests__cases__ui__delete_folder_small_window_no_confirmation-2.snap @@ -0,0 +1,55 @@ +--- +source: src/tests/cases/ui.rs +expression: "&terminal_draw_events_mirror[1]" +--- + + + ██████████████████████████████████████████████████████████ + ██████████████████████████████████████████████████████████ + ██████████████████████████████████████████████████████████ + ██████████████████████████████████████████████████████████ + ██████████████████████████████████████████████████████████ + ██████████████████████████file2███████████████████████████ + ██████████████████████████████████████████████████████████ + ██████████████████████████████████████████████████████████ + ████████████████████████4.0K (33%)████████████████████████ + ██████████████████████████████████████████████████████████ + ██████████████████████████████████████████████████████████ + ██████████████████████████████████████████████████████████ + ██████████████████████████████████████████████████████████ + ██████████████████████████████████████████████████████████ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + SELECTED: file2 (4.0K) + + diff --git a/src/tests/cases/snapshots/diskonaut__tests__cases__ui__delete_folder_small_window_no_confirmation-3.snap b/src/tests/cases/snapshots/diskonaut__tests__cases__ui__delete_folder_small_window_no_confirmation-3.snap new file mode 100644 index 0000000..0395ef6 --- /dev/null +++ b/src/tests/cases/snapshots/diskonaut__tests__cases__ui__delete_folder_small_window_no_confirmation-3.snap @@ -0,0 +1,55 @@ +--- +source: src/tests/cases/ui.rs +expression: "&terminal_draw_events_mirror[2]" +--- + + + + + + + + file2 + + + 4.0K (33%) + + + + + + + ██████████████████████████████████████████████████████████ + ██████████████████████████████████████████████████████████ + ██████████████████████████████████████████████████████████ + ██████████████████████████████████████████████████████████ + ██████████████████████████████████████████████████████████ + ██████████████████████████████████████████████████████████ + ██████████████████████████file3███████████████████████████ + ██████████████████████████████████████████████████████████ + ████████████████████████4.0K (33%)████████████████████████ + ██████████████████████████████████████████████████████████ + ██████████████████████████████████████████████████████████ + ██████████████████████████████████████████████████████████ + ██████████████████████████████████████████████████████████ + ██████████████████████████████████████████████████████████ + ██████████████████████████████████████████████████████████ + + + + + + + + + + + + + + + + + 3 + + diff --git a/src/tests/cases/snapshots/diskonaut__tests__cases__ui__delete_folder_small_window_no_confirmation-4.snap b/src/tests/cases/snapshots/diskonaut__tests__cases__ui__delete_folder_small_window_no_confirmation-4.snap new file mode 100644 index 0000000..8ed5133 --- /dev/null +++ b/src/tests/cases/snapshots/diskonaut__tests__cases__ui__delete_folder_small_window_no_confirmation-4.snap @@ -0,0 +1,55 @@ +--- +source: src/tests/cases/ui.rs +expression: "&terminal_draw_events_mirror[3]" +--- + + + + + + + + + + + + + + + + + + + + + + + + file3 + + 4.0K (33%) + + + + + + + + ██████████████████████████████████████████████████████████ + ██████████████████████████████████████████████████████████ + ██████████████████████████████████████████████████████████ + ██████████████████████████████████████████████████████████ + ██████████████████████████████████████████████████████████ + ███████████████subfolder1/ (+1 descendants)███████████████ + ██████████████████████████████████████████████████████████ + ██████████████████████████████████████████████████████████ + ████████████████████████4.0K (33%)████████████████████████ + ██████████████████████████████████████████████████████████ + ██████████████████████████████████████████████████████████ + ██████████████████████████████████████████████████████████ + ██████████████████████████████████████████████████████████ + ██████████████████████████████████████████████████████████ + + SELECTED: subfolder1 (4.0K, 1 files) + + diff --git a/src/tests/cases/snapshots/diskonaut__tests__cases__ui__delete_folder_small_window_no_confirmation-5.snap b/src/tests/cases/snapshots/diskonaut__tests__cases__ui__delete_folder_small_window_no_confirmation-5.snap new file mode 100644 index 0000000..a450b19 --- /dev/null +++ b/src/tests/cases/snapshots/diskonaut__tests__cases__ui__delete_folder_small_window_no_confirmation-5.snap @@ -0,0 +1,55 @@ +--- +source: src/tests/cases/ui.rs +expression: "&terminal_draw_events_mirror[4]" +--- + + + + + + + + + + + + + + + + + + + + + ┌─────────────────────────────┐ + │ │ + │ │ + │ │ + │ Deleting │ + │ │ + │ subfolder1 │ + │ │ + │ │ + │ │ + └─────────────────────────────┘ + + + + + + + + + + + + + + + + + + + + diff --git a/src/tests/cases/snapshots/diskonaut__tests__cases__ui__delete_folder_small_window_no_confirmation-6.snap b/src/tests/cases/snapshots/diskonaut__tests__cases__ui__delete_folder_small_window_no_confirmation-6.snap new file mode 100644 index 0000000..062233a --- /dev/null +++ b/src/tests/cases/snapshots/diskonaut__tests__cases__ui__delete_folder_small_window_no_confirmation-6.snap @@ -0,0 +1,55 @@ +--- +source: src/tests/cases/ui.rs +expression: "&terminal_draw_events_mirror[5]" +--- + 8.0K | /tmp/diskonaut_tests/de[. ]_window_no_confirmation + + + + + + + + + + + file2 + + + 4.0K (50%) + +│ │ + + + + + + + +├──────────────────────────────────────────────────────────┤ + + + + + + + +│ │ + + file3 + + + 4.0K (50%) + + + + + + + + + + + + + diff --git a/src/tests/cases/snapshots/diskonaut__tests__cases__ui__delete_folder_small_window_no_confirmation-7.snap b/src/tests/cases/snapshots/diskonaut__tests__cases__ui__delete_folder_small_window_no_confirmation-7.snap new file mode 100644 index 0000000..2cbdc2a --- /dev/null +++ b/src/tests/cases/snapshots/diskonaut__tests__cases__ui__delete_folder_small_window_no_confirmation-7.snap @@ -0,0 +1,55 @@ +--- +source: src/tests/cases/ui.rs +expression: "&terminal_draw_events_mirror[7]" +--- + 8.0K + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/tests/cases/snapshots/diskonaut__tests__cases__ui__delete_folder_small_window_no_confirmation-8.snap b/src/tests/cases/snapshots/diskonaut__tests__cases__ui__delete_folder_small_window_no_confirmation-8.snap new file mode 100644 index 0000000..cb60faa --- /dev/null +++ b/src/tests/cases/snapshots/diskonaut__tests__cases__ui__delete_folder_small_window_no_confirmation-8.snap @@ -0,0 +1,55 @@ +--- +source: src/tests/cases/ui.rs +expression: "&terminal_draw_events_mirror[8]" +--- + 8.0K + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/tests/cases/snapshots/diskonaut__tests__cases__ui__delete_folder_small_window_no_confirmation-9.snap b/src/tests/cases/snapshots/diskonaut__tests__cases__ui__delete_folder_small_window_no_confirmation-9.snap new file mode 100644 index 0000000..dabf58b --- /dev/null +++ b/src/tests/cases/snapshots/diskonaut__tests__cases__ui__delete_folder_small_window_no_confirmation-9.snap @@ -0,0 +1,55 @@ +--- +source: src/tests/cases/ui.rs +expression: "&terminal_draw_events_mirror[9]" +--- + + + + + + + + + + + + + + + + + + + + + ┌─────────────────────────────┐ + │ │ + │ │ + │ Really quit? │ + │ │ + │ │ + │ │ + │ │ + │ (y/n) │ + │ │ + └─────────────────────────────┘ + + + + + + + + + + + + + + + + + + + + diff --git a/src/tests/cases/snapshots/diskonaut__tests__cases__ui__delete_folder_small_window_no_confirmation.snap b/src/tests/cases/snapshots/diskonaut__tests__cases__ui__delete_folder_small_window_no_confirmation.snap new file mode 100644 index 0000000..2738e46 --- /dev/null +++ b/src/tests/cases/snapshots/diskonaut__tests__cases__ui__delete_folder_small_window_no_confirmation.snap @@ -0,0 +1,55 @@ +--- +source: src/tests/cases/ui.rs +expression: "&terminal_draw_events_mirror[0]" +--- + 12.0K | /tmp/diskonaut_tests/de[...]_window_no_confirmation +┌──────────────────────────────────────────────────────────┐ +│ │ +│ │ +│ │ +│ │ +│ │ +│ file2 │ +│ │ +│ │ +│ 4.0K (33%) │ +│ │ +│ │ +│ │ +│ │ +│ │ +├──────────────────────────────────────────────────────────┤ +│ │ +│ │ +│ │ +│ │ +│ │ +│ │ +│ file3 │ +│ │ +│ 4.0K (33%) │ +│ │ +│ │ +│ │ +│ │ +│ │ +│ │ +├──────────────────────────────────────────────────────────┤ +│ │ +│ │ +│ │ +│ │ +│ │ +│ subfolder1/ (+1 descendants) │ +│ │ +│ │ +│ 4.0K (33%) │ +│ │ +│ │ +│ │ +│ │ +│ │ +└──────────────────────────────────────────────────────────┘ + (x = Small files) + ←↓↑→//: navigate, : del + diff --git a/src/tests/cases/snapshots/diskonaut__tests__cases__ui__delete_folder_with_multiple_children_no_confirmation-2.snap b/src/tests/cases/snapshots/diskonaut__tests__cases__ui__delete_folder_with_multiple_children_no_confirmation-2.snap new file mode 100644 index 0000000..f88d5c6 --- /dev/null +++ b/src/tests/cases/snapshots/diskonaut__tests__cases__ui__delete_folder_with_multiple_children_no_confirmation-2.snap @@ -0,0 +1,55 @@ +--- +source: src/tests/cases/ui.rs +expression: "&terminal_draw_events_mirror[1]" +--- + + + ████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████ + ████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████ + ████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████ + ████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████ + ████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████ + ████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████ + ████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████ + ████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████ + ████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████ + █████████████████████████████████████████████████████████████████file1██████████████████████████████████████████████████████████████████ + ████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████ + ████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████ + ██████████████████████████████████████████████████████████████16.0K (36%)███████████████████████████████████████████████████████████████ + ████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████ + ████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████ + ████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████ + ████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████ + ████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████ + ████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████ + ████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████ + ████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████ + ████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████ + + + + + + + + + + + + + + + + + + + + + + + + + SELECTED: file1 (16.0K) + + diff --git a/src/tests/cases/snapshots/diskonaut__tests__cases__ui__delete_folder_with_multiple_children_no_confirmation-3.snap b/src/tests/cases/snapshots/diskonaut__tests__cases__ui__delete_folder_with_multiple_children_no_confirmation-3.snap new file mode 100644 index 0000000..dd5dffe --- /dev/null +++ b/src/tests/cases/snapshots/diskonaut__tests__cases__ui__delete_folder_with_multiple_children_no_confirmation-3.snap @@ -0,0 +1,55 @@ +--- +source: src/tests/cases/ui.rs +expression: "&terminal_draw_events_mirror[2]" +--- + + + ███████████████████████████████████████████████████ + ███████████████████████████████████████████████████ + ███████████████████████████████████████████████████ + ███████████████████████████████████████████████████ + ███████████████████████████████████████████████████ + ███████████████████████████████████████████████████ + ███████████████████████████████████████████████████ + ███████████████████████████████████████████████████ + ███████████████████████████████████████████████████ + file1 ███████████████████████████████████████████████████ + ███████████████████████████████████████████████████ + ███████████████████████████████████████████████████ + 16.0K (36%) ███████████████████████████████████████████████████ + ███████████████████████████████████████████████████ + ███████████████████████████████████████████████████ + ███████████████████████████████████████████████████ + ███████████████████████████████████████████████████ + ███████████████████████████████████████████████████ + ███████████████████████████████████████████████████ + ███████████████████████████████████████████████████ + ███████████████████████████████████████████████████ + ███████████subfolder1/ (+4 descendants)████████████ + ███████████████████████████████████████████████████ + ████████████████████12.0K (27%)████████████████████ + ███████████████████████████████████████████████████ + ███████████████████████████████████████████████████ + ███████████████████████████████████████████████████ + ███████████████████████████████████████████████████ + ███████████████████████████████████████████████████ + ███████████████████████████████████████████████████ + ███████████████████████████████████████████████████ + ███████████████████████████████████████████████████ + ███████████████████████████████████████████████████ + ███████████████████████████████████████████████████ + ███████████████████████████████████████████████████ + ███████████████████████████████████████████████████ + ███████████████████████████████████████████████████ + ███████████████████████████████████████████████████ + ███████████████████████████████████████████████████ + ███████████████████████████████████████████████████ + ███████████████████████████████████████████████████ + ███████████████████████████████████████████████████ + ███████████████████████████████████████████████████ + ███████████████████████████████████████████████████ + ███████████████████████████████████████████████████ + + SELECTED: subfolder1 (12.0K, 4 files) + + diff --git a/src/tests/cases/snapshots/diskonaut__tests__cases__ui__delete_folder_with_multiple_children_no_confirmation-4.snap b/src/tests/cases/snapshots/diskonaut__tests__cases__ui__delete_folder_with_multiple_children_no_confirmation-4.snap new file mode 100644 index 0000000..aeb1e63 --- /dev/null +++ b/src/tests/cases/snapshots/diskonaut__tests__cases__ui__delete_folder_with_multiple_children_no_confirmation-4.snap @@ -0,0 +1,55 @@ +--- +source: src/tests/cases/ui.rs +expression: "&terminal_draw_events_mirror[3]" +--- + + + + + + + + + + + + + + + + + + + + + ┌─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐ + │ │ + │ │ + │ │ + │ Deleting │ + │ │ + │ /tmp/diskonaut_tests/delete_folder_with_multiple_children_no_confirmation/subfolder1 │ + │ │ + │ │ + │ │ + └─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘ + + + + + + + + + + + + + + + + + + + + diff --git a/src/tests/cases/snapshots/diskonaut__tests__cases__ui__delete_folder_with_multiple_children_no_confirmation-5.snap b/src/tests/cases/snapshots/diskonaut__tests__cases__ui__delete_folder_with_multiple_children_no_confirmation-5.snap new file mode 100644 index 0000000..cd3c56d --- /dev/null +++ b/src/tests/cases/snapshots/diskonaut__tests__cases__ui__delete_folder_with_multiple_children_no_confirmation-5.snap @@ -0,0 +1,55 @@ +--- +source: src/tests/cases/ui.rs +expression: "&terminal_draw_events_mirror[4]" +--- + 32 3 12.0K | tmp/diskonaut_tests/d lete_folder_with_mu tiple_children_no_confirmation + ─ + + + + + + + + + + file1 + + + 16.0K (50%) + + + + + + + + + + ─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┤ + + + + + + + + + + file2 + + + 16.0K (50%) + + + + + + + + + + ─ + + + diff --git a/src/tests/cases/snapshots/diskonaut__tests__cases__ui__delete_folder_with_multiple_children_no_confirmation-6.snap b/src/tests/cases/snapshots/diskonaut__tests__cases__ui__delete_folder_with_multiple_children_no_confirmation-6.snap new file mode 100644 index 0000000..da2dac2 --- /dev/null +++ b/src/tests/cases/snapshots/diskonaut__tests__cases__ui__delete_folder_with_multiple_children_no_confirmation-6.snap @@ -0,0 +1,55 @@ +--- +source: src/tests/cases/ui.rs +expression: "&terminal_draw_events_mirror[6]" +--- + Total: 32.0K (3 files), freed: 12.0K + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/tests/cases/snapshots/diskonaut__tests__cases__ui__delete_folder_with_multiple_children_no_confirmation-7.snap b/src/tests/cases/snapshots/diskonaut__tests__cases__ui__delete_folder_with_multiple_children_no_confirmation-7.snap new file mode 100644 index 0000000..0570be9 --- /dev/null +++ b/src/tests/cases/snapshots/diskonaut__tests__cases__ui__delete_folder_with_multiple_children_no_confirmation-7.snap @@ -0,0 +1,55 @@ +--- +source: src/tests/cases/ui.rs +expression: "&terminal_draw_events_mirror[7]" +--- + Total: 32.0K (3 files), freed: 12.0K + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/tests/cases/snapshots/diskonaut__tests__cases__ui__delete_folder_with_multiple_children_no_confirmation-8.snap b/src/tests/cases/snapshots/diskonaut__tests__cases__ui__delete_folder_with_multiple_children_no_confirmation-8.snap new file mode 100644 index 0000000..7f7dcdd --- /dev/null +++ b/src/tests/cases/snapshots/diskonaut__tests__cases__ui__delete_folder_with_multiple_children_no_confirmation-8.snap @@ -0,0 +1,55 @@ +--- +source: src/tests/cases/ui.rs +expression: "&terminal_draw_events_mirror[8]" +--- + + + + + + + + + + + + + + + + + + + + + ┌─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐ + │ │ + │ │ + │ Are you sure you want to quit? │ + │ │ + │ │ + │ │ + │ │ + │ (y/n) │ + │ │ + └─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘ + + + + + + + + + + + + + + + + + + + + diff --git a/src/tests/cases/snapshots/diskonaut__tests__cases__ui__delete_folder_with_multiple_children_no_confirmation.snap b/src/tests/cases/snapshots/diskonaut__tests__cases__ui__delete_folder_with_multiple_children_no_confirmation.snap new file mode 100644 index 0000000..70bb43b --- /dev/null +++ b/src/tests/cases/snapshots/diskonaut__tests__cases__ui__delete_folder_with_multiple_children_no_confirmation.snap @@ -0,0 +1,55 @@ +--- +source: src/tests/cases/ui.rs +expression: "&terminal_draw_events_mirror[0]" +--- + Total: 44.0K (7 files), freed: 0 | /tmp/diskonaut_tests/delete_folder_with_multiple_children_no_confirmation +┌────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┬───────────────────────────────────────────────────┐ +│ │ │ +│ │ │ +│ │ │ +│ │ │ +│ │ │ +│ │ │ +│ │ │ +│ │ │ +│ │ │ +│ file1 │ │ +│ │ │ +│ │ │ +│ 16.0K (36%) │ │ +│ │ │ +│ │ │ +│ │ │ +│ │ │ +│ │ │ +│ │ │ +│ │ │ +│ │ │ +│ │ subfolder1/ (+4 descendants) │ +├────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┤ │ +│ │ 12.0K (27%) │ +│ │ │ +│ │ │ +│ │ │ +│ │ │ +│ │ │ +│ │ │ +│ │ │ +│ │ │ +│ file2 │ │ +│ │ │ +│ │ │ +│ 16.0K (36%) │ │ +│ │ │ +│ │ │ +│ │ │ +│ │ │ +│ │ │ +│ │ │ +│ │ │ +│ │ │ +│ │ │ +└────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┴───────────────────────────────────────────────────┘ + (x = Small files) + - move around, - enter folder, - parent folder, - delete, <+/-/0> - zoom in/out/reset, - quit + diff --git a/src/tests/cases/snapshots/diskonaut__tests__cases__ui__permission_denied_when_deleting_no_confirmation-2.snap b/src/tests/cases/snapshots/diskonaut__tests__cases__ui__permission_denied_when_deleting_no_confirmation-2.snap new file mode 100644 index 0000000..fa7be6c --- /dev/null +++ b/src/tests/cases/snapshots/diskonaut__tests__cases__ui__permission_denied_when_deleting_no_confirmation-2.snap @@ -0,0 +1,55 @@ +--- +source: src/tests/cases/ui.rs +expression: "&terminal_draw_events_mirror[1]" +--- + + + ████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████ + ████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████ + ████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████ + ████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████ + ████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████ + ████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████ + ████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████ + ████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████ + ████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████ + ████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████ + ████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████ + ████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████ + ████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████ + ████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████ + ████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████ + ████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████ + ████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████ + ████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████ + ████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████ + ████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████ + ████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████ + ████████████████████████████████████████████████████████████████████████████████subfolder1/ (+1 descendants)████████████████████████████████████████████████████████████████████████████████ + ████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████ + ████████████████████████████████████████████████████████████████████████████████████████4.0K (100%)█████████████████████████████████████████████████████████████████████████████████████████ + ████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████ + ████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████ + ████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████ + ████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████ + ████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████ + ████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████ + ████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████ + ████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████ + ████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████ + ████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████ + ████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████ + ████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████ + ████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████ + ████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████ + ████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████ + ████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████ + ████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████ + ████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████ + ████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████ + ████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████ + ████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████ + + SELECTED: subfolder1 (4.0K, 1 files) + + diff --git a/src/tests/cases/snapshots/diskonaut__tests__cases__ui__permission_denied_when_deleting_no_confirmation-3.snap b/src/tests/cases/snapshots/diskonaut__tests__cases__ui__permission_denied_when_deleting_no_confirmation-3.snap new file mode 100644 index 0000000..362d4b8 --- /dev/null +++ b/src/tests/cases/snapshots/diskonaut__tests__cases__ui__permission_denied_when_deleting_no_confirmation-3.snap @@ -0,0 +1,55 @@ +--- +source: src/tests/cases/ui.rs +expression: "&terminal_draw_events_mirror[2]" +--- + /subfolder1 (4.0K, 1 files) + + + + + + + + + + + + + + + + + + + + + + + file1 + + 4.0K (100%) + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/tests/cases/snapshots/diskonaut__tests__cases__ui__permission_denied_when_deleting_no_confirmation-4.snap b/src/tests/cases/snapshots/diskonaut__tests__cases__ui__permission_denied_when_deleting_no_confirmation-4.snap new file mode 100644 index 0000000..2b2e303 --- /dev/null +++ b/src/tests/cases/snapshots/diskonaut__tests__cases__ui__permission_denied_when_deleting_no_confirmation-4.snap @@ -0,0 +1,55 @@ +--- +source: src/tests/cases/ui.rs +expression: "&terminal_draw_events_mirror[3]" +--- + + + ████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████ + ████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████ + ████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████ + ████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████ + ████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████ + ████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████ + ████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████ + ████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████ + ████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████ + ████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████ + ████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████ + ████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████ + ████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████ + ████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████ + ████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████ + ████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████ + ████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████ + ████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████ + ████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████ + ████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████ + ████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████ + ███████████████████████████████████████████████████████████████████████████████████████████file1████████████████████████████████████████████████████████████████████████████████████████████ + ████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████ + ████████████████████████████████████████████████████████████████████████████████████████4.0K (100%)█████████████████████████████████████████████████████████████████████████████████████████ + ████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████ + ████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████ + ████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████ + ████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████ + ████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████ + ████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████ + ████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████ + ████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████ + ████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████ + ████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████ + ████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████ + ████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████ + ████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████ + ████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████ + ████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████ + ████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████ + ████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████ + ████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████ + ████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████ + ████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████ + ████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████ + + SELECTED: file1 (4.0K) + + diff --git a/src/tests/cases/snapshots/diskonaut__tests__cases__ui__permission_denied_when_deleting_no_confirmation-5.snap b/src/tests/cases/snapshots/diskonaut__tests__cases__ui__permission_denied_when_deleting_no_confirmation-5.snap new file mode 100644 index 0000000..1bd92fa --- /dev/null +++ b/src/tests/cases/snapshots/diskonaut__tests__cases__ui__permission_denied_when_deleting_no_confirmation-5.snap @@ -0,0 +1,55 @@ +--- +source: src/tests/cases/ui.rs +expression: "&terminal_draw_events_mirror[4]" +--- + + + + + + + + + + + + + + + + + + + + + ┌─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐ + │ │ + │ │ + │ │ + │ Deleting │ + │ │ + │ /tmp/diskonaut_tests/permission_denied_when_deleting_no_confirmation/subfolder1/file1 │ + │ │ + │ │ + │ │ + └─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘ + + + + + + + + + + + + + + + + + + + + diff --git a/src/tests/cases/snapshots/diskonaut__tests__cases__ui__permission_denied_when_deleting_no_confirmation-6.snap b/src/tests/cases/snapshots/diskonaut__tests__cases__ui__permission_denied_when_deleting_no_confirmation-6.snap new file mode 100644 index 0000000..d17d98b --- /dev/null +++ b/src/tests/cases/snapshots/diskonaut__tests__cases__ui__permission_denied_when_deleting_no_confirmation-6.snap @@ -0,0 +1,55 @@ +--- +source: src/tests/cases/ui.rs +expression: "&terminal_draw_events_mirror[6]" +--- + + + + + + + + + + + + + + + + + + + + + + + + Permission denied (os error 13) + + + + (Press to dismiss) + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/tests/cases/snapshots/diskonaut__tests__cases__ui__permission_denied_when_deleting_no_confirmation-7.snap b/src/tests/cases/snapshots/diskonaut__tests__cases__ui__permission_denied_when_deleting_no_confirmation-7.snap new file mode 100644 index 0000000..fc9f6a6 --- /dev/null +++ b/src/tests/cases/snapshots/diskonaut__tests__cases__ui__permission_denied_when_deleting_no_confirmation-7.snap @@ -0,0 +1,55 @@ +--- +source: src/tests/cases/ui.rs +expression: "&terminal_draw_events_mirror[7]" +--- + + + + + + + + + + + + + + + + + + + + + ███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████ + ███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████ + ███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████ + ████████████████████████████████████████████████████████████████████████file1██████████████████████████████████████████████████████████████████████████ + ███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████ + █████████████████████████████████████████████████████████████████████4.0K (100%)███████████████████████████████████████████████████████████████████████ + ███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████ + ███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████ + ███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████ + ███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████ + ███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████ + + + + + + + + + + + + + + + + + + + + diff --git a/src/tests/cases/snapshots/diskonaut__tests__cases__ui__permission_denied_when_deleting_no_confirmation-8.snap b/src/tests/cases/snapshots/diskonaut__tests__cases__ui__permission_denied_when_deleting_no_confirmation-8.snap new file mode 100644 index 0000000..7f7dcdd --- /dev/null +++ b/src/tests/cases/snapshots/diskonaut__tests__cases__ui__permission_denied_when_deleting_no_confirmation-8.snap @@ -0,0 +1,55 @@ +--- +source: src/tests/cases/ui.rs +expression: "&terminal_draw_events_mirror[8]" +--- + + + + + + + + + + + + + + + + + + + + + ┌─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐ + │ │ + │ │ + │ Are you sure you want to quit? │ + │ │ + │ │ + │ │ + │ │ + │ (y/n) │ + │ │ + └─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘ + + + + + + + + + + + + + + + + + + + + diff --git a/src/tests/cases/snapshots/diskonaut__tests__cases__ui__permission_denied_when_deleting_no_confirmation-9.snap b/src/tests/cases/snapshots/diskonaut__tests__cases__ui__permission_denied_when_deleting_no_confirmation-9.snap new file mode 100644 index 0000000..bc082c1 --- /dev/null +++ b/src/tests/cases/snapshots/diskonaut__tests__cases__ui__permission_denied_when_deleting_no_confirmation-9.snap @@ -0,0 +1,55 @@ +--- +source: src/tests/cases/ui.rs +expression: "&terminal_draw_events_mirror[9]" +--- + + + + + + + + + + + + + + + + + + + + + ███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████ + ███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████ + ███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████ + ████████████████████████████████████████████████████████████████████████file1██████████████████████████████████████████████████████████████████████████ + ███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████ + █████████████████████████████████████████████████████████████████████4.0K (100%)███████████████████████████████████████████████████████████████████████ + ███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████ + ███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████ + ███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████ + ███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████ + ███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████ + + + + + + + + + + + + + + + + + + + + diff --git a/src/tests/cases/snapshots/diskonaut__tests__cases__ui__permission_denied_when_deleting_no_confirmation.snap b/src/tests/cases/snapshots/diskonaut__tests__cases__ui__permission_denied_when_deleting_no_confirmation.snap new file mode 100644 index 0000000..5929993 --- /dev/null +++ b/src/tests/cases/snapshots/diskonaut__tests__cases__ui__permission_denied_when_deleting_no_confirmation.snap @@ -0,0 +1,55 @@ +--- +source: src/tests/cases/ui.rs +expression: "&terminal_draw_events_mirror[0]" +--- + Total: 4.0K (2 files), freed: 0 | /tmp/diskonaut_tests/permission_denied_when_deleting_no_confirmation +┌────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐ +│ │ +│ │ +│ │ +│ │ +│ │ +│ │ +│ │ +│ │ +│ │ +│ │ +│ │ +│ │ +│ │ +│ │ +│ │ +│ │ +│ │ +│ │ +│ │ +│ │ +│ │ +│ subfolder1/ (+1 descendants) │ +│ │ +│ 4.0K (100%) │ +│ │ +│ │ +│ │ +│ │ +│ │ +│ │ +│ │ +│ │ +│ │ +│ │ +│ │ +│ │ +│ │ +│ │ +│ │ +│ │ +│ │ +│ │ +│ │ +│ │ +│ │ +└────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘ + (x = Small files) + - move around, - enter folder, - parent folder, - delete, <+/-/0> - zoom in/out/reset, - quit + diff --git a/src/tests/cases/ui.rs b/src/tests/cases/ui.rs index 1560000..306cdf0 100644 --- a/src/tests/cases/ui.rs +++ b/src/tests/cases/ui.rs @@ -18,6 +18,10 @@ use crate::tests::fakes::TerminalEvent::*; // on filesystems with and without compression const SHOW_APPARENT_SIZE: bool = true; +// This leaves delete confirmations enabled (The default behaviour). +const DELETE_CONFIRMATION_ENABLED: bool = false; +const DELETE_CONFIRMATION_DISABLED: bool = true; + fn create_root_temp_dir(name: &str) -> Result { let mut dir = PathBuf::new(); dir.push(String::from("/tmp/diskonaut_tests")); // TODO: fix this for other platforms @@ -65,6 +69,7 @@ fn two_large_files_one_small_file() { keyboard_events, temp_dir_path.clone(), SHOW_APPARENT_SIZE, + DELETE_CONFIRMATION_ENABLED, ); std::fs::remove_dir_all(temp_dir_path).expect("failed to remove temporary folder"); let terminal_draw_events_mirror = terminal_draw_events.lock().unwrap(); @@ -110,6 +115,7 @@ fn medium_width() { keyboard_events, temp_dir_path.clone(), SHOW_APPARENT_SIZE, + DELETE_CONFIRMATION_ENABLED, ); std::fs::remove_dir_all(temp_dir_path).expect("failed to remove temporary folder"); let terminal_draw_events_mirror = terminal_draw_events.lock().unwrap(); @@ -155,6 +161,7 @@ fn small_width() { keyboard_events, temp_dir_path.clone(), SHOW_APPARENT_SIZE, + DELETE_CONFIRMATION_ENABLED, ); std::fs::remove_dir_all(temp_dir_path).expect("failed to remove temporary folder"); let terminal_draw_events_mirror = terminal_draw_events.lock().unwrap(); @@ -201,6 +208,7 @@ fn small_width_long_folder_name() { keyboard_events, temp_dir_path.clone(), SHOW_APPARENT_SIZE, + DELETE_CONFIRMATION_ENABLED, ); std::fs::remove_dir_all(temp_dir_path).expect("failed to remove temporary folder"); let terminal_draw_events_mirror = terminal_draw_events.lock().unwrap(); @@ -247,6 +255,7 @@ fn too_small_width_one() { keyboard_events, temp_dir_path.clone(), SHOW_APPARENT_SIZE, + DELETE_CONFIRMATION_ENABLED, ); std::fs::remove_dir_all(temp_dir_path).expect("failed to remove temporary folder"); let terminal_draw_events_mirror = terminal_draw_events.lock().unwrap(); @@ -290,6 +299,7 @@ fn too_small_width_two() { keyboard_events, temp_dir_path.clone(), SHOW_APPARENT_SIZE, + DELETE_CONFIRMATION_ENABLED, ); std::fs::remove_dir_all(temp_dir_path).expect("failed to remove temporary folder"); let terminal_draw_events_mirror = terminal_draw_events.lock().unwrap(); @@ -321,6 +331,7 @@ fn too_small_width_three() { keyboard_events, temp_dir_path.clone(), SHOW_APPARENT_SIZE, + DELETE_CONFIRMATION_ENABLED, ); std::fs::remove_dir_all(temp_dir_path).expect("failed to remove temporary folder"); let terminal_draw_events_mirror = terminal_draw_events.lock().unwrap(); @@ -352,6 +363,7 @@ fn too_small_width_four() { keyboard_events, temp_dir_path.clone(), SHOW_APPARENT_SIZE, + DELETE_CONFIRMATION_ENABLED, ); std::fs::remove_dir_all(temp_dir_path).expect("failed to remove temporary folder"); let terminal_draw_events_mirror = terminal_draw_events.lock().unwrap(); @@ -383,6 +395,7 @@ fn too_small_width_five() { keyboard_events, temp_dir_path.clone(), SHOW_APPARENT_SIZE, + DELETE_CONFIRMATION_ENABLED, ); std::fs::remove_dir_all(temp_dir_path).expect("failed to remove temporary folder"); let terminal_draw_events_mirror = terminal_draw_events.lock().unwrap(); @@ -414,6 +427,7 @@ fn too_small_height() { keyboard_events, temp_dir_path.clone(), SHOW_APPARENT_SIZE, + DELETE_CONFIRMATION_ENABLED, ); std::fs::remove_dir_all(temp_dir_path).expect("failed to remove temporary folder"); let terminal_draw_events_mirror = terminal_draw_events.lock().unwrap(); @@ -488,6 +502,7 @@ fn eleven_files() { keyboard_events, temp_dir_path.clone(), SHOW_APPARENT_SIZE, + DELETE_CONFIRMATION_ENABLED, ); std::fs::remove_dir_all(temp_dir_path).expect("failed to remove temporary folder"); let terminal_draw_events_mirror = terminal_draw_events.lock().unwrap(); @@ -548,6 +563,7 @@ fn enter_folder() { keyboard_events, temp_dir_path.clone(), SHOW_APPARENT_SIZE, + DELETE_CONFIRMATION_ENABLED, ); std::fs::remove_dir_all(temp_dir_path).expect("failed to remove temporary folder"); let terminal_draw_events_mirror = terminal_draw_events @@ -616,6 +632,7 @@ fn enter_folder_medium_width() { keyboard_events, temp_dir_path.clone(), SHOW_APPARENT_SIZE, + DELETE_CONFIRMATION_ENABLED, ); std::fs::remove_dir_all(temp_dir_path).expect("failed to remove temporary folder"); let terminal_draw_events_mirror = terminal_draw_events @@ -684,6 +701,7 @@ fn enter_folder_small_width() { keyboard_events, temp_dir_path.clone(), SHOW_APPARENT_SIZE, + DELETE_CONFIRMATION_ENABLED, ); std::fs::remove_dir_all(temp_dir_path).expect("failed to remove temporary folder"); let terminal_draw_events_mirror = terminal_draw_events @@ -739,6 +757,7 @@ fn small_files() { keyboard_events, temp_dir_path.clone(), SHOW_APPARENT_SIZE, + DELETE_CONFIRMATION_ENABLED, ); std::fs::remove_dir_all(temp_dir_path).expect("failed to remove temporary folder"); let terminal_draw_events_mirror = terminal_draw_events.lock().unwrap(); @@ -806,6 +825,7 @@ fn zoom_into_small_files() { keyboard_events, temp_dir_path.clone(), SHOW_APPARENT_SIZE, + DELETE_CONFIRMATION_ENABLED, ); std::fs::remove_dir_all(temp_dir_path).expect("failed to remove temporary folder"); let terminal_draw_events_mirror = terminal_draw_events.lock().unwrap(); @@ -902,6 +922,7 @@ fn cannot_move_into_small_files() { keyboard_events, temp_dir_path.clone(), SHOW_APPARENT_SIZE, + DELETE_CONFIRMATION_ENABLED, ); std::fs::remove_dir_all(temp_dir_path).expect("failed to remove temporary folder"); let terminal_draw_events_mirror = terminal_draw_events.lock().unwrap(); @@ -960,6 +981,7 @@ fn minimum_tile_sides() { keyboard_events, temp_dir_path.clone(), SHOW_APPARENT_SIZE, + DELETE_CONFIRMATION_ENABLED, ); std::fs::remove_dir_all(temp_dir_path).expect("failed to remove temporary folder"); let terminal_draw_events_mirror = terminal_draw_events.lock().unwrap(); @@ -1023,6 +1045,7 @@ fn move_down_and_enter_folder() { keyboard_events, temp_dir_path.clone(), SHOW_APPARENT_SIZE, + DELETE_CONFIRMATION_ENABLED, ); std::fs::remove_dir_all(temp_dir_path).expect("failed to remove temporary folder"); let terminal_draw_events_mirror = terminal_draw_events @@ -1089,6 +1112,7 @@ fn noop_when_entering_file() { keyboard_events, temp_dir_path.clone(), SHOW_APPARENT_SIZE, + DELETE_CONFIRMATION_ENABLED, ); std::fs::remove_dir_all(temp_dir_path).expect("failed to remove temporary folder"); let terminal_draw_events_mirror = terminal_draw_events @@ -1160,6 +1184,7 @@ fn move_up_and_enter_folder() { keyboard_events, temp_dir_path.clone(), SHOW_APPARENT_SIZE, + DELETE_CONFIRMATION_ENABLED, ); std::fs::remove_dir_all(temp_dir_path).expect("failed to remove temporary folder"); let terminal_draw_events_mirror = terminal_draw_events @@ -1232,6 +1257,7 @@ fn move_right_and_enter_folder() { keyboard_events, temp_dir_path.clone(), SHOW_APPARENT_SIZE, + DELETE_CONFIRMATION_ENABLED, ); std::fs::remove_dir_all(temp_dir_path).expect("failed to remove temporary folder"); let terminal_draw_events_mirror = terminal_draw_events @@ -1305,6 +1331,7 @@ fn move_left_and_enter_folder() { keyboard_events, temp_dir_path.clone(), SHOW_APPARENT_SIZE, + DELETE_CONFIRMATION_ENABLED, ); std::fs::remove_dir_all(temp_dir_path).expect("failed to remove temporary folder"); let terminal_draw_events_mirror = terminal_draw_events @@ -1373,6 +1400,7 @@ fn enter_largest_folder_with_no_selected_tile() { keyboard_events, temp_dir_path.clone(), SHOW_APPARENT_SIZE, + DELETE_CONFIRMATION_ENABLED, ); std::fs::remove_dir_all(temp_dir_path).expect("failed to remove temporary folder"); let terminal_draw_events_mirror = terminal_draw_events @@ -1432,6 +1460,7 @@ fn clear_selection_when_moving_off_screen_edges() { keyboard_events, temp_dir_path.clone(), SHOW_APPARENT_SIZE, + DELETE_CONFIRMATION_ENABLED, ); std::fs::remove_dir_all(temp_dir_path).expect("failed to remove temporary folder"); let terminal_draw_events_mirror = terminal_draw_events @@ -1505,6 +1534,7 @@ fn esc_to_go_up() { keyboard_events, temp_dir_path.clone(), SHOW_APPARENT_SIZE, + DELETE_CONFIRMATION_ENABLED, ); std::fs::remove_dir_all(temp_dir_path).expect("failed to remove temporary folder"); let terminal_draw_events_mirror = terminal_draw_events @@ -1585,6 +1615,7 @@ fn noop_when_pressing_esc_at_base_folder() { keyboard_events, temp_dir_path.clone(), SHOW_APPARENT_SIZE, + DELETE_CONFIRMATION_ENABLED, ); std::fs::remove_dir_all(temp_dir_path).expect("failed to remove temporary folder"); let terminal_draw_events_mirror = terminal_draw_events @@ -1658,6 +1689,7 @@ fn delete_file() { keyboard_events, temp_dir_path.clone(), SHOW_APPARENT_SIZE, + DELETE_CONFIRMATION_ENABLED, ); let terminal_draw_events_mirror = terminal_draw_events .lock() @@ -1703,7 +1735,96 @@ fn delete_file() { assert_snapshot!(&terminal_draw_events_mirror[4]); assert_snapshot!(&terminal_draw_events_mirror[5]); assert_snapshot!(&terminal_draw_events_mirror[6]); - assert_snapshot!(&terminal_draw_events_mirror[7]); +} + +#[test] +fn delete_file_no_confirmation() { + let (terminal_events, terminal_draw_events, backend) = test_backend_factory(190, 50); + + let mut events: Vec> = iter::repeat(None).take(1).collect(); + events.push(Some(Event::Key(Key::Char('l')))); // once to place selected marker on screen + events.push(None); + events.push(Some(Event::Key(Key::Backspace))); + events.push(None); + events.push(None); + events.push(None); + events.push(None); + events.push(Some(Event::Key(Key::Ctrl('c')))); + events.push(None); + events.push(Some(Event::Key(Key::Char('y')))); + let keyboard_events = Box::new(KeyboardEvents::new(events)); + + let temp_dir_path = + create_root_temp_dir("delete_file_no_confirmation").expect("failed to create temp dir"); + + let mut subfolder_1_path = PathBuf::from(&temp_dir_path); + subfolder_1_path.push("subfolder1"); + create_dir(&subfolder_1_path).expect("failed to create temporary directory"); + + let mut file_1_path = PathBuf::from(&temp_dir_path); + file_1_path.push("subfolder1"); + file_1_path.push("file1"); + create_temp_file(&file_1_path, 4096).expect("failed to create temp file"); + + let mut file_2_path = PathBuf::from(&temp_dir_path); + file_2_path.push("file2"); + create_temp_file(&file_2_path, 4096).expect("failed to create temp file"); + + let mut file_3_path = PathBuf::from(&temp_dir_path); + file_3_path.push("file3"); + create_temp_file(&file_3_path, 4096).expect("failed to create temp file"); + + start( + backend, + keyboard_events, + temp_dir_path.clone(), + SHOW_APPARENT_SIZE, + DELETE_CONFIRMATION_DISABLED, + ); + let terminal_draw_events_mirror = terminal_draw_events + .lock() + .expect("could not acquire lock on terminal events"); + + let expected_terminal_events = vec![ + Clear, HideCursor, Draw, Flush, Draw, Flush, Draw, Flush, Draw, Flush, Draw, Flush, Draw, + Flush, Draw, Flush, Clear, ShowCursor, + ]; + assert_eq!( + &terminal_events + .lock() + .expect("could not acquire lock on terminal_events")[..], + &expected_terminal_events[..] + ); + assert_eq!( + std::fs::metadata(&file_2_path).is_err(), + true, + "file successfully deleted" + ); + assert_eq!( + std::fs::metadata(&subfolder_1_path).is_ok(), + true, + "different folder stayed the same" + ); + assert_eq!( + std::fs::metadata(&file_1_path).is_ok(), + true, + "different file was untoucehd" + ); + assert_eq!( + std::fs::metadata(&file_3_path).is_ok(), + true, + "second different file was untouched" + ); + std::fs::remove_dir_all(temp_dir_path).expect("failed to remove temporary folder"); + + assert_eq!(terminal_draw_events_mirror.len(), 7); + assert_snapshot!(&terminal_draw_events_mirror[0]); + assert_snapshot!(&terminal_draw_events_mirror[1]); + assert_snapshot!(&terminal_draw_events_mirror[2]); + assert_snapshot!(&terminal_draw_events_mirror[3]); + assert_snapshot!(&terminal_draw_events_mirror[4]); + assert_snapshot!(&terminal_draw_events_mirror[5]); + assert_snapshot!(&terminal_draw_events_mirror[6]); } #[test] @@ -1750,6 +1871,7 @@ fn cant_delete_file_with_term_too_small() { keyboard_events, temp_dir_path.clone(), SHOW_APPARENT_SIZE, + DELETE_CONFIRMATION_ENABLED, ); let terminal_draw_events_mirror = terminal_draw_events .lock() @@ -1835,6 +1957,7 @@ fn delete_folder() { keyboard_events, temp_dir_path.clone(), SHOW_APPARENT_SIZE, + DELETE_CONFIRMATION_ENABLED, ); let terminal_draw_events_mirror = terminal_draw_events .lock() @@ -1884,6 +2007,101 @@ fn delete_folder() { assert_snapshot!(&terminal_draw_events_mirror[8]); } +#[test] +fn delete_folder_no_confirmation() { + let (terminal_events, terminal_draw_events, backend) = test_backend_factory(190, 50); + + let mut events: Vec> = iter::repeat(None).take(1).collect(); + events.push(Some(Event::Key(Key::Char('l')))); // once to place selected marker on screen + events.push(None); + events.push(Some(Event::Key(Key::Char('l')))); + events.push(None); + events.push(Some(Event::Key(Key::Backspace))); + // here we sleep extra to allow the blink events to happen and be tested before the app exits + // with the following ctrl-c + events.push(None); + events.push(None); + events.push(None); + events.push(None); + events.push(Some(Event::Key(Key::Ctrl('c')))); + events.push(None); + events.push(Some(Event::Key(Key::Char('y')))); + let keyboard_events = Box::new(KeyboardEvents::new(events)); + + let temp_dir_path = + create_root_temp_dir("delete_folder_no_confirmation").expect("failed to create temp dir"); + + let mut subfolder_1_path = PathBuf::from(&temp_dir_path); + subfolder_1_path.push("subfolder1"); + create_dir(&subfolder_1_path).expect("failed to create temporary directory"); + + let mut file_1_path = PathBuf::from(&temp_dir_path); + file_1_path.push("subfolder1"); + file_1_path.push("file1"); + create_temp_file(&file_1_path, 4096).expect("failed to create temp file"); + + let mut file_2_path = PathBuf::from(&temp_dir_path); + file_2_path.push("file2"); + create_temp_file(&file_2_path, 4096).expect("failed to create temp file"); + + let mut file_3_path = PathBuf::from(&temp_dir_path); + file_3_path.push("file3"); + create_temp_file(&file_3_path, 4096).expect("failed to create temp file"); + + start( + backend, + keyboard_events, + temp_dir_path.clone(), + SHOW_APPARENT_SIZE, + DELETE_CONFIRMATION_DISABLED, + ); + let terminal_draw_events_mirror = terminal_draw_events + .lock() + .expect("could not acquire lock on terminal events"); + + let expected_terminal_events = vec![ + Clear, HideCursor, Draw, Flush, Draw, Flush, Draw, Flush, Draw, Flush, Draw, Flush, Draw, + Flush, Draw, Flush, Draw, Flush, Clear, ShowCursor, + ]; + assert_eq!( + &terminal_events + .lock() + .expect("could not acquire lock on terminal_events")[..], + &expected_terminal_events[..] + ); + assert_eq!( + std::fs::metadata(&subfolder_1_path).is_err(), + true, + "folder successfully deleted" + ); + assert_eq!( + std::fs::metadata(&file_1_path).is_err(), + true, + "internal file successfully deleted" + ); // can't really fail on its own, but left here for clarity + assert_eq!( + std::fs::metadata(&file_2_path).is_ok(), + true, + "different file was untouched" + ); + assert_eq!( + std::fs::metadata(&file_3_path).is_ok(), + true, + "second different file was untouched" + ); + std::fs::remove_dir_all(temp_dir_path).expect("failed to remove temporary folder"); + + assert_eq!(terminal_draw_events_mirror.len(), 8); + assert_snapshot!(&terminal_draw_events_mirror[0]); + assert_snapshot!(&terminal_draw_events_mirror[1]); + assert_snapshot!(&terminal_draw_events_mirror[2]); + assert_snapshot!(&terminal_draw_events_mirror[3]); + assert_snapshot!(&terminal_draw_events_mirror[4]); + assert_snapshot!(&terminal_draw_events_mirror[5]); + assert_snapshot!(&terminal_draw_events_mirror[6]); + assert_snapshot!(&terminal_draw_events_mirror[7]); +} + #[test] fn delete_folder_small_window() { // terminal window with a width of 60 (shorter message window layout) @@ -1911,7 +2129,7 @@ fn delete_folder_small_window() { let keyboard_events = Box::new(KeyboardEvents::new(events)); let temp_dir_path = - create_root_temp_dir("delete_folder_small_wikndow").expect("failed to create temp dir"); + create_root_temp_dir("delete_folder_small_window").expect("failed to create temp dir"); let mut subfolder_1_path = PathBuf::from(&temp_dir_path); subfolder_1_path.push("subfolder1"); @@ -1935,6 +2153,7 @@ fn delete_folder_small_window() { keyboard_events, temp_dir_path.clone(), SHOW_APPARENT_SIZE, + DELETE_CONFIRMATION_ENABLED, ); let terminal_draw_events_mirror = terminal_draw_events .lock() @@ -1985,6 +2204,105 @@ fn delete_folder_small_window() { assert_snapshot!(&terminal_draw_events_mirror[9]); } +#[test] +fn delete_folder_small_window_no_confirmation() { + // terminal window with a width of 60 (shorter message window layout) + let (terminal_events, terminal_draw_events, backend) = test_backend_factory(60, 50); + + let mut events: Vec> = iter::repeat(None).take(1).collect(); + events.push(Some(Event::Key(Key::Char('j')))); // once to place selected marker on screen + events.push(None); + events.push(Some(Event::Key(Key::Char('j')))); + events.push(None); + events.push(Some(Event::Key(Key::Char('j')))); + events.push(None); + events.push(Some(Event::Key(Key::Backspace))); + events.push(None); + // here we sleep extra to allow the blink events to happen and be tested before the app exits + // with the following ctrl-c + events.push(None); + events.push(None); + events.push(None); + events.push(Some(Event::Key(Key::Ctrl('c')))); + events.push(None); + events.push(Some(Event::Key(Key::Char('y')))); + let keyboard_events = Box::new(KeyboardEvents::new(events)); + + let temp_dir_path = create_root_temp_dir("delete_folder_small_window_no_confirmation") + .expect("failed to create temp dir"); + + let mut subfolder_1_path = PathBuf::from(&temp_dir_path); + subfolder_1_path.push("subfolder1"); + create_dir(&subfolder_1_path).expect("failed to create temporary directory"); + + let mut file_1_path = PathBuf::from(&temp_dir_path); + file_1_path.push("subfolder1"); + file_1_path.push("file1"); + create_temp_file(&file_1_path, 4096).expect("failed to create temp file"); + + let mut file_2_path = PathBuf::from(&temp_dir_path); + file_2_path.push("file2"); + create_temp_file(&file_2_path, 4096).expect("failed to create temp file"); + + let mut file_3_path = PathBuf::from(&temp_dir_path); + file_3_path.push("file3"); + create_temp_file(&file_3_path, 4096).expect("failed to create temp file"); + + start( + backend, + keyboard_events, + temp_dir_path.clone(), + SHOW_APPARENT_SIZE, + DELETE_CONFIRMATION_DISABLED, + ); + let terminal_draw_events_mirror = terminal_draw_events + .lock() + .expect("could not acquire lock on terminal events"); + + let expected_terminal_events = vec![ + Clear, HideCursor, Draw, Flush, Draw, Flush, Draw, Flush, Draw, Flush, Draw, Flush, Draw, + Flush, Draw, Flush, Draw, Flush, Draw, Flush, Clear, ShowCursor, + ]; + assert_eq!( + &terminal_events + .lock() + .expect("could not acquire lock on terminal_events")[..], + &expected_terminal_events[..] + ); + assert_eq!( + std::fs::metadata(&file_2_path).is_ok(), + true, + "different file was untouched" + ); + assert_eq!( + std::fs::metadata(&subfolder_1_path).is_err(), + true, + "file successfully deleted" + ); + assert_eq!( + std::fs::metadata(&file_1_path).is_err(), + true, + "file in folder deleted" + ); + assert_eq!( + std::fs::metadata(&file_3_path).is_ok(), + true, + "second different file was untouched" + ); + std::fs::remove_dir_all(temp_dir_path).expect("failed to remove temporary folder"); + + assert_eq!(terminal_draw_events_mirror.len(), 9); + assert_snapshot!(&terminal_draw_events_mirror[0]); + assert_snapshot!(&terminal_draw_events_mirror[1]); + assert_snapshot!(&terminal_draw_events_mirror[2]); + assert_snapshot!(&terminal_draw_events_mirror[3]); + assert_snapshot!(&terminal_draw_events_mirror[4]); + assert_snapshot!(&terminal_draw_events_mirror[5]); + assert_snapshot!(&terminal_draw_events_mirror[6]); + assert_snapshot!(&terminal_draw_events_mirror[7]); + assert_snapshot!(&terminal_draw_events_mirror[8]); +} + #[test] fn delete_folder_with_multiple_children() { let (terminal_events, terminal_draw_events, backend) = test_backend_factory(190, 50); @@ -2050,6 +2368,7 @@ fn delete_folder_with_multiple_children() { keyboard_events, temp_dir_path.clone(), SHOW_APPARENT_SIZE, + DELETE_CONFIRMATION_ENABLED, ); let terminal_draw_events_mirror = terminal_draw_events .lock() @@ -2114,6 +2433,134 @@ fn delete_folder_with_multiple_children() { assert_snapshot!(&terminal_draw_events_mirror[8]); } +#[test] +fn delete_folder_with_multiple_children_no_confirmation() { + let (terminal_events, terminal_draw_events, backend) = test_backend_factory(190, 50); + + let mut events: Vec> = iter::repeat(None).take(1).collect(); + events.push(Some(Event::Key(Key::Char('l')))); // once to place selected marker on screen + events.push(None); + events.push(Some(Event::Key(Key::Char('l')))); + events.push(None); + events.push(Some(Event::Key(Key::Backspace))); + events.push(None); + // here we sleep extra to allow the blink events to happen and be tested before the app exits + // with the following ctrl-c + events.push(None); + events.push(None); + events.push(None); + events.push(Some(Event::Key(Key::Ctrl('c')))); + events.push(None); + events.push(Some(Event::Key(Key::Char('y')))); + let keyboard_events = Box::new(KeyboardEvents::new(events)); + + let temp_dir_path = + create_root_temp_dir("delete_folder_with_multiple_children_no_confirmation") + .expect("failed to create temp dir"); + + let mut file_1_path = PathBuf::from(&temp_dir_path); + file_1_path.push("file1"); + create_temp_file(&file_1_path, 16384).expect("failed to create temp file"); + + let mut file_2_path = PathBuf::from(&temp_dir_path); + file_2_path.push("file2"); + create_temp_file(&file_2_path, 16384).expect("failed to create temp file"); + + let mut subfolder_1_path = PathBuf::from(&temp_dir_path); + subfolder_1_path.push("subfolder1"); + create_dir(&subfolder_1_path).expect("failed to create temporary directory"); + + let mut subfolder_2_path = PathBuf::from(&temp_dir_path); + subfolder_2_path.push("subfolder1"); + subfolder_2_path.push("subfolder2"); + create_dir(&subfolder_2_path).expect("failed to create temporary directory"); + + let mut file_3_path = PathBuf::from(&temp_dir_path); + file_3_path.push("subfolder1"); + file_3_path.push("subfolder2"); + file_3_path.push("file3"); + create_temp_file(&file_3_path, 4096).expect("failed to create temp file"); + + let mut file_4_path = PathBuf::from(&temp_dir_path); + file_4_path.push("subfolder1"); + file_4_path.push("subfolder2"); + file_4_path.push("file4"); + create_temp_file(&file_4_path, 4096).expect("failed to create temp file"); + + let mut file_5_path = PathBuf::from(&temp_dir_path); + file_5_path.push("subfolder1"); + file_5_path.push("file5"); + create_temp_file(&file_5_path, 4096).expect("failed to create temp file"); + + start( + backend, + keyboard_events, + temp_dir_path.clone(), + SHOW_APPARENT_SIZE, + DELETE_CONFIRMATION_DISABLED, + ); + let terminal_draw_events_mirror = terminal_draw_events + .lock() + .expect("could not acquire lock on terminal events"); + + let expected_terminal_events = vec![ + Clear, HideCursor, Draw, Flush, Draw, Flush, Draw, Flush, Draw, Flush, Draw, Flush, Draw, + Flush, Draw, Flush, Draw, Flush, Clear, ShowCursor, + ]; + assert_eq!( + &terminal_events + .lock() + .expect("could not acquire lock on terminal_events")[..], + &expected_terminal_events[..] + ); + assert_eq!( + std::fs::metadata(&subfolder_1_path).is_err(), + true, + "folder successfully deleted" + ); + assert_eq!( + std::fs::metadata(&subfolder_2_path).is_err(), + true, + "folder inside deleted folder successfully deleted" + ); + assert_eq!( + std::fs::metadata(&file_1_path).is_ok(), + true, + "different file was untouched" + ); + assert_eq!( + std::fs::metadata(&file_2_path).is_ok(), + true, + "different file was untouched" + ); + assert_eq!( + std::fs::metadata(&file_3_path).is_err(), + true, + "internal file in folder deleted" + ); + assert_eq!( + std::fs::metadata(&file_4_path).is_err(), + true, + "internal file in folder deleted" + ); + assert_eq!( + std::fs::metadata(&file_5_path).is_err(), + true, + "internal file in folder deleted" + ); + std::fs::remove_dir_all(temp_dir_path).expect("failed to remove temporary folder"); + + assert_eq!(terminal_draw_events_mirror.len(), 8); + assert_snapshot!(&terminal_draw_events_mirror[0]); + assert_snapshot!(&terminal_draw_events_mirror[1]); + assert_snapshot!(&terminal_draw_events_mirror[2]); + assert_snapshot!(&terminal_draw_events_mirror[3]); + assert_snapshot!(&terminal_draw_events_mirror[4]); + assert_snapshot!(&terminal_draw_events_mirror[5]); + assert_snapshot!(&terminal_draw_events_mirror[6]); + assert_snapshot!(&terminal_draw_events_mirror[7]); +} + #[test] fn pressing_delete_with_no_selected_tile() { let (terminal_events, terminal_draw_events, backend) = test_backend_factory(190, 50); @@ -2151,6 +2598,7 @@ fn pressing_delete_with_no_selected_tile() { keyboard_events, temp_dir_path.clone(), SHOW_APPARENT_SIZE, + DELETE_CONFIRMATION_ENABLED, ); let terminal_draw_events_mirror = terminal_draw_events .lock() @@ -2233,6 +2681,7 @@ fn delete_file_press_n() { keyboard_events, temp_dir_path.clone(), SHOW_APPARENT_SIZE, + DELETE_CONFIRMATION_ENABLED, ); let terminal_draw_events_mirror = terminal_draw_events .lock() @@ -2302,6 +2751,7 @@ fn files_with_size_zero() { keyboard_events, temp_dir_path.clone(), SHOW_APPARENT_SIZE, + DELETE_CONFIRMATION_ENABLED, ); std::fs::remove_dir_all(temp_dir_path).expect("failed to remove temporary folder"); let terminal_draw_events_mirror = terminal_draw_events.lock().unwrap(); @@ -2335,6 +2785,7 @@ fn empty_folder() { keyboard_events, temp_dir_path.clone(), SHOW_APPARENT_SIZE, + DELETE_CONFIRMATION_ENABLED, ); std::fs::remove_dir_all(temp_dir_path).expect("failed to remove temporary folder"); let terminal_draw_events_mirror = terminal_draw_events.lock().unwrap(); @@ -2400,6 +2851,7 @@ fn permission_denied_when_deleting() { keyboard_events, temp_dir_path.clone(), SHOW_APPARENT_SIZE, + DELETE_CONFIRMATION_ENABLED, ); let terminal_draw_events_mirror = terminal_draw_events .lock() @@ -2444,6 +2896,91 @@ fn permission_denied_when_deleting() { assert_snapshot!(&terminal_draw_events_mirror[8]); } +#[test] +fn permission_denied_when_deleting_no_confirmation() { + let (terminal_events, terminal_draw_events, backend) = test_backend_factory(190, 50); + + let mut events: Vec> = iter::repeat(None).take(1).collect(); + events.push(Some(Event::Key(Key::Char('l')))); // once to place selected marker on screen + events.push(None); + events.push(Some(Event::Key(Key::Char('\n')))); + events.push(None); + events.push(Some(Event::Key(Key::Char('l')))); // once to place selected marker on screen + events.push(None); + events.push(Some(Event::Key(Key::Backspace))); + events.push(None); + events.push(Some(Event::Key(Key::Esc))); + events.push(None); + events.push(Some(Event::Key(Key::Ctrl('c')))); + events.push(None); + events.push(Some(Event::Key(Key::Char('y')))); + let keyboard_events = Box::new(KeyboardEvents::new(events)); + + let temp_dir_path = create_root_temp_dir("permission_denied_when_deleting_no_confirmation") + .expect("failed to create temp dir"); + + let mut subfolder_1_path = PathBuf::from(&temp_dir_path); + subfolder_1_path.push("subfolder1"); + create_dir(&subfolder_1_path).expect("failed to create temporary directory"); + + let mut file_1_path = PathBuf::from(&temp_dir_path); + file_1_path.push("subfolder1"); + file_1_path.push("file1"); + create_temp_file(&file_1_path, 4096).expect("failed to create temp file"); + + let mut perms = std::fs::metadata(&subfolder_1_path).unwrap().permissions(); + perms.set_readonly(true); + std::fs::set_permissions(&subfolder_1_path, perms.clone()).unwrap(); + + start( + backend, + keyboard_events, + temp_dir_path.clone(), + SHOW_APPARENT_SIZE, + DELETE_CONFIRMATION_DISABLED, + ); + let terminal_draw_events_mirror = terminal_draw_events + .lock() + .expect("could not acquire lock on terminal events"); + + assert_eq!( + std::fs::metadata(&file_1_path).is_ok(), + true, + "file was not deleted" + ); // can't really fail on its own, but left here for clarity + assert_eq!( + std::fs::metadata(&subfolder_1_path).is_ok(), + true, + "containing folder was not deleted" + ); + + perms.set_readonly(false); + std::fs::set_permissions(&subfolder_1_path, perms).unwrap(); + std::fs::remove_dir_all(temp_dir_path).expect("failed to remove temporary folder"); + + let expected_terminal_events = vec![ + Clear, HideCursor, Draw, Flush, Draw, Flush, Draw, Flush, Draw, Flush, Draw, Flush, Draw, + Flush, Draw, Flush, Draw, Flush, Clear, ShowCursor, + ]; + + assert_eq!( + &terminal_events + .lock() + .expect("could not acquire lock on terminal_events")[..], + &expected_terminal_events[..] + ); + + assert_eq!(terminal_draw_events_mirror.len(), 8); + assert_snapshot!(&terminal_draw_events_mirror[0]); + assert_snapshot!(&terminal_draw_events_mirror[1]); + assert_snapshot!(&terminal_draw_events_mirror[2]); + assert_snapshot!(&terminal_draw_events_mirror[3]); + assert_snapshot!(&terminal_draw_events_mirror[4]); + assert_snapshot!(&terminal_draw_events_mirror[5]); + assert_snapshot!(&terminal_draw_events_mirror[6]); + assert_snapshot!(&terminal_draw_events_mirror[7]); +} + #[test] fn small_files_with_y_as_zero() { let (terminal_events, terminal_draw_events, backend) = test_backend_factory(190, 50); @@ -2466,6 +3003,7 @@ fn small_files_with_y_as_zero() { keyboard_events, temp_dir_path.clone(), SHOW_APPARENT_SIZE, + DELETE_CONFIRMATION_ENABLED, ); std::fs::remove_dir_all(temp_dir_path).expect("failed to remove temporary folder"); let terminal_draw_events_mirror = terminal_draw_events.lock().unwrap(); @@ -2514,6 +3052,7 @@ fn small_files_with_x_as_zero() { keyboard_events, temp_dir_path.clone(), SHOW_APPARENT_SIZE, + DELETE_CONFIRMATION_ENABLED, ); std::fs::remove_dir_all(temp_dir_path).expect("failed to remove temporary folder"); let terminal_draw_events_mirror = terminal_draw_events.lock().unwrap();