#[test]
fn the_builder_leaves_unset_variables_empty() {
mod template {
typed_handlebars::str!(
"test",
r#"<h1>{{title}}</h1><p>{{body}}</p>"#
);
}
assert_eq!(
template::test::builder().render(),
"<h1></h1><p></p>",
"nothing set at all"
);
assert_eq!(
template::test::builder().title("Dub").render(),
"<h1>Dub</h1><p></p>",
"only one of the two set"
);
}
#[test]
fn unset_lists_and_conditions_are_empty() {
mod list {
typed_handlebars::str!("test", r#"[{{#each rows}}<li>{{name}}</li>{{/each}}]"#);
}
assert_eq!(list::test::builder().render(), "[]");
mod conditional {
typed_handlebars::str!("test", r#"[{{#if shown}}yes{{/if}}]"#);
}
assert_eq!(conditional::test::builder().render(), "[]");
assert_eq!(conditional::test::builder().shown(true).render(), "[yes]");
}
#[test]
fn an_unset_record_is_empty_all_the_way_down() {
mod template {
typed_handlebars::str!("test", r#"[{{person.first}}|{{person.last}}]"#);
}
assert_eq!(template::test::builder().render(), "[|]");
assert_eq!(
template::test::builder()
.person(template::test::Person::builder().first("King").build())
.render(),
"[King|]",
"a record can itself be partly set"
);
}
#[test]
fn the_builder_is_order_independent() {
mod template {
typed_handlebars::str!("test", r#"<p>{{firstname}} {{lastname}}</p>"#);
}
assert_eq!(
template::test::builder()
.firstname("King")
.lastname("Tubby")
.render(),
"<p>King Tubby</p>"
);
assert_eq!(
template::test::builder()
.lastname("Tubby")
.firstname("King")
.render(),
"<p>King Tubby</p>"
);
}
#[test]
fn the_builder_wires_up_lists() {
mod template {
typed_handlebars::str!(
"test",
r#"<h1>{{title}}</h1>{{#each rows}}<li>{{name}} {{email}}</li>{{/each}}"#
);
}
let rows = vec![
template::test::RowsItem::builder()
.name("King")
.email("king@example.com")
.build(),
template::test::RowsItem::builder()
.email("tubby@example.com")
.name("Tubby")
.build(),
];
let expected = "<h1>Dub</h1><li>King king@example.com</li><li>Tubby tubby@example.com</li>";
assert_eq!(
template::test::builder().title("Dub").rows(&rows).render(),
expected
);
let page = template::test::builder().rows(rows).title("Dub").build();
assert_eq!(page.render(), expected);
assert_eq!(page.render(), expected);
}