@@ -177,49 +177,35 @@ fn required_features(cfg_expr: &CfgExpr, features: &mut Vec<String>) {
177177mod tests {
178178 use super :: * ;
179179
180- use mbe:: { ast_to_token_tree, TokenMap } ;
181- use ra_cfg:: parse_cfg ;
180+ use mbe:: ast_to_token_tree;
181+ use ra_cfg:: CfgExpr ;
182182 use ra_syntax:: {
183183 ast:: { self , AstNode } ,
184184 SmolStr ,
185185 } ;
186186
187- fn get_token_tree_generated ( input : & str ) -> ( tt:: Subtree , TokenMap ) {
188- let source_file = ast:: SourceFile :: parse ( input) . ok ( ) . unwrap ( ) ;
189- let tt = source_file. syntax ( ) . descendants ( ) . find_map ( ast:: TokenTree :: cast) . unwrap ( ) ;
190- ast_to_token_tree ( & tt) . unwrap ( )
191- }
192-
193- #[ test]
194- fn test_cfg_expr_minimal_features_needed ( ) {
195- let ( subtree, _) = get_token_tree_generated ( r#"#![cfg(feature = "baz")]"# ) ;
196- let cfg_expr = parse_cfg ( & subtree) ;
197- let mut min_features = vec ! [ ] ;
198- required_features ( & cfg_expr, & mut min_features) ;
199-
200- assert_eq ! ( min_features, vec![ SmolStr :: new( "baz" ) ] ) ;
201-
202- let ( subtree, _) =
203- get_token_tree_generated ( r#"#![cfg(all(feature = "baz", feature = "foo"))]"# ) ;
204- let cfg_expr = parse_cfg ( & subtree) ;
205-
206- let mut min_features = vec ! [ ] ;
207- required_features ( & cfg_expr, & mut min_features) ;
208- assert_eq ! ( min_features, vec![ SmolStr :: new( "baz" ) , SmolStr :: new( "foo" ) ] ) ;
187+ fn check ( cfg : & str , expected_features : & [ & str ] ) {
188+ let cfg_expr = {
189+ let source_file = ast:: SourceFile :: parse ( cfg) . ok ( ) . unwrap ( ) ;
190+ let tt = source_file. syntax ( ) . descendants ( ) . find_map ( ast:: TokenTree :: cast) . unwrap ( ) ;
191+ let ( tt, _) = ast_to_token_tree ( & tt) . unwrap ( ) ;
192+ CfgExpr :: parse ( & tt)
193+ } ;
209194
210- let ( subtree, _) =
211- get_token_tree_generated ( r#"#![cfg(any(feature = "baz", feature = "foo", unix))]"# ) ;
212- let cfg_expr = parse_cfg ( & subtree) ;
195+ let mut features = vec ! [ ] ;
196+ required_features ( & cfg_expr, & mut features) ;
213197
214- let mut min_features = vec ! [ ] ;
215- required_features ( & cfg_expr, & mut min_features) ;
216- assert_eq ! ( min_features, vec![ SmolStr :: new( "baz" ) ] ) ;
198+ let expected_features =
199+ expected_features. iter ( ) . map ( |& it| SmolStr :: new ( it) ) . collect :: < Vec < _ > > ( ) ;
217200
218- let ( subtree , _ ) = get_token_tree_generated ( r#"#![cfg(foo)]"# ) ;
219- let cfg_expr = parse_cfg ( & subtree ) ;
201+ assert_eq ! ( features , expected_features ) ;
202+ }
220203
221- let mut min_features = vec ! [ ] ;
222- required_features ( & cfg_expr, & mut min_features) ;
223- assert ! ( min_features. is_empty( ) ) ;
204+ #[ test]
205+ fn test_cfg_expr_minimal_features_needed ( ) {
206+ check ( r#"#![cfg(feature = "baz")]"# , & [ "baz" ] ) ;
207+ check ( r#"#![cfg(all(feature = "baz", feature = "foo"))]"# , & [ "baz" , "foo" ] ) ;
208+ check ( r#"#![cfg(any(feature = "baz", feature = "foo", unix))]"# , & [ "baz" ] ) ;
209+ check ( r#"#![cfg(foo)]"# , & [ ] ) ;
224210 }
225211}
0 commit comments