test(ui): move and enter folders

This commit is contained in:
Aram Drevekenin
2020-03-01 19:13:32 +01:00
parent 394892d440
commit 44b7d85c73
33 changed files with 2073 additions and 16 deletions

View File

@@ -6,8 +6,8 @@ mod tests;
use std::env;
use std::io;
use ::std::{thread, time};
use ::std::thread::park_timeout;
use ::std::thread;
use ::std::thread::park;
use ::std::io::stdin;
use ::termion::input::TermRead;
@@ -33,7 +33,7 @@ mod filesystem;
mod display;
use filesystem::scan_folder;
use display::state::{State, calculate_percentages};
use display::state::State;
use display::RectangleGrid;
fn main() {
@@ -89,6 +89,7 @@ where
let running = running.clone();
let state = state.clone();
move || {
park();
while running.load(Ordering::Acquire) {
terminal.draw(|mut f| {
let mut full_screen = f.size();
@@ -97,7 +98,7 @@ where
state.lock().unwrap().set_tiles(full_screen);
RectangleGrid::new((*state.lock().unwrap().tiles).to_vec()).render(&mut f, full_screen);
}).expect("failed to draw");
park_timeout(time::Duration::from_millis(1000)); // TODO: we might not need this... we can trigger the display on events
park();
}
terminal.clear().unwrap();
}
@@ -137,6 +138,8 @@ where
}
Event::Key(Key::Char('\n')) => {
state.lock().unwrap().enter_selected();
// TODO: do not unpark display_handler if the state did not change
// eg. we tried to enter a file
display_handler.unpark();
}
Event::Key(Key::Esc) => {
@@ -150,10 +153,12 @@ where
})
.unwrap(),
);
let display_handler_thread = display_handler.thread().clone(); // TODO: better
active_threads.push(display_handler);
let file_sizes = scan_folder(path);
state.lock().unwrap().set_base_folder(file_sizes);
display_handler_thread.unpark();
for thread_handler in active_threads {
thread_handler.join().unwrap()
}

View File

@@ -0,0 +1,55 @@
---
source: src/tests/cases/ui.rs
expression: "&terminal_draw_events_mirror[1]"
---
file2 4.1K (33%)
=> subfolder1/ 4.1K (33%) <=

View File

@@ -0,0 +1,55 @@
---
source: src/tests/cases/ui.rs
expression: "&terminal_draw_events_mirror[2]"
---
│ => file1 4.1K (100%) <=

View File

@@ -0,0 +1,55 @@
---
source: src/tests/cases/ui.rs
expression: "&terminal_draw_events_mirror[3]"
---
=> file2 4.1K (33%) <= │
├─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────│ subfolder1/ 4.1K (33%)
file3 4.1K (33%) │

View File

@@ -0,0 +1,55 @@
---
source: src/tests/cases/ui.rs
expression: "&terminal_draw_events_mirror[0]"
---
┌─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┬──────────────────────────────────────────────────────────────┐
│ │ │
│ │ │
│ │ │
│ │ │
│ │ │
│ │ │
│ │ │
│ │ │
│ │ │
│ │ │
│ │ │
│ => file2 4.1K (33%) <= │ │
│ │ │
│ │ │
│ │ │
│ │ │
│ │ │
│ │ │
│ │ │
│ │ │
│ │ │
│ │ │
│ │ │
├─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────│ subfolder1/ 4.1K (33%) │
│ │ │
│ │ │
│ │ │
│ │ │
│ │ │
│ │ │
│ │ │
│ │ │
│ │ │
│ │ │
│ │ │
│ file3 4.1K (33%) │ │
│ │ │
│ │ │
│ │ │
│ │ │
│ │ │
│ │ │
│ │ │
│ │ │
│ │ │
│ │ │
│ │ │
│ │ │
└─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┴──────────────────────────────────────────────────────────────┘

View File

@@ -0,0 +1,55 @@
---
source: src/tests/cases/ui.rs
expression: "&terminal_draw_events_mirror[2]"
---
file2 8.2K (40%)
=> subfolder1/ 8.2K (40%) <=

View File

@@ -0,0 +1,55 @@
---
source: src/tests/cases/ui.rs
expression: "&terminal_draw_events_mirror[3]"
---
│ => file3 8.2K (100%) <=

View File

@@ -0,0 +1,55 @@
---
source: src/tests/cases/ui.rs
expression: "&terminal_draw_events_mirror[1]"
---
┌──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┬─────────────────────────────────────┐
│ │ │
│ │ │
│ │ │
│ │ │
│ │ │
│ │ │
│ │ │
│ │ │
│ │ │
│ │ │
│ │ │
│ => file2 8.2K (40%) <= │ │
│ │ │
│ │ │
│ │ │
│ │ │
│ │ │
│ │ │
│ │ │
│ │ │
│ │ │
│ │ │
│ │ │
├──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────│ file1 4.1K (20%) │
│ │ │
│ │ │
│ │ │
│ │ │
│ │ │
│ │ │
│ │ │
│ │ │
│ │ │
│ │ │
│ │ │
│ subfolder1/ 8.2K (40%) │ │
│ │ │
│ │ │
│ │ │
│ │ │
│ │ │
│ │ │
│ │ │
│ │ │
│ │ │
│ │ │
│ │ │
│ │ │
└──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┴─────────────────────────────────────┘

View File

@@ -0,0 +1,55 @@
---
source: src/tests/cases/ui.rs
expression: "&terminal_draw_events_mirror[1]"
---
file2 4.1K (33%)
=> subfolder1/ 4.1K (33%) <=

View File

@@ -0,0 +1,55 @@
---
source: src/tests/cases/ui.rs
expression: "&terminal_draw_events_mirror[2]"
---
=> file2 4.1K (33%) <=
subfolder1/ 4.1K (33%)

View File

@@ -0,0 +1,55 @@
---
source: src/tests/cases/ui.rs
expression: "&terminal_draw_events_mirror[3]"
---
file2 4.1K (33%)
=> subfolder1/ 4.1K (33%) <=

View File

@@ -0,0 +1,55 @@
---
source: src/tests/cases/ui.rs
expression: "&terminal_draw_events_mirror[4]"
---
│ => file1 4.1K (100%) <=

View File

@@ -0,0 +1,55 @@
---
source: src/tests/cases/ui.rs
expression: "&terminal_draw_events_mirror[0]"
---
┌─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┬──────────────────────────────────────────────────────────────┐
│ │ │
│ │ │
│ │ │
│ │ │
│ │ │
│ │ │
│ │ │
│ │ │
│ │ │
│ │ │
│ │ │
│ => file2 4.1K (33%) <= │ │
│ │ │
│ │ │
│ │ │
│ │ │
│ │ │
│ │ │
│ │ │
│ │ │
│ │ │
│ │ │
│ │ │
├─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────│ subfolder1/ 4.1K (33%) │
│ │ │
│ │ │
│ │ │
│ │ │
│ │ │
│ │ │
│ │ │
│ │ │
│ │ │
│ │ │
│ │ │
│ file3 4.1K (33%) │ │
│ │ │
│ │ │
│ │ │
│ │ │
│ │ │
│ │ │
│ │ │
│ │ │
│ │ │
│ │ │
│ │ │
│ │ │
└─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┴──────────────────────────────────────────────────────────────┘

View File

@@ -0,0 +1,55 @@
---
source: src/tests/cases/ui.rs
expression: "&terminal_draw_events_mirror[1]"
---
file2 4.1K (33%)
=> subfolder1/ 4.1K (33%) <=

View File

@@ -0,0 +1,55 @@
---
source: src/tests/cases/ui.rs
expression: "&terminal_draw_events_mirror[2]"
---
│ => file1 4.1K (100%) <=

View File

@@ -0,0 +1,55 @@
---
source: src/tests/cases/ui.rs
expression: "&terminal_draw_events_mirror[0]"
---
┌─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┬──────────────────────────────────────────────────────────────┐
│ │ │
│ │ │
│ │ │
│ │ │
│ │ │
│ │ │
│ │ │
│ │ │
│ │ │
│ │ │
│ │ │
│ => file2 4.1K (33%) <= │ │
│ │ │
│ │ │
│ │ │
│ │ │
│ │ │
│ │ │
│ │ │
│ │ │
│ │ │
│ │ │
│ │ │
├─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────│ subfolder1/ 4.1K (33%) │
│ │ │
│ │ │
│ │ │
│ │ │
│ │ │
│ │ │
│ │ │
│ │ │
│ │ │
│ │ │
│ │ │
│ file3 4.1K (33%) │ │
│ │ │
│ │ │
│ │ │
│ │ │
│ │ │
│ │ │
│ │ │
│ │ │
│ │ │
│ │ │
│ │ │
│ │ │
└─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┴──────────────────────────────────────────────────────────────┘

View File

@@ -0,0 +1,55 @@
---
source: src/tests/cases/ui.rs
expression: "&terminal_draw_events_mirror[1]"
---
subfolder1/ 12.3K (50%)
=> file3 8.2K (33%) <=

View File

@@ -0,0 +1,55 @@
---
source: src/tests/cases/ui.rs
expression: "&terminal_draw_events_mirror[2]"
---
=> subfolder1/ 12.3K (50%) <=
file3 8.2K (33%)

View File

@@ -0,0 +1,55 @@
---
source: src/tests/cases/ui.rs
expression: "&terminal_draw_events_mirror[3]"
---
│ => file1 12.3K (100%) <= │

View File

@@ -0,0 +1,55 @@
---
source: src/tests/cases/ui.rs
expression: "&terminal_draw_events_mirror[0]"
---
┌────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
│ │
│ │
│ │
│ │
│ │
│ │
│ │
│ │
│ │
│ │
│ │
│ => subfolder1/ 12.3K (50%) <= │
│ │
│ │
│ │
│ │
│ │
│ │
│ │
│ │
│ │
│ │
│ │
├─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┬──────────────────────────────────────────────────────────────┤
│ │ │
│ │ │
│ │ │
│ │ │
│ │ │
│ │ │
│ │ │
│ │ │
│ │ │
│ │ │
│ │ │
│ file3 8.2K (33%) │ file2 4.1K (17%) │
│ │ │
│ │ │
│ │ │
│ │ │
│ │ │
│ │ │
│ │ │
│ │ │
│ │ │
│ │ │
│ │ │
│ │ │
└─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┴──────────────────────────────────────────────────────────────┘

View File

@@ -0,0 +1,55 @@
---
source: src/tests/cases/ui.rs
expression: "&terminal_draw_events_mirror[1]"
---
file2 8.2K (40%)
=> file3 8.2K (40%) <=

View File

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

View File

@@ -0,0 +1,55 @@
---
source: src/tests/cases/ui.rs
expression: "&terminal_draw_events_mirror[0]"
---
┌──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┬─────────────────────────────────────┐
│ │ │
│ │ │
│ │ │
│ │ │
│ │ │
│ │ │
│ │ │
│ │ │
│ │ │
│ │ │
│ │ │
│ => file2 8.2K (40%) <= │ │
│ │ │
│ │ │
│ │ │
│ │ │
│ │ │
│ │ │
│ │ │
│ │ │
│ │ │
│ │ │
│ │ │
├──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────│ file1 4.1K (20%) │
│ │ │
│ │ │
│ │ │
│ │ │
│ │ │
│ │ │
│ │ │
│ │ │
│ │ │
│ │ │
│ │ │
│ file3 8.2K (40%) │ │
│ │ │
│ │ │
│ │ │
│ │ │
│ │ │
│ │ │
│ │ │
│ │ │
│ │ │
│ │ │
│ │ │
│ │ │
└──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┴─────────────────────────────────────┘

View File

@@ -0,0 +1,55 @@
---
source: src/tests/cases/ui.rs
expression: "&terminal_draw_events_mirror[1]"
---
file1 4.1K (33%)
=> file3 4.1K (33%) <=

View File

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

View File

@@ -0,0 +1,55 @@
---
source: src/tests/cases/ui.rs
expression: "&terminal_draw_events_mirror[0]"
---
┌─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┬──────────────────────────────────────────────────────────────┐
│ │ │
│ │ │
│ │ │
│ │ │
│ │ │
│ │ │
│ │ │
│ │ │
│ │ │
│ │ │
│ │ │
│ => file1 4.1K (33%) <= │ │
│ │ │
│ │ │
│ │ │
│ │ │
│ │ │
│ │ │
│ │ │
│ │ │
│ │ │
│ │ │
│ │ │
├─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────│ file3 4.1K (33%) │
│ │ │
│ │ │
│ │ │
│ │ │
│ │ │
│ │ │
│ │ │
│ │ │
│ │ │
│ │ │
│ │ │
│ file2 4.1K (33%) │ │
│ │ │
│ │ │
│ │ │
│ │ │
│ │ │
│ │ │
│ │ │
│ │ │
│ │ │
│ │ │
│ │ │
│ │ │
└─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┴──────────────────────────────────────────────────────────────┘

View File

@@ -0,0 +1,55 @@
---
source: src/tests/cases/ui.rs
expression: "&terminal_draw_events_mirror[1]"
---
file2 4.1K (33%)
=> subfolder1/ 4.1K (33%) <=

View File

@@ -0,0 +1,55 @@
---
source: src/tests/cases/ui.rs
expression: "&terminal_draw_events_mirror[2]"
---
│ => file1 4.1K (100%) <=

View File

@@ -0,0 +1,55 @@
---
source: src/tests/cases/ui.rs
expression: "&terminal_draw_events_mirror[3]"
---
=> file2 4.1K (33%) <= │
├─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────│ subfolder1/ 4.1K (33%)
file3 4.1K (33%) │

View File

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

View File

@@ -0,0 +1,55 @@
---
source: src/tests/cases/ui.rs
expression: "&terminal_draw_events_mirror[0]"
---
┌─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┬──────────────────────────────────────────────────────────────┐
│ │ │
│ │ │
│ │ │
│ │ │
│ │ │
│ │ │
│ │ │
│ │ │
│ │ │
│ │ │
│ │ │
│ => file2 4.1K (33%) <= │ │
│ │ │
│ │ │
│ │ │
│ │ │
│ │ │
│ │ │
│ │ │
│ │ │
│ │ │
│ │ │
│ │ │
├─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────│ subfolder1/ 4.1K (33%) │
│ │ │
│ │ │
│ │ │
│ │ │
│ │ │
│ │ │
│ │ │
│ │ │
│ │ │
│ │ │
│ │ │
│ file3 4.1K (33%) │ │
│ │ │
│ │ │
│ │ │
│ │ │
│ │ │
│ │ │
│ │ │
│ │ │
│ │ │
│ │ │
│ │ │
│ │ │
└─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┴──────────────────────────────────────────────────────────────┘

View File

@@ -11,7 +11,11 @@ use std::fs::{File, create_dir};
use std::io::prelude::*;
use uuid::Uuid;
fn create_temp_dir () -> Result<PathBuf, failure::Error> {
use std::iter;
use ::termion::event::{Event, Key};
use crate::tests::fakes::{KeyboardEvents};
fn create_root_temp_dir () -> Result<PathBuf, failure::Error> {
let mut dir = env::temp_dir();
let temp_dir_name = Uuid::new_v4();
dir.push(temp_dir_name.to_string());
@@ -30,12 +34,15 @@ fn create_temp_file (path: PathBuf, size: usize) -> Result<(), failure::Error> {
Ok(())
}
// TODO: also test with immediately pressing j after start without sleep to make sure we do not
// panic
#[test]
fn two_large_files_one_small_file () {
let (terminal_events, terminal_draw_events, backend) = test_backend_factory(190, 50);
let keyboard_events = sleep_and_quit_events(2);
let temp_dir_path = create_temp_dir().expect("failed to create temp dir");
let keyboard_events = sleep_and_quit_events(1);
let temp_dir_path = create_root_temp_dir().expect("failed to create temp dir");
let mut file_1_path = PathBuf::from(&temp_dir_path);
file_1_path.push("file1");
@@ -52,24 +59,25 @@ fn two_large_files_one_small_file () {
start(backend, keyboard_events, temp_dir_path.clone());
std::fs::remove_dir_all(temp_dir_path).expect("failed to remove temporary folder");
let terminal_draw_events_mirror = terminal_draw_events.lock().unwrap();
println!("terminal_draw_events_mirror[0] {:?}", terminal_draw_events_mirror[0]);
let expected_terminal_events = vec![Clear, HideCursor, Draw, Flush, Draw, Flush, Clear, ShowCursor];
let expected_terminal_events = vec![Clear, HideCursor, Draw, Flush, Clear, ShowCursor];
assert_eq!(
&terminal_events.lock().unwrap()[..],
&expected_terminal_events[..]
);
assert_eq!(terminal_draw_events_mirror.len(), 2);
assert_snapshot!(&terminal_draw_events_mirror[1]);
assert_eq!(terminal_draw_events_mirror.len(), 1);
assert_snapshot!(&terminal_draw_events_mirror[0]);
}
#[test]
fn eleven_files () {
let (terminal_events, terminal_draw_events, backend) = test_backend_factory(190, 50);
let keyboard_events = sleep_and_quit_events(2);
let temp_dir_path = create_temp_dir().expect("failed to create temp dir");
let keyboard_events = sleep_and_quit_events(1);
let temp_dir_path = create_root_temp_dir().expect("failed to create temp dir");
let mut file_1_path = PathBuf::from(&temp_dir_path);
file_1_path.push("file1");
@@ -119,12 +127,406 @@ fn eleven_files () {
std::fs::remove_dir_all(temp_dir_path).expect("failed to remove temporary folder");
let terminal_draw_events_mirror = terminal_draw_events.lock().unwrap();
let expected_terminal_events = vec![Clear, HideCursor, Draw, Flush, Draw, Flush, Clear, ShowCursor];
// let expected_terminal_events = vec![Clear, HideCursor, Draw, Flush, Draw, Flush, Clear, ShowCursor];
let expected_terminal_events = vec![Clear, HideCursor, Draw, Flush, Clear, ShowCursor];
assert_eq!(
&terminal_events.lock().unwrap()[..],
&expected_terminal_events[..]
);
assert_eq!(terminal_draw_events_mirror.len(), 2);
assert_snapshot!(&terminal_draw_events_mirror[1]);
assert_eq!(terminal_draw_events_mirror.len(), 1);
assert_snapshot!(&terminal_draw_events_mirror[0]);
}
#[test]
fn move_down_and_enter_folder() {
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('j'))));
events.push(None);
events.push(Some(Event::Key(Key::Char('\n'))));
events.push(None);
events.push(Some(Event::Key(Key::Ctrl('c'))));
let keyboard_events = Box::new(KeyboardEvents::new(events));
let temp_dir_path = create_root_temp_dir().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, 4000).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, 5000).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 file_3_path = PathBuf::from(&temp_dir_path);
file_3_path.push("subfolder1");
file_3_path.push("file3");
create_temp_file(file_3_path, 5000).expect("failed to create temp file");
start(backend, keyboard_events, temp_dir_path.clone());
std::fs::remove_dir_all(temp_dir_path).expect("failed to remove temporary folder");
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, 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(), 3);
assert_snapshot!(&terminal_draw_events_mirror[0]);
assert_snapshot!(&terminal_draw_events_mirror[1]);
assert_snapshot!(&terminal_draw_events_mirror[2]);
}
#[test]
fn noop_when_entering_file() {
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('j'))));
events.push(None);
events.push(Some(Event::Key(Key::Char('\n'))));
events.push(None);
events.push(Some(Event::Key(Key::Ctrl('c'))));
let keyboard_events = Box::new(KeyboardEvents::new(events));
let temp_dir_path = create_root_temp_dir().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, 4000).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, 5000).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, 5000).expect("failed to create temp file");
start(backend, keyboard_events, temp_dir_path.clone());
std::fs::remove_dir_all(temp_dir_path).expect("failed to remove temporary folder");
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, 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(), 3);
assert_snapshot!(&terminal_draw_events_mirror[0]);
assert_snapshot!(&terminal_draw_events_mirror[1]);
assert_snapshot!(&terminal_draw_events_mirror[2]);
}
#[test]
fn move_up_and_enter_folder() {
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('j'))));
events.push(None);
events.push(Some(Event::Key(Key::Char('k'))));
events.push(None);
events.push(Some(Event::Key(Key::Char('\n'))));
events.push(None);
events.push(Some(Event::Key(Key::Ctrl('c'))));
let keyboard_events = Box::new(KeyboardEvents::new(events));
let temp_dir_path = create_root_temp_dir().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, 10000).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, 4000).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, 5000).expect("failed to create temp file");
start(backend, keyboard_events, temp_dir_path.clone());
std::fs::remove_dir_all(temp_dir_path).expect("failed to remove temporary folder");
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, 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(), 4);
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]);
}
#[test]
fn move_right_and_enter_folder() {
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'))));
events.push(None);
events.push(Some(Event::Key(Key::Char('\n'))));
events.push(None);
events.push(Some(Event::Key(Key::Ctrl('c'))));
let keyboard_events = Box::new(KeyboardEvents::new(events));
let temp_dir_path = create_root_temp_dir().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, 4000).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, 4000).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, 4000).expect("failed to create temp file");
start(backend, keyboard_events, temp_dir_path.clone());
std::fs::remove_dir_all(temp_dir_path).expect("failed to remove temporary folder");
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, 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(), 3);
assert_snapshot!(&terminal_draw_events_mirror[0]);
assert_snapshot!(&terminal_draw_events_mirror[1]);
assert_snapshot!(&terminal_draw_events_mirror[2]);
}
#[test]
fn move_left_and_enter_folder() {
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'))));
events.push(None);
events.push(Some(Event::Key(Key::Char('h'))));
events.push(None);
events.push(Some(Event::Key(Key::Char('l'))));
events.push(None);
events.push(Some(Event::Key(Key::Char('\n'))));
events.push(None);
events.push(Some(Event::Key(Key::Ctrl('c'))));
let keyboard_events = Box::new(KeyboardEvents::new(events));
let temp_dir_path = create_root_temp_dir().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, 4000).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, 4000).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, 4000).expect("failed to create temp file");
start(backend, keyboard_events, temp_dir_path.clone());
std::fs::remove_dir_all(temp_dir_path).expect("failed to remove temporary folder");
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, 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(), 5);
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]);
}
#[test]
fn noop_when_moving_off_screen_edges() {
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'))));
events.push(None);
events.push(Some(Event::Key(Key::Char('l'))));
events.push(None);
events.push(Some(Event::Key(Key::Ctrl('c'))));
let keyboard_events = Box::new(KeyboardEvents::new(events));
let temp_dir_path = create_root_temp_dir().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, 4000).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, 4000).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, 4000).expect("failed to create temp file");
start(backend, keyboard_events, temp_dir_path.clone());
std::fs::remove_dir_all(temp_dir_path).expect("failed to remove temporary folder");
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, 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(), 3);
assert_snapshot!(&terminal_draw_events_mirror[0]);
assert_snapshot!(&terminal_draw_events_mirror[1]);
assert_snapshot!(&terminal_draw_events_mirror[2]);
}
#[test]
fn esc_to_go_up() {
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'))));
events.push(None);
events.push(Some(Event::Key(Key::Char('\n'))));
events.push(None);
events.push(Some(Event::Key(Key::Esc)));
events.push(None);
events.push(Some(Event::Key(Key::Ctrl('c'))));
let keyboard_events = Box::new(KeyboardEvents::new(events));
let temp_dir_path = create_root_temp_dir().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, 4000).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, 4000).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, 4000).expect("failed to create temp file");
start(backend, keyboard_events, temp_dir_path.clone());
std::fs::remove_dir_all(temp_dir_path).expect("failed to remove temporary folder");
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, 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(), 4);
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]);
}
#[test]
fn noop_when_pressing_esc_at_base_folder() {
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'))));
events.push(None);
events.push(Some(Event::Key(Key::Char('\n'))));
events.push(None);
events.push(Some(Event::Key(Key::Esc)));
events.push(None);
events.push(Some(Event::Key(Key::Esc)));
events.push(None);
events.push(Some(Event::Key(Key::Ctrl('c'))));
let keyboard_events = Box::new(KeyboardEvents::new(events));
let temp_dir_path = create_root_temp_dir().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, 4000).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, 4000).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, 4000).expect("failed to create temp file");
start(backend, keyboard_events, temp_dir_path.clone());
std::fs::remove_dir_all(temp_dir_path).expect("failed to remove temporary folder");
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, 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(), 5);
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]);
}

View File

@@ -18,7 +18,7 @@ impl Iterator for KeyboardEvents {
Some(ev) => match ev {
Some(ev) => Some(ev),
None => {
thread::sleep(time::Duration::from_millis(900));
thread::sleep(time::Duration::from_millis(100));
self.next()
}
},