use js_sys::{Object, Promise};
use wasm_bindgen::prelude::*;
use wasm_bindgen_futures::JsFuture;
use wasm_bindgen_test::*;
use web_sys::Event;

#[wasm_bindgen(module = "/tests/wasm/event.js")]
extern "C" {
    fn new_event() -> Promise;
}

#[wasm_bindgen_test]
async fn event() {
    let result = JsFuture::from(new_event()).await.unwrap();
    let event = Event::from(result);
    // All DOM interfaces should inherit from `Object`.
    assert!(event.is_instance_of::<Object>());
    let _: &Object = event.as_ref();

    // These should match `new Event`.
    assert!(event.bubbles());
    assert!(event.cancelable());
    assert!(event.composed());

    // The default behavior not initially prevented, but after
    // we call `prevent_default` it better be.
    assert!(!event.default_prevented());
    event.prevent_default();
    assert!(event.default_prevented());
}
