chore: add CLI tests for copy/move/delete operations and a print_session helper function
This commit is contained in:
parent
82f2f9d80e
commit
1ab1e2228e
1 changed files with 109 additions and 3 deletions
|
|
@ -8,6 +8,43 @@ use noctua_core::document::manager::{DocumentCommand, DocumentManager, DocumentS
|
||||||
use noctua_core::document::session::SessionKind;
|
use noctua_core::document::session::SessionKind;
|
||||||
use std::path::PathBuf;
|
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)]
|
#[derive(Parser, Debug)]
|
||||||
#[command(
|
#[command(
|
||||||
name = "noctua",
|
name = "noctua",
|
||||||
|
|
@ -118,7 +155,7 @@ fn main() {
|
||||||
}
|
}
|
||||||
|
|
||||||
println!("\nUI: Test navigation...");
|
println!("\nUI: Test navigation...");
|
||||||
manager.handle(DocumentCommand::NavigateNext);
|
handle_command(&mut manager, DocumentCommand::NavigateNext);
|
||||||
if let Some(session) = manager.session(&name) {
|
if let Some(session) = manager.session(&name) {
|
||||||
println!(
|
println!(
|
||||||
"UI: After NavigateNext -> index {:?}",
|
"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) {
|
if let Some(session) = manager.session(&name) {
|
||||||
println!(
|
println!(
|
||||||
"UI: After NavigatePrevious -> index {:?}",
|
"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) {
|
if let Some(session) = manager.session(&name) {
|
||||||
println!(
|
println!(
|
||||||
"UI: After SelectItem(0) -> index {:?}",
|
"UI: After SelectItem(0) -> index {:?}",
|
||||||
session.current_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");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue