#[test]
fn non_global_context_drives_its_own_timers() {
let Ok(platform) = i_slint_backend_selector::create_backend() else {
println!("SKIP: no backend available");
return;
};
let ctx = i_slint_core::SlintContext::new(platform);
let Some(proxy) = ctx.event_loop_proxy() else {
println!("SKIP: backend provides no event loop proxy");
return;
};
let fired = std::rc::Rc::new(std::cell::Cell::new(0));
let fired_ = fired.clone();
let timer = ctx.new_timer();
timer.start(slint::TimerMode::Repeated, std::time::Duration::from_millis(20), move || {
fired_.set(fired_.get() + 1)
});
std::thread::spawn(move || {
std::thread::sleep(std::time::Duration::from_millis(300));
let _ = proxy.quit_event_loop();
});
match ctx.run_event_loop() {
Ok(()) => {
assert!(
fired.get() > 0,
"the event loop ran but never drove this context's timers (fired {} times)",
fired.get()
);
}
Err(err) => println!("SKIP: event loop unavailable: {err}"),
}
}