#[cfg(target_arch = "wasm32")]
#[cfg(test)]
mod html_test {
use crate::prelude::*;
use wasm_bindgen_test::*;
wasm_bindgen_test_configure!(run_in_browser);
#[derive(Clone, Debug)]
struct Msg;
macro_rules! assert_html {
($s:expr, $($t:tt)+) => {
let elem = html! {
$($t)+
}.render().outer_html();
assert_eq!(elem, $s);
};
}
#[wasm_bindgen_test]
fn mono_element() {
assert_html! {
"<div></div>",
div {}
};
}
#[wasm_bindgen_test]
fn one_level_nested() {
assert_html! {
"<div><div></div></div>",
div {
div {}
}
};
}
#[wasm_bindgen_test]
fn two_level_nested() {
assert_html! {
"<div><div><div></div></div></div>",
div {
div {
div {}
}
}
};
}
#[wasm_bindgen_test]
fn one_sibling() {
assert_html! {
"<div><span></span><span></span></div>",
div {
span {}
span {}
}
};
}
#[wasm_bindgen_test]
fn inner_text() {
assert_html! {
"<div><button>Increment</button></div>",
div {
button {
"Increment"
}
}
};
}
#[wasm_bindgen_test]
fn style() {
assert_html! {
"<div style=\"height: 100;\"><button style=\"margin: 10;\">Increment</button></div>",
div style: { height: 100 } {
button style: { margin: 10 } {
"Increment"
}
}
};
}
#[wasm_bindgen_test]
fn struct_usage() {
pub struct Test {
pub i: i32,
}
impl Test {
fn color(&self) -> &'static str {
match self.i {
0 => "red",
1 => "green",
2 => "blue",
_ => "black",
}
}
}
let test = Test { i: 0 };
assert_html! {
"<div style=\"height: 0;background: red;\">0</div>",
div style: {
height: test.i
background: test.color()
} {
test.i
}
};
}
#[wasm_bindgen_test]
fn class_shortcut() {
assert_html! {
"<div class=\"class1 class2\">test</div>",
div.class1.class2 {
"test"
}
};
}
#[wasm_bindgen_test]
fn id_shortcut() {
assert_html! {
"<div id=\"my_id\">test</div>",
div #my_id {
"test"
}
};
}
#[wasm_bindgen_test]
fn class_and_id_shortcut() {
assert_html! {
"<div id=\"my_id\" class=\"class1 class2\">test</div>",
div #my_id.class1.class2 {
"test"
}
};
}
#[wasm_bindgen_test]
fn test_if() {
fn view(i: u32) -> Html {
html! {
div {
if i > 0 {
div {
"test"
}
}
}
}
}
assert_eq!(view(0).render().outer_html(), "<div></div>");
assert_eq!(view(1).render().outer_html(), "<div><div>test</div></div>");
}
struct Test2 {
arr: Vec<i32>,
}
#[wasm_bindgen_test]
fn test_for() {
let test = Test2 { arr: vec![1, 2, 3] };
let mut view = html! {
div {
for item in test.arr.iter() {
div {
item
}
}
}
};
assert_eq!(
view.render().outer_html(),
"<div><div><div>1</div><div>2</div><div>3</div></div></div>"
);
}
#[wasm_bindgen_test]
fn mixed_text_and_node() {
assert_html! {
"<div>test<div>test</div>test</div>",
div {
"test"
div {
"test"
}
"test"
}
};
}
}