use dioxus::prelude::*; use dioxus_router::prelude::*; use std::str::FromStr; fn prepare() -> String where ::Err: std::fmt::Display, { let mut vdom = VirtualDom::new_with_props( App, AppProps:: { phantom: std::marker::PhantomData, }, ); vdom.rebuild_in_place(); return dioxus_ssr::render(&vdom); #[derive(Props)] struct AppProps { phantom: std::marker::PhantomData, } impl Clone for AppProps { fn clone(&self) -> Self { Self { phantom: std::marker::PhantomData, } } } impl PartialEq for AppProps { fn eq(&self, _other: &Self) -> bool { false } } fn App(props: AppProps) -> Element where ::Err: std::fmt::Display, { rsx! { h1 { "App" } Router:: { config: || RouterConfig::default().history(MemoryHistory::default()) } } } } #[test] fn href_internal() { #[derive(Routable, Clone)] enum Route { #[route("/")] Root {}, #[route("/test")] Test {}, } #[component] fn Test() -> Element { todo!() } #[component] fn Root() -> Element { rsx! { Link { to: Route::Test {}, "Link" } } } let expected = format!( "

App

Link", href = r#"href="/test""#, default = r#"dioxus-prevent-default="onclick""#, class = r#"class="""#, id = r#"id="""#, rel = r#"rel="""#, target = r#"target="""# ); assert_eq!(prepare::(), expected); } #[test] fn href_external() { #[derive(Routable, Clone)] enum Route { #[route("/")] Root {}, #[route("/test")] Test {}, } #[component] fn Test() -> Element { todo!() } #[component] fn Root() -> Element { rsx! { Link { to: "https://dioxuslabs.com/", "Link" } } } let expected = format!( "

App

Link", href = r#"href="https://dioxuslabs.com/""#, default = r#"dioxus-prevent-default="""#, class = r#"class="""#, id = r#"id="""#, rel = r#"rel="noopener noreferrer""#, target = r#"target="""# ); assert_eq!(prepare::(), expected); } #[test] fn with_class() { #[derive(Routable, Clone)] enum Route { #[route("/")] Root {}, #[route("/test")] Test {}, } #[component] fn Test() -> Element { todo!() } #[component] fn Root() -> Element { rsx! { Link { to: Route::Test {}, class: "test_class", "Link" } } } let expected = format!( "

App

Link", href = r#"href="/test""#, default = r#"dioxus-prevent-default="onclick""#, class = r#"class="test_class""#, id = r#"id="""#, rel = r#"rel="""#, target = r#"target="""# ); assert_eq!(prepare::(), expected); } #[test] fn with_active_class_active() { #[derive(Routable, Clone)] enum Route { #[route("/")] Root {}, } #[component] fn Root() -> Element { rsx! { Link { to: Route::Root {}, active_class: "active_class".to_string(), class: "test_class", "Link" } } } let expected = format!( "

App

Link", href = r#"href="/""#, default = r#"dioxus-prevent-default="onclick""#, class = r#"class="test_class active_class""#, id = r#"id="""#, rel = r#"rel="""#, target = r#"target="""# ); assert_eq!(prepare::(), expected); } #[test] fn with_active_class_inactive() { #[derive(Routable, Clone)] enum Route { #[route("/")] Root {}, #[route("/test")] Test {}, } #[component] fn Test() -> Element { todo!() } #[component] fn Root() -> Element { rsx! { Link { to: Route::Test {}, active_class: "active_class".to_string(), class: "test_class", "Link" } } } let expected = format!( "

App

Link", href = r#"href="/test""#, default = r#"dioxus-prevent-default="onclick""#, class = r#"class="test_class""#, id = r#"id="""#, rel = r#"rel="""#, target = r#"target="""# ); assert_eq!(prepare::(), expected); } #[test] fn with_id() { #[derive(Routable, Clone)] enum Route { #[route("/")] Root {}, #[route("/test")] Test {}, } #[component] fn Test() -> Element { todo!() } #[component] fn Root() -> Element { rsx! { Link { to: Route::Test {}, id: "test_id", "Link" } } } let expected = format!( "

App

Link", href = r#"href="/test""#, default = r#"dioxus-prevent-default="onclick""#, class = r#"class="""#, id = r#"id="test_id""#, rel = r#"rel="""#, target = r#"target="""# ); assert_eq!(prepare::(), expected); } #[test] fn with_new_tab() { #[derive(Routable, Clone)] enum Route { #[route("/")] Root {}, #[route("/test")] Test {}, } #[component] fn Test() -> Element { todo!() } #[component] fn Root() -> Element { rsx! { Link { to: Route::Test {}, new_tab: true, "Link" } } } let expected = format!( "

App

Link", href = r#"href="/test""#, default = r#"dioxus-prevent-default="""#, class = r#"class="""#, id = r#"id="""#, rel = r#"rel="""#, target = r#"target="_blank""# ); assert_eq!(prepare::(), expected); } #[test] fn with_new_tab_external() { #[derive(Routable, Clone)] enum Route { #[route("/")] Root {}, } #[component] fn Root() -> Element { rsx! { Link { to: "https://dioxuslabs.com/", new_tab: true, "Link" } } } let expected = format!( "

App

Link", href = r#"href="https://dioxuslabs.com/""#, default = r#"dioxus-prevent-default="""#, class = r#"class="""#, id = r#"id="""#, rel = r#"rel="noopener noreferrer""#, target = r#"target="_blank""# ); assert_eq!(prepare::(), expected); } #[test] fn with_rel() { #[derive(Routable, Clone)] enum Route { #[route("/")] Root {}, #[route("/test")] Test {}, } #[component] fn Test() -> Element { todo!() } #[component] fn Root() -> Element { rsx! { Link { to: Route::Test {}, rel: "test_rel".to_string(), "Link" } } } let expected = format!( "

App

Link", href = r#"href="/test""#, default = r#"dioxus-prevent-default="onclick""#, class = r#"class="""#, id = r#"id="""#, rel = r#"rel="test_rel""#, target = r#"target="""# ); assert_eq!(prepare::(), expected); }