Files
dioxus/packages/dioxus/tests/vdom_rebuild.rs
T
David Craven 99dafdb8ee Build failure on master. (#627)
* Build failure on master.

* Fix ci failure.

* Fix test.

* Ignore broken tests.

* Fix doctests.
2022-11-22 09:56:15 -08:00

105 lines
2.9 KiB
Rust

#![allow(unused, non_upper_case_globals)]
//! Rebuilding tests
//! ----------------
//!
//! This tests module ensures that the initial build of the virtualdom is correct.
//! This does not include dynamic tests or the diffing algorithm itself.
//!
//! It does prove that mounting works properly and the correct edit streams are generated.
//!
//! Don't have a good way to validate, everything is done manually ATM
use dioxus::prelude::*;
use dioxus_core::DomEdit::*;
#[test]
fn app_runs() {
static App: Component = |cx| render!(div{"hello"} );
let mut vdom = VirtualDom::new(App);
let edits = vdom.rebuild();
}
#[test]
fn fragments_work() {
static App: Component = |cx| {
cx.render(rsx!(
div{"hello"}
div{"goodbye"}
))
};
let mut vdom = VirtualDom::new(App);
let edits = vdom.rebuild();
// should result in a final "appendchildren n=2"
dbg!(edits);
}
#[test]
fn lists_work() {
static App: Component = |cx| {
cx.render(rsx!(
h1 {"hello"}
(0..6).map(|f| rsx!(span{ "{f}" }))
))
};
let mut vdom = VirtualDom::new(App);
let edits = vdom.rebuild();
dbg!(edits);
}
#[test]
#[ignore]
fn conditional_rendering() {
static App: Component = |cx| {
cx.render(rsx!(
h1 {"hello"}
{true.then(|| rsx!(span{ "a" }))}
{false.then(|| rsx!(span{ "b" }))}
))
};
let mut vdom = VirtualDom::new(App);
let mutations = vdom.rebuild();
assert_eq!(
mutations.edits,
[
CreateElement { root: Some(1), tag: "template", children: 3 },
CreateElement { root: None, tag: "h1", children: 1 },
CreateTextNode { root: None, text: "hello" },
CreatePlaceholder { root: None },
CreatePlaceholder { root: None },
CloneNodeChildren { id: Some(1), new_ids: vec![2, 3, 4] },
CreateElement { root: Some(5), tag: "template", children: 1 },
CreateElement { root: None, tag: "span", children: 1 },
CreateTextNode { root: None, text: "a" },
CloneNodeChildren { id: Some(5), new_ids: vec![6] },
SetLastNode { id: 3 },
ReplaceWith { root: None, nodes: vec![6] },
CreatePlaceholder { root: Some(7) },
SetLastNode { id: 4 },
ReplaceWith { root: None, nodes: vec![7] },
AppendChildren { root: Some(0), children: vec![2, 3, 4] }
]
)
}
#[test]
fn child_components() {
static App: Component = |cx| {
cx.render(rsx!(
{true.then(|| rsx!(Child { }))}
{false.then(|| rsx!(Child { }))}
))
};
static Child: Component = |cx| {
cx.render(rsx!(
h1 {"hello"}
h1 {"goodbye"}
))
};
let mut vdom = VirtualDom::new(App);
let edits = vdom.rebuild();
dbg!(edits);
}