hypo 0.2.0

tiny crate that renders html through macros
Documentation
use hypo::{Render, div, element};

macro_rules! assert_render {
    ($hypo:expr, $ex:expr) => {{
        let mut s = String::new();
        $hypo.render(&mut s);
        assert_eq!(s, $ex);
    }};
}

#[test]
fn base() {
    assert_render!(div!(), "<div></div>");
}

#[test]
fn child() {
    assert_render!(div!(div!()), "<div><div></div></div>");
}

#[test]
fn child_trailing() {
    assert_render!(div!(div!(),), "<div><div></div></div>");
}

#[test]
fn children() {
    assert_render!(
        div!(div!(div!()), div!()),
        "<div><div><div></div></div><div></div></div>"
    );
}

#[test]
fn attr() {
    assert_render!(div!(id = "idê"), "<div id=\"idê\"></div>");
}

#[test]
fn attrs() {
    assert_render!(
        div!(id = "idê", disabled = true),
        "<div id=\"idê\" disabled></div>"
    );
}

#[test]
fn attr_trailing() {
    assert_render!(div!(id = "idê",), "<div id=\"idê\"></div>");
}

#[test]
fn attr_kebab() {
    #[cfg(feature = "kebab")]
    let expected = "<div type=\"tipo\" hx-get=\"/\"></div>";
    #[cfg(not(feature = "kebab"))]
    let expected = "<div r#type=\"tipo\" hx_get=\"/\"></div>";
    assert_render!(div!(r#type = "tipo", hx_get = "/"), expected);
}

#[test]
fn partial_nested_attr() {
    let partial = |text: String| div!(div!(text));

    assert_render!(
        partial(String::from("oiblz")),
        "<div><div>oiblz</div></div>"
    );
}

#[test]
fn element_base() {
    assert_render!(
        element!("tag", id = "idê", div!()),
        "<tag id=\"idê\"><div></div></tag>"
    );
}

#[test]
fn element_void() {
    assert_render!(element!("tag" => void, id = "idê"), "<tag id=\"idê\">");
}