feat(ux): add option to delete with out a confirmation prompt (#71)

* implement disabling delete confirmation option

* add tests for delete confirmation disable option

* fix linting
This commit is contained in:
markafarrell
2020-09-08 00:06:04 +10:00
committed by GitHub
parent 9cff09e279
commit f4989056ca
46 changed files with 2824 additions and 8 deletions

View File

@@ -34,6 +34,7 @@ where
display: Display<B>,
event_sender: SyncSender<Event>,
ui_effects: UiEffects,
delete_confirmation_disabled: bool,
}
impl<B> App<B>
@@ -45,6 +46,7 @@ where
path_in_filesystem: PathBuf,
event_sender: SyncSender<Event>,
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<Instruction>) {
@@ -213,10 +216,18 @@ 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.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) {
self.ui_mode = UiMode::Normal;
self.render_and_update_board();

View File

@@ -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<B>(
keyboard_events: Box<dyn Iterator<Item = TermionEvent> + Send>,
path: PathBuf,
show_apparent_size: bool,
disable_delete_confirmation: bool,
) where
B: Backend + Send + 'static,
{
@@ -231,7 +236,13 @@ pub fn start<B>(
);
}
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();

View File

@@ -0,0 +1,55 @@
---
source: src/tests/cases/ui.rs
expression: "&terminal_draw_events_mirror[1]"
---
█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████
█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████
█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████
█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████
█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████
█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████
█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████
█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████
█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████
████████████████████████████████████████████████████████████file2████████████████████████████████████████████████████████████
█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████
█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████
█████████████████████████████████████████████████████████4.0K (33%)██████████████████████████████████████████████████████████
█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████
█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████
█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████
█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████
█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████
█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████
█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████
█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████
█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████
SELECTED: file2 (4.0K)

View File

@@ -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 │
│ │
│ │
│ │
└─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘

View File

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

View File

@@ -0,0 +1,55 @@
---
source: src/tests/cases/ui.rs
expression: "&terminal_draw_events_mirror[4]"
---
Total: 8.0K (3 files), freed: 4.0K

View File

@@ -0,0 +1,55 @@
---
source: src/tests/cases/ui.rs
expression: "&terminal_draw_events_mirror[5]"
---
Total: 8.0K (3 files), freed: 4.0K

View File

@@ -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) │
│ │
└─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘

View File

@@ -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)
<arrows> - move around, <ENTER> - enter folder, <ESC> - parent folder, <BACKSPACE> - delete, <+/-/0> - zoom in/out/reset, <q> - quit

View File

@@ -0,0 +1,55 @@
---
source: src/tests/cases/ui.rs
expression: "&terminal_draw_events_mirror[1]"
---
█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████
█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████
█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████
█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████
█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████
█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████
█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████
█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████
█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████
████████████████████████████████████████████████████████████file2████████████████████████████████████████████████████████████
█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████
█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████
█████████████████████████████████████████████████████████4.0K (33%)██████████████████████████████████████████████████████████
█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████
█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████
█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████
█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████
█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████
█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████
█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████
█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████
█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████
SELECTED: file2 (4.0K)

View File

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

View File

@@ -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 │
│ │
│ │
│ │
└─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘

View File

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

View File

@@ -0,0 +1,55 @@
---
source: src/tests/cases/ui.rs
expression: "&terminal_draw_events_mirror[6]"
---
Total: 8.0K (3 files), freed: 4.0K

View File

@@ -0,0 +1,55 @@
---
source: src/tests/cases/ui.rs
expression: "&terminal_draw_events_mirror[7]"
---
Total: 8.0K (3 files), freed: 4.0K

View File

@@ -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) │
│ │
└─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘

View File

@@ -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)
<arrows> - move around, <ENTER> - enter folder, <ESC> - parent folder, <BACKSPACE> - delete, <+/-/0> - zoom in/out/reset, <q> - quit

View File

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

View File

@@ -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
┌──────────────────────────────────────────────────────────┐
│ │
│ │

View File

@@ -0,0 +1,55 @@
---
source: src/tests/cases/ui.rs
expression: "&terminal_draw_events_mirror[1]"
---
██████████████████████████████████████████████████████████
██████████████████████████████████████████████████████████
██████████████████████████████████████████████████████████
██████████████████████████████████████████████████████████
██████████████████████████████████████████████████████████
██████████████████████████file2███████████████████████████
██████████████████████████████████████████████████████████
██████████████████████████████████████████████████████████
████████████████████████4.0K (33%)████████████████████████
██████████████████████████████████████████████████████████
██████████████████████████████████████████████████████████
██████████████████████████████████████████████████████████
██████████████████████████████████████████████████████████
██████████████████████████████████████████████████████████
SELECTED: file2 (4.0K)

View File

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

View File

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

View File

@@ -0,0 +1,55 @@
---
source: src/tests/cases/ui.rs
expression: "&terminal_draw_events_mirror[4]"
---
┌─────────────────────────────┐
│ │
│ │
│ │
│ Deleting │
│ │
│ subfolder1 │
│ │
│ │
│ │
└─────────────────────────────┘

View File

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

View File

@@ -0,0 +1,55 @@
---
source: src/tests/cases/ui.rs
expression: "&terminal_draw_events_mirror[7]"
---
8.0K

View File

@@ -0,0 +1,55 @@
---
source: src/tests/cases/ui.rs
expression: "&terminal_draw_events_mirror[8]"
---
8.0K

View File

@@ -0,0 +1,55 @@
---
source: src/tests/cases/ui.rs
expression: "&terminal_draw_events_mirror[9]"
---
┌─────────────────────────────┐
│ │
│ │
│ Really quit? │
│ │
│ │
│ │
│ │
│ (y/n) │
│ │
└─────────────────────────────┘

View File

@@ -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)
←↓↑→/<ENTER>/<ESC>: navigate, <BACKSPACE>: del

View File

@@ -0,0 +1,55 @@
---
source: src/tests/cases/ui.rs
expression: "&terminal_draw_events_mirror[1]"
---
████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████
████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████
████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████
████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████
████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████
████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████
████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████
████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████
████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████
█████████████████████████████████████████████████████████████████file1██████████████████████████████████████████████████████████████████
████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████
████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████
██████████████████████████████████████████████████████████████16.0K (36%)███████████████████████████████████████████████████████████████
████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████
████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████
████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████
████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████
████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████
████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████
████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████
████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████
████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████
SELECTED: file1 (16.0K)

View File

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

View File

@@ -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 │
│ │
│ │
│ │
└─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘

View File

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

View File

@@ -0,0 +1,55 @@
---
source: src/tests/cases/ui.rs
expression: "&terminal_draw_events_mirror[6]"
---
Total: 32.0K (3 files), freed: 12.0K

View File

@@ -0,0 +1,55 @@
---
source: src/tests/cases/ui.rs
expression: "&terminal_draw_events_mirror[7]"
---
Total: 32.0K (3 files), freed: 12.0K

View File

@@ -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) │
│ │
└─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘

View File

@@ -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)
<arrows> - move around, <ENTER> - enter folder, <ESC> - parent folder, <BACKSPACE> - delete, <+/-/0> - zoom in/out/reset, <q> - quit

View File

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

View File

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

View File

@@ -0,0 +1,55 @@
---
source: src/tests/cases/ui.rs
expression: "&terminal_draw_events_mirror[3]"
---
████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████
████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████
████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████
████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████
████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████
████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████
████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████
████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████
████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████
████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████
████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████
████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████
████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████
████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████
████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████
████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████
████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████
████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████
████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████
████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████
████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████
███████████████████████████████████████████████████████████████████████████████████████████file1████████████████████████████████████████████████████████████████████████████████████████████
████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████
████████████████████████████████████████████████████████████████████████████████████████4.0K (100%)█████████████████████████████████████████████████████████████████████████████████████████
████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████
████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████
████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████
████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████
████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████
████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████
████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████
████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████
████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████
████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████
████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████
████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████
████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████
████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████
████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████
████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████
████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████
████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████
████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████
████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████
████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████
SELECTED: file1 (4.0K)

View File

@@ -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 │
│ │
│ │
│ │
└─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘

View File

@@ -0,0 +1,55 @@
---
source: src/tests/cases/ui.rs
expression: "&terminal_draw_events_mirror[6]"
---
Permission denied (os error 13)
(Press <ESC> to dismiss)

View File

@@ -0,0 +1,55 @@
---
source: src/tests/cases/ui.rs
expression: "&terminal_draw_events_mirror[7]"
---
███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████
███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████
███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████
████████████████████████████████████████████████████████████████████████file1██████████████████████████████████████████████████████████████████████████
███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████
█████████████████████████████████████████████████████████████████████4.0K (100%)███████████████████████████████████████████████████████████████████████
███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████
███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████
███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████
███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████
███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████

View File

@@ -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) │
│ │
└─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘

View File

@@ -0,0 +1,55 @@
---
source: src/tests/cases/ui.rs
expression: "&terminal_draw_events_mirror[9]"
---
███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████
███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████
███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████
████████████████████████████████████████████████████████████████████████file1██████████████████████████████████████████████████████████████████████████
███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████
█████████████████████████████████████████████████████████████████████4.0K (100%)███████████████████████████████████████████████████████████████████████
███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████
███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████
███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████
███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████
███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████

View File

@@ -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)
<arrows> - move around, <ENTER> - enter folder, <ESC> - parent folder, <BACKSPACE> - delete, <+/-/0> - zoom in/out/reset, <q> - quit

View File

@@ -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<PathBuf, failure::Error> {
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<Option<Event>> = 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<Option<Event>> = 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<Option<Event>> = 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<Option<Event>> = 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<Option<Event>> = 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();