grass/tests/macros.rs

96 lines
2.9 KiB
Rust
Raw Normal View History

2020-03-01 14:53:52 -05:00
#[macro_export]
2020-02-01 23:09:22 -05:00
macro_rules! test {
2021-07-10 12:52:41 -04:00
(@base $( #[$attr:meta] ),*$func:ident, $input:expr, $output:expr, $options:expr) => {
2020-03-22 18:13:19 -04:00
$(#[$attr])*
2020-02-01 23:09:22 -05:00
#[test]
#[allow(non_snake_case)]
2020-02-01 23:09:22 -05:00
fn $func() {
2021-07-10 12:52:41 -04:00
let sass = grass::from_string($input.to_string(), &$options)
.expect(concat!("failed to parse on ", $input));
2020-02-01 23:09:22 -05:00
assert_eq!(
String::from($output),
sass
2020-02-01 23:09:22 -05:00
);
}
};
2021-07-10 12:52:41 -04:00
($( #[$attr:meta] ),*$func:ident, $input:expr, $output:expr, $options:expr) => {
test!(@base $(#[$attr])* $func, $input, $output, $options);
};
($( #[$attr:meta] ),*$func:ident, $input:expr, $output:expr) => {
test!(@base $(#[$attr])* $func, $input, $output, grass::Options::default());
};
2020-02-02 10:27:08 -05:00
}
2020-03-21 14:39:16 -04:00
/// Verify the error *message*
/// Span and scope information are not yet tested
2020-03-21 14:39:16 -04:00
#[macro_export]
macro_rules! error {
2020-03-22 18:13:19 -04:00
($( #[$attr:meta] ),*$func:ident, $input:expr, $err:expr) => {
$(#[$attr])*
2020-03-21 14:39:16 -04:00
#[test]
#[allow(non_snake_case)]
fn $func() {
match grass::from_string($input.to_string(), &grass::Options::default()) {
2020-03-21 14:39:16 -04:00
Ok(..) => panic!("did not fail"),
Err(e) => assert_eq!($err, e.to_string()
.chars()
.take_while(|c| *c != '\n')
.collect::<String>()
.as_str()
),
2020-03-21 14:39:16 -04:00
}
}
};
}
2020-07-30 17:21:32 -04:00
/// 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_export]
macro_rules! tempfile {
($name:literal, $content:literal) => {
let mut f = tempfile::Builder::new()
.rand_bytes(0)
.prefix("")
.suffix($name)
.tempfile_in("")
.unwrap();
write!(f, "{}", $content).unwrap();
};
($name:literal, $content:literal, dir=$dir:literal) => {
let _d = tempfile::Builder::new()
.rand_bytes(0)
.prefix("")
.suffix($dir)
.tempdir_in("")
.unwrap();
let mut f = tempfile::Builder::new()
.rand_bytes(0)
.prefix("")
.suffix($name)
.tempfile_in($dir)
.unwrap();
write!(f, "{}", $content).unwrap();
};
}
#[macro_export]
macro_rules! assert_err {
($err:literal, $input:expr) => {
match grass::from_string($input.to_string(), &grass::Options::default()) {
Ok(..) => panic!("did not fail"),
Err(e) => assert_eq!(
$err,
e.to_string()
.chars()
.take_while(|c| *c != '\n')
.collect::<String>()
.as_str()
),
}
};
}