use webcore::value::Reference;
use webapi::event::{IEvent, IUiEvent, UiEvent, Event, ConcreteEvent};
#[derive(Clone, Debug, PartialEq, Eq, ReferenceType)]
#[reference(instance_of = "Event")] #[reference(subclass_of(Event))]
pub struct ChangeEvent( Reference );
impl IEvent for ChangeEvent {}
impl ConcreteEvent for ChangeEvent {
const EVENT_TYPE: &'static str = "change";
}
#[derive(Clone, Debug, PartialEq, Eq, ReferenceType)]
#[reference(instance_of = "Event")] #[reference(subclass_of(Event))]
pub struct InputEvent( Reference );
impl IEvent for InputEvent {}
impl ConcreteEvent for InputEvent {
const EVENT_TYPE: &'static str = "input";
}
#[derive(Clone, Debug, PartialEq, Eq, ReferenceType)]
#[reference(instance_of = "UIEvent")] #[reference(subclass_of(Event, UiEvent))]
pub struct ResourceLoadEvent( Reference );
impl IEvent for ResourceLoadEvent {}
impl IUiEvent for ResourceLoadEvent {}
impl ConcreteEvent for ResourceLoadEvent {
const EVENT_TYPE: &'static str = "load";
}
#[derive(Clone, Debug, PartialEq, Eq, ReferenceType)]
#[reference(instance_of = "UIEvent")] #[reference(subclass_of(Event, UiEvent))]
pub struct ResourceAbortEvent( Reference );
impl IEvent for ResourceAbortEvent {}
impl IUiEvent for ResourceAbortEvent {}
impl ConcreteEvent for ResourceAbortEvent {
const EVENT_TYPE: &'static str = "abort";
}
#[derive(Clone, Debug, PartialEq, Eq, ReferenceType)]
#[reference(instance_of = "UIEvent")] #[reference(subclass_of(Event, UiEvent))]
pub struct ResourceErrorEvent( Reference );
impl IEvent for ResourceErrorEvent {}
impl IUiEvent for ResourceErrorEvent {}
impl ConcreteEvent for ResourceErrorEvent {
const EVENT_TYPE: &'static str = "error";
}
#[derive(Clone, Debug, PartialEq, Eq, ReferenceType)]
#[reference(instance_of = "Event")] #[reference(subclass_of(Event))]
pub struct ResizeEvent( Reference );
impl IEvent for ResizeEvent {}
impl ConcreteEvent for ResizeEvent {
const EVENT_TYPE: &'static str = "resize";
}
#[derive(Clone, Debug, PartialEq, Eq, ReferenceType)]
#[reference(instance_of = "Event")] #[reference(subclass_of(Event))]
pub struct ReadyStateChangeEvent( Reference );
impl IEvent for ReadyStateChangeEvent {}
impl ConcreteEvent for ReadyStateChangeEvent {
const EVENT_TYPE: &'static str = "readystatechange";
}
#[cfg(all(test, feature = "web_test"))]
mod tests {
use super::*;
use webcore::try_from::TryInto;
#[test]
fn test_change_event() {
let event: ChangeEvent = js!(
return new Event( @{ChangeEvent::EVENT_TYPE} );
).try_into().unwrap();
assert_eq!( event.event_type(), ChangeEvent::EVENT_TYPE );
}
#[test]
fn test_input_event() {
let event: InputEvent = js!(
return new Event( @{InputEvent::EVENT_TYPE} );
).try_into().unwrap();
assert_eq!( event.event_type(), InputEvent::EVENT_TYPE );
}
#[test]
fn test_resource_load_event() {
let event: ResourceLoadEvent = js!(
return new UIEvent( @{ResourceLoadEvent::EVENT_TYPE} );
).try_into().unwrap();
assert_eq!( event.event_type(), ResourceLoadEvent::EVENT_TYPE );
}
#[test]
fn test_resource_abort_event() {
let event: ResourceAbortEvent = js!(
return new UIEvent( @{ResourceAbortEvent::EVENT_TYPE} );
).try_into().unwrap();
assert_eq!( event.event_type(), ResourceAbortEvent::EVENT_TYPE );
}
#[test]
fn test_ready_state_change_event() {
let event: ReadyStateChangeEvent = js!(
return new Event( @{ReadyStateChangeEvent::EVENT_TYPE} );
).try_into().unwrap();
assert_eq!( event.event_type(), ReadyStateChangeEvent::EVENT_TYPE);
}
}