Skip to content
Snippets Groups Projects
content_types.rs 1.85 KiB
Newer Older
#![feature(plugin)]
#![plugin(interpolate_idents)]

extern crate rocket;
extern crate swerve;

use swerve::cli::{Args, SwerveConfig};
use swerve::server::create_server;

use rocket::local::Client;
use rocket::http::ContentType;

macro_rules! test_type {
    ($name:ident, $path:expr, $content_path:expr) => (interpolate_idents! {
        #[test]
        fn [returns_some_type_for_ $name]() {
            let args = Args {
                flag_dir: Some(String::from("example")),
                flag_quiet: true,
                ..Args::default()
            };
            let config = SwerveConfig::default();

            let server = create_server(args, config);
            let client = Client::new(server).expect("valid server instance");
            let response = client.get($path).dispatch();

            assert_eq!(response.content_type(), Some($content_path));
        }
    });

    ($name:ident, $path:expr) => (interpolate_idents! {
        #[test]
        fn [returns_no_type_for_ $name]() {
            let args = Args {
                flag_dir: Some(String::from("example")),
                flag_quiet: true,
                ..Args::default()
            };
            let config = SwerveConfig::default();

            let server = create_server(args, config);
            let client = Client::new(server).expect("valid server instance");
            let response = client.get($path).dispatch();

            assert_eq!(response.content_type(), None);
        }
    });
}

test_type!(html, "/index.html", ContentType::HTML);
test_type!(css, "/css/styles.css", ContentType::CSS);
test_type!(javascript, "/js/say_hello.js", ContentType::JavaScript);
test_type!(csv, "/files/attribution.csv", ContentType::CSV);
test_type!(image_jpeg, "/files/adorable-puppy.jpg", ContentType::JPEG);
test_type!(web_assembly, "/files/math.wasm", ContentType::new("application", "wasm"));