extern crate rustache;
use rustache::{HashBuilder, Render};
use std::io::Cursor;
#[test]
fn test_spec_lambdas_interpolation() {
let mut f = |_| { "world".to_string() };
let data = HashBuilder::new()
.insert_lambda("lambda", &mut f);
let mut rv = Cursor::new(Vec::new());
data.render("Hello, {{lambda}}!", &mut rv).unwrap();
assert_eq!("Hello, world!".to_string(), String::from_utf8(rv.into_inner()).unwrap());
}
#[test]
fn test_spec_lambdas_interpolation_expansion() {
let mut f = |_| { "{{planet}}".to_string() };
let data = HashBuilder::new()
.insert("planet", "world")
.insert_lambda("lambda", &mut f);
let mut rv = Cursor::new(Vec::new());
data.render("Hello, {{lambda}}!", &mut rv).unwrap();
assert_eq!("Hello, world!".to_string(), String::from_utf8(rv.into_inner()).unwrap());
}
#[test]
#[ignore]
fn test_spec_lambdas_interpolation_alternate_delimeters() {
let mut f = |_| {
"|planet| => {{planet}}".to_string()
};
let data = HashBuilder::new()
.insert("planet", "world")
.insert_lambda("lambda", &mut f);
let mut rv = Cursor::new(Vec::new());
data.render("{{= | | =}}\nHello, (|&lambda|)!", &mut rv).unwrap();
assert_eq!("Hello, (|planet| => world)!".to_string(), String::from_utf8(rv.into_inner()).unwrap());
}
#[test]
fn test_spec_lambdas_interpolation_multiple_calls() {
let mut calls = 0;
let mut f = |_| {
calls += 1;
calls.to_string()
};
let data = HashBuilder::new()
.insert_lambda("lambda", &mut f);
let mut rv = Cursor::new(Vec::new());
data.render("{{lambda}} == {{{lambda}}} == {{lambda}}", &mut rv).unwrap();
assert_eq!("1 == 2 == 3".to_string(), String::from_utf8(rv.into_inner()).unwrap());
}
#[test]
fn test_spec_lambdas_escaping() {
let mut f = |_| { ">".to_string() };
let data = HashBuilder::new()
.insert_lambda("lambda", &mut f);
let mut rv = Cursor::new(Vec::new());
data.render("<{{lambda}}{{{lambda}}}", &mut rv).unwrap();
assert_eq!("<>>".to_string(), String::from_utf8(rv.into_inner()).unwrap());
}
#[test]
fn test_spec_lambdas_section() {
let mut f = |txt: String| {
if &txt[..] == "{{x}}" {
"yes".to_string()
} else {
"no".to_string()
}
};
let data = HashBuilder::new()
.insert("x", "Error!")
.insert_lambda("lambda", &mut f);
let mut rv = Cursor::new(Vec::new());
data.render("<{{#lambda}}{{x}}{{/lambda}}>", &mut rv).unwrap();
assert_eq!("<yes>".to_string(), String::from_utf8(rv.into_inner()).unwrap());
}
#[test]
fn test_spec_lambdas_section_expansion() {
let mut f = |txt: String| {
let mut result = txt.clone();
result.push_str("{{planet}}");
result.push_str(&txt[..]);
result
};
let data = HashBuilder::new()
.insert("planet", "Earth")
.insert_lambda("lambda", &mut f);
let mut rv = Cursor::new(Vec::new());
data.render("<{{#lambda}}-{{/lambda}}>", &mut rv).unwrap();
assert_eq!("<-Earth->".to_string(), String::from_utf8(rv.into_inner()).unwrap());
}
#[test]
#[ignore]
fn test_spec_lambdas_section_alternate_delimeters() {
let mut f = |txt: String| {
let mut result = txt.to_string();
result.push_str("{{planet}} => |planet|");
result.push_str(&txt[..]);
result
};
let data = HashBuilder::new()
.insert("planet", "Earth")
.insert_lambda("lambda", &mut f);
let mut rv = Cursor::new(Vec::new());
data.render("{{= | | =}}<|#lambda|-|/lambda|>", &mut rv).unwrap();
assert_eq!("<-{{planet}} => Earth->".to_string(), String::from_utf8(rv.into_inner()).unwrap());
}
#[test]
fn test_spec_lambdas_section_multiple_calls() {
let mut f = |txt: String| {
let mut result = "__".to_string();
result.push_str(&txt[..]);
result.push_str("__");
result
};
let data = HashBuilder::new()
.insert_lambda("lambda", &mut f);
let mut rv = Cursor::new(Vec::new());
data.render("{{#lambda}}FILE{{/lambda}} != {{#lambda}}LINE{{/lambda}}", &mut rv).unwrap();
assert_eq!("__FILE__ != __LINE__".to_string(), String::from_utf8(rv.into_inner()).unwrap());
}
#[test]
fn test_spec_lambdas_inverted_section() {
let mut f = |_| { "false".to_string() };
let data = HashBuilder::new()
.insert("static", "static")
.insert_lambda("lambda", &mut f);
let mut rv = Cursor::new(Vec::new());
data.render("<{{^lambda}}{{static}}{{/lambda}}>", &mut rv).unwrap();
assert_eq!("<>".to_string(), String::from_utf8(rv.into_inner()).unwrap());
}