From 9efeec3890c21ba3390a8268c2b9ba18429c75d7 Mon Sep 17 00:00:00 2001 From: Kristofers Solo Date: Tue, 1 Jul 2025 22:05:52 +0300 Subject: [PATCH] test: add more tests --- src/event.rs | 2 +- src/lib.rs | 2 + tests/event.rs | 12 ++++++ tests/handler.rs | 109 +++++++++++++++++++++++++++++++++++++++++++++++ tests/tui.rs | 14 ++++++ 5 files changed, 138 insertions(+), 1 deletion(-) create mode 100644 tests/event.rs create mode 100644 tests/handler.rs create mode 100644 tests/tui.rs diff --git a/src/event.rs b/src/event.rs index 39d6cc6..908a71a 100644 --- a/src/event.rs +++ b/src/event.rs @@ -5,7 +5,7 @@ use std::thread; use std::time::{Duration, Instant}; /// Terminal events. -#[derive(Clone, Copy, Debug)] +#[derive(Clone, Copy, Debug, PartialEq)] pub enum Event { /// Terminal tick. Tick, diff --git a/src/lib.rs b/src/lib.rs index e9095b8..5be682c 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -14,3 +14,5 @@ pub mod tui; pub mod handler; + + diff --git a/tests/event.rs b/tests/event.rs new file mode 100644 index 0000000..79e76fb --- /dev/null +++ b/tests/event.rs @@ -0,0 +1,12 @@ +use traxor::event::Event; + +#[test] +fn test_event_from_key_code() { + // Test cases for various key codes + // Add more as needed based on your Event enum definition + let key_event = crossterm::event::KeyEvent::new( + crossterm::event::KeyCode::Char('q'), + crossterm::event::KeyModifiers::NONE, + ); + assert_eq!(Event::Key(key_event), Event::Key(key_event)); +} diff --git a/tests/handler.rs b/tests/handler.rs new file mode 100644 index 0000000..d231f43 --- /dev/null +++ b/tests/handler.rs @@ -0,0 +1,109 @@ +use crossterm::event::{KeyCode, KeyEvent, KeyModifiers}; +use traxor::{app::action::Action, handler::get_action}; + +#[test] +fn test_get_action_quit() { + assert_eq!(get_action(KeyEvent::from(KeyCode::Esc)), Some(Action::Quit)); + assert_eq!( + get_action(KeyEvent::from(KeyCode::Char('q'))), + Some(Action::Quit) + ); + assert_eq!( + get_action(KeyEvent::new(KeyCode::Char('c'), KeyModifiers::CONTROL)), + Some(Action::Quit) + ); + assert_eq!( + get_action(KeyEvent::new(KeyCode::Char('C'), KeyModifiers::CONTROL)), + Some(Action::Quit) + ); +} + +#[test] +fn test_get_action_navigation() { + assert_eq!( + get_action(KeyEvent::from(KeyCode::Char('l'))), + Some(Action::NextTab) + ); + assert_eq!( + get_action(KeyEvent::from(KeyCode::Right)), + Some(Action::NextTab) + ); + assert_eq!( + get_action(KeyEvent::from(KeyCode::Char('h'))), + Some(Action::PrevTab) + ); + assert_eq!( + get_action(KeyEvent::from(KeyCode::Left)), + Some(Action::PrevTab) + ); + assert_eq!( + get_action(KeyEvent::from(KeyCode::Char('j'))), + Some(Action::NextTorrent) + ); + assert_eq!( + get_action(KeyEvent::from(KeyCode::Down)), + Some(Action::NextTorrent) + ); + assert_eq!( + get_action(KeyEvent::from(KeyCode::Char('k'))), + Some(Action::PrevTorrent) + ); + assert_eq!( + get_action(KeyEvent::from(KeyCode::Up)), + Some(Action::PrevTorrent) + ); +} + +#[test] +fn test_get_action_switch_tab() { + assert_eq!( + get_action(KeyEvent::from(KeyCode::Char('1'))), + Some(Action::SwitchTab(0)) + ); + assert_eq!( + get_action(KeyEvent::from(KeyCode::Char('2'))), + Some(Action::SwitchTab(1)) + ); + assert_eq!( + get_action(KeyEvent::from(KeyCode::Char('3'))), + Some(Action::SwitchTab(2)) + ); +} + +#[test] +fn test_get_action_torrent_actions() { + assert_eq!( + get_action(KeyEvent::from(KeyCode::Char('t'))), + Some(Action::ToggleTorrent) + ); + assert_eq!( + get_action(KeyEvent::from(KeyCode::Enter)), + Some(Action::ToggleTorrent) + ); + assert_eq!( + get_action(KeyEvent::from(KeyCode::Menu)), + Some(Action::ToggleTorrent) + ); + assert_eq!( + get_action(KeyEvent::from(KeyCode::Char('a'))), + Some(Action::ToggleAll) + ); + assert_eq!( + get_action(KeyEvent::from(KeyCode::Char('d'))), + Some(Action::Delete(false)) + ); + assert_eq!( + get_action(KeyEvent::from(KeyCode::Char('D'))), + Some(Action::Delete(true)) + ); + assert_eq!( + get_action(KeyEvent::from(KeyCode::Char(' '))), + Some(Action::Select) + ); +} + +#[test] +fn test_get_action_unhandled() { + assert_eq!(get_action(KeyEvent::from(KeyCode::Char('x'))), None); + assert_eq!(get_action(KeyEvent::from(KeyCode::F(1))), None); +} diff --git a/tests/tui.rs b/tests/tui.rs new file mode 100644 index 0000000..a2ed5c2 --- /dev/null +++ b/tests/tui.rs @@ -0,0 +1,14 @@ +use ratatui::backend::TestBackend; +use ratatui::Terminal; +use traxor::event::EventHandler; +use traxor::tui::Tui; + +#[test] +fn test_tui_new() { + let backend = TestBackend::new(10, 10); + let terminal = Terminal::new(backend).unwrap(); + let events = EventHandler::new(250); // Dummy tick_rate + let _tui = Tui::new(terminal, events); + // Add assertions for initial state of Tui if applicable + // For example, if Tui has a field that should be initialized to a specific value +}