#[macro_export]
macro_rules! ast_test_case {
( $( $(#[$meta:meta])* $name:ident( $($input:tt)* ) $(,)? )+ ) => {
$(
#[test_log::test]
fn $name() {
let mut snapshot = ferrotype::Ferrotype::new();
let expect_errs = attr_error!{$($meta)?};
snapshot.set_expect_errors(
expect_errs,
);
let src = quote!($( $input )* );
snapshot.add_token_stream("Source", &src);
match process(
quote!(#src),
$crate::Args::ast(),
) {
| Ok(ts) => {
snapshot.add_token_stream("Output", &ts);
if expect_errs {
snapshot.print();
panic!("Expected error, but got: {:#?}", ts);
}
},
| Err(e) => {
snapshot.add_debug("Error", &e);
if !expect_errs {
snapshot.print();
panic!("Unexpected error: {:#?}", e);
}
},
}
assert!(snapshot);
}
)+
};
}
#[macro_export]
macro_rules! attr_error {
() => {
false
};
(error) => {
true
};
}