use dom_testing_library::*; use wasm_bindgen::JsCast; use wasm_bindgen_test::*; use web_sys::{HtmlElement, HtmlInputElement, HtmlLabelElement, Node}; wasm_bindgen_test_configure!(run_in_browser); #[wasm_bindgen_test] pub fn by_id() { let document = web_sys::window().unwrap().document().unwrap(); let body = document.body().unwrap(); let test_wrapper = document.create_element("div").unwrap(); let div = document.create_element("div").unwrap(); body.append_child(test_wrapper.dyn_ref::().unwrap()) .unwrap(); let renderer = ElementWrapper(&test_wrapper); test_wrapper .append_child(div.dyn_ref::().unwrap()) .unwrap(); let div_2 = document.create_element("div").unwrap(); test_wrapper .append_child(div_2.dyn_ref::().unwrap()) .unwrap(); div.set_id("div_1"); _ = renderer.get_by_id_contains("div").unwrap(); assert_eq!( div, renderer .get_by_id_contains("div") .unwrap() .0 .unchecked_into() ); div_2.set_id("div_2"); assert_ne!(div_2, div); let err = renderer.get_by_id_contains("div"); assert!(err.is_more_than_one()); assert_eq!( renderer .get_by_id("div_1") .unwrap() .0 .unchecked_into::(), div ); assert!(renderer.get_by_id("div_3").is_not_found()); assert_ne!( renderer.get_by_id("div_1").unwrap(), (renderer.get_by_id("div_2").unwrap()) ); assert_eq!(renderer.get_all_by_id_contains("div").len(), 2); } #[wasm_bindgen_test] pub fn by_label() { let document = web_sys::window().unwrap().document().unwrap(); let body = document.body().unwrap(); let test_wrapper = document.create_element("div").unwrap(); let renderer = ElementWrapper(&test_wrapper); body.append_child(test_wrapper.dyn_ref::().unwrap()) .unwrap(); let div = document.create_element("div").unwrap(); let label = document .create_element("label") .unwrap() .unchecked_into::(); let field = document.create_element("input").unwrap(); label.set_html_for("field_1"); label.set_inner_text("Field One"); field.set_id("field_1"); div.append_child(&label.into()).unwrap(); div.append_child(&field.into()).unwrap(); test_wrapper.append_child(&div.into()).unwrap(); assert!(renderer.get_by_label("Field One").is_ok()); assert!(renderer.get_by_label_contains("Field").is_ok()); assert!(renderer.get_by_label("Fiexl").is_not_found()); assert!(renderer.get_by_label_contains("xx").is_not_found()); let label = document .create_element("label") .unwrap() .unchecked_into::(); let field = document.create_element("input").unwrap(); label.set_html_for("field_2"); label.set_inner_text("Field Two"); field.set_id("field_2"); test_wrapper.append_child(&label.into()).unwrap(); test_wrapper.append_child(&field.into()).unwrap(); let label = document .create_element("label") .unwrap() .unchecked_into::(); let field: web_sys::Element = document.create_element("input").unwrap(); label.set_html_for("field_3"); label.set_inner_text("Field One"); field.set_id("field_3"); test_wrapper.append_child(&label.into()).unwrap(); test_wrapper.append_child(&field.into()).unwrap(); assert!(renderer.get_by_label_contains("Field").is_more_than_one()); assert_eq!(renderer.get_all_by_label("Field One").len(), 2); assert_eq!(renderer.get_all_by_label_contains("Field").len(), 3); } #[wasm_bindgen_test] pub fn by_text() { let document = web_sys::window().unwrap().document().unwrap(); let body = document.body().unwrap(); let test_wrapper = document.create_element("div").unwrap(); let renderer = ElementWrapper(&test_wrapper); body.append_child(test_wrapper.dyn_ref::().unwrap()) .unwrap(); let div = document.create_element("div").unwrap(); div.clone() .unchecked_into::() .set_inner_text("hello"); test_wrapper .append_child(div.dyn_ref::().unwrap()) .unwrap(); _ = renderer.get_by_text_contains("hello").unwrap(); let div_2 = document.create_element("div").unwrap(); div_2 .clone() .unchecked_into::() .set_inner_text("hello_2"); test_wrapper .append_child(div_2.dyn_ref::().unwrap()) .unwrap(); let err = renderer.get_by_text_contains("hello"); assert!(err.is_more_than_one()); assert_eq!( div, renderer.get_by_text("hello").unwrap().0.unchecked_into() ); assert_ne!(div_2, (div)); assert_eq!( renderer .get_by_text("hello_2") .unwrap() .0 .unchecked_into::(), div_2 ); assert!(renderer.get_by_text("hello_3").is_not_found()); assert_eq!(renderer.get_all_by_text_contains("hello").len(), 2); assert_eq!(renderer.get_all_by_text("hello").len(), 1); } #[wasm_bindgen_test] pub fn by_display_value() { let document = web_sys::window().unwrap().document().unwrap(); let body = document.body().unwrap(); let test_wrapper = document.create_element("div").unwrap(); let renderer = ElementWrapper(&test_wrapper); body.append_child(test_wrapper.dyn_ref::().unwrap()) .unwrap(); let div = document.create_element("div").unwrap(); let label = document .create_element("label") .unwrap() .unchecked_into::(); let field = document.create_element("input").unwrap(); label.set_html_for("field_1"); label.set_inner_text("Password"); field.set_id("field_1"); div.append_child(&label.into()).unwrap(); div.append_child(field.dyn_ref::().unwrap()).unwrap(); test_wrapper .append_child(div.dyn_ref::().unwrap()) .unwrap(); let field = TestElement(field.unchecked_into::()); field.set_display_value("1234"); let input = renderer.get_by_display_value("1234").unwrap(); assert_eq!(input, field); let area = document.create_element("textarea").unwrap(); div.append_child(area.dyn_ref::().unwrap()).unwrap(); let area = TestElement(area.unchecked_into::()); area.set_display_value("1234"); assert_eq!(renderer.get_all_by_display_value("1234").len(), 2); } #[wasm_bindgen_test] pub fn by_role() { let document = web_sys::window().unwrap().document().unwrap(); let body = document.body().unwrap(); let test_wrapper = document.create_element("div").unwrap(); let renderer = ElementWrapper(&test_wrapper); body.append_child(test_wrapper.dyn_ref::().unwrap()) .unwrap(); let div = document.create_element("div").unwrap(); let label = document .create_element("label") .unwrap() .unchecked_into::(); let field = document .create_element("input") .unwrap() .unchecked_into::(); label.set_html_for("field_1"); field.set_inner_text("Password"); field.set_attribute("role", "password").unwrap(); field.set_id("field_1"); div.append_child(&label.into()).unwrap(); div.append_child(field.dyn_ref::().unwrap()).unwrap(); test_wrapper .append_child(div.dyn_ref::().unwrap()) .unwrap(); assert!(renderer.get_by_role("password").is_ok()); } #[wasm_bindgen_test] pub fn by_placeholder() { let document = web_sys::window().unwrap().document().unwrap(); let body = document.body().unwrap(); let test_wrapper = document.create_element("div").unwrap(); let renderer = ElementWrapper(&test_wrapper); body.append_child(test_wrapper.dyn_ref::().unwrap()) .unwrap(); let div = document.create_element("div").unwrap(); let label = document .create_element("label") .unwrap() .unchecked_into::(); let field = document .create_element("input") .unwrap() .unchecked_into::(); label.set_html_for("field_1"); field.set_placeholder("Password"); field.set_id("field_1"); div.append_child(&label.into()).unwrap(); div.append_child(field.dyn_ref::().unwrap()).unwrap(); test_wrapper .append_child(div.dyn_ref::().unwrap()) .unwrap(); let input = renderer.get_by_placeholder("Password").unwrap(); assert_eq!(input, TestElement(field.unchecked_into::())); }