dioxus/packages/core/tests/create_fragments.rs
Evan Almloff fa4e5dbf62
Fix rsx autocomplete and diagnostics in the root; provide better completions after attributes are finished (#2656)
* fix rsx autocomplete and diagnostics in the root; provide better completions after attributes are finished

* clean up pr to use internal child parsing

* Fix peek_lowercase name

* fix comma diagnostics in the root

* Fix parsing components with a path

* remove simple routes trailing comma

* Fix incomplete_root_elements test

* Remove trailing commas from root body node in tests

---------

Co-authored-by: Jonathan Kelley <jkelleyrtp@gmail.com>
2024-07-23 16:34:50 -07:00

101 lines
2.2 KiB
Rust

//! Do we create fragments properly across complex boundaries?
use dioxus::dioxus_core::Mutation::*;
use dioxus::prelude::*;
use dioxus_core::ElementId;
#[test]
fn empty_fragment_creates_nothing() {
fn app() -> Element {
rsx!({})
}
let mut vdom = VirtualDom::new(app);
let edits = vdom.rebuild_to_vec();
assert_eq!(
edits.edits,
[
CreatePlaceholder { id: ElementId(1) },
AppendChildren { id: ElementId(0), m: 1 }
]
);
}
#[test]
fn root_fragments_work() {
let mut vdom = VirtualDom::new(|| {
rsx!(
div { "hello" }
div { "goodbye" }
)
});
assert_eq!(
vdom.rebuild_to_vec().edits.last().unwrap(),
&AppendChildren { id: ElementId(0), m: 2 }
);
}
#[test]
fn fragments_nested() {
let mut vdom = VirtualDom::new(|| {
rsx!(
div { "hello" }
div { "goodbye" }
{rsx! {
div { "hello" }
div { "goodbye" }
{rsx! {
div { "hello" }
div { "goodbye" }
{rsx! {
div { "hello" }
div { "goodbye" }
}}
}}
}}
)
});
assert_eq!(
vdom.rebuild_to_vec().edits.last().unwrap(),
&AppendChildren { id: ElementId(0), m: 8 }
);
}
#[test]
fn fragments_across_components() {
fn app() -> Element {
rsx! {
demo_child {}
demo_child {}
demo_child {}
demo_child {}
}
}
fn demo_child() -> Element {
let world = "world";
rsx! { "hellO!" {world} }
}
assert_eq!(
VirtualDom::new(app).rebuild_to_vec().edits.last().unwrap(),
&AppendChildren { id: ElementId(0), m: 8 }
);
}
#[test]
fn list_fragments() {
fn app() -> Element {
rsx!(
h1 { "hello" }
{(0..6).map(|f| rsx!( span { "{f}" }))}
)
}
assert_eq!(
VirtualDom::new(app).rebuild_to_vec().edits.last().unwrap(),
&AppendChildren { id: ElementId(0), m: 7 }
);
}