use wasm_bindgen_test::*;
use web_sys::HtmlOptionElement;

#[wasm_bindgen_test]
fn test_option_element() {
    let option = HtmlOptionElement::new_with_text_and_value_and_default_selected_and_selected(
        "option_text",
        "option_value",
        false,
        true,
    )
    .unwrap();

    option.set_disabled(true);
    assert!(
        option.disabled(),
        "Option should be disabled after we set it to be disabled."
    );

    option.set_disabled(false);
    assert!(
        !option.disabled(),
        "Option should not be disabled after we set it to be not-disabled."
    );

    assert!(
        option.form().is_none(),
        "Our option should not be associated with a form."
    );

    option.set_label("Well this truly is a neat option");
    assert_eq!(
        option.label(),
        "Well this truly is a neat option",
        "Option should have the label we gave it."
    );

    option.set_default_selected(true);
    assert!(
        option.default_selected(),
        "Option should be default_selected after we set it to be default_selected."
    );

    option.set_default_selected(false);
    assert!(
        !option.default_selected(),
        "Option should not be default_selected after we set it to be not default_selected."
    );

    option.set_selected(true);
    assert!(
        option.selected(),
        "Option should be selected after we set it to be selected."
    );

    option.set_selected(false);
    assert!(
        !option.selected(),
        "Option should not be selected after we set it to be not selected."
    );

    option.set_value("tomato");
    assert_eq!(
        option.value(),
        "tomato",
        "Option should have the value we gave it."
    );

    option.set_text("potato");
    assert_eq!(
        option.text(),
        "potato",
        "Option should have the text we gave it."
    );

    assert_eq!(
        option.index(),
        0,
        "This should be the first option, since there are no other known options."
    );
}
