use revue::utils::tree::{TreeItem, TreeNav};
#[test]
fn test_tree_nav_new() {
let nav = TreeNav::new();
assert_eq!(nav.selected(), 0);
assert_eq!(nav.selected_row(), 0);
assert!(nav.visible_items().is_empty());
}
#[test]
fn test_tree_nav_default() {
let nav = TreeNav::default();
assert_eq!(nav.selected(), 0);
assert_eq!(nav.selected_row(), 0);
}
#[test]
fn test_tree_nav_add_item() {
let mut nav = TreeNav::new();
nav.add_item(TreeItem::new(0));
assert_eq!(nav.visible_items().len(), 1);
}
#[test]
fn test_tree_nav_add_multiple_items() {
let mut nav = TreeNav::new();
nav.add_item(TreeItem::new(0));
nav.add_item(TreeItem::new(1));
nav.add_item(TreeItem::new(2));
assert_eq!(nav.visible_items().len(), 3);
}
#[test]
fn test_tree_nav_clear() {
let mut nav = TreeNav::new();
nav.add_item(TreeItem::new(0));
nav.add_item(TreeItem::new(1));
nav.clear();
assert!(nav.visible_items().is_empty());
assert_eq!(nav.selected(), 0);
}
#[test]
fn test_tree_nav_is_visible_no_parent() {
let mut nav = TreeNav::new();
nav.add_item(TreeItem::new(0));
assert!(nav.is_visible(0));
}
#[test]
fn test_tree_nav_is_visible_with_parent() {
let mut nav = TreeNav::new();
nav.add_item(TreeItem::new(0).collapsible());
nav.add_item(TreeItem::new(1).with_parent(0));
assert!(nav.is_visible(1));
}
#[test]
fn test_tree_nav_is_visible_parent_collapsed() {
let mut nav = TreeNav::new();
nav.add_item(TreeItem::new(0).collapsible());
nav.add_item(TreeItem::new(1).with_parent(0));
nav.collapse(); assert!(!nav.is_visible(1));
}
#[test]
fn test_tree_nav_is_visible_grandparent_collapsed() {
let mut nav = TreeNav::new();
nav.add_item(TreeItem::new(0).collapsible()); nav.add_item(TreeItem::new(1).with_parent(0).collapsible()); nav.add_item(TreeItem::new(2).with_parent(1)); nav.collapse(); assert!(!nav.is_visible(2)); }
#[test]
fn test_tree_nav_visible_items_filters_hidden() {
let mut nav = TreeNav::new();
nav.add_item(TreeItem::new(0).collapsible());
nav.add_item(TreeItem::new(1).with_parent(0));
nav.collapse();
assert_eq!(nav.visible_items().len(), 1); }
#[test]
fn test_tree_nav_is_collapsed() {
let mut nav = TreeNav::new();
nav.add_item(TreeItem::new(0).collapsible());
assert!(!nav.is_collapsed(0));
nav.collapse();
assert!(nav.is_collapsed(0));
}
#[test]
fn test_tree_nav_toggle_collapse() {
let mut nav = TreeNav::new();
nav.add_item(TreeItem::new(0).collapsible());
assert!(!nav.is_collapsed(0));
nav.toggle_collapse();
assert!(nav.is_collapsed(0));
nav.toggle_collapse();
assert!(!nav.is_collapsed(0));
}
#[test]
fn test_tree_nav_collapse() {
let mut nav = TreeNav::new();
nav.add_item(TreeItem::new(0).collapsible());
nav.collapse();
assert!(nav.is_collapsed(0));
}
#[test]
fn test_tree_nav_expand() {
let mut nav = TreeNav::new();
nav.add_item(TreeItem::new(0).collapsible());
nav.collapse();
nav.expand();
assert!(!nav.is_collapsed(0));
}
#[test]
fn test_tree_nav_collapse_all() {
let mut nav = TreeNav::new();
nav.add_item(TreeItem::new(0).collapsible());
nav.add_item(TreeItem::new(1).collapsible());
nav.collapse_all();
assert!(nav.is_collapsed(0));
assert!(nav.is_collapsed(1));
}
#[test]
fn test_tree_nav_expand_all() {
let mut nav = TreeNav::new();
nav.add_item(TreeItem::new(0).collapsible());
nav.add_item(TreeItem::new(1).collapsible());
nav.collapse_all();
nav.expand_all();
assert!(!nav.is_collapsed(0));
assert!(!nav.is_collapsed(1));
}
#[test]
fn test_tree_nav_toggle_non_collapsible() {
let mut nav = TreeNav::new();
nav.add_item(TreeItem::new(0)); nav.toggle_collapse();
assert!(!nav.is_collapsed(0)); }
#[test]
fn test_tree_nav_next_empty() {
let mut nav = TreeNav::new();
nav.next(); }
#[test]
fn test_tree_nav_next_single_item() {
let mut nav = TreeNav::new();
nav.add_item(TreeItem::new(0));
nav.next();
assert!(nav.selected() < 1);
}
#[test]
fn test_tree_nav_prev_empty() {
let mut nav = TreeNav::new();
nav.prev(); }
#[test]
fn test_tree_nav_next_item() {
let mut nav = TreeNav::new();
nav.add_item(TreeItem::new(0));
nav.add_item(TreeItem::new(1));
nav.next_item();
assert!(nav.selected() < 2);
}
#[test]
fn test_tree_nav_prev_item() {
let mut nav = TreeNav::new();
nav.add_item(TreeItem::new(0));
nav.add_item(TreeItem::new(1));
nav.select(1);
nav.prev_item();
assert!(nav.selected() < 2);
}
#[test]
fn test_tree_nav_first() {
let mut nav = TreeNav::new();
nav.add_item(TreeItem::new(0));
nav.add_item(TreeItem::new(1));
nav.add_item(TreeItem::new(2));
nav.select(2);
nav.first();
assert_eq!(nav.selected(), 0);
}
#[test]
fn test_tree_nav_last() {
let mut nav = TreeNav::new();
nav.add_item(TreeItem::new(0));
nav.add_item(TreeItem::new(1));
nav.add_item(TreeItem::new(2));
nav.last();
assert_eq!(nav.selected(), 2);
}
#[test]
fn test_tree_nav_first_empty() {
let mut nav = TreeNav::new();
nav.first(); }
#[test]
fn test_tree_nav_last_empty() {
let mut nav = TreeNav::new();
nav.last(); }
#[test]
fn test_tree_nav_select_valid() {
let mut nav = TreeNav::new();
nav.add_item(TreeItem::new(0));
nav.add_item(TreeItem::new(1));
nav.select(1);
assert_eq!(nav.selected(), 1);
assert_eq!(nav.selected_row(), 0);
}
#[test]
fn test_tree_nav_select_invalid() {
let mut nav = TreeNav::new();
nav.add_item(TreeItem::new(0));
nav.select(5); assert!(nav.selected() < 1);
}
#[test]
fn test_tree_nav_select_hidden() {
let mut nav = TreeNav::new();
nav.add_item(TreeItem::new(0).collapsible());
nav.add_item(TreeItem::new(1).with_parent(0));
nav.collapse();
nav.select(1); assert!(nav.selected() < 2);
}
#[test]
fn test_tree_nav_selected() {
let mut nav = TreeNav::new();
nav.add_item(TreeItem::new(0));
nav.add_item(TreeItem::new(1));
assert_eq!(nav.selected(), 0);
}
#[test]
fn test_tree_nav_selected_row() {
let nav = TreeNav::new();
assert_eq!(nav.selected_row(), 0);
}
#[test]
fn test_tree_nav_next_within_multirow_item() {
let mut nav = TreeNav::new();
nav.add_item(TreeItem::new(0).with_row_count(3));
nav.next();
assert_eq!(nav.selected(), 0); assert_eq!(nav.selected_row(), 1); }
#[test]
fn test_tree_nav_prev_within_multirow_item() {
let mut nav = TreeNav::new();
nav.add_item(TreeItem::new(0).with_row_count(3));
nav.next(); nav.next(); nav.prev();
assert_eq!(nav.selected_row(), 1); }
#[test]
fn test_tree_nav_is_last_sibling_only_child() {
let mut nav = TreeNav::new();
nav.add_item(TreeItem::new(0));
assert!(nav.is_last_sibling(0));
}
#[test]
fn test_tree_nav_is_last_sibling_middle_child() {
let mut nav = TreeNav::new();
nav.add_item(TreeItem::new(0));
nav.add_item(TreeItem::new(1));
nav.add_item(TreeItem::new(2));
assert!(!nav.is_last_sibling(1));
}
#[test]
fn test_tree_nav_is_last_sibling_last_child() {
let mut nav = TreeNav::new();
nav.add_item(TreeItem::new(0));
nav.add_item(TreeItem::new(1));
nav.add_item(TreeItem::new(2));
assert!(nav.is_last_sibling(2));
}
#[test]
fn test_tree_nav_is_last_sibling_with_parent() {
let mut nav = TreeNav::new();
nav.add_item(TreeItem::new(0).collapsible());
nav.add_item(TreeItem::new(1).with_parent(0));
nav.add_item(TreeItem::new(2).with_parent(0));
assert!(nav.is_last_sibling(2));
}
#[test]
fn test_tree_nav_get_prefix_root() {
let mut nav = TreeNav::new();
nav.add_item(TreeItem::new(0));
let (prefix, is_last) = nav.get_prefix(0);
assert!(is_last);
assert!(prefix.contains("└─") || prefix.contains("├─"));
}
#[test]
fn test_tree_nav_get_prefix_child() {
let mut nav = TreeNav::new();
nav.add_item(TreeItem::new(0));
nav.add_item(TreeItem::new(1).with_parent(0).with_depth(1));
let (prefix, _) = nav.get_prefix(1);
assert!(!prefix.is_empty());
}
#[test]
fn test_tree_nav_render_items_empty() {
let nav = TreeNav::new();
let items = nav.render_items();
assert!(items.is_empty());
}
#[test]
fn test_tree_nav_render_items_structure() {
let mut nav = TreeNav::new();
nav.add_item(TreeItem::new(0));
nav.add_item(TreeItem::new(1));
let items = nav.render_items();
assert_eq!(items.len(), 2);
assert_eq!(items[0].2, true); assert!(!items[1].2); }
#[test]
fn test_tree_nav_render_items_with_collapse() {
let mut nav = TreeNav::new();
nav.add_item(TreeItem::new(0).collapsible());
nav.add_item(TreeItem::new(1).with_parent(0));
nav.collapse();
let items = nav.render_items();
assert_eq!(items.len(), 1); }