Skip to content

Commit 0e3b696

Browse files
j-develalexcrichton
authored andcommitted
Fix return type of WebIDL indexing getters (#1789)
* Wrap the return type of indexing getters as Option<T> if necessary. * Update tests for indexing getters * Fix typo * Add comments describing what the code segment is doing * Update indexing getter usage * Revert "Add comments describing what the code segment is doing" This reverts commit 624a14c. * Revert "Fix typo" This reverts commit 487fc30. * Revert "Wrap the return type of indexing getters as Option<T> if necessary." This reverts commit 547f3dd. * Update the return signatures of WebIDL indexing getters
1 parent 0859245 commit 0e3b696

File tree

4 files changed

+35
-4
lines changed

4 files changed

+35
-4
lines changed

crates/web-sys/tests/wasm/html_element.rs

+15
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,21 @@ fn test_html_element() {
3333
element.set_hidden(true);
3434
assert!(element.hidden(), "Should be hidden");
3535

36+
assert_eq!(element.class_list().get(0), None, "Shouldn't have class at index 0");
37+
element.class_list().add_2("a", "b").unwrap();
38+
assert_eq!(element.class_list().get(0).unwrap(), "a", "Should have class at index 0");
39+
assert_eq!(element.class_list().get(1).unwrap(), "b", "Should have class at index 1");
40+
assert_eq!(element.class_list().get(2), None, "Shouldn't have class at index 2");
41+
42+
assert_eq!(element.dataset().get("id"), None, "Shouldn't have data-id");
43+
element.dataset().set("id", "123").unwrap();
44+
assert_eq!(element.dataset().get("id").unwrap(), "123", "Should have data-id");
45+
46+
assert_eq!(element.style().get(0), None, "Shouldn't have style property name at index 0");
47+
element.style().set_property("background-color", "red").unwrap();
48+
assert_eq!(element.style().get(0).unwrap(), "background-color", "Should have style property at index 0");
49+
assert_eq!(element.style().get_property_value("background-color").unwrap(), "red", "Should have style property");
50+
3651
// TODO add a click handler here
3752
element.click();
3853

crates/webidl-tests/simple.rs

+3-3
Original file line numberDiff line numberDiff line change
@@ -86,11 +86,11 @@ fn global_method() {
8686
#[wasm_bindgen_test]
8787
fn indexing() {
8888
let f = Indexing::new().unwrap();
89-
assert_eq!(f.get(123), -1);
89+
assert_eq!(f.get(123).unwrap(), -1);
9090
f.set(123, 456);
91-
assert_eq!(f.get(123), 456);
91+
assert_eq!(f.get(123).unwrap(), 456);
9292
f.delete(123);
93-
assert_eq!(f.get(123), -1);
93+
assert_eq!(f.get(123).unwrap(), -1);
9494
}
9595

9696
#[wasm_bindgen_test]

crates/webidl/src/util.rs

+14
Original file line numberDiff line numberDiff line change
@@ -580,6 +580,20 @@ impl<'src> FirstPassRecord<'src> {
580580
let structural =
581581
force_structural || is_structural(signature.orig.attrs.as_ref(), container_attrs);
582582
let catch = force_throws || throws(&signature.orig.attrs);
583+
let ret_ty = if id == &OperationId::IndexingGetter {
584+
// All indexing getters should return optional values (or
585+
// otherwise be marked with catch).
586+
match ret_ty {
587+
IdlType::Nullable(_) => ret_ty,
588+
ref ty @ _ => if catch {
589+
ret_ty
590+
} else {
591+
IdlType::Nullable(Box::new(ty.clone()))
592+
},
593+
}
594+
} else {
595+
ret_ty
596+
};
583597
let variadic = signature.args.len() == signature.orig.args.len()
584598
&& signature
585599
.orig

examples/todomvc/src/element.rs

+3-1
Original file line numberDiff line numberDiff line change
@@ -294,7 +294,9 @@ impl Element {
294294
if let Some(el) = self.el.take() {
295295
{
296296
if let Some(el) = wasm_bindgen::JsCast::dyn_ref::<web_sys::HtmlElement>(&el) {
297-
text = el.dataset().get(key);
297+
if let Some(value) = el.dataset().get(key) {
298+
text = value;
299+
}
298300
}
299301
}
300302
self.el = Some(el);

0 commit comments

Comments
 (0)