use revue::widget::sortable::SortableList;
#[test]
fn test_sortable_list_new_with_vec() {
let list = SortableList::new(vec!["Item 1", "Item 2", "Item 3"]);
assert_eq!(list.items().len(), 3);
assert_eq!(list.items()[0].label, "Item 1");
assert_eq!(list.items()[1].label, "Item 2");
assert_eq!(list.items()[2].label, "Item 3");
}
#[test]
fn test_sortable_list_new_with_slice() {
let items = ["A", "B", "C"];
let list = SortableList::new(items);
assert_eq!(list.items().len(), 3);
assert_eq!(list.items()[0].label, "A");
assert_eq!(list.items()[1].label, "B");
assert_eq!(list.items()[2].label, "C");
}
#[test]
fn test_sortable_list_new_with_strings() {
let list = SortableList::new(vec![
String::from("One"),
String::from("Two"),
String::from("Three"),
]);
assert_eq!(list.items().len(), 3);
assert_eq!(list.items()[0].label, "One");
assert_eq!(list.items()[1].label, "Two");
assert_eq!(list.items()[2].label, "Three");
}
#[test]
fn test_sortable_list_new_empty() {
let list = SortableList::new(Vec::<String>::new());
assert_eq!(list.items().len(), 0);
assert!(list.items().is_empty());
}
#[test]
fn test_sortable_list_new_with_iter() {
let list = SortableList::new((0..5).map(|i| format!("Item {}", i)));
assert_eq!(list.items().len(), 5);
assert_eq!(list.items()[0].label, "Item 0");
assert_eq!(list.items()[4].label, "Item 4");
}
#[test]
fn test_sortable_list_item_indices() {
let list = SortableList::new(vec!["First", "Second", "Third"]);
assert_eq!(list.items()[0].original_index, 0);
assert_eq!(list.items()[1].original_index, 1);
assert_eq!(list.items()[2].original_index, 2);
}
#[test]
fn test_sortable_list_default_state() {
let list = SortableList::new(vec!["A", "B"]);
assert_eq!(list.selected(), None);
assert_eq!(list.scroll, 0);
assert_eq!(list.dragging, None);
assert_eq!(list.drop_target, None);
assert!(list.on_reorder.is_none());
assert_eq!(list.item_height, 1);
assert!(list.show_handles);
}
#[test]
fn test_sortable_list_default_colors() {
let list = SortableList::new(vec!["X"]);
assert_eq!(list.item_color, revue::style::Color::rgb(200, 200, 200));
assert_eq!(list.selected_color, revue::style::Color::rgb(100, 150, 255));
assert_eq!(list.drag_color, revue::style::Color::rgb(255, 200, 100));
}
#[test]
fn test_sortable_list_item_defaults() {
let list = SortableList::new(vec!["Test"]);
assert!(!list.items()[0].selected);
assert!(!list.items()[0].dragging);
}
#[test]
fn test_sortable_list_unique_id() {
let list1 = SortableList::new(vec!["A"]);
let list2 = SortableList::new(vec!["B"]);
assert_ne!(list1._id, list2._id);
}
#[test]
fn test_sortable_list_has_widget_state() {
let list = SortableList::new(vec!["Test"]);
let _ = &list.state;
}
#[test]
fn test_sortable_list_has_widget_props() {
let list = SortableList::new(vec!["Test"]);
let _ = &list.props;
}
#[test]
fn test_sortable_list_items_are_public() {
let mut list = SortableList::new(vec!["A"]);
list.items_mut()[0].selected = true;
assert!(list.items()[0].selected);
}
#[test]
fn test_sortable_list_fields_are_public() {
let mut list = SortableList::new(vec!["A", "B"]);
list.selected = Some(0);
list.scroll = 5;
list.dragging = Some(1);
list.drop_target = Some(0);
assert_eq!(list.selected(), Some(0));
assert_eq!(list.scroll, 5);
assert_eq!(list.dragging, Some(1));
assert_eq!(list.drop_target, Some(0));
}
#[test]
fn test_sortable_list_with_unicode() {
let list = SortableList::new(vec!["🎉 Item", "🚀 Another", "✨ Third"]);
assert_eq!(list.items().len(), 3);
assert_eq!(list.items()[0].label, "🎉 Item");
assert_eq!(list.items()[1].label, "🚀 Another");
assert_eq!(list.items()[2].label, "✨ Third");
}
#[test]
fn test_sortable_list_with_empty_strings() {
let list = SortableList::new(vec!["", "", ""]);
assert_eq!(list.items().len(), 3);
assert_eq!(list.items()[0].label, "");
assert_eq!(list.items()[1].label, "");
assert_eq!(list.items()[2].label, "");
}
#[test]
fn test_sortable_list_single_item() {
let list = SortableList::new(vec!["Only Item"]);
assert_eq!(list.items().len(), 1);
assert_eq!(list.items()[0].label, "Only Item");
assert_eq!(list.items()[0].original_index, 0);
}
#[test]
fn test_sortable_list_many_items() {
let list = SortableList::new((0..100).map(|i| format!("Item {}", i)));
assert_eq!(list.items().len(), 100);
assert_eq!(list.items()[0].original_index, 0);
assert_eq!(list.items()[99].original_index, 99);
}
#[test]
fn test_sortable_list_callback_field_exists() {
let list = SortableList::new(vec!["A"]);
assert!(list.on_reorder.is_none());
}
#[test]
fn test_sortable_list_item_height_default() {
let list = SortableList::new(vec!["A"]);
assert_eq!(list.item_height, 1);
}
#[test]
fn test_sortable_list_show_handles_default() {
let list = SortableList::new(vec!["A"]);
assert!(list.show_handles);
}