#![cfg(all(
any(feature = "desktop", feature = "tablet", feature = "mobile"),
not(any(feature = "mini", feature = "embedded"))
))]
#[test]
fn all_selection_mode_paths_are_one_type() {
use rust_widgets::app::SelectionMode as AppMode;
use rust_widgets::widget::input_widgets::listbox::SelectionMode as ListBoxMode;
use rust_widgets::widget::view_widgets::list_view::SelectionMode as ListViewMode;
let from_app: AppMode = AppMode::Extended;
let from_list_view: ListViewMode = from_app;
let from_list_box: ListBoxMode = from_list_view;
assert_eq!(from_list_box, AppMode::Extended);
let back: AppMode = ListBoxMode::None;
assert_eq!(back, ListViewMode::None);
}
#[test]
fn selection_mode_has_all_four_distinct_states() {
use rust_widgets::widget::input_widgets::listbox::SelectionMode;
let all =
[SelectionMode::Single, SelectionMode::Multi, SelectionMode::Extended, SelectionMode::None];
for (i, a) in all.iter().enumerate() {
for (j, b) in all.iter().enumerate() {
if i == j {
assert_eq!(a, b);
} else {
assert_ne!(a, b, "modes {i} and {j} must be distinct");
}
}
}
assert_eq!(SelectionMode::default(), SelectionMode::Single);
}
#[test]
fn list_box_in_none_mode_refuses_selection() {
use rust_widgets::core::Rect;
use rust_widgets::widget::input_widgets::listbox::{ListBox, SelectionMode};
let mut lb = ListBox::new(Rect::new(0, 0, 200, 200));
lb.add_item("a".to_string());
lb.add_item("b".to_string());
lb.set_selection_mode(SelectionMode::None);
lb.select(0);
assert!(!lb.is_selected(0), "a non-selectable list box must not select");
assert!(lb.selected_indices().is_empty());
lb.set_selection_mode(SelectionMode::Single);
lb.select(1);
assert!(lb.is_selected(1));
}
#[test]
fn selection_model_honours_none_mode() {
use rust_widgets::widget::view_widgets::list_view::{SelectionMode, SelectionModel};
let mut model = SelectionModel::new();
model.set_mode(SelectionMode::None);
assert!(!model.is_selectable());
model.select_row(3);
assert!(model.rows().is_empty(), "select_row must be a no-op in None mode");
assert_eq!(model.current_row(), None);
}