use wasm_bindgen_test::*; use wasm_bindgen::prelude::*; use web_sys::Element; #[wasm_bindgen(module = "./tests/wasm/element.js")] extern { fn new_div() -> Element; } #[wasm_bindgen_test] fn element() { /* Tests needed for: namespace_uri */ let element = new_div(); 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("Hey!Web!"); assert_eq!(element.inner_html(), "Hey!Web!", "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 */ }