use handlebars::Handlebars;
use handlebars::testing::TestHandlebars;
use serde_json::json;
#[test]
fn test_key_in_partial_in_each() {
let mut hbs = Handlebars::new();
hbs.register("p", "{{@key}}: {{this}}\n");
hbs.register("t", "{{#each this}}{{> p}}{{/each}}");
hbs.assert_render("t", &json!({"foo": "bar"}), "foo: bar\n");
}
#[test]
fn test_index_in_partial_in_each() {
let mut hbs = Handlebars::new();
hbs.register("p", "{{@index}}: {{this}}\n");
hbs.register("t", "{{#each this}}{{> p}}{{/each}}");
hbs.assert_render("t", &json!(["bar"]), "0: bar\n");
}
#[test]
fn test_first_last_index_in_partial_in_each() {
let mut hbs = Handlebars::new();
hbs.register("p", "[{{@first}}/{{@last}}/{{@index}}]");
hbs.register("t", "{{#each this}}{{> p}}{{/each}}");
hbs.assert_render(
"t",
&json!(["a", "b", "c"]),
"[true/false/0][false/false/1][false/true/2]",
);
}
#[test]
fn test_key_in_partial_still_inherited_with_hash() {
let mut hbs = Handlebars::new();
hbs.register("p", "{{@key}}");
hbs.register("t", "{{#each this}}{{> p myvar=\"x\"}}{{/each}}");
hbs.assert_render("t", &json!({"foo": "bar"}), "foo");
}
#[test]
fn test_each_inside_partial_resets_key() {
let mut hbs = Handlebars::new();
hbs.register("p", "{{#each this}}{{@key}}={{this}};{{/each}}");
hbs.register("t", "{{#each this}}{{> p}}{{/each}}");
hbs.assert_render(
"t",
&json!({"outer": {"inner_a": 1, "inner_b": 2}}),
"inner_a=1;inner_b=2;",
);
}
#[test]
fn test_key_in_nested_partial() {
let mut hbs = Handlebars::new();
hbs.register("p2", "{{@key}}");
hbs.register("p1", "{{> p2}}");
hbs.register("t", "{{#each this}}{{> p1}}{{/each}}");
hbs.assert_render("t", &json!({"foo": "bar"}), "foo");
}
#[test]
fn test_key_in_partial_not_inside_each_is_empty() {
let mut hbs = Handlebars::new();
hbs.register("p", "{{@key}}:{{this}}");
hbs.register("t", "{{> p}}");
hbs.assert_render("t", &json!("hello"), ":hello");
}