extern crate tera;
extern crate glob;
use std::io::prelude::*;
use std::fs::File;
use tera::{Tera, Context};
mod common;
use common::{Product, Review, read_file};
fn assert_template_ok(path: &str, base_path: Option<&str>) {
let mut tera = Tera::default();
tera.add_template("tpl", &read_file(path));
if base_path.is_some() {
let base = base_path.unwrap().to_string();
let split = base.split("/").collect::<Vec<&str>>();
let name = split.last().unwrap();
tera.add_template(name, &read_file(&base));
}
let expected = read_file(&path.replace("templates", "expected"));
let mut context = Context::new();
context.add("product", &Product::new());
context.add("username", &"bob");
context.add("friend_reviewed", &true);
context.add("number_reviews", &2);
context.add("show_more", &true);
context.add("reviews", &vec![Review::new(), Review::new()]);
let empty: Vec<Review> = Vec::new();
context.add("empty", &empty);
let rendered = tera.render("tpl", context).unwrap();
if rendered != expected {
println!("Template {:?} was rendered incorrectly", path);
println!("Got: \n {:#?}", rendered);
println!("Expected: \n {:#?}", expected);
let mut file = File::create("out.html").unwrap();
file.write_all(rendered.as_bytes()).unwrap();
assert!(false);
}
}
#[test]
fn test_ok_basic_template() {
assert_template_ok("tests/templates/basic.html", None);
}
#[test]
fn test_ok_comment_template() {
assert_template_ok("tests/templates/comment.html", None);
}
#[test]
fn test_ok_comment_alignment_template() {
assert_template_ok("tests/templates/comment_alignment.html", None);
}
#[test]
fn test_ok_variables_template() {
assert_template_ok("tests/templates/variables.html", None);
}
#[test]
fn test_ok_conditions_template() {
assert_template_ok("tests/templates/conditions.html", None);
}
#[test]
fn test_ok_loops_template() {
assert_template_ok("tests/templates/loops.html", None);
}
#[test]
fn test_ok_empty_loop_template() {
assert_template_ok("tests/templates/empty_loop.html", None);
}
#[test]
fn test_ok_basic_inheritance_template() {
assert_template_ok(
"tests/templates/basic_inheritance.html",
Some("tests/templates/base.html")
);
}
#[test]
fn test_ok_raw_template() {
assert_template_ok("tests/templates/raw.html", None);
}
#[test]
fn test_ok_filters_template() {
assert_template_ok("tests/templates/filters.html", None);
}
#[test]
fn test_ok_variable_tests() {
assert_template_ok("tests/templates/variable_tests.html", None);
}