@@ -87,7 +87,7 @@ fn tests_runner_impl(args: TokenStream) -> parse::Result<TokenStream> {
87
87
88
88
(
89
89
quote ! ( #attr:: __test_list( ) . len( ) ) ,
90
- quote ! ( #attr:: __test_list( ) . map( |( name, test_fn) | ( #module, name, test_fn) ) ) ,
90
+ quote ! ( #attr:: __test_list( ) . iter ( ) . copied ( ) . map( |( name, test_fn) | ( #module, name, test_fn) ) ) ,
91
91
)
92
92
} )
93
93
. collect :: < Vec < _ > > ( ) ;
@@ -170,18 +170,23 @@ fn tests_impl(args: TokenStream, input: TokenStream) -> parse::Result<TokenStrea
170
170
} ;
171
171
172
172
let mut tests = vec ! [ ] ;
173
+ let mut test_cfgs = vec ! [ ] ;
173
174
let mut untouched_tokens = vec ! [ ] ;
174
175
for item in items {
175
176
match item {
176
177
Item :: Fn ( mut f) => {
177
178
let mut is_test = false ;
179
+ let mut cfg = vec ! [ ] ;
178
180
179
- // Find and extract the `#[test]` attribute , if present.
181
+ // Find and extract the `#[test]` and `#[cfg(..)] attributes , if present.
180
182
f. attrs . retain ( |attr| {
181
183
if attr. path . is_ident ( "test" ) {
182
184
is_test = true ;
183
185
false
184
186
} else {
187
+ if attr. path . is_ident ( "cfg" ) {
188
+ cfg. push ( attr. clone ( ) ) ;
189
+ }
185
190
true
186
191
}
187
192
} ) ;
@@ -220,6 +225,7 @@ fn tests_impl(args: TokenStream, input: TokenStream) -> parse::Result<TokenStrea
220
225
) ?) ) ;
221
226
222
227
tests. push ( f) ;
228
+ test_cfgs. push ( cfg) ;
223
229
} else {
224
230
untouched_tokens. push ( Item :: Fn ( f) ) ;
225
231
}
@@ -231,11 +237,13 @@ fn tests_impl(args: TokenStream, input: TokenStream) -> parse::Result<TokenStrea
231
237
}
232
238
233
239
let ident = module. ident ;
234
- let test_count = tests. len ( ) ;
235
- let test_names = tests. iter ( ) . map ( |test| {
240
+ let test_names = tests. iter ( ) . zip ( test_cfgs) . map ( |( test, cfg) | {
236
241
let ident = & test. sig . ident ;
237
242
let name = ident. to_string ( ) ;
238
- quote ! ( ( #name, #ident) )
243
+ quote ! {
244
+ #( #cfg) *
245
+ ( #name, #ident)
246
+ }
239
247
} ) ;
240
248
241
249
Ok ( quote ! (
@@ -245,8 +253,8 @@ fn tests_impl(args: TokenStream, input: TokenStream) -> parse::Result<TokenStrea
245
253
246
254
#( #tests) *
247
255
248
- pub ( crate ) const fn __test_list( ) -> [ ( & ' static str , :: flipperzero_test:: TestFn ) ; #test_count ] {
249
- [ #( #test_names) , * ]
256
+ pub ( crate ) const fn __test_list( ) -> & ' static [ ( & ' static str , :: flipperzero_test:: TestFn ) ] {
257
+ & [ #( #test_names) , * ]
250
258
}
251
259
}
252
260
)
0 commit comments