#![cfg(all(
any(feature = "desktop", feature = "tablet", feature = "mobile"),
not(any(feature = "mini", feature = "embedded"))
))]
use rust_widgets::control_backend::{
get_control_backend_for_widget, route_preference_for_widget_kind, ControlBackendKind,
ControlRoutePreference,
};
use rust_widgets::widget::WidgetKind;
#[test]
fn per_kind_resolver_agrees_with_its_routing_preference_for_both_routes() {
let cases = [
(WidgetKind::Button, ControlRoutePreference::NativePreferred, ControlBackendKind::Native),
(WidgetKind::GroupBox, ControlRoutePreference::CustomRequired, ControlBackendKind::Custom),
];
for (kind, expected_pref, expected_backend) in cases {
assert_eq!(
route_preference_for_widget_kind(kind),
expected_pref,
"{kind:?} routing preference changed"
);
let backend = get_control_backend_for_widget(kind);
assert_eq!(
backend.kind(),
expected_backend,
"{kind:?} must resolve to the {expected_backend:?} backend, got {}",
backend.backend_name()
);
}
}
#[test]
fn custom_required_kind_reaches_the_custom_backend_state_model() {
let backend = get_control_backend_for_widget(WidgetKind::GroupBox);
assert_eq!(backend.kind(), ControlBackendKind::Custom);
let id = backend.create_panel(0, 10, 10, 120, 80);
assert_ne!(id, 0, "the custom backend must allocate a usable id");
backend.set_widget_text(id, "hello");
assert_eq!(backend.get_widget_text(id), "hello");
}
#[test]
fn router_entry_point_is_public() {
let backend: &'static dyn rust_widgets::control_backend::ControlBackend =
get_control_backend_for_widget(WidgetKind::Label);
assert!(!backend.backend_name().is_empty());
}
#[test]
fn unified_entry_point_creates_both_kinds_without_the_caller_branching() {
rust_widgets::init();
let win = rust_widgets::create_window("unified", 0, 0, 400, 300);
let button =
rust_widgets::create_widget_of_kind(WidgetKind::Button, win, "ok", 4, 4, 80, 24, None);
assert_ne!(button, 0, "a primitive-mapped kind must still create a widget");
let refused =
rust_widgets::create_widget_of_kind(WidgetKind::GroupBox, win, "box", 4, 40, 120, 80, None);
assert_eq!(refused, 0, "a custom-required kind with no widget must not fabricate an id");
}