123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181 |
- use wasm_bindgen::prelude::*;
- use wasm_bindgen_test::*;
- use web_sys::HtmlSelectElement;
- #[wasm_bindgen(module = "/tests/wasm/element.js")]
- extern "C" {
- fn new_select_with_food_opts() -> HtmlSelectElement;
- }
- #[wasm_bindgen_test]
- fn test_select_element() {
- // Creates a select with four options. Options are ["tomato", "potato", "orange", "apple"], where
- // the string is the .value and .text of each option.
- let select = new_select_with_food_opts();
- select.set_autofocus(true);
- assert_eq!(
- select.autofocus(),
- true,
- "Select element should have a true autofocus property."
- );
- select.set_autofocus(false);
- assert_eq!(
- select.autofocus(),
- false,
- "Select element should have a false autofocus property."
- );
- // TODO: This test currently fails on Firefox, but not Chrome. In Firefox, even though we select.set_autocomplete(), select.autocomplete() yields an empty String.
- // select.set_autocomplete("tomato");
- // assert_eq!(select.autocomplete(), "tomato", "Select element should have a 'tomato' autocomplete property.");
- select.set_disabled(true);
- assert_eq!(
- select.disabled(),
- true,
- "Select element should be disabled."
- );
- select.set_disabled(false);
- assert_eq!(
- select.disabled(),
- false,
- "Select element should not be disabled."
- );
- assert!(
- select.form().is_none(),
- "Select should not be associated with a form."
- );
- select.set_multiple(false);
- assert_eq!(
- select.multiple(),
- false,
- "Select element should have a false multiple property."
- );
- select.set_multiple(true);
- assert_eq!(
- select.multiple(),
- true,
- "Select element should have a true multiple property."
- );
- select.set_name("potato");
- assert_eq!(
- select.name(),
- "potato",
- "Select element should have a name property of 'potato'."
- );
- select.set_required(true);
- assert_eq!(
- select.required(),
- true,
- "Select element should be required."
- );
- select.set_required(false);
- assert_eq!(
- select.required(),
- false,
- "Select element should not be required."
- );
- select.set_size(432);
- assert_eq!(
- select.size(),
- 432,
- "Select element should have a size property of 432."
- );
- // Default type seems to be "select-multiple" for the browsers I tested, but there's no guarantee
- // on this, so let's just make sure we get back something here.
- assert!(
- select.type_().len() > 0,
- "Select element should have some type."
- );
- assert!(
- select.options().length() == 4,
- "Select element should have four options."
- );
- select.set_length(12);
- assert_eq!(
- select.length(),
- 12,
- "Select element should have a length of 12."
- );
- // Reset the length to four, as that's how many options we actually have.
- select.set_length(4);
- assert!(
- select
- .named_item("this should definitely find nothing")
- .is_none(),
- "Shouldn't be able to find a named item with the given string."
- );
- assert!(
- select.selected_options().length() == 1,
- "One option should be selected by default, just by way of having items."
- );
- select.set_selected_index(2);
- assert_eq!(
- select.selected_index(),
- 2,
- "Select element should have a selected index of 2."
- );
- // Quote from docs: The value property sets or returns the value of the selected option in a drop-down list.
- select.set_value("tomato"); // Select the "tomato" option
- assert_eq!(
- select.value(),
- "tomato",
- "Select element should have no selected value."
- );
- // This might be browser dependent, potentially rendering this test useless? Worked fine in Chrome and Firefox for now.
- assert_eq!(
- select.will_validate(),
- true,
- "Select element should not validate by default."
- );
- assert!(
- select.validation_message().is_ok(),
- "Select element should retrieve a validation message."
- );
- assert!(
- select.validity().valid(),
- "Our basic select should be valid."
- );
- assert!(
- select.check_validity(),
- "Our basic select should check out as valid."
- );
- assert!(
- select.report_validity(),
- "Our basic select should report valid."
- );
- select.set_custom_validity("Some custom validity error.");
- assert!(
- select.labels().length() == 0,
- "There should be no labels associated with our select element."
- );
- // TODO: This test won't work until this bug is fixed: https://www.w3.org/Bugs/Public/show_bug.cgi?id=20720. Sometime in the future, either remove this test or uncomment after bug is fixed.
- // assert!(select.named_item("tomato").is_some(), "Should be able to find the 'tomato' option before removing it.");
- // select.remove(0);
- // assert!(select.named_item("tomato").is_none(), "Shouldn't be able to find the 'tomato' option after removing it.")
- // TODO: As a result, we are missing a test for the remove() method.
- }
|