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 key_lis_1_to_9() {
    let old: MyNode = element(
        "main",
        vec![attr("class", "container")],
        vec![
            element("div", vec![attr("key", "1")], vec![leaf("line1")]),
            element("div", vec![attr("key", "2")], vec![leaf("line2")]),
            element("div", vec![attr("key", "3")], vec![leaf("line3")]),
            element("div", vec![attr("key", "4")], vec![leaf("line4")]),
            element("div", vec![attr("key", "5")], vec![leaf("line5")]),
            element("div", vec![attr("key", "6")], vec![leaf("line6")]),
            element("div", vec![attr("key", "7")], vec![leaf("line7")]),
            element("div", vec![attr("key", "8")], vec![leaf("line8")]),
            element("div", vec![attr("key", "9")], vec![leaf("line9")]),
        ],
    );

    let new: MyNode = element(
        "main",
        vec![attr("class", "container")],
        vec![
            element("div", vec![attr("key", "XXX1")], vec![leaf("lineXXX")]),
            element("div", vec![attr("key", "XXX2")], vec![leaf("lineXXX")]),
            element("div", vec![attr("key", "XXX3")], vec![leaf("lineXXX")]),
            element("div", vec![attr("key", "1")], vec![leaf("line1")]),
            element("div", vec![attr("key", "2")], vec![leaf("line2")]),
            element("div", vec![attr("key", "3")], vec![leaf("line3")]),
            element("div", vec![attr("key", "4")], vec![leaf("line4")]),
            element("div", vec![attr("key", "5")], vec![leaf("line5")]),
            element("div", vec![attr("key", "6")], vec![leaf("line6")]),
            element("div", vec![attr("key", "7")], vec![leaf("line7")]),
            element("div", vec![attr("key", "8")], vec![leaf("line8")]),
            element("div", vec![attr("key", "9")], vec![leaf("line9")]),
            element("div", vec![attr("key", "XXX4")], vec![leaf("lineXXX")]),
            element("div", vec![attr("key", "XXX5")], vec![leaf("lineXXX")]),
            element("div", vec![attr("key", "XXX6")], vec![leaf("lineXXX")]),
        ],
    );

    let diff = diff_with_key(&old, &new, &"key");

    dbg!(&diff);

    assert_eq!(
        diff,
        vec![
            Patch::insert_after_node(
                Some(&"div"),
                TreePath::new(vec![8]),
                vec![
                    &element(
                        "div",
                        vec![attr("key", "XXX4")],
                        vec![leaf("lineXXX")]
                    ),
                    &element(
                        "div",
                        vec![attr("key", "XXX5")],
                        vec![leaf("lineXXX")]
                    ),
                    &element(
                        "div",
                        vec![attr("key", "XXX6")],
                        vec![leaf("lineXXX")]
                    ),
                ]
            ),
            Patch::insert_before_node(
                Some(&"div"),
                TreePath::new(vec![0]),
                vec![
                    &element(
                        "div",
                        vec![attr("key", "XXX1")],
                        vec![leaf("lineXXX")]
                    ),
                    &element(
                        "div",
                        vec![attr("key", "XXX2")],
                        vec![leaf("lineXXX")]
                    ),
                    &element(
                        "div",
                        vec![attr("key", "XXX3")],
                        vec![leaf("lineXXX")]
                    ),
                ]
            )
        ]
    );
}