diff --git a/crates/web-sys/tests/wasm/html_element.rs b/crates/web-sys/tests/wasm/html_element.rs index 24e08aea..3cfb2dbc 100644 --- a/crates/web-sys/tests/wasm/html_element.rs +++ b/crates/web-sys/tests/wasm/html_element.rs @@ -33,6 +33,21 @@ fn test_html_element() { element.set_hidden(true); assert!(element.hidden(), "Should be hidden"); + assert_eq!(element.class_list().get(0), None, "Shouldn't have class at index 0"); + element.class_list().add_2("a", "b").unwrap(); + assert_eq!(element.class_list().get(0).unwrap(), "a", "Should have class at index 0"); + assert_eq!(element.class_list().get(1).unwrap(), "b", "Should have class at index 1"); + assert_eq!(element.class_list().get(2), None, "Shouldn't have class at index 2"); + + assert_eq!(element.dataset().get("id"), None, "Shouldn't have data-id"); + element.dataset().set("id", "123").unwrap(); + assert_eq!(element.dataset().get("id").unwrap(), "123", "Should have data-id"); + + assert_eq!(element.style().get(0), None, "Shouldn't have style property name at index 0"); + element.style().set_property("background-color", "red").unwrap(); + assert_eq!(element.style().get(0).unwrap(), "background-color", "Should have style property at index 0"); + assert_eq!(element.style().get_property_value("background-color").unwrap(), "red", "Should have style property"); + // TODO add a click handler here element.click(); diff --git a/crates/webidl-tests/simple.rs b/crates/webidl-tests/simple.rs index 6216ba72..91b8f54c 100644 --- a/crates/webidl-tests/simple.rs +++ b/crates/webidl-tests/simple.rs @@ -86,11 +86,11 @@ fn global_method() { #[wasm_bindgen_test] fn indexing() { let f = Indexing::new().unwrap(); - assert_eq!(f.get(123), -1); + assert_eq!(f.get(123).unwrap(), -1); f.set(123, 456); - assert_eq!(f.get(123), 456); + assert_eq!(f.get(123).unwrap(), 456); f.delete(123); - assert_eq!(f.get(123), -1); + assert_eq!(f.get(123).unwrap(), -1); } #[wasm_bindgen_test] diff --git a/crates/webidl/src/util.rs b/crates/webidl/src/util.rs index 2170cd0f..5134d584 100644 --- a/crates/webidl/src/util.rs +++ b/crates/webidl/src/util.rs @@ -580,6 +580,20 @@ impl<'src> FirstPassRecord<'src> { let structural = force_structural || is_structural(signature.orig.attrs.as_ref(), container_attrs); let catch = force_throws || throws(&signature.orig.attrs); + let ret_ty = if id == &OperationId::IndexingGetter { + // All indexing getters should return optional values (or + // otherwise be marked with catch). + match ret_ty { + IdlType::Nullable(_) => ret_ty, + ref ty @ _ => if catch { + ret_ty + } else { + IdlType::Nullable(Box::new(ty.clone())) + }, + } + } else { + ret_ty + }; let variadic = signature.args.len() == signature.orig.args.len() && signature .orig diff --git a/examples/todomvc/src/element.rs b/examples/todomvc/src/element.rs index d2f1ce18..4b896596 100644 --- a/examples/todomvc/src/element.rs +++ b/examples/todomvc/src/element.rs @@ -294,7 +294,9 @@ impl Element { if let Some(el) = self.el.take() { { if let Some(el) = wasm_bindgen::JsCast::dyn_ref::(&el) { - text = el.dataset().get(key); + if let Some(value) = el.dataset().get(key) { + text = value; + } } } self.el = Some(el);