use wasm_bindgen::prelude::*;
use wasm_bindgen_test::*;
use web_sys::HtmlScriptElement;

#[wasm_bindgen(module = "/tests/wasm/element.js")]
extern "C" {
    fn new_script() -> HtmlScriptElement;
}

#[wasm_bindgen_test]
fn test_script_element() {
    let element = new_script();
    assert_eq!(element.src(), "", "Shouldn't have a src");
    element.set_src("https://example.com/script.js");
    assert_eq!(
        element.src(),
        "https://example.com/script.js",
        "Should have a src"
    );

    assert_eq!(element.type_(), "", "Shouldn't have a type");
    element.set_type("application/javascript");
    assert_eq!(
        element.type_(),
        "application/javascript",
        "Should have a type"
    );

    assert!(!element.no_module(), "Shouldn't be a nomodule");
    element.set_no_module(true);
    assert!(element.no_module(), "Should be a nomodule");

    assert_eq!(element.charset(), "", "Shouldn't have a charset");
    element.set_charset("UTF-8");
    assert_eq!(element.charset(), "UTF-8", "Should have a charset");

    assert!(element.r#async(), "Should be async");
    element.set_async(false);
    assert!(!element.r#async(), "Shouldn't be a async");

    assert!(!element.defer(), "Shouldn't be a defer");
    element.set_defer(true);
    assert!(element.defer(), "Should be a defer");

    assert!(
        element.cross_origin().is_none(),
        "Shouldn't have a crossorigin"
    );
    element.set_cross_origin(Some("anonymous"));
    assert_eq!(
        element.cross_origin().unwrap(),
        "anonymous",
        "Should have a crossorigin"
    );
    element.set_cross_origin(None);
    assert!(
        element.cross_origin().is_none(),
        "Shouldn't have a crossorigin"
    );

    assert_eq!(element.text().unwrap(), "", "Shouldn't have text");
    let _: () = element.set_text("text").unwrap();
    assert_eq!(element.text().unwrap(), "text", "Should have text");

    assert_eq!(element.event(), "", "Shouldn't have an event");
    element.set_event("ev");
    assert_eq!(element.event(), "ev", "Should have an event");

    assert_eq!(element.html_for(), "", "Shouldn't have an html_for");
    element.set_html_for("hey");
    assert_eq!(element.html_for(), "hey", "Should have an html_for");

    assert_eq!(element.integrity(), "", "Shouldn't have an integrity");
    element.set_integrity("integrity-val");
    assert_eq!(
        element.integrity(),
        "integrity-val",
        "Should have an integrity"
    );
}
