sauron 0.70.0

A versatile web framework and library for building client-side and/or server-side web applications
Documentation
//#![deny(warnings)]
use sauron::html::attributes::styles;
use sauron::*;

#[test]
fn test_style_macro() {
    let actual: Node<&'static str> =
        div(vec![style! {display:"flex",flex_direction:"row"}], vec![]);
    let mut actual_html = String::new();
    actual.render(&mut actual_html).unwrap();
    let expected: Node<&'static str> = div(
        vec![attr("style", "display:flex;flex-direction:row;")],
        vec![],
    );

    let mut expected_html = String::new();
    expected.render(&mut expected_html).unwrap();

    assert_eq!(actual_html, expected_html);
}

#[test]
fn test_styles() {
    let actual: Node<&'static str> = div(
        vec![html::attributes::styles([
            ("display", "flex"),
            ("flex-direction", "row"),
        ])],
        vec![],
    );
    let mut actual_html = String::new();
    actual.render(&mut actual_html).unwrap();
    let expected: Node<&'static str> = div(
        vec![attr("style", "display:flex;flex-direction:row;")],
        vec![],
    );

    let mut expected_html = String::new();
    expected.render(&mut expected_html).unwrap();

    assert_eq!(actual_html, expected_html);
}

#[test]
fn test_classes() {
    let actual: Node<&'static str> = div(
        vec![classes(["class1", "class2", "big_blue", "circular"])],
        vec![],
    );
    let mut actual_html = String::new();
    actual.render(&mut actual_html).unwrap();
    let expected: Node<&'static str> = div(vec![class("class1 class2 big_blue circular")], vec![]);

    let mut expected_html = String::new();
    expected.render(&mut expected_html).unwrap();

    assert_eq!(actual_html, expected_html);
}

#[test]
fn test_classes_flag() {
    let actual: Node<&'static str> = div(
        vec![classes_flag([
            ("class1", true),
            ("class2", false),
            ("big_blue", true),
            ("circular", true),
        ])],
        vec![],
    );
    let mut actual_html = String::new();
    actual.render(&mut actual_html).unwrap();
    let expected: Node<&'static str> = div(vec![class("class1 big_blue circular")], vec![]);
    let mut expected_html = String::new();
    expected.render(&mut expected_html).unwrap();

    assert_eq!(actual_html, expected_html);
}

#[test]
fn test_styles_flag() {
    let actual: Node<&'static str> = div(
        vec![styles_flag([
            ("font-family", "monospace", true),
            ("user-select", "none", false),
        ])],
        vec![],
    );
    let mut actual_html = String::new();
    actual.render(&mut actual_html).unwrap();
    let expected: Node<&'static str> = div(vec![style! {"font-family": "monospace"}], vec![]);
    let mut expected_html = String::new();
    expected.render(&mut expected_html).unwrap();

    assert_eq!(actual_html, expected_html);
}

#[test]
fn test_styles_and_styles_flag() {
    let actual: Node<&'static str> = div(
        vec![
            styles_flag([
                ("font-family", "monospace", true),
                ("user-select", "none", false),
            ]),
            styles([("display", "flex")]),
        ],
        vec![],
    );
    let mut actual_html = String::new();
    actual.render(&mut actual_html).unwrap();

    let s: Attribute<&'static str> = style! {"font-family": "monospace"};
    println!("a style generates: {:#?}", s);

    let expected: Node<&'static str> = div(
        vec![
            style! {"font-family": "monospace"},
            style! {"display": "flex"},
        ],
        vec![],
    );
    println!("expected node: {:#?}", expected);

    let mut expected_html = String::new();
    expected.render(&mut expected_html).unwrap();

    println!("expected: {}", expected_html);
    println!("actual:   {}", actual_html);

    assert_eq!(actual_html, expected_html);
}

#[test]
fn classes_test() {
    let html: Node<()> = div(vec![classes(["class1", "class2"])], vec![]);
    let attrs = html.attributes().unwrap();
    println!("attrs: {:#?}", attrs);
    assert_eq!(attrs.len(), 1);
    let elm = html.element_ref().expect("expecting an element");

    let classes: &Attribute<()> = elm
        .attributes()
        .iter()
        .find(|att| att.name() == &"class")
        .unwrap();

    assert_eq!(
        classes,
        &Attribute::with_multiple_values(
            None,
            "class",
            vec![
                AttributeValue::from("class1".to_string()),
                AttributeValue::from("class2".to_string())
            ]
        )
    );
}

#[test]
fn should_merge_classes_flag() {
    let html: Node<()> = div(
        vec![classes_flag([("class1", true), ("class2", true)])],
        vec![],
    );
    let attrs = html.attributes().unwrap();
    println!("attrs: {:#?}", attrs);
    assert_eq!(attrs.len(), 1);
    let elm = html.element_ref().expect("expecting an element");

    let classes: &Attribute<()> = elm
        .attributes()
        .iter()
        .find(|att| att.name() == &"class")
        .unwrap();

    assert_eq!(
        classes,
        &Attribute::with_multiple_values(
            None,
            "class",
            vec![
                AttributeValue::from("class1".to_string()),
                AttributeValue::from("class2".to_string())
            ]
        )
    );
}