sauron 0.70.0

A versatile web framework and library for building client-side and/or server-side web applications
Documentation
use sauron::vdom::{diff::*, patch::*, *};

#[test]
fn key_lis_1_to_9() {
    let old: Node<()> = 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: Node<()> = 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(&old, &new);

    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")]),
                ]
            )
        ]
    );
}