vertigo 0.11.4

Reactive Real-DOM library with SSR for Rust
Documentation
use crate::dev::inspect::{DomDebugFragment, log_start};

#[test]
fn test_if_lifetimes_allowed() {
    use crate::{self as vertigo, DomNode, component, dom};

    #[component]
    fn Hello<'a>(name: &'a str) {
        dom! {
            <span>"Hello " {name}</span>
        }
    }

    let ret = dom! {
        <p><Hello name={"world"} /></p>
    };

    assert!(matches!(ret, DomNode::Node { node: _ }));
}

#[test]
fn test_generics() {
    use std::fmt::Display;

    use crate::{self as vertigo, DomNode, component, dom};

    #[component]
    fn Hello<T: Display>(name: T) {
        dom! {
            <span>"Hello " {name}</span>
        }
    }

    let ret = dom! {
        <p><Hello name={&"world"} /></p>
    };

    assert!(matches!(ret, DomNode::Node { node: _ }));
}

#[test]
fn test_if_docstrings_allowed() {
    use crate::{self as vertigo, DomNode, component, dom};

    #[component]
    fn Hello<'a>(
        /// Name of the person you want to greet
        name: &'a str,
    ) {
        dom! {
            <span>"Hello " {name}</span>
        }
    }

    let ret = dom! {
        <p><Hello name={"world"} /></p>
    };

    assert!(matches!(ret, DomNode::Node { node: _ }));
}

#[test]
fn test_manual_mounting() {
    use crate::{self as vertigo, component, dom};

    #[component]
    fn Hello<'a>(name: &'a str) {
        dom! {
            <span>"Hello " {name}</span>
        }
    }

    log_start();
    let _el1 = Hello { name: "John" }.mount();
    let el1_str = DomDebugFragment::from_log().to_pseudo_html();

    log_start();
    let _el2 = Hello { name: "John" }.into_component().mount();
    let el2_str = DomDebugFragment::from_log().to_pseudo_html();

    assert_eq!(el1_str, "<span>Hello John</span>");
    assert_eq!(el1_str, el2_str);
}

#[test]
fn test_mutable_parameter() {
    use crate::{self as vertigo, component, dom};

    #[component]
    fn Hello<'a, T: Into<String>>(prefix: T, mut name: String, surname: &'a mut String) {
        if name == "John" {
            name = "Jack".to_string();
        }

        if surname == "Johnson" {
            *surname = "Jackson".to_string();
        }

        dom! {
            <span>"Hello " {prefix.into()} " " {name} " " {surname}</span>
        }
    }

    log_start();
    let prefix = "Mr.";
    let _el1 = dom! { <Hello {&prefix} name="John" surname={&&mut "Johnson".to_string()} /> };
    let el1_str = DomDebugFragment::from_log().to_pseudo_html();

    assert_eq!(
        el1_str,
        "<span v-component='Hello'>Hello Mr. Jack Jackson</span>"
    );
}

#[test]
fn test_mutable_ref_parameter() {
    use crate::{self as vertigo, component, dom};

    #[component]
    fn Hello<'a>(name: &'a mut String) {
        *name = "Jack".to_string();

        dom! {
            <span>"Hello " {name}</span>
        }
    }

    log_start();
    let _el1 = Hello {
        name: &mut "John".to_string(),
    }
    .mount();
    let el1_str = DomDebugFragment::from_log().to_pseudo_html();

    assert_eq!(el1_str, "<span>Hello Jack</span>");
}