From 0e760d733108a7e3a2153b4cee03f33ef13e5cd4 Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Mon, 6 Jul 2020 14:07:06 +0800 Subject: Completely rid ourselves of Termion to make backend selection possible --- src/interactive/app_test/journeys_readonly.rs | 35 ++++++++++++------------ src/interactive/app_test/journeys_with_writes.rs | 10 +++---- src/interactive/app_test/utils.rs | 10 +++---- 3 files changed, 25 insertions(+), 30 deletions(-) (limited to 'src') diff --git a/src/interactive/app_test/journeys_readonly.rs b/src/interactive/app_test/journeys_readonly.rs index f5337ca..28d94e6 100644 --- a/src/interactive/app_test/journeys_readonly.rs +++ b/src/interactive/app_test/journeys_readonly.rs @@ -1,6 +1,6 @@ use crate::interactive::{ app_test::utils::{ - adapt, fixture_str, index_by_name, initialized_app_and_terminal_from_fixture, + fixture_str, index_by_name, initialized_app_and_terminal_from_fixture, into_keys, node_by_index, node_by_name, }, app_test::FIXTURE_PATH, @@ -9,7 +9,6 @@ use crate::interactive::{ use anyhow::Result; use pretty_assertions::assert_eq; use std::ffi::OsString; -use termion::input::TermRead; #[test] fn simple_user_journey_read_only() -> Result<()> { @@ -54,7 +53,7 @@ fn simple_user_journey_read_only() -> Result<()> { // SORTING { // when hitting the S key - app.process_events(&mut terminal, adapt(b"s".keys()))?; + app.process_events(&mut terminal, into_keys(b"s".iter()))?; assert_eq!( app.state.sorting, SortMode::SizeAscending, @@ -66,7 +65,7 @@ fn simple_user_journey_read_only() -> Result<()> { "it recomputes the cached entries" ); // when hitting the S key again - app.process_events(&mut terminal, adapt(b"s".keys()))?; + app.process_events(&mut terminal, into_keys(b"s".iter()))?; assert_eq!( app.state.sorting, SortMode::SizeDescending, @@ -82,35 +81,35 @@ fn simple_user_journey_read_only() -> Result<()> { // Entry-Navigation { // when hitting the j key - app.process_events(&mut terminal, adapt(b"j".keys()))?; + app.process_events(&mut terminal, into_keys(b"j".iter()))?; assert_eq!( node_by_name(&app, fixture_str(long_root)), node_by_index(&app, *app.state.selected.as_ref().unwrap()), "it moves the cursor down and selects the next entry based on the current sort mode" ); // when hitting it while there is nowhere to go - app.process_events(&mut terminal, adapt(b"j".keys()))?; + app.process_events(&mut terminal, into_keys(b"j".iter()))?; assert_eq!( node_by_name(&app, fixture_str(long_root)), node_by_index(&app, *app.state.selected.as_ref().unwrap()), "it stays at the previous position" ); // when hitting the k key - app.process_events(&mut terminal, adapt(b"k".keys()))?; + app.process_events(&mut terminal, into_keys(b"k".iter()))?; assert_eq!( node_by_name(&app, fixture_str(short_root)), node_by_index(&app, *app.state.selected.as_ref().unwrap()), "it moves the cursor up and selects the next entry based on the current sort mode" ); // when hitting the k key again - app.process_events(&mut terminal, adapt(b"k".keys()))?; + app.process_events(&mut terminal, into_keys(b"k".iter()))?; assert_eq!( node_by_name(&app, fixture_str(short_root)), node_by_index(&app, *app.state.selected.as_ref().unwrap()), "it stays at the current cursor position as there is nowhere to go" ); // when hitting the o key with a directory selected - app.process_events(&mut terminal, adapt(b"o".keys()))?; + app.process_events(&mut terminal, into_keys(b"o".iter()))?; { let new_root_idx = index_by_name(&app, fixture_str(short_root)); assert_eq!( @@ -124,7 +123,7 @@ fn simple_user_journey_read_only() -> Result<()> { ); // when hitting the u key while inside a sub-directory - app.process_events(&mut terminal, adapt(b"u".keys()))?; + app.process_events(&mut terminal, into_keys(b"u".iter()))?; { assert_eq!( app.traversal.root_index, app.state.root, @@ -139,7 +138,7 @@ fn simple_user_journey_read_only() -> Result<()> { } // when hitting the u key while inside of the root directory // We are moving the cursor down just to have a non-default selection - app.process_events(&mut terminal, adapt(b"ju".keys()))?; + app.process_events(&mut terminal, into_keys(b"ju".iter()))?; { assert_eq!( app.traversal.root_index, app.state.root, @@ -156,9 +155,9 @@ fn simple_user_journey_read_only() -> Result<()> { // Deletion { // when hitting the 'd' key (also move cursor back to start) - app.process_events(&mut terminal, adapt(b"k".keys()))?; + app.process_events(&mut terminal, into_keys(b"k".iter()))?; let previously_selected_index = *app.state.selected.as_ref().unwrap(); - app.process_events(&mut terminal, adapt(b"d".keys()))?; + app.process_events(&mut terminal, into_keys(b"d".iter()))?; { assert_eq!( Some(1), @@ -180,7 +179,7 @@ fn simple_user_journey_read_only() -> Result<()> { // when hitting the 'd' key again { - app.process_events(&mut terminal, adapt(b"d".keys()))?; + app.process_events(&mut terminal, into_keys(b"d".iter()))?; assert_eq!( Some(2), @@ -197,7 +196,7 @@ fn simple_user_journey_read_only() -> Result<()> { // when hitting the 'd' key once again { - app.process_events(&mut terminal, adapt(b"d".keys()))?; + app.process_events(&mut terminal, into_keys(b"d".iter()))?; assert_eq!( Some(1), @@ -214,7 +213,7 @@ fn simple_user_journey_read_only() -> Result<()> { } // when hitting the spacebar (after moving up to the first entry) { - app.process_events(&mut terminal, adapt(b"k ".keys()))?; + app.process_events(&mut terminal, into_keys(b"k ".iter()))?; assert_eq!( None, @@ -233,7 +232,7 @@ fn simple_user_journey_read_only() -> Result<()> { // Marking { // select something - app.process_events(&mut terminal, adapt(b" j ".keys()))?; + app.process_events(&mut terminal, into_keys(b" j ".iter()))?; assert_eq!( Some(false), app.window.mark_pane.as_ref().map(|p| p.has_focus()), @@ -247,7 +246,7 @@ fn simple_user_journey_read_only() -> Result<()> { ); // when advancing the selection to the marker pane - app.process_events(&mut terminal, adapt(b"\t".keys()))?; + app.process_events(&mut terminal, into_keys(b"\t".iter()))?; { assert_eq!( Some(true), diff --git a/src/interactive/app_test/journeys_with_writes.rs b/src/interactive/app_test/journeys_with_writes.rs index 4efb331..83238b2 100644 --- a/src/interactive/app_test/journeys_with_writes.rs +++ b/src/interactive/app_test/journeys_with_writes.rs @@ -1,10 +1,8 @@ use crate::interactive::app_test::utils::{ - adapt, initialized_app_and_terminal_from_paths, WritableFixture, + initialized_app_and_terminal_from_paths, into_keys, WritableFixture, }; use anyhow::Result; use pretty_assertions::assert_eq; -use std::convert::TryInto; -use termion::{event::Key, input::TermRead}; #[test] fn basic_user_journey_with_deletion() -> Result<()> { @@ -12,7 +10,7 @@ fn basic_user_journey_with_deletion() -> Result<()> { let (mut terminal, mut app) = initialized_app_and_terminal_from_paths(&[fixture.root.clone()])?; // With a selection of items - app.process_events(&mut terminal, adapt(b"doddd".keys()))?; + app.process_events(&mut terminal, into_keys(b"doddd".iter()))?; assert_eq!( app.window.mark_pane.as_ref().map(|p| p.marked().len()), @@ -30,8 +28,8 @@ fn basic_user_journey_with_deletion() -> Result<()> { app.process_events( &mut terminal, vec![ - Key::Char('\t').try_into().unwrap(), - Key::Ctrl('r').try_into().unwrap(), + crosstermion::input::Key::Char('\t'), + crosstermion::input::Key::Ctrl('r'), ] .into_iter(), )?; diff --git a/src/interactive/app_test/utils.rs b/src/interactive/app_test/utils.rs index c0f1c33..3d1bbb5 100644 --- a/src/interactive/app_test/utils.rs +++ b/src/interactive/app_test/utils.rs @@ -18,12 +18,10 @@ use std::{ use tui::backend::TestBackend; use tui_react::Terminal; -pub fn adapt( - keys: impl Iterator>, -) -> impl Iterator { - use std::convert::TryFrom; - keys.filter_map(Result::ok) - .filter_map(|k| crosstermion::input::Key::try_from(k).ok()) +pub fn into_keys<'a>( + bytes: impl Iterator + 'a, +) -> impl Iterator + 'a { + bytes.map(|b| crosstermion::input::Key::Char(std::char::from_u32(*b as u32).unwrap())) } pub fn node_by_index(app: &TerminalApp, id: TreeIndex) -> &EntryData { -- cgit v1.2.3