36 lines
964 B
Rust
36 lines
964 B
Rust
use proc_macro::TokenStream;
|
|
use quote::quote;
|
|
use syn::{parse_macro_input, ItemFn};
|
|
|
|
#[proc_macro_attribute]
|
|
pub fn db_test(_: TokenStream, item: TokenStream) -> TokenStream {
|
|
let input = parse_macro_input!(item as ItemFn);
|
|
let test_name = input.sig.ident.clone();
|
|
let test_arguments = input.sig.inputs;
|
|
let test_block = input.block;
|
|
let inner_test_name = syn::Ident::new(
|
|
format!("inner_{}", test_name).as_str(),
|
|
input.sig.ident.span(),
|
|
);
|
|
|
|
let setup = quote! {
|
|
let context = crate::utils::test_helper::setup().await;
|
|
};
|
|
|
|
let teardown = quote! {
|
|
crate::utils::test_helper::teardown(context).await;
|
|
};
|
|
|
|
let output = quote!(
|
|
#[actix_web::test]
|
|
async fn #test_name() {
|
|
#setup
|
|
async fn #inner_test_name(#test_arguments) #test_block
|
|
#inner_test_name(&context).await;
|
|
#teardown
|
|
}
|
|
);
|
|
|
|
TokenStream::from(output)
|
|
}
|