use event_handler::{Event, EventInvocationError};
use std::sync::{Arc, Mutex};
#[test]
fn it_works() {
let value = Arc::new(Mutex::new(0));
let value2 = Arc::new(Mutex::new(0));
let event = Event::new();
let first_value = value.clone();
let update_first_value = move |amount| *first_value.lock().unwrap() = amount;
let first_value = value.clone();
let update_first_value_again = move |amount| *first_value.lock().unwrap() = amount;
let second_value = value2.clone();
let update_second_value = move |amount| *second_value.lock().unwrap() = amount * 2;
let handle = event.add_fn(update_first_value).unwrap();
let _handle = event.add_fn(update_second_value).unwrap();
let late_handle = event.add_fn(update_first_value_again).unwrap();
assert_eq!(event.len(), 3);
assert!(std::thread::spawn(move || { handle.invoke(41) })
.join()
.is_ok());
assert_eq!(*value.lock().unwrap(), 41);
assert_eq!(*value2.lock().unwrap(), 41 * 2);
assert!(std::thread::spawn(move || {
event.invoke(42);
})
.join()
.is_ok());
assert_eq!(*value.lock().unwrap(), 42);
assert_eq!(*value2.lock().unwrap(), 42 * 2);
assert_eq!(
std::thread::spawn(move || { late_handle.invoke(41) })
.join()
.unwrap(),
Err(EventInvocationError::EventDropped)
);
}