@@ -8,8 +8,9 @@ use self::files::{extract_files, ValueListFromFiles};
8
8
use super :: {
9
9
arguments:: ArgumentsInfo ,
10
10
by_ref:: extract_by_ref,
11
- check_timeout_attrs, extract_case_args, extract_cases, extract_excluded_trace,
12
- extract_fixtures, extract_value_list,
11
+ check_timeout_attrs,
12
+ context:: extract_context,
13
+ extract_case_args, extract_cases, extract_excluded_trace, extract_fixtures, extract_value_list,
13
14
future:: { extract_futures, extract_global_awt} ,
14
15
ignore:: extract_ignores,
15
16
parse_vector_trailing_till_double_comma,
@@ -49,20 +50,24 @@ impl Parse for RsTestInfo {
49
50
50
51
impl ExtendWithFunctionAttrs for RsTestInfo {
51
52
fn extend_with_function_attrs ( & mut self , item_fn : & mut ItemFn ) -> Result < ( ) , ErrorsVec > {
52
- let composed_tuple ! ( _inner, excluded, _timeout, futures, global_awt, by_refs, ignores) = merge_errors ! (
53
+ let composed_tuple ! (
54
+ _inner, excluded, _timeout, futures, global_awt, by_refs, ignores, contexts
55
+ ) = merge_errors ! (
53
56
self . data. extend_with_function_attrs( item_fn) ,
54
57
extract_excluded_trace( item_fn) ,
55
58
check_timeout_attrs( item_fn) ,
56
59
extract_futures( item_fn) ,
57
60
extract_global_awt( item_fn) ,
58
61
extract_by_ref( item_fn) ,
59
- extract_ignores( item_fn)
62
+ extract_ignores( item_fn) ,
63
+ extract_context( item_fn)
60
64
) ?;
61
65
self . attributes . add_notraces ( excluded) ;
62
66
self . arguments . set_global_await ( global_awt) ;
63
67
self . arguments . set_futures ( futures. into_iter ( ) ) ;
64
68
self . arguments . set_by_refs ( by_refs. into_iter ( ) ) ;
65
69
self . arguments . set_ignores ( ignores. into_iter ( ) ) ;
70
+ self . arguments . set_contexts ( contexts. into_iter ( ) ) ;
66
71
self . arguments
67
72
. register_inner_destructored_idents_names ( item_fn) ;
68
73
Ok ( ( ) )
@@ -379,6 +384,8 @@ mod test {
379
384
}
380
385
381
386
mod no_cases {
387
+ use std:: collections:: HashSet ;
388
+
382
389
use super :: { assert_eq, * } ;
383
390
384
391
#[ test]
@@ -563,6 +570,25 @@ mod test {
563
570
assert ! ( info. arguments. is_future( & pat( "a" ) ) ) ;
564
571
assert ! ( !info. arguments. is_future( & pat( "b" ) ) ) ;
565
572
}
573
+
574
+ #[ rstest]
575
+ fn extract_context ( ) {
576
+ let mut item_fn =
577
+ "fn f(#[context] c: Context, #[context] other: Context, more: u32) {}" . ast ( ) ;
578
+ let expected = "fn f(c: Context, other: Context, more: u32) {}" . ast ( ) ;
579
+
580
+ let mut info = RsTestInfo :: default ( ) ;
581
+
582
+ info. extend_with_function_attrs ( & mut item_fn) . unwrap ( ) ;
583
+
584
+ assert_eq ! ( item_fn, expected) ;
585
+ assert_eq ! (
586
+ info. arguments. contexts( ) . cloned( ) . collect:: <HashSet <_>>( ) ,
587
+ vec![ pat( "c" ) , pat( "other" ) ]
588
+ . into_iter( )
589
+ . collect:: <HashSet <_>>( )
590
+ ) ;
591
+ }
566
592
}
567
593
568
594
mod parametrize_cases {
0 commit comments