rust.eventbus/tests/dyn_events.rs

54 lines
1.1 KiB
Rust

#[macro_use]
extern crate eventbus;
use eventbus::{Event, EventBus};
trait MyEvent : Event {
fn get_i(&self) -> i32;
fn set_i(&mut self, i32);
}
struct MyEventImpl {
i: i32
}
impl Event for MyEventImpl {
}
impl MyEvent for MyEventImpl {
fn get_i(&self) -> i32 {
self.i
}
fn set_i(&mut self, i: i32) {
self.i = i;
}
}
fn add_handler(e: &mut MyEvent) {
/* adds 1 */
let i = e.get_i();
e.set_i(i+1);
}
fn no_handler(e: &mut MyEvent) {
/* does nothing */
let i = e.get_i();
e.set_i(i);
}
#[test]
fn test_dyn_usage() {
let event_bus = EventBus::new();
//let handler_id = event_bus.register(add_handler, 0);
register_hook!(&event_bus, 0, dyn MyEvent, add_handler);
let mut event = MyEventImpl { i: 3 };
assert_eq!(event.i, 3);
post_event!(&event_bus, &mut event, dyn MyEvent);
assert_eq!(event.i, 4);
register_hook!(&event_bus, 1, dyn MyEvent, no_handler);
post_event!(&event_bus, &mut event, dyn MyEvent);
assert_eq!(event.i, 5);
//event_bus.unregister(handler_id);
post_event!(&event_bus, &mut event, dyn MyEvent);
//assert_eq!(event.i, 5);
}