use crate::error::VBResult;
use crate::state;
use crate::value::VBString;
pub fn app_activate(title: &VBString, wait: bool) -> VBResult<()> {
state::interaction::app_activate(
&state::interaction::AppActivateRequest::new(title.as_str()).with_wait(wait),
)
}
#[cfg(test)]
mod tests {
use super::*;
use crate::state::interaction::{memory::MemoryBackend, AppActivateRecord};
use crate::state::test_support::lock_test;
#[test]
fn activation_succeeds_by_default() {
let _guard = lock_test();
crate::state::interaction::set_backend(Box::new(MemoryBackend::new()));
app_activate(&VBString::from("Calculator"), false).unwrap();
assert_eq!(
crate::state::interaction::with_memory_backend(
|backend| backend.take_appactivate_requests()
),
Some(vec![AppActivateRecord {
title: "Calculator".into(),
wait: false,
}]),
);
crate::state::interaction::reset_backend();
}
#[test]
fn scripted_failure_is_error_5_with_the_wait_flag_forwarded() {
let _guard = lock_test();
let backend = MemoryBackend::new();
backend.push_activate_response(false);
crate::state::interaction::set_backend(Box::new(backend));
let err = app_activate(&VBString::from("Ghost"), true).unwrap_err();
assert_eq!(err.number, 5);
assert!(err.description.contains("Ghost"), "{}", err.description);
crate::state::interaction::reset_backend();
}
#[test]
fn recorded_requests_capture_wait() {
let _guard = lock_test();
crate::state::interaction::set_backend(Box::new(MemoryBackend::new()));
app_activate(&VBString::from("Notepad"), true).unwrap();
let requests = crate::state::interaction::with_memory_backend(|backend| {
backend.take_appactivate_requests()
})
.unwrap();
assert!(requests[0].wait);
crate::state::interaction::reset_backend();
}
}