diff --git a/tests/imports.rs b/tests/imports.rs index 6ac5545..752125e 100644 --- a/tests/imports.rs +++ b/tests/imports.rs @@ -3,26 +3,70 @@ use tempfile::Builder; use grass::StyleSheet; -macro_rules! test_import { - ($func:ident, $input:literal => $output:literal | $( $name:literal($content:literal) ),*) => { - #[test] - fn $func() { - $( - let mut f = Builder::new().rand_bytes(0).prefix("").suffix($name).tempfile_in("").unwrap(); - write!(f, $content).unwrap(); - )* - let sass = StyleSheet::new($input.to_string()) - .expect(concat!("failed to parse on ", $input)); - assert_eq!( - String::from($output), - sass - ); - } - } +/// Create a temporary file with the given name +/// and contents. +/// +/// This must be a macro rather than a function +/// because the tempfile will be deleted when it +/// exits scope +macro_rules! tempfile { + ($name:literal, $content:literal) => { + let mut f = Builder::new() + .rand_bytes(0) + .prefix("") + .suffix($name) + .tempfile_in("") + .unwrap(); + write!(f, "{}", $content).unwrap(); + }; } -// we have to use test name as filename because tests are run multithreaded in the same directory, so some names may conflict -test_import!(imports_variable, "@import \"imports_variable\";\na {\n color: $a;\n}" => "a {\n color: red;\n}\n" | "imports_variable"("$a: red;")); -test_import!(single_quotes_import, "@import 'single_quotes_import';\na {\n color: $a;\n}" => "a {\n color: red;\n}\n" | "single_quotes_import"("$a: red;")); -test_import!(finds_name_scss, "@import \"finds_name_scss\";\na {\n color: $a;\n}" => "a {\n color: red;\n}\n" | "finds_name_scss.scss"("$a: red;")); -test_import!(finds_underscore_name_scss, "@import \"finds_underscore_name_scss\";\na {\n color: $a;\n}" => "a {\n color: red;\n}\n" | "_finds_underscore_name_scss.scss"("$a: red;")); +#[test] +fn imports_variable() { + let input = "@import \"imports_variable\";\na {\n color: $a;\n}"; + tempfile!("imports_variable", "$a: red;"); + assert_eq!( + "a {\n color: red;\n}\n", + &StyleSheet::new(input.to_string()).expect(input) + ); +} + +#[test] +fn import_no_semicolon() { + let input = "@import \"import_no_semicolon\"\na {\n color: $a;\n}"; + tempfile!("import_no_semicolon", "$a: red;"); + assert_eq!( + "a {\n color: red;\n}\n", + &StyleSheet::new(input.to_string()).expect(input) + ); +} + +#[test] +fn single_quotes_import() { + let input = "@import 'single_quotes_import';\na {\n color: $a;\n}"; + tempfile!("single_quotes_import", "$a: red;"); + assert_eq!( + "a {\n color: red;\n}\n", + &StyleSheet::new(input.to_string()).expect(input) + ); +} + +#[test] +fn finds_name_scss() { + let input = "@import \"finds_name_scss\";\na {\n color: $a;\n}"; + tempfile!("finds_name_scss.scss", "$a: red;"); + assert_eq!( + "a {\n color: red;\n}\n", + &StyleSheet::new(input.to_string()).expect(input) + ); +} + +#[test] +fn finds_underscore_name_scss() { + let input = "@import \"finds_underscore_name_scss\";\na {\n color: $a;\n}"; + tempfile!("_finds_underscore_name_scss.scss", "$a: red;"); + assert_eq!( + "a {\n color: red;\n}\n", + &StyleSheet::new(input.to_string()).expect(input) + ); +}