dioxus/packages/core/tests/create_passthru.rs

103 lines
2.7 KiB
Rust
Raw Normal View History

2022-11-23 05:32:26 +00:00
use dioxus::core::Mutation::*;
use dioxus::prelude::*;
use dioxus_core::ElementId;
/// Should push the text node onto the stack and modify it
#[test]
fn nested_passthru_creates() {
fn App() -> Element {
2024-01-11 01:21:15 +00:00
render! {
PassThru {
PassThru {
2024-01-11 01:21:15 +00:00
PassThru { div { "hi" } }
2022-11-23 05:32:26 +00:00
}
}
2024-01-11 01:21:15 +00:00
}
2022-11-23 05:32:26 +00:00
}
#[component]
2024-01-11 17:11:44 +00:00
fn PassThru<'a>(children: Element) -> Element {
2024-01-11 01:21:15 +00:00
render!(children)
2022-11-23 05:32:26 +00:00
}
let mut dom = VirtualDom::new(App);
2024-01-11 01:21:15 +00:00
let edits = dom.rebuild_to_vec().santize();
2022-11-23 05:32:26 +00:00
assert_eq!(
2022-12-01 05:46:15 +00:00
edits.edits,
2022-11-23 05:32:26 +00:00
[
2022-11-24 07:15:01 +00:00
LoadTemplate { name: "template", index: 0, id: ElementId(1) },
2022-12-03 00:24:49 +00:00
AppendChildren { m: 1, id: ElementId(0) },
2022-11-23 05:32:26 +00:00
]
)
}
/// Should load all the templates and append them
2022-11-24 07:15:01 +00:00
///
/// Take note on how we don't spit out the template for child_comp since it's entirely dynamic
2022-11-23 05:32:26 +00:00
#[test]
fn nested_passthru_creates_add() {
fn App() -> Element {
2024-01-11 01:21:15 +00:00
render! {
ChildComp {
2022-11-23 05:32:26 +00:00
"1"
ChildComp {
2022-11-23 05:32:26 +00:00
"2"
ChildComp {
2022-11-23 05:32:26 +00:00
"3"
2024-01-11 01:21:15 +00:00
div { "hi" }
2022-11-23 05:32:26 +00:00
}
}
}
2024-01-11 01:21:15 +00:00
}
2022-11-23 05:32:26 +00:00
}
#[component]
2024-01-11 17:11:44 +00:00
fn ChildComp<'a>(children: Element) -> Element {
2024-01-11 01:21:15 +00:00
render! {children}
2022-11-23 05:32:26 +00:00
}
let mut dom = VirtualDom::new(App);
2022-11-23 05:32:26 +00:00
assert_eq!(
2024-01-11 01:21:15 +00:00
dom.rebuild_to_vec().santize().edits,
2022-11-23 05:32:26 +00:00
[
2022-11-24 07:15:01 +00:00
// load 1
LoadTemplate { name: "template", index: 0, id: ElementId(1) },
// load 2
LoadTemplate { name: "template", index: 0, id: ElementId(2) },
// load 3
LoadTemplate { name: "template", index: 0, id: ElementId(3) },
// load div that contains 4
LoadTemplate { name: "template", index: 1, id: ElementId(4) },
2022-12-03 00:24:49 +00:00
AppendChildren { id: ElementId(0), m: 4 },
2022-11-23 05:32:26 +00:00
]
);
}
2022-11-24 07:15:01 +00:00
/// note that the template is all dynamic roots - so it doesn't actually get cached as a template
2022-11-23 05:32:26 +00:00
#[test]
fn dynamic_node_as_root() {
fn App() -> Element {
2022-11-23 05:32:26 +00:00
let a = 123;
let b = 456;
2024-01-11 01:21:15 +00:00
render! { "{a}", "{b}" }
2022-11-23 05:32:26 +00:00
}
let mut dom = VirtualDom::new(App);
2024-01-11 01:21:15 +00:00
let edits = dom.rebuild_to_vec().santize();
2022-11-23 05:32:26 +00:00
// Since the roots were all dynamic, they should not cause any template muations
2022-12-03 00:24:49 +00:00
assert!(edits.templates.is_empty());
2022-11-23 05:32:26 +00:00
// The root node is text, so we just create it on the spot
assert_eq!(
2022-12-01 05:46:15 +00:00
edits.edits,
2022-11-23 05:32:26 +00:00
[
2024-01-11 01:21:15 +00:00
CreateTextNode { value: "123".to_string(), id: ElementId(1) },
CreateTextNode { value: "456".to_string(), id: ElementId(2) },
2022-12-03 00:24:49 +00:00
AppendChildren { id: ElementId(0), m: 2 }
2022-11-23 05:32:26 +00:00
]
)
}