| use wasm_bindgen::prelude::*; |
| use wasm_bindgen_test::*; |
| use web_sys::Element; |
| |
| #[wasm_bindgen(module = "/tests/wasm/element.js")] |
| extern "C" { |
| fn new_div() -> Element; |
| } |
| |
| #[wasm_bindgen_test] |
| fn element() { |
| /* Tests needed for: |
| namespace_uri |
| */ |
| let element = new_div(); |
| |
| assert_eq!(element, element); |
| |
| assert_eq!(element.prefix(), None, "Shouldn't have a prefix"); |
| assert_eq!(element.local_name(), "div", "Should have a div local name"); |
| assert_eq!(element.tag_name(), "DIV", "Should be a div tag"); |
| assert!(!element.has_attribute("id"), "Shouldn't have an id"); |
| element.set_id("beep"); |
| assert_eq!(element.id(), "beep", "Should have an id of 'beep'"); |
| |
| // must_use is set on this result? |
| assert_eq!( |
| element.set_attribute("id", "beep").unwrap(), |
| (), |
| "Should set id" |
| ); |
| assert!(element.has_attribute("id"), "Should now have an id"); |
| assert_eq!( |
| element.remove_attribute("id").unwrap(), |
| (), |
| "Should return nothing if removed" |
| ); |
| |
| assert_eq!(element.class_name(), "", "Shouldn't have a class name"); |
| element.set_class_name("test thing"); |
| assert_eq!( |
| element.class_name(), |
| "test thing", |
| "Should have a class name" |
| ); |
| assert_eq!( |
| element.get_attribute("class").unwrap(), |
| "test thing", |
| "Should have a class name" |
| ); |
| assert_eq!( |
| element.remove_attribute("class").unwrap(), |
| (), |
| "Should return nothing if removed" |
| ); |
| /* Tests needed for: |
| get_attribute_ns |
| */ |
| |
| /*TODO should we enable toggle_attribute tests? (Firefox Nightly + Chrome canary only) |
| // TODO toggle_attribute should permit a single argument when optional arguments are supported |
| assert!(!element.has_attribute("disabled"), "Should not be disabled"); |
| assert!(element.toggle_attribute("disabled", true).unwrap(), "Should return true when attribute is set"); |
| assert!(element.has_attribute("disabled"), "Should be disabled"); |
| assert!(!element.toggle_attribute("disabled", false).unwrap(), "Should return false when attribute is not set"); |
| assert!(!element.has_attribute("disabled"), "Should not be disabled"); |
| */ |
| |
| assert!(!element.has_attribute("title"), "Should not have a title"); |
| assert_eq!( |
| element.set_attribute("title", "boop").unwrap(), |
| (), |
| "Should return nothing if set correctly" |
| ); |
| assert!(element.has_attribute("title"), "Should have a title"); |
| // TODO check get_attribute here when supported |
| assert_eq!( |
| element.remove_attribute("title").unwrap(), |
| (), |
| "Should return nothing if removed" |
| ); |
| assert!(!element.has_attribute("title"), "Should not have a title"); |
| /* Tests needed for: |
| set_attribute_ns |
| */ |
| |
| assert!(!element.has_attributes(), "Should not have any attributes"); |
| assert_eq!( |
| element.set_attribute("title", "boop").unwrap(), |
| (), |
| "Should return nothing if set correctly" |
| ); |
| assert!(element.has_attributes(), "Should have attributes"); |
| assert_eq!( |
| element.remove_attribute("title").unwrap(), |
| (), |
| "Should return nothing if removed" |
| ); |
| /* Tests needed for: |
| remove_attribute_ns |
| has_attribure_ns |
| closest |
| */ |
| |
| assert_eq!( |
| element.matches(".this-is-a-thing").unwrap(), |
| false, |
| "Should not match selector" |
| ); |
| assert_eq!( |
| element.webkit_matches_selector(".this-is-a-thing").unwrap(), |
| false, |
| "Should not match selector" |
| ); |
| element.set_class_name("this-is-a-thing"); |
| assert_eq!( |
| element.matches(".this-is-a-thing").unwrap(), |
| true, |
| "Should match selector" |
| ); |
| assert_eq!( |
| element.webkit_matches_selector(".this-is-a-thing").unwrap(), |
| true, |
| "Should match selector" |
| ); |
| assert_eq!( |
| element.remove_attribute("class").unwrap(), |
| (), |
| "Should return nothing if removed" |
| ); |
| |
| // TODO non standard moz_matches_selector should we even support? |
| |
| /* Tests needed for: |
| insert_adjacent_element |
| insert_adjacent_text |
| set_pointer_capture |
| release_pointer_capture |
| has_pointer_capture |
| set_capture |
| release_capture |
| scroll_top |
| set_scroll_top |
| scroll_left |
| set_scroll_left |
| scroll_width |
| scroll_height |
| scroll, |
| scroll_to |
| scroll_by |
| client_top |
| client_left |
| client_width |
| client_height |
| scroll_top_max |
| scroll_left_max |
| */ |
| assert_eq!(element.inner_html(), "", "Should return no content"); |
| element.set_inner_html("<strong>Hey!</strong><em>Web!</em>"); |
| assert_eq!( |
| element.inner_html(), |
| "<strong>Hey!</strong><em>Web!</em>", |
| "Should return HTML conent" |
| ); |
| assert_eq!( |
| element.query_selector_all("strong").unwrap().length(), |
| 1, |
| "Should return one element" |
| ); |
| assert!( |
| element.query_selector("strong").unwrap().is_some(), |
| "Should return an element" |
| ); |
| element.set_inner_html(""); |
| assert_eq!(element.inner_html(), "", "Should return no content"); |
| |
| /* Tests needed for: |
| outer_html |
| set_outer_html |
| insert_adjacent_html |
| */ |
| |
| assert!( |
| element.query_selector(".none-existant").unwrap().is_none(), |
| "Should return no results" |
| ); |
| assert_eq!( |
| element |
| .query_selector_all(".none-existant") |
| .unwrap() |
| .length(), |
| 0, |
| "Should return no results" |
| ); |
| /* Tests needed for: |
| slot |
| set_slot |
| request_fullscreen |
| request_pointer_lock |
| */ |
| |
| let child = new_div(); |
| assert_eq!( |
| element.get_elements_by_tag_name("div").length(), |
| 0, |
| "Element should not contain any div child" |
| ); |
| element.append_child(&child).unwrap(); |
| assert_eq!( |
| element.get_elements_by_tag_name("div").length(), |
| 1, |
| "Element should contain one div child" |
| ); |
| assert_eq!( |
| element.get_elements_by_class_name("foo").length(), |
| 0, |
| "Element should not have childs with class foo" |
| ); |
| child.class_list().add_1("foo").unwrap(); |
| assert_eq!( |
| element.get_elements_by_class_name("foo").length(), |
| 1, |
| "Element should have one child with class foo" |
| ); |
| element.remove_child(&child).unwrap(); |
| } |