From 3cd8549f02d5293c3974cba237d8c6a46845ac7b Mon Sep 17 00:00:00 2001 From: Kezhu Wang Date: Wed, 17 Apr 2024 21:43:24 +0800 Subject: [PATCH] test: fix duplicated test runs from `test_case` and `stuck::test` Closes #51. --- Cargo.toml | 5 ++++- macros/Cargo.toml | 2 +- macros/src/lib.rs | 6 ++++-- 3 files changed, 9 insertions(+), 4 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 0c1ab6d..1638e74 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -29,7 +29,10 @@ more-asserts = "0.2.2" [dev-dependencies] pretty_assertions = "1.2.0" scopeguard = "1.2.0" -test-case = "2.0.2" +test-case = "3.3.1" + +[patch.crates-io] +test-case = { git = "https://github.com/kezhuw/test-case.git", branch = "test-proc-macros-cooperation" } [workspace] members = ["macros"] diff --git a/macros/Cargo.toml b/macros/Cargo.toml index 9642b6c..4e6c9e6 100644 --- a/macros/Cargo.toml +++ b/macros/Cargo.toml @@ -14,6 +14,6 @@ categories = ["Concurrency"] proc-macro = true [dependencies] -syn = {version ="1.0", features=["full"]} +syn = {version ="1.0", features=["full", "extra-traits"]} quote = "1.0" proc-macro2 = "1.0.37" diff --git a/macros/src/lib.rs b/macros/src/lib.rs index 6bb62ee..5c59e21 100644 --- a/macros/src/lib.rs +++ b/macros/src/lib.rs @@ -3,6 +3,7 @@ extern crate proc_macro; use proc_macro::TokenStream; use proc_macro2::{Ident, Span}; use quote::quote; +use syn::parse_quote; #[derive(Default)] struct Configuration { @@ -91,7 +92,8 @@ fn generate(is_test: bool, attr: TokenStream, item: TokenStream) -> TokenStream return TokenStream::from(err.into_compile_error()); } - let header = if is_test { + let test_attr: syn::Attribute = parse_quote! { #[::core::prelude::v1::test] }; + let header = if is_test && !attrs.iter().any(|attr| *attr == test_attr) { quote! { #[::core::prelude::v1::test] } @@ -103,8 +105,8 @@ fn generate(is_test: bool, attr: TokenStream, item: TokenStream) -> TokenStream let parallelism = config.parallelism.unwrap_or(0); let parallelism_default: usize = if is_test { 2 } else { 0 }; let result = quote! { - #header #(#attrs)* + #header #vis fn #name() #ret { fn entry(#inputs) #ret { #body