2018-07-09 12:36:40 +00:00
|
|
|
#![feature(plugin, decl_macro)]
|
|
|
|
#![plugin(rocket_codegen)]
|
|
|
|
|
2017-12-29 03:53:15 +00:00
|
|
|
extern crate rocket;
|
2017-01-12 10:52:23 +00:00
|
|
|
extern crate rocket_contrib;
|
|
|
|
|
2018-06-03 18:36:10 +00:00
|
|
|
#[cfg(feature = "templates")]
|
|
|
|
mod templates_tests {
|
|
|
|
use std::env;
|
|
|
|
use std::path::PathBuf;
|
2017-01-12 10:52:23 +00:00
|
|
|
|
2018-07-11 00:07:53 +00:00
|
|
|
use rocket::{Rocket, http::RawStr};
|
|
|
|
use rocket::config::{Config, Environment};
|
|
|
|
use rocket_contrib::{Template, TemplateMetadata};
|
|
|
|
|
2018-07-09 12:36:40 +00:00
|
|
|
#[get("/<engine>/<name>")]
|
2018-07-11 00:07:53 +00:00
|
|
|
fn template_check(md: TemplateMetadata, engine: &RawStr, name: &RawStr) -> Option<()> {
|
|
|
|
match md.contains_template(&format!("{}/{}", engine, name)) {
|
|
|
|
true => Some(()),
|
|
|
|
false => None
|
|
|
|
}
|
2018-07-09 12:36:40 +00:00
|
|
|
}
|
2017-12-29 03:53:15 +00:00
|
|
|
|
2018-06-03 18:36:10 +00:00
|
|
|
fn template_root() -> PathBuf {
|
|
|
|
let cwd = env::current_dir().expect("current working directory");
|
|
|
|
cwd.join("tests").join("templates")
|
|
|
|
}
|
2017-01-12 10:52:23 +00:00
|
|
|
|
2018-06-03 18:36:10 +00:00
|
|
|
fn rocket() -> Rocket {
|
|
|
|
let config = Config::build(Environment::Development)
|
|
|
|
.extra("template_dir", template_root().to_str().expect("template directory"))
|
|
|
|
.expect("valid configuration");
|
2017-12-29 03:53:15 +00:00
|
|
|
|
2018-07-03 20:47:17 +00:00
|
|
|
::rocket::custom(config).attach(Template::fairing())
|
2018-07-11 00:07:53 +00:00
|
|
|
.mount("/", routes![template_check])
|
2018-06-03 18:36:10 +00:00
|
|
|
}
|
2017-12-29 03:53:15 +00:00
|
|
|
|
2018-06-03 18:36:10 +00:00
|
|
|
#[cfg(feature = "tera_templates")]
|
|
|
|
mod tera_tests {
|
|
|
|
use super::*;
|
|
|
|
use std::collections::HashMap;
|
2018-07-09 12:36:40 +00:00
|
|
|
use rocket::http::Status;
|
|
|
|
use rocket::local::Client;
|
2017-01-12 10:52:23 +00:00
|
|
|
|
2018-06-03 18:36:10 +00:00
|
|
|
const UNESCAPED_EXPECTED: &'static str
|
|
|
|
= "\nh_start\ntitle: _test_\nh_end\n\n\n<script />\n\nfoot\n";
|
|
|
|
const ESCAPED_EXPECTED: &'static str
|
|
|
|
= "\nh_start\ntitle: _test_\nh_end\n\n\n<script />\n\nfoot\n";
|
2017-01-12 10:52:23 +00:00
|
|
|
|
2018-06-03 18:36:10 +00:00
|
|
|
#[test]
|
|
|
|
fn test_tera_templates() {
|
|
|
|
let rocket = rocket();
|
|
|
|
let mut map = HashMap::new();
|
|
|
|
map.insert("title", "_test_");
|
|
|
|
map.insert("content", "<script />");
|
2017-01-12 10:52:23 +00:00
|
|
|
|
2018-06-03 18:36:10 +00:00
|
|
|
// Test with a txt file, which shouldn't escape.
|
|
|
|
let template = Template::show(&rocket, "tera/txt_test", &map);
|
|
|
|
assert_eq!(template, Some(UNESCAPED_EXPECTED.into()));
|
2017-01-12 10:52:23 +00:00
|
|
|
|
2018-06-03 18:36:10 +00:00
|
|
|
// Now with an HTML file, which should.
|
|
|
|
let template = Template::show(&rocket, "tera/html_test", &map);
|
|
|
|
assert_eq!(template, Some(ESCAPED_EXPECTED.into()));
|
|
|
|
}
|
2018-07-09 12:36:40 +00:00
|
|
|
|
|
|
|
#[test]
|
2018-07-11 00:07:53 +00:00
|
|
|
fn test_template_metadata_with_tera() {
|
2018-07-09 12:36:40 +00:00
|
|
|
let client = Client::new(rocket()).unwrap();
|
|
|
|
|
2018-07-11 00:07:53 +00:00
|
|
|
let response = client.get("/tera/txt_test").dispatch();
|
2018-07-09 12:36:40 +00:00
|
|
|
assert_eq!(response.status(), Status::Ok);
|
|
|
|
|
2018-07-11 00:07:53 +00:00
|
|
|
let response = client.get("/tera/html_test").dispatch();
|
2018-07-09 12:36:40 +00:00
|
|
|
assert_eq!(response.status(), Status::Ok);
|
|
|
|
|
2018-07-11 00:07:53 +00:00
|
|
|
let response = client.get("/tera/not_existing").dispatch();
|
|
|
|
assert_eq!(response.status(), Status::NotFound);
|
|
|
|
|
|
|
|
let response = client.get("/hbs/txt_test").dispatch();
|
|
|
|
assert_eq!(response.status(), Status::NotFound);
|
2018-07-09 12:36:40 +00:00
|
|
|
}
|
2017-01-12 10:52:23 +00:00
|
|
|
}
|
|
|
|
|
2018-06-03 18:36:10 +00:00
|
|
|
#[cfg(feature = "handlebars_templates")]
|
|
|
|
mod handlebars_tests {
|
|
|
|
use super::*;
|
|
|
|
use std::collections::HashMap;
|
2018-07-09 12:36:40 +00:00
|
|
|
use rocket::http::Status;
|
|
|
|
use rocket::local::Client;
|
2017-01-12 10:52:23 +00:00
|
|
|
|
2018-06-03 18:36:10 +00:00
|
|
|
const EXPECTED: &'static str
|
|
|
|
= "Hello _test_!\n\n<main> <script /> hi </main>\nDone.\n\n";
|
2017-01-12 10:52:23 +00:00
|
|
|
|
2018-06-03 18:36:10 +00:00
|
|
|
#[test]
|
|
|
|
fn test_handlebars_templates() {
|
|
|
|
let rocket = rocket();
|
|
|
|
let mut map = HashMap::new();
|
|
|
|
map.insert("title", "_test_");
|
|
|
|
map.insert("content", "<script /> hi");
|
2017-01-12 10:52:23 +00:00
|
|
|
|
2018-06-03 18:36:10 +00:00
|
|
|
// Test with a txt file, which shouldn't escape.
|
|
|
|
let template = Template::show(&rocket, "hbs/test", &map);
|
|
|
|
assert_eq!(template, Some(EXPECTED.into()));
|
|
|
|
}
|
2018-07-09 12:36:40 +00:00
|
|
|
|
|
|
|
#[test]
|
2018-07-11 00:07:53 +00:00
|
|
|
fn test_template_metadata_with_handlebars() {
|
2018-07-09 12:36:40 +00:00
|
|
|
let client = Client::new(rocket()).unwrap();
|
|
|
|
|
2018-07-11 00:07:53 +00:00
|
|
|
let response = client.get("/hbs/test").dispatch();
|
2018-07-09 12:36:40 +00:00
|
|
|
assert_eq!(response.status(), Status::Ok);
|
|
|
|
|
2018-07-11 00:07:53 +00:00
|
|
|
let response = client.get("/hbs/not_existing").dispatch();
|
|
|
|
assert_eq!(response.status(), Status::NotFound);
|
|
|
|
|
|
|
|
let response = client.get("/tera/test").dispatch();
|
|
|
|
assert_eq!(response.status(), Status::NotFound);
|
2018-07-09 12:36:40 +00:00
|
|
|
}
|
2017-01-12 10:52:23 +00:00
|
|
|
}
|
|
|
|
}
|