//! Tests that ensure that diffing and patching work properly in a real browser. //! //! To run all tests in this file: //! //! wasm-pack test crates/virtual-dom-rs --chrome --headless -- --test diff_patch // #![feature(proc_macro_hygiene)] extern crate wasm_bindgen_test; extern crate web_sys; use wasm_bindgen_test::*; use virtual_dom_rs::prelude::*; wasm_bindgen_test_configure!(run_in_browser); mod diff_patch_test_case; use self::diff_patch_test_case::DiffPatchTest; #[wasm_bindgen_test] fn replace_child() { DiffPatchTest { desc: "Replace a root node attribute attribute and a child text node", old: html! {
Original element
}, new: html! {
Patched element
}, override_expected: None, } .test(); } #[wasm_bindgen_test] fn truncate_children() { DiffPatchTest { desc: "Truncates extra children", old: html! {
}, new: html! {
}, override_expected: None, } .test(); DiffPatchTest { desc: "https://github.com/chinedufn/percy/issues/48", old: html! {
ab

c
}, new: html! {
ab

}, override_expected: None, } .test(); } #[wasm_bindgen_test] fn remove_attributes() { DiffPatchTest { desc: "Removes attributes", old: html! {
}, new: html! {
}, override_expected: None, } .test(); } #[wasm_bindgen_test] fn append_children() { DiffPatchTest { desc: "Append a child node", old: html! {
}, new: html! {
}, override_expected: None, } .test(); } #[wasm_bindgen_test] fn text_node_siblings() { // NOTE: Since there are two text nodes next to eachother we expect a `` separator in // between them. // @see virtual_node/mod.rs -> create_dom_node() for more information // TODO: A little more spacing than there should be in between the text nodes ... but doesn't // impact the user experience so we can look into that later.. let override_expected = Some( r#"
The button has been clicked: world
"#, ); let old1 = VirtualNode::text("The button has been clicked: "); let old2 = VirtualNode::text("hello"); let new1 = VirtualNode::text("The button has been clicked: "); let new2 = VirtualNode::text("world"); DiffPatchTest { desc: "Diff patch on text node siblings", old: html! {
{ {old1} {old2} }
}, new: html! {
{ {new1} {new2} }
}, override_expected, } .test(); } #[wasm_bindgen_test] fn append_text_node() { DiffPatchTest { desc: "Append text node", old: html! {
}, new: html! {
Hello
}, override_expected: None, } .test(); } #[wasm_bindgen_test] fn append_sibling_text_nodes() { let text1 = VirtualNode::text("Hello"); let text2 = VirtualNode::text("World"); DiffPatchTest { desc: "Append sibling text nodes", old: html! {
}, new: html! {
{text1} {text2}
}, override_expected: None, } .test(); } #[wasm_bindgen_test] fn replace_with_children() { DiffPatchTest { desc: "Replace node that has children", old: html! {
0
1
}, new: html! {
2
3
}, override_expected: None, } .test(); } // https://github.com/chinedufn/percy/issues/62 #[wasm_bindgen_test] fn replace_element_with_text_node() { DiffPatchTest { desc: "#62: Replace element with text node", old: html! {
}, new: html! { a }, override_expected: None, } .test(); } // https://github.com/chinedufn/percy/issues/68 #[wasm_bindgen_test] fn text_root_node() { DiffPatchTest { desc: "Patching of text root node works", old: html! { Old text }, new: html! { New text }, override_expected: None, } .test(); } #[wasm_bindgen_test] fn replace_text_with_element() { DiffPatchTest { desc: "Replacing a text node with an element works", old: html! {
a
}, new: html! {

}, override_expected: None, } .test(); }