dioxus/packages/router/tests/via_ssr/link.rs

359 lines
7.3 KiB
Rust
Raw Normal View History

2023-04-11 22:07:00 +02:00
use dioxus::prelude::*;
2023-05-31 13:57:33 -05:00
use std::str::FromStr;
2023-06-01 13:13:50 -05:00
fn prepare<R: Routable>() -> String
2023-05-31 13:57:33 -05:00
where
<R as FromStr>::Err: std::fmt::Display,
{
let mut vdom = VirtualDom::new_with_props(
App,
AppProps::<R> {
phantom: std::marker::PhantomData,
},
);
vdom.rebuild_in_place();
2023-04-11 22:07:00 +02:00
return dioxus_ssr::render(&vdom);
#[derive(Props)]
2023-05-31 13:57:33 -05:00
struct AppProps<R: Routable> {
phantom: std::marker::PhantomData<R>,
2023-04-11 22:07:00 +02:00
}
impl<R: Routable> Clone for AppProps<R> {
fn clone(&self) -> Self {
Self {
phantom: std::marker::PhantomData,
}
}
}
2023-05-31 13:57:33 -05:00
impl<R: Routable> PartialEq for AppProps<R> {
2023-04-12 20:19:01 +02:00
fn eq(&self, _other: &Self) -> bool {
2023-04-11 22:07:00 +02:00
false
}
}
2024-01-30 17:59:57 -08:00
#[allow(non_snake_case)]
fn App<R: Routable>(_props: AppProps<R>) -> Element
2023-05-31 13:57:33 -05:00
where
<R as FromStr>::Err: std::fmt::Display,
{
2024-01-16 13:18:46 -06:00
rsx! {
2023-04-11 22:07:00 +02:00
h1 { "App" }
2023-07-25 18:14:48 -07:00
Router::<R> {
2023-06-02 12:33:47 -05:00
config: || RouterConfig::default().history(MemoryHistory::default())
2023-05-31 13:57:33 -05:00
}
2023-04-11 22:07:00 +02:00
}
}
}
#[test]
fn href_internal() {
2023-06-01 13:13:50 -05:00
#[derive(Routable, Clone)]
2023-05-31 13:57:33 -05:00
enum Route {
#[route("/")]
Root {},
#[route("/test")]
Test {},
2023-04-11 22:07:00 +02:00
}
#[component]
fn Test() -> Element {
unimplemented!()
2023-05-31 13:57:33 -05:00
}
2023-04-11 22:07:00 +02:00
#[component]
fn Root() -> Element {
2024-01-16 13:18:46 -06:00
rsx! {
2023-04-11 22:07:00 +02:00
Link {
2023-07-24 11:57:56 -07:00
to: Route::Test {},
2023-04-11 22:07:00 +02:00
"Link"
}
}
}
let expected = format!(
2024-01-31 13:15:33 -08:00
"<h1>App</h1><a {href} {default}>Link</a>",
2023-05-31 13:57:33 -05:00
href = r#"href="/test""#,
2023-04-11 22:07:00 +02:00
default = r#"dioxus-prevent-default="onclick""#,
);
2023-05-31 13:57:33 -05:00
assert_eq!(prepare::<Route>(), expected);
2023-04-11 22:07:00 +02:00
}
#[test]
fn href_external() {
2023-06-01 13:13:50 -05:00
#[derive(Routable, Clone)]
2023-05-31 13:57:33 -05:00
enum Route {
#[route("/")]
Root {},
#[route("/test")]
Test {},
}
#[component]
fn Test() -> Element {
unimplemented!()
2023-05-31 13:57:33 -05:00
}
#[component]
fn Root() -> Element {
2024-01-16 13:18:46 -06:00
rsx! {
2023-04-11 22:07:00 +02:00
Link {
2023-07-25 18:14:48 -07:00
to: "https://dioxuslabs.com/",
2023-04-11 22:07:00 +02:00
"Link"
}
}
}
let expected = format!(
2024-01-31 13:15:33 -08:00
"<h1>App</h1><a {href} {default} {rel}>Link</a>",
2023-04-11 22:07:00 +02:00
href = r#"href="https://dioxuslabs.com/""#,
default = r#"dioxus-prevent-default="""#,
rel = r#"rel="noopener noreferrer""#,
);
2023-05-31 13:57:33 -05:00
assert_eq!(prepare::<Route>(), expected);
2023-04-11 22:07:00 +02:00
}
#[test]
fn with_class() {
2023-06-01 13:13:50 -05:00
#[derive(Routable, Clone)]
2023-05-31 13:57:33 -05:00
enum Route {
#[route("/")]
Root {},
#[route("/test")]
Test {},
}
#[component]
fn Test() -> Element {
unimplemented!()
2023-05-31 13:57:33 -05:00
}
#[component]
fn Root() -> Element {
2024-01-16 13:18:46 -06:00
rsx! {
2023-04-11 22:07:00 +02:00
Link {
2023-07-24 11:57:56 -07:00
to: Route::Test {},
2023-04-11 22:07:00 +02:00
class: "test_class",
"Link"
}
}
}
let expected = format!(
2024-01-31 13:15:33 -08:00
"<h1>App</h1><a {href} {default} {class}>Link</a>",
2023-04-11 22:07:00 +02:00
href = r#"href="/test""#,
default = r#"dioxus-prevent-default="onclick""#,
class = r#"class="test_class""#,
);
2023-05-31 13:57:33 -05:00
assert_eq!(prepare::<Route>(), expected);
2023-04-11 22:07:00 +02:00
}
#[test]
fn with_active_class_active() {
2023-06-01 13:13:50 -05:00
#[derive(Routable, Clone)]
2023-05-31 13:57:33 -05:00
enum Route {
#[route("/")]
Root {},
}
#[component]
fn Root() -> Element {
2024-01-16 13:18:46 -06:00
rsx! {
2023-04-11 22:07:00 +02:00
Link {
2023-07-24 11:57:56 -07:00
to: Route::Root {},
active_class: "active_class".to_string(),
2023-04-11 22:07:00 +02:00
class: "test_class",
"Link"
}
}
}
let expected = format!(
2024-01-31 13:15:33 -08:00
"<h1>App</h1><a {href} {default} {class}>Link</a>",
2023-04-11 22:07:00 +02:00
href = r#"href="/""#,
default = r#"dioxus-prevent-default="onclick""#,
class = r#"class="test_class active_class""#,
);
2023-05-31 13:57:33 -05:00
assert_eq!(prepare::<Route>(), expected);
2023-04-11 22:07:00 +02:00
}
#[test]
fn with_active_class_inactive() {
2023-06-01 13:13:50 -05:00
#[derive(Routable, Clone)]
2023-05-31 13:57:33 -05:00
enum Route {
#[route("/")]
Root {},
#[route("/test")]
Test {},
}
#[component]
fn Test() -> Element {
unimplemented!()
2023-05-31 13:57:33 -05:00
}
#[component]
fn Root() -> Element {
2024-01-16 13:18:46 -06:00
rsx! {
2023-04-11 22:07:00 +02:00
Link {
2023-07-24 11:57:56 -07:00
to: Route::Test {},
active_class: "active_class".to_string(),
2023-04-11 22:07:00 +02:00
class: "test_class",
"Link"
}
}
}
let expected = format!(
2024-01-31 13:15:33 -08:00
"<h1>App</h1><a {href} {default} {class}>Link</a>",
2023-04-11 22:07:00 +02:00
href = r#"href="/test""#,
default = r#"dioxus-prevent-default="onclick""#,
class = r#"class="test_class""#,
);
2023-05-31 13:57:33 -05:00
assert_eq!(prepare::<Route>(), expected);
2023-04-11 22:07:00 +02:00
}
#[test]
fn with_id() {
2023-06-01 13:13:50 -05:00
#[derive(Routable, Clone)]
2023-05-31 13:57:33 -05:00
enum Route {
#[route("/")]
Root {},
#[route("/test")]
Test {},
}
#[component]
fn Test() -> Element {
unimplemented!()
2023-05-31 13:57:33 -05:00
}
#[component]
fn Root() -> Element {
2024-01-16 13:18:46 -06:00
rsx! {
2023-04-11 22:07:00 +02:00
Link {
2023-07-24 11:57:56 -07:00
to: Route::Test {},
2023-04-11 22:07:00 +02:00
id: "test_id",
"Link"
}
}
}
let expected = format!(
2024-01-31 13:15:33 -08:00
"<h1>App</h1><a {href} {default} {id}>Link</a>",
2023-04-11 22:07:00 +02:00
href = r#"href="/test""#,
default = r#"dioxus-prevent-default="onclick""#,
id = r#"id="test_id""#,
);
2023-05-31 13:57:33 -05:00
assert_eq!(prepare::<Route>(), expected);
2023-04-11 22:07:00 +02:00
}
#[test]
fn with_new_tab() {
2023-06-01 13:13:50 -05:00
#[derive(Routable, Clone)]
2023-05-31 13:57:33 -05:00
enum Route {
#[route("/")]
Root {},
#[route("/test")]
Test {},
}
#[component]
fn Test() -> Element {
unimplemented!()
2023-05-31 13:57:33 -05:00
}
#[component]
fn Root() -> Element {
2024-01-16 13:18:46 -06:00
rsx! {
2023-04-11 22:07:00 +02:00
Link {
2023-07-24 11:57:56 -07:00
to: Route::Test {},
2023-04-11 22:07:00 +02:00
new_tab: true,
"Link"
}
}
}
let expected = format!(
2024-01-31 13:15:33 -08:00
"<h1>App</h1><a {href} {default} {target}>Link</a>",
2023-04-11 22:07:00 +02:00
href = r#"href="/test""#,
default = r#"dioxus-prevent-default="""#,
target = r#"target="_blank""#
);
2023-05-31 13:57:33 -05:00
assert_eq!(prepare::<Route>(), expected);
2023-04-11 22:07:00 +02:00
}
#[test]
fn with_new_tab_external() {
2023-06-01 13:13:50 -05:00
#[derive(Routable, Clone)]
2023-05-31 13:57:33 -05:00
enum Route {
#[route("/")]
Root {},
}
#[component]
fn Root() -> Element {
2024-01-16 13:18:46 -06:00
rsx! {
2023-04-11 22:07:00 +02:00
Link {
2023-07-25 18:14:48 -07:00
to: "https://dioxuslabs.com/",
2023-04-11 22:07:00 +02:00
new_tab: true,
"Link"
}
}
}
let expected = format!(
2024-01-31 13:15:33 -08:00
"<h1>App</h1><a {href} {default} {rel} {target}>Link</a>",
2023-04-11 22:07:00 +02:00
href = r#"href="https://dioxuslabs.com/""#,
default = r#"dioxus-prevent-default="""#,
rel = r#"rel="noopener noreferrer""#,
target = r#"target="_blank""#
);
2023-05-31 13:57:33 -05:00
assert_eq!(prepare::<Route>(), expected);
2023-04-11 22:07:00 +02:00
}
#[test]
fn with_rel() {
2023-06-01 13:13:50 -05:00
#[derive(Routable, Clone)]
2023-05-31 13:57:33 -05:00
enum Route {
#[route("/")]
Root {},
#[route("/test")]
Test {},
}
#[component]
fn Test() -> Element {
unimplemented!()
2023-05-31 13:57:33 -05:00
}
#[component]
fn Root() -> Element {
2024-01-16 13:18:46 -06:00
rsx! {
2023-04-11 22:07:00 +02:00
Link {
2023-07-24 11:57:56 -07:00
to: Route::Test {},
rel: "test_rel".to_string(),
2023-04-11 22:07:00 +02:00
"Link"
}
}
}
let expected = format!(
2024-01-31 13:15:33 -08:00
"<h1>App</h1><a {href} {default} {rel}>Link</a>",
2023-04-11 22:07:00 +02:00
href = r#"href="/test""#,
default = r#"dioxus-prevent-default="onclick""#,
rel = r#"rel="test_rel""#,
);
2023-05-31 13:57:33 -05:00
assert_eq!(prepare::<Route>(), expected);
2023-04-11 22:07:00 +02:00
}