#![allow(unused)] use std::rc::Rc; use dioxus::prelude::*; use dioxus_history::{History, MemoryHistory}; use dioxus_router::components::HistoryProvider; fn prepare(path: impl Into) -> VirtualDom { let mut vdom = VirtualDom::new_with_props( App, AppProps { path: path.into().parse().unwrap(), }, ); vdom.rebuild_in_place(); return vdom; #[derive(Routable, Clone, PartialEq)] #[rustfmt::skip] enum Route { #[layout(Layout)] #[child("/")] Child { child: ChildRoute }, } #[derive(Routable, Clone, PartialEq)] #[rustfmt::skip] enum ChildRoute{ #[layout(ChildLayout)] #[route("/")] RootIndex {} } #[component] fn App(path: Route) -> Element { rsx! { h1 { "App" } HistoryProvider { history: move |_| Rc::new(MemoryHistory::with_initial_path(path.clone())) as Rc, Router:: {} } } } #[component] fn RootIndex() -> Element { rsx! { h2 { "Root Index" } } } #[component] fn Layout() -> Element { rsx! { h2 { "parent layout" } Outlet:: { } } } #[component] fn ChildLayout() -> Element { rsx! { h2 { "child layout" } Outlet:: { } } } } #[test] fn root_index() { let vdom = prepare("/"); let html = dioxus_ssr::render(&vdom); assert_eq!( html, "

App

parent layout

child layout

Root Index

" ); }