From 1ab1e2228e8508f6f147424a96eee8c18a844604 Mon Sep 17 00:00:00 2001 From: wfx Date: Sat, 7 Mar 2026 22:31:42 +0100 Subject: [PATCH] chore: add CLI tests for copy/move/delete operations and a print_session helper function --- core/examples/cli.rs | 112 +++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 109 insertions(+), 3 deletions(-) diff --git a/core/examples/cli.rs b/core/examples/cli.rs index 158b7e9..fcdde9f 100644 --- a/core/examples/cli.rs +++ b/core/examples/cli.rs @@ -8,6 +8,43 @@ use noctua_core::document::manager::{DocumentCommand, DocumentManager, DocumentS use noctua_core::document::session::SessionKind; use std::path::PathBuf; +fn print_session(manager: &DocumentManager, session_name: &str) { + if let Some(session) = manager.session(session_name) { + println!("Session '{}' ({:?})", session.name, session.kind); + println!( + " Items: {}, current_index: {:?}", + session.items.len(), + session.current_index + ); + for (i, item) in session.items.iter().enumerate() { + let marker = if session.current_index == Some(i) { + "*" + } else { + " " + }; + println!( + " [{}] {} (page {})", + marker, + item.path.display(), + item.page_index + ); + } + } else { + println!("Session '{}' not found", session_name); + } +} + +fn handle_command(manager: &mut DocumentManager, command: DocumentCommand) { + manager.handle(command); + match &manager.state { + DocumentState::Error(err) => { + eprintln!("Error: {}", err); + manager.state = DocumentState::Empty; + } + _ => {} + } +} + #[derive(Parser, Debug)] #[command( name = "noctua", @@ -118,7 +155,7 @@ fn main() { } println!("\nUI: Test navigation..."); - manager.handle(DocumentCommand::NavigateNext); + handle_command(&mut manager, DocumentCommand::NavigateNext); if let Some(session) = manager.session(&name) { println!( "UI: After NavigateNext -> index {:?}", @@ -126,7 +163,7 @@ fn main() { ); } - manager.handle(DocumentCommand::NavigatePrevious); + handle_command(&mut manager, DocumentCommand::NavigatePrevious); if let Some(session) = manager.session(&name) { println!( "UI: After NavigatePrevious -> index {:?}", @@ -134,13 +171,82 @@ fn main() { ); } - manager.handle(DocumentCommand::SelectItem(0)); + handle_command(&mut manager, DocumentCommand::SelectItem(0)); if let Some(session) = manager.session(&name) { println!( "UI: After SelectItem(0) -> index {:?}", session.current_index ); } + + println!("\nUI: Test copy/move/delete..."); + handle_command( + &mut manager, + DocumentCommand::CreateSession { + name: "Favorites".to_string(), + kind: SessionKind::DocumentCollection, + path: None, + }, + ); + handle_command( + &mut manager, + DocumentCommand::CreateSession { + name: "Workspace".to_string(), + kind: SessionKind::DocumentCollection, + path: None, + }, + ); + + println!("\nBefore CopyItemToSession:"); + print_session(&manager, "Favorites"); + + handle_command( + &mut manager, + DocumentCommand::CopyItemToSession { + source_session: name.clone(), + target_session: "Favorites".to_string(), + source_item_index: 0, + target_item_index: None, + }, + ); + println!("\nAfter CopyItemToSession to Favorites:"); + print_session(&manager, "Favorites"); + + println!("\n--- Test DeleteItemFromSession on DirectoryBrowser (should fail) ---"); + handle_command( + &mut manager, + DocumentCommand::DeleteItemFromSession { + session: name.clone(), + item_index: None, + }, + ); + + println!("\n--- Test Move from Favorites to Workspace ---"); + println!("\nBefore Move:"); + print_session(&manager, "Favorites"); + print_session(&manager, "Workspace"); + + handle_command( + &mut manager, + DocumentCommand::CopyItemToSession { + source_session: "Favorites".to_string(), + target_session: "Workspace".to_string(), + source_item_index: 0, + target_item_index: None, + }, + ); + + handle_command( + &mut manager, + DocumentCommand::DeleteItemFromSession { + session: "Favorites".to_string(), + item_index: Some(0), + }, + ); + + println!("\nAfter Move:"); + print_session(&manager, "Favorites"); + print_session(&manager, "Workspace"); } } }