use handlebars::Handlebars; use serde_json::json; #[test] fn test_partial_with_blocks() { let hbs = Handlebars::new(); let data = json!({ "a": [ {"b": 1}, {"b": 2}, ], }); let template = "{{#*inline \"test\"}}{{b}};{{/inline}}{{#each a as |z|}}{{> test z}}{{/each}}"; assert_eq!(hbs.render_template(template, &data).unwrap(), "1;2;"); } #[test] fn test_root_with_blocks() { let hbs = Handlebars::new(); let data = json!({ "a": [ {"b": 1}, {"b": 2}, ], "b": 3, }); let template = "{{#*inline \"test\"}}{{b}}:{{@root.b}};{{/inline}}{{#each a}}{{> test}}{{/each}}"; assert_eq!(hbs.render_template(template, &data).unwrap(), "1:3;2:3;"); } #[test] fn test_singular_and_pair_block_params() { let hbs = Handlebars::new(); let data = json!([ {"value": 11}, {"value": 22}, ]); let template = "{{#each this as |b index|}}{{b.value}}{{#each this as |value key|}}:{{key}},{{/each}}{{/each}}"; assert_eq!( hbs.render_template(template, &data).unwrap(), "11:value,22:value," ); } #[test] fn test_nested_each() { let hbs = Handlebars::new(); let data = json!({ "classes": [ { "methods": [ {"id": 1}, {"id": 2} ] }, { "methods": [ {"id": 3}, {"id": 4} ] }, ], }); let template = "{{#each classes as |class|}}{{#each class.methods as |method|}}{{method.id}};{{/each}}{{/each}}"; assert_eq!(hbs.render_template(template, &data).unwrap(), "1;2;3;4;"); } #[test] fn test_referencing_block_param_from_upper_scope() { let hbs = Handlebars::new(); let data = json!({ "classes": [ { "methods": [ {"id": 1}, {"id": 2} ], "private": false }, { "methods": [ {"id": 3}, {"id": 4} ], "private": true }, ], }); let template = "{{#each classes as |class|}}{{#each class.methods as |method|}}{{class.private}}|{{method.id}};{{/each}}{{/each}}"; assert_eq!( hbs.render_template(template, &data).unwrap(), "false|1;false|2;true|3;true|4;" ); }