#![cfg(all(full_widgets, feature = "desktop"))]
use rust_widgets::core::Rect;
use rust_widgets::widget::capability::WidgetFactory;
#[test]
fn every_set_command_is_recognised_by_its_control() {
use rust_widgets::widget::capability::types::CapabilityAccessError;
let factory = WidgetFactory::new_with_defaults();
let mut failures: Vec<String> = Vec::new();
for capability in factory.capabilities() {
let canonical = capability.canonical_name;
for command in capability.commands {
if !command.starts_with("set_") {
continue;
}
let Some(mut widget) = factory.create(canonical, Rect::new(0, 0, 100, 100), "") else {
failures.push(format!("{canonical} publishes `{command}` but cannot be built"));
continue;
};
match factory.invoke_command(widget.as_mut(), command) {
Ok(()) => {}
Err(CapabilityAccessError::OutOfRange) => {}
Err(other) => failures.push(format!(
"{canonical} publishes `{command}` but a payload-free call answers {other:?}"
)),
}
}
}
assert!(failures.is_empty(), "{}", failures.join("\n "));
}
#[test]
fn every_published_command_is_recognised_by_its_control() {
use rust_widgets::widget::capability::types::CapabilityAccessError;
let factory = WidgetFactory::new_with_defaults();
let mut failures: Vec<String> = Vec::new();
for capability in factory.capabilities() {
let canonical = capability.canonical_name;
for command in capability.commands {
if command.starts_with("set_") {
continue;
}
let Some(mut widget) = factory.create(canonical, Rect::new(0, 0, 100, 100), "") else {
failures.push(format!("{canonical} publishes `{command}` but cannot be built"));
continue;
};
match factory.invoke_command(widget.as_mut(), command) {
Ok(()) => {}
Err(CapabilityAccessError::OutOfRange) => {}
Err(CapabilityAccessError::UnknownCommand) => failures
.push(format!("{canonical} publishes `{command}` but answers UnknownCommand")),
Err(CapabilityAccessError::UnsupportedOnWidget) => failures.push(format!(
"{canonical} publishes `{command}` but answers UnsupportedOnWidget"
)),
Err(other) => failures.push(format!("{canonical} `{command}` answered {other:?}")),
}
}
}
assert!(failures.is_empty(), "{}", failures.join("\n "));
}
#[test]
fn every_capability_publishing_a_surface_is_constructible() {
let factory = WidgetFactory::new_with_defaults();
let mut offenders: Vec<&str> = Vec::new();
for capability in factory.capabilities() {
if capability.commands.is_empty() && capability.events.is_empty() {
continue;
}
if factory.create(capability.canonical_name, Rect::new(0, 0, 100, 100), "").is_none() {
offenders.push(capability.canonical_name);
}
}
assert!(
offenders.is_empty(),
"these capabilities publish commands or events but cannot be constructed: {offenders:?}"
);
}