use super::*;
#[derive(Clone, Debug, PartialEq)]
pub struct TestElement(pub HtmlElement);
impl TestElement {
pub fn click_outside(&self) {
self.0
.parent_element()
.expect("click_outside to be called on an element with a parent.")
.unchecked_into::<HtmlElement>()
.click()
}
pub fn as_html_string(&self) -> String {
self.0.outer_html()
}
pub fn display_text(&self) -> String {
get_all_text_nodes(self.dyn_ref::<Node>().unwrap()).join_text(String::new())
}
pub fn parse<F>(&self) -> Result<F, <F as std::str::FromStr>::Err>
where
F: std::str::FromStr,
{
self.display_text().parse::<F>()
}
pub fn set_display_value<S: AsRef<str>>(&self, value: S) {
if let Some(item) = self.dyn_ref::<web_sys::HtmlTextAreaElement>() {
item.set_value(value.as_ref());
} else if let Some(item) = self.dyn_ref::<web_sys::HtmlInputElement>() {
item.set_value(value.as_ref());
} else if let Some(item) = self.dyn_ref::<web_sys::HtmlSelectElement>() {
item.set_value(value.as_ref());
} else {
panic!(
"Expecting an input, textarea, or select element to set display value.
If you want to set a non-display value just use .set_value() transparently."
)
}
}
}
impl From<HtmlElement> for TestElement {
fn from(value: HtmlElement) -> Self {
Self(value)
}
}
impl Deref for TestElement {
type Target = web_sys::HtmlElement;
fn deref(&self) -> &Self::Target {
&self.0
}
}