mt-dom 0.59.2

A library for generating patches as a result diffing virtual DOM tree
Documentation
use mt_dom::{diff::*, patch::*, *};

pub type MyNode =
    Node<&'static str, &'static str, &'static str, &'static str, &'static str>;

#[test]
fn test_multiple_replace() {
    let old: MyNode = element(
        "main",
        vec![attr("class", "multi_replace")],
        vec![element(
            "ul",
            vec![attr("class", "todo")],
            vec![
                element("li", vec![attr("key", "1")], vec![leaf("item1")]),
                element("li", vec![attr("key", "2")], vec![leaf("item2")]),
                element("li", vec![attr("key", "3")], vec![leaf("item3")]),
            ],
        )],
    );

    // we remove the key1
    let update1: MyNode = element(
        "main",
        vec![attr("class", "multi_replace")],
        vec![element(
            "ul",
            vec![attr("class", "todo")],
            vec![
                element("li", vec![attr("key", "10")], vec![leaf("item10")]),
                element("li", vec![attr("key", "20")], vec![leaf("item20")]),
                element("li", vec![attr("key", "30")], vec![leaf("item30")]),
            ],
        )],
    );

    let patches = diff_with_key(&old, &update1, &"key");

    dbg!(&patches);

    assert_eq!(
        patches,
        vec![
            Patch::remove_node(Some(&"li"), TreePath::new(vec![0, 1]),),
            Patch::remove_node(Some(&"li"), TreePath::new(vec![0, 2]),),
            Patch::replace_node(
                Some(&"li"),
                TreePath::new(vec![0, 0]),
                vec![
                    &element(
                        "li",
                        vec![attr("key", "10")],
                        vec![leaf("item10")]
                    ),
                    &element(
                        "li",
                        vec![attr("key", "20")],
                        vec![leaf("item20")]
                    ),
                    &element(
                        "li",
                        vec![attr("key", "30")],
                        vec![leaf("item30")]
                    ),
                ],
            ),
        ]
    );
}