use cosh_tools::computer::errors::render;
use xa11y::{Diagnosis, Error};
fn main() {
const TOOL: &str = "computer_control";
let stale_selector = Error::SelectorNotMatched {
selector: "button[name='Export']".into(),
diagnosis: Some(Box::new(
Diagnosis::new()
.condition("press target actionable (visible && enabled)")
.selector("button[name='Export']")
.last_observed("matched button \"Export\" (visible=false, enabled=true)"),
)),
};
println!(
"── SelectorNotMatched ──\n{}\n",
render(TOOL, "press", &stale_selector)
);
let denied = Error::PermissionDenied {
instructions: "grant Accessibility access in System Settings".into(),
};
println!(
"── PermissionDenied ──\n{}\n",
render(TOOL, "click", &denied)
);
let bridge_off = Error::AccessibilityNotEnabled {
app: "Code".into(),
instructions: "launch with --force-renderer-accessibility".into(),
};
println!(
"── AccessibilityNotEnabled ──\n{}\n",
render(TOOL, "snapshot", &bridge_off)
);
let transient: Vec<(&str, Error)> = vec![
(
"Timeout",
Error::Timeout {
elapsed: std::time::Duration::from_secs(3),
diagnosis: Some(Box::new(
Diagnosis::new()
.condition("visible")
.selector("dialog[name='Export…']")
.last_observed("2 matches; both visible=false"),
)),
},
),
(
"ActionNotSupported",
Error::ActionNotSupported {
action: "expand".into(),
role: xa11y::Role::Button,
},
),
(
"Platform",
Error::Platform {
code: -1,
message: "pixel format not supported".into(),
},
),
];
for (variant, err) in transient {
let msg = render(TOOL, "act", &err);
println!("── {variant} ──\n{msg}\n");
}
}