aboutsummaryrefslogtreecommitdiff
path: root/crates
diff options
context:
space:
mode:
authorJeff Muizelaar <[email protected]>2019-02-03 03:36:26 +0000
committerJeff Muizelaar <[email protected]>2019-02-03 03:39:45 +0000
commit0bb8456e7d7b6994c9e5efa9d5962f003ffa0a1e (patch)
tree268bf3bb4df0c8b3d3db3522a86ebe2edd5c97cc /crates
parent31d143ba18b74bdbe032a305c7705123e055b39e (diff)
Fill out test a little more
This factors out an assert_expansion function to make things more managable.
Diffstat (limited to 'crates')
-rw-r--r--crates/ra_mbe/src/lib.rs32
1 files changed, 18 insertions, 14 deletions
diff --git a/crates/ra_mbe/src/lib.rs b/crates/ra_mbe/src/lib.rs
index bafa301ea..922256c03 100644
--- a/crates/ra_mbe/src/lib.rs
+++ b/crates/ra_mbe/src/lib.rs
@@ -161,6 +161,20 @@ impl_froms!(TokenTree: Leaf, Subtree);
161 ) 161 )
162 } 162 }
163 163
164 fn assert_expansion(rules: &MacroRules, invocation: &str, expansion: &str) {
165 let source_file = ast::SourceFile::parse(invocation);
166 let macro_invocation = source_file
167 .syntax()
168 .descendants()
169 .find_map(ast::MacroCall::cast)
170 .unwrap();
171
172 let invocation_tt = ast_to_token_tree(macro_invocation.token_tree().unwrap()).unwrap();
173
174 let expaned = rules.expand(&invocation_tt).unwrap();
175 assert_eq!(expaned.to_string(), expansion);
176 }
177
164 #[test] 178 #[test]
165 fn test_fail_match_pattern_by_token() { 179 fn test_fail_match_pattern_by_token() {
166 let macro_definition = r#" 180 let macro_definition = r#"
@@ -177,10 +191,6 @@ impl_froms!(TokenTree: Leaf, Subtree);
177 } 191 }
178"#; 192"#;
179 193
180 let macro_invocation = r#"
181foo! { foo }
182"#;
183
184 let source_file = ast::SourceFile::parse(macro_definition); 194 let source_file = ast::SourceFile::parse(macro_definition);
185 let macro_definition = source_file 195 let macro_definition = source_file
186 .syntax() 196 .syntax()
@@ -188,18 +198,12 @@ foo! { foo }
188 .find_map(ast::MacroCall::cast) 198 .find_map(ast::MacroCall::cast)
189 .unwrap(); 199 .unwrap();
190 200
191 let source_file = ast::SourceFile::parse(macro_invocation);
192 let macro_invocation = source_file
193 .syntax()
194 .descendants()
195 .find_map(ast::MacroCall::cast)
196 .unwrap();
197
198 let definition_tt = ast_to_token_tree(macro_definition.token_tree().unwrap()).unwrap(); 201 let definition_tt = ast_to_token_tree(macro_definition.token_tree().unwrap()).unwrap();
199 let invocation_tt = ast_to_token_tree(macro_invocation.token_tree().unwrap()).unwrap();
200 let rules = crate::MacroRules::parse(&definition_tt).unwrap(); 202 let rules = crate::MacroRules::parse(&definition_tt).unwrap();
201 let expansion = rules.expand(&invocation_tt).unwrap(); 203
202 assert_eq!(expansion.to_string(), "mod foo {}") 204 assert_expansion(&rules, "foo! { foo }", "mod foo {}");
205 assert_expansion(&rules, "foo! { = bar }", "fn bar () {}");
206 assert_expansion(&rules, "foo! { + Baz }", "struct Baz ;");
203 } 207 }
204 208
205} 209}