wip: it works but the page is backwards
This commit is contained in:
1 parent
a0a977a12d
commit
cdcd8611e8
19 files changed
+239
-349
No files matched your search
@@ -1,12 +1,7 @@
|
||||
//! Diffing Tests
|
||||
//! -------------
|
||||
//!
|
||||
//! These should always compile and run, but the result is not validat root: (), m: () ed for each test.
|
||||
//! TODO: Validate the results beyond visual inspection.
|
||||
|
||||
use bumpalo::Bump;
|
||||
|
||||
use anyhow::{Context, Result};
|
||||
use dioxus::{
|
||||
arena::SharedResources, diff::DiffMachine, prelude::*, DiffInstruction, DomEdit, MountType,
|
||||
};
|
||||
@@ -18,7 +13,7 @@ use DomEdit::*;
|
||||
|
||||
// logging is wired up to the test harness
|
||||
// feel free to enable while debugging
|
||||
const IS_LOGGING_ENABLED: bool = true;
|
||||
const IS_LOGGING_ENABLED: bool = false;
|
||||
|
||||
struct TestDom {
|
||||
bump: Bump,
|
||||
@@ -26,9 +21,7 @@ struct TestDom {
|
||||
}
|
||||
impl TestDom {
|
||||
fn new() -> TestDom {
|
||||
if IS_LOGGING_ENABLED {
|
||||
test_logging::set_up_logging();
|
||||
}
|
||||
test_logging::set_up_logging(IS_LOGGING_ENABLED);
|
||||
let bump = Bump::new();
|
||||
let resources = SharedResources::new();
|
||||
TestDom { bump, resources }
|
||||
@@ -82,8 +75,6 @@ impl TestDom {
|
||||
|
||||
let new = self.bump.alloc(self.render(right));
|
||||
|
||||
// let mut create_edits = Vec::new();
|
||||
|
||||
let mut machine = DiffMachine::new_headless(&self.resources);
|
||||
|
||||
machine.stack.create_node(old, MountType::Append);
|
||||
@@ -343,16 +334,31 @@ fn two_fragments_with_differrent_elements_are_differet() {
|
||||
let dom = TestDom::new();
|
||||
|
||||
let left = rsx!(
|
||||
{ (0..2).map(|f| rsx! { div { }} ) }
|
||||
{ (0..2).map(|_| rsx! { div { }} ) }
|
||||
p {}
|
||||
);
|
||||
let right = rsx!(
|
||||
{ (0..5).map(|f| rsx! (h1 { }) ) }
|
||||
{ (0..5).map(|_| rsx! (h1 { }) ) }
|
||||
p {}
|
||||
);
|
||||
|
||||
let edits = dom.lazy_diff(left, right);
|
||||
log::debug!("{:#?}", &edits);
|
||||
let (create, changes) = dom.lazy_diff(left, right);
|
||||
log::debug!("{:#?}", &changes);
|
||||
assert_eq!(
|
||||
changes.edits,
|
||||
[
|
||||
// create the new h1s
|
||||
CreateElement { tag: "h1", id: 3 },
|
||||
CreateElement { tag: "h1", id: 4 },
|
||||
CreateElement { tag: "h1", id: 5 },
|
||||
InsertAfter { root: 1, n: 3 },
|
||||
// replace the divs with new h1s
|
||||
CreateElement { tag: "h1", id: 6 },
|
||||
ReplaceWith { root: 0, m: 1 },
|
||||
CreateElement { tag: "h1", id: 7 },
|
||||
ReplaceWith { root: 1, m: 1 },
|
||||
]
|
||||
);
|
||||
}
|
||||
|
||||
/// Should result in multiple nodes destroyed - with changes to the first nodes
|
||||
@@ -452,14 +458,6 @@ fn keyed_diffing_order() {
|
||||
);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn fragment_keys() {
|
||||
let r = 1;
|
||||
let p = rsx! {
|
||||
Fragment { key: "asd {r}" }
|
||||
};
|
||||
}
|
||||
|
||||
/// Should result in moves, but not removals or additions
|
||||
#[test]
|
||||
fn keyed_diffing_out_of_order() {
|
||||
@@ -477,8 +475,12 @@ fn keyed_diffing_out_of_order() {
|
||||
})
|
||||
});
|
||||
|
||||
let edits = dom.lazy_diff(left, right);
|
||||
log::debug!("{:?}", &edits.1);
|
||||
let (_, changes) = dom.lazy_diff(left, right);
|
||||
log::debug!("{:?}", &changes);
|
||||
assert_eq!(
|
||||
changes.edits,
|
||||
[PushRoot { id: 6 }, InsertBefore { root: 4, n: 1 }]
|
||||
);
|
||||
}
|
||||
|
||||
/// Should result in moves only
|
||||
@@ -655,21 +657,24 @@ fn keyed_diffing_additions_and_moves_on_ends() {
|
||||
|
||||
let right = rsx!({
|
||||
[/**/ 7, 4, 5, 6, 11, 12 /**/].iter().map(|f| {
|
||||
// [/**/ 8, 7, 4, 5, 6, 9, 10 /**/].iter().map(|f| {
|
||||
rsx! { div { key: "{f}" }}
|
||||
})
|
||||
});
|
||||
|
||||
let (_, change) = dom.lazy_diff(left, right);
|
||||
log::debug!("{:?}", change);
|
||||
// assert_eq!(
|
||||
// change.edits,
|
||||
// [
|
||||
// CreateElement { id: 5, tag: "div" },
|
||||
// CreateElement { id: 6, tag: "div" },
|
||||
// InsertAfter { n: 2, root: 4 }
|
||||
// ]
|
||||
// );
|
||||
assert_eq!(
|
||||
change.edits,
|
||||
[
|
||||
// create 11, 12
|
||||
CreateElement { tag: "div", id: 4 },
|
||||
CreateElement { tag: "div", id: 5 },
|
||||
InsertAfter { root: 2, n: 2 },
|
||||
// move 7 to the front
|
||||
PushRoot { id: 3 },
|
||||
InsertBefore { root: 0, n: 1 }
|
||||
]
|
||||
);
|
||||
}
|
||||
|
||||
#[test]
|
||||
@@ -688,16 +693,25 @@ fn keyed_diffing_additions_and_moves_in_middle() {
|
||||
})
|
||||
});
|
||||
|
||||
// LIS: 4, 5, 6
|
||||
let (_, change) = dom.lazy_diff(left, right);
|
||||
log::debug!("{:?}", change);
|
||||
// assert_eq!(
|
||||
// change.edits,
|
||||
// [
|
||||
// CreateElement { id: 5, tag: "div" },
|
||||
// CreateElement { id: 6, tag: "div" },
|
||||
// InsertAfter { n: 2, root: 4 }
|
||||
// ]
|
||||
// );
|
||||
log::debug!("{:#?}", change);
|
||||
assert_eq!(
|
||||
change.edits,
|
||||
[
|
||||
// create 13, 17
|
||||
CreateElement { tag: "div", id: 4 },
|
||||
CreateElement { tag: "div", id: 5 },
|
||||
InsertBefore { root: 1, n: 2 },
|
||||
// create 11, 12
|
||||
CreateElement { tag: "div", id: 6 },
|
||||
CreateElement { tag: "div", id: 7 },
|
||||
InsertBefore { root: 2, n: 2 },
|
||||
// move 7
|
||||
PushRoot { id: 3 },
|
||||
InsertBefore { root: 0, n: 1 }
|
||||
]
|
||||
);
|
||||
}
|
||||
|
||||
#[test]
|
||||
|
||||
Reference in new issue
Block a user